LangGraph大模型从入门到实战

张开发
2026/4/14 11:45:10 15 分钟阅读

分享文章

LangGraph大模型从入门到实战
一 LangGraph 概述是什么LangGraph 是基于 LangChain 构建、用于开发 AI 智能体的图结构编排框架通过状态图管理多节点、多步骤的复杂交互。核心特点图形化工作流用有向图组织流程支持循环、条件分支内置状态持久化自动保存执行状态与进度支持循环调用可让智能体反复调用工具、自我修正可接入人工干预支持人工审核、介入决策统一状态管理全局共享 State实现节点间无缝通信LangGraph 与 LangChain 的区别LangChain基础组件库适合简单线性流程内存、持久化需手动实现LangGraph高级编排层自带状态管理、循环工作流、人工监督等复杂能力关键组件白话版节点Nodes执行具体任务的单元工具、LLM、函数等边Edges定义节点执行顺序与跳转逻辑状态State全局共享数据负责节点之间的信息传递二 LangGraph CLI 核心信息提取LangGraph CLI 是一个多平台命令行工具用于在本地构建和运行 LangGraph API 服务器。生成的服务器包含图的所有运行、线程、助手等的 API 端点以及运行代理所需的其他服务包括检查点相关服务。2.1 核心命令与功能命令描述langgraph build构建一个可直接部署的 LangGraph API 服务器的 Docker 镜像。langgraph dev启动一个轻量级开发服务器无需 Docker 安装。适合快速开发和测试该功能在 0.1.55 及更高版本中可用。langgraph dockerfile生成一个 Dockerfile可用于为 LangGraph API 服务器构建镜像并部署实例。适合需要进一步定制 Dockerfile 或自定义部署的场景。langgraph up在本地 Docker 容器中启动一个 LangGraph API 服务器实例要求本地 Docker 服务器正常运行。本地开发需要 LangSmith API 密钥生产使用需要许可证密钥。补充说明langgraph dev是无 Docker 依赖的开发模式适合本地快速迭代langgraph up是基于 Docker 的完整环境更贴近生产部署。langgraph dockerfile用于自定义构建满足个性化部署需求。生产环境部署需许可证密钥本地开发需 LangSmith API 密钥。2.2 创建 Python虚拟环境安装好 python 解释器Python 3.11 is required.安装虚拟环境库在 cmd 中输入pipinstallvirtualenv创建虚拟环境在 cmd 中切换到需要创建虚拟环境的目录下执行virtualenv env_name示例D:\python-3.9\Scripts\virtualenv fastapi_env激活虚拟环境在 cmd 中进入到第三步创建的env_name/Scripts目录下执行activate执行成功后在 cmd 中当前输入行前面会有(env_name)的前缀在当前状态下使用pip就是在虚拟环境中安装第三方库了退出虚拟环境cmd 中输入deactivate2.3、安装 LangGraph CLI要求Python 3.11 is required.pipinstall--upgradelanggraph-cli[inmem]2.4、创建 LangGraph 应用从new-langgraph-project-python模板或new-langgraph-project-js模板创建一个新应用。此模板演示了一个单节点应用您可以根据自己的逻辑进行扩展。注意如果您使用langgraph new命令时未指定模板将显示一个交互式菜单允许您从可用模板列表中进行选择。langgraph new path/to/your/app--templatenew-langgraph-project-python2.5、安装项目依赖在您的新 LangGraph 应用的根目录下以编辑模式安装依赖项以便服务器使用您的本地更改。在 LangGraph 中pyproject.toml代传统的setup.py和requirements.txt可包含以下扩展配置依赖分组如[project.optional-dependencies]定义dev开发工具和test测试框架依赖。动态版本控制通过requires-python 3.9指定 Python 版本兼容性。CI/CD 集成通过[tool.*]配置与 GitHub Actions 或 GitLab CI 的交互安装命令cdpath/to/your/app pipinstall-e.2.6、修改graph.py的代码示例代码本地私有部署大模型# 本地私有化部署的大模型llmChatOpenAI(modelqwen3-8b,temperature0.8,api_keyxx,base_urlhttp://localhost:6006/v1,extra_body{chat_template_kwargs:{enable_thinking:False}},)defget_weather(city:str)-str:Get weather for a given city.returnfIts always sunny in{city}!graphcreate_react_agent(llm,tools[get_weather],promptYou are a helpful assistant)2.7、启动 LangGraph 服务器langgraph dev命令以内存模式启动 LangGraph 服务器。此模式适用于开发和测试目的。对于生产用途请部署 LangGraph 服务器并使其能够访问持久存储后端。启动命令langgraph dev完整参数选项表选项默认值描述-c, --config 文件langgraph.json声明依赖项、图和环境变量--host TEXT127.0.0.1服务器绑定的主机--port 整数2024服务器绑定的端口--no-reload-禁用自动重载--n-jobs-per-worker 整数-每个工作进程的作业数--debug-port 整数-调试器监听的端口--wait-for-clientFALSE等待调试器客户端连接--no-browser-服务器启动时跳过自动打开浏览器示例输出 Ready! - API: http://localhost:2024 - Docs: http://localhost:2024/docs - LangGraph Studio Web UI: https://smith.langchain.com/studio/?baseUrlhttp://...三 Tool工具的定义工具核心属性表属性类型描述名称str在提供给 LLM 或代理的一组工具中必须是唯一的。描述str描述工具的作用被 LLM 或代理用作上下文。args_schemapydantic.BaseModel可选但推荐如果使用回调处理程序则为必需。它可用于为预期参数提供更多信息例如少量示例或验证。return_directboolean仅与代理相关。当为True时在调用给定工具后代理将停止并将结果直接返回给用户。如果工具具有精心选择的名称、描述和args_schema模型将表现得更好。LangChain 支持的工具创建方式函数LangChain Runnables通过从BaseTool子类化– 这是最灵活的方法它提供了最大的控制程度但代价是需要付出更多的努力和编写更多的代码。3.1、从函数创建工具这个tool装饰器是定义自定义工具的最简单方法。默认情况下装饰器使用函数名作为工具名称但可以通过将字符串作为第一个参数传递来覆盖。此外装饰器将使用函数的文档字符串作为工具的描述 - 因此必须提供文档字符串。请注意tool支持解析注释、嵌套模式和其他特性。3.11tool装饰器classCalculateArgs(BaseModel):a:floatField(description第一个需要输入的数字。)b:floatField(description第二个需要输入的数字。)operation:strField(description运算类型只能是add、subtract、multiply和divide中的任意一个。)tool(calculate,args_schemaCalculateArgs)defcalculate(a:float,b:float,operation:str)-float:工具函数计算两个数字的运算结果print(f调用 calculate 工具第一个数字{a}第二个数字{b}运算类型{operation})result0.0matchoperation:caseadd:resultabcasesubtract:resulta-bcasemultiply:resulta*bcasedivide:ifb!0:resulta/belse:raiseValueError(除数不能为零)returnresulttool(calculate)defcalculate(a:Annotated[float,第一个需要输入的数字。],b:Annotated[float,第二个需要输入的数字。],operation:Annotated[str,运算类型只能是add、subtract、multiply和divide中的任意一个。])-float:工具函数计算两个数字的运算结果print(f调用 calculate 工具第一个数字{a}第二个数字{b}运算类型{operation})result0.0matchoperation:caseadd:resultabcasesubtract:resulta-bcasemultiply:resulta*bcasedivide:ifb!0:resulta/belse:raiseValueError(除数不能为零)returnresultprint(calculate.name)print(calculate.description)print(calculate.args)print(calculate.args_schema.schema_json())fromlangchain_core.toolsimporttooltool(calculate)defcalculate4(a:float,b:float,operation:str)-float: 工具函数计算两个数字的运算结果 Args: a: 第一个需要输入的数字。 b: 第二个需要输入的数字。 operation: 运算类型只能是add、subtract、multiply和divide中的任意一个。 Returns: 返回两个输入数字的运算结果。 print(f调用 calculate 工具第一个数字{a}第二个数字{b}运算类型{operation})result0.0ifoperationadd:resultabelifoperationsubtract:resulta-belifoperationmultiply:resulta*belifoperationdivide:ifb0:raiseValueError(除数不能为零)resulta/breturnresult3.12tool装饰器StructuredTool.from_function创建agentfromlangchain_core.toolsimportStructuredTool# 假设 calculate5 是同步计算函数calculate6 是异步计算函数calculaterStructuredTool.from_function(funccalculate5,namecalculater,description工具函数计算两个数字的运算结果,return_directFalse,coroutinecalculate6)参数作用funccalculate5绑定同步版本的计算函数用于同步调用场景namecalculater工具的唯一名称供 LLM 识别和调用description工具函数计算两个数字的运算结果工具功能描述作为 LLM 调用工具的上下文依据return_directFalse工具执行结果是否直接返回给用户False表示结果会再交给 LLM 处理coroutinecalculate6绑定异步版本的计算函数用于异步调用场景实现同步/异步双支持补充说明StructuredTool.from_function()是 LangChain 中手动创建结构化工具的经典方式相比tool装饰器支持更灵活的配置如同步/异步双实现、自定义参数校验等该写法可以同时兼容同步和异步调用适配不同的运行环境如 FastAPI 异步接口、同步脚本完整使用需要先定义calculate5同步和calculate6异步两个函数示例如下# 同步函数defcalculate5(a:float,b:float,operation:str)-float:计算两个数字的运算结果同步版# 运算逻辑...# 异步函数asyncdefcalculate6(a:float,b:float,operation:str)-float:计算两个数字的运算结果异步版# 运算逻辑...3.2 从可运行对象(Runnable)创建工具3.3 通过从BaseTool子类化

更多文章