使用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(fA: {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路由控制能力在“基于医学知识图谱返回医学咨询结果”节的前后动态增加“人工审核”、“转人工”等节点。