当前位置: 首页 > news >正文

使用langgraph的意义是什么

前言

当笔者将本文的题目 丢给某AI时,某AI的回答是:使用LangGraph的核心意义在于,它将AI应用从线性的、不可控的"链",升级为有状态的、可精确控制的"图",让你能够构建真正能处理复杂任务的智能体(Agent)。

本文我们尝试将上述的回答 具象化。

举个栗子

如果我们需要得到两数相除的结果,可以直接让 langchain 调用大模型,得到的结果如下:

但如果我们在某些特殊场景下,就需要让结果只保留 小数点后两位。即我们需要前言中所提及的“可精确控制”。

我们直接先看基于langgraph实现这件小事 的代码示例:

from langchain_core.tools import tool from langgraph.prebuilt import create_react_agent # Define tools @tool def multiply(a: int, b: int) -> int: """Multiply two integers together.""" return a * b @tool def divide(a: int, b: int) -> float: """Divide two integers and return the result with two decimal places.""" return round(a / b, 2) tools = [multiply, divide] agent = create_react_agent(model, tools) queries = [ "What is 456 divided by 123?", "What is 123 multiplied by 456?", ] for q in queries: print(f"\nQ: {q}") result = agent.invoke({"messages": [("user", q)]}) final_msg = result["messages"][-1] print(f"A: {final_msg.content}") ####### 运行结果 ####### # Q: What is 456 divided by 123? # A: 456 divided by 123 is **3.71** (rounded to two decimal places). # Q: What is 123 multiplied by 456? # A: The result of 123 multiplied by 456 is **56,088**.

如上面的代码所示,我们可以将“只返回小数点后两位” 这个能力,写进一个“tool方法”。由让大模型自主决策后进行方法调用,以保证可精确控制

再举个栗子

对“只返回小数点后两位”这事,可能有的朋友会说:“根本不用使用langgraph这么麻烦,直接修改提示词就完事了”。如下:

result = chain.invoke({"input": "456除以123等于多少,结果保留小数点后2位。"})

有道理,我们换个例子,如:基于医学知识图谱返回医学咨询结果

一般情况下,知识图谱的实现是由图数据库承载的。所以在相关项目的实现中,很重要的一步做好“text2sql”,大概流程图如下:

在这种极度需要精确控制的场景下,使用langgraph这种开发模式就显得比较有用了。

@tool def get_medical_consultation(question: str) -> str: """Get medical consultation based on the question.""" # text2sql # query graph database # return medical consultation

实际项目中 我们还可以基于langgraph路由控制能力在“基于医学知识图谱返回医学咨询结果”节的前后,动态增加“人工审核”、“转人工”等节点。

http://www.cnnetsun.cn/news/3156087.html

相关文章:

  • 基于32维Cayley_Dickson超复数的全域拓扑统一场论——反重力、真空自持供能、维度瞬移与星际宇宙脑秩序体系
  • 通信与接口协议面试二、UART
  • 未来已来:KubeHawk的 roadmap 与云原生监控趋势
  • 告别白嫖困扰,让软件真正变现——乾坤云网络验证,一键守护你的劳动成果
  • api-guarder项目详解:从安装到使用的完整教程
  • KPL-gmssl性能测试报告:鲲鹏芯片加密速度提升300%的秘密
  • Wireshark网络流量分析实战:从TCP故障排查到安全威胁识别
  • openEuler-lsb核心组件详解:理解LSB规范的关键模块
  • SoftBR多线程支持详解:如何跟踪复杂并发程序的分支执行
  • 2026年性能测试平台选型指南:核心能力、趋势与四大平台实测
  • 大模型中的各种并行:TP DP EP PP
  • 鸿蒙 CodeGenie:技能(Skills)配置
  • openEuler-pkginfo错误排查指南:常见问题与解决方案
  • WhatsApp 自动回复规则引擎的设计与实现
  • openEuler-pkginfo性能优化:如何高效处理大规模仓库数据的10个技巧
  • openEuler-pkginfo扩展开发:5个步骤轻松添加自定义功能模块
  • openeuler/cloudphone_kernel 常见问题解答:新手必看的10个实用技巧
  • openeuler/riscv-kernel项目架构深度解析:如何实现多SoC平台统一支持
  • 08_检查点
  • AI驱动的钱包交易风险解释:让链上操作在签名前可理解
  • IIM-42652 IMU传感器与STM32的6DoF运动追踪实现
  • openeuler/riscv-kernel测试与验证:确保内核稳定性的完整方法
  • 如何快速配置Autovisor:完整智慧树刷课脚本使用教程
  • AI Agent:自主智能体的工作原理与应用全景
  • ICM-42688-P与PIC18F85J50在运动控制与振动监测中的应用
  • 工业传感器控制系统核心组件与接口设计指南
  • AI 创作时间线:灵感、草稿和成稿不要混在一起
  • migration-assistant源码解析:核心模块架构与代码实现
  • ncmdump:3步解锁网易云音乐加密格式,让音乐真正属于你!
  • 工业级传感器控制系统设计与芯片选型指南