尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

LangChain系列——Agent智能体

LangChain系列——Agent智能体 文章目录一、理解Agents什么是AgentAgent的核心组件Agent创建与调用二、Agent的基本用法1模型的传入方式举例三、Agent的基本用法2如何调用Agent举例四、Agent的基本用法3绑定工具基本用法举例1绑定一个工具举例2接入内置工具举例3绑定多个工具工具调用流程分析举例用户问题“找出当前最流行的无线耳机并检查库存”的任务重试机制常见问题问题1Agent 如何选择工具问题2Agent 为什么没有调用工具问题3Agent 选错工具问题4如何知道 Agent 何时完成问题5Agent 可以调用多少次工具问题6如何限制工具调用次数五、Agent的高级用法1设置Agent名称用法经典使用场景1. 流式输出归因2. 消息身份标记3. 调试与trace可读性4. 组件化封装5. 前端展示与运行态可观测性6. 作为稳定的运行时身份标识六、Agent的高级用法2系统提示词七、Agent的高级用法3结构化输出模型 vs Agent的结构化输出对比结构化输出的4种策略ProviderStrategyToolStrategytype / AutoStrategyNone总结ToolStrategy使用详解结构化输出schema参数输出模式1Pydantic类型输出模式2TypedDict类型输出模式3JsonSchema类型输出模式4dataclass类型多schema联合模式自定义工具消息tool_message_content参数错误处理handle_errors参数情况1设置为True/False/固定字符串handle_errors设置为Truehandle_errors设置为Falsehandle_errors设置为“请检查输入数据”情况2设置为指定异常类型情况3设置为自定义错误处理函数八、Agent的高级用法4流式输出及模式流式输出的说明具体的输出模式values输出模式updates输出模式messages输出模式tasks输出模式debug输出模式checkpoints输出模式custom输出模式流式输出模式总结参考视频一、理解Agents通用人工智能AGI将是 AI的终极形态 几乎已成为业界共识。同样构建智能体Agent则是AI工程应用 当下的“终极形态” 即Agent是大模型应用开发的核心。什么是AgentAgent的核心组件Agent创建与调用二、Agent的基本用法1模型的传入方式create_agent 完整参数agentcreate_agent(model:str|BaseChatModel,# 必需聊天模型tools:List[BaseTool],# 必需工具列表system_prompt:str,# 系统提示词middleware:Seguence[AgentMiddleware[StateT_co,ContextT]]()# 中间件interrupt_before:List[str]None,# 在某些工具前暂停人机协作interrupt_after:List[str]None,# 在某些工具后暂停debug:boolFalse# 调试模式name:str丨NoneNone,# 设置模型名称)更多参数参考https://reference.langchain.com/python/langchain/agents/factory/create_agent举例fromlangchain.chat_modelsimportinit_chat_modelfromdotenvimportload_dotenvimportos load_dotenv(overrideTrue)DASHSCOPE_API_KEYos.getenv(DASHSCOPE_API_KEY)DASHSCOPE_BASE_URLos.getenv(DASHSCOPE_BASE_URL)modelinit_chat_model(modelopenai:qwen-plus,# 底层调用的是ChatOpenAIapi_keyDASHSCOPE_API_KEY,base_urlDASHSCOPE_BASE_URL)fromlangchain.agentsimportcreate_agent agentcreate_agent(model)print(type(agent))fromIPython.displayimportImage,display# 显示agent的图结构display(Image(agent.get_graph().draw_mermaid_png()))由上可知agent本质上是LangGraph的CompiledStateGraph实例底层实现是一个图结构。三、Agent的基本用法2如何调用Agent举例fromrichimportprintasrprint agentcreate_agent(modelmodel)respagent.invoke({messages:[{role:system,content:你是一个小学数学老师耐心幽默讲解深入浅出},{role:user,content:100加上50等于多少}]})rprint(resp)四、Agent的基本用法3绑定工具LangChain内置工具列表https://docs.langchain.com/oss/python/integrations/tools其中典型的工具如下基本用法Agents支持绑定一或多个工具。举例1绑定一个工具举例2接入内置工具绑定内置的TavilySearch搜索工具可以借助Tavily进行网络搜索和信息爬取。这里我们需要先在tavily官网注册并获得API-KEY每月有免费额度https://www.tavily.com/。然后将API-KEY写到本地.env中的 TAVILY_API_KEY 变量中即可进行调用了举例3绑定多个工具注意只给 Agent 需要的工具工具太多会混淆。一般2-5 个工具最佳工具调用流程分析LangChain 的 Agent 会将 模型 与 工具 结合起来在实现上由一个基于 LangGraph 的图结构来编排执行流程如下所示。这与前文得到的 Agent 图结构是一致的本质上就是经典的 ReAct 结构一个具备“ 思考-行动-观察 ”不断循环的自主工作者。用户问题 → AI 思考 → 调用工具 → 观察结果 → 继续思考 → … → 最终答案当用户提出一个复杂需求时Agent会像人类一样先理解任务、规划步骤、使用合适的工具如搜索网络、查询数据库、执行计算获取信息Agent 会在一个循环中 反复调用模型和工具 直到某次模型输出中 不再包含工具调用 则结束最后综合所有信息给出最终答案。完整流程举例用户问题“找出当前最流行的无线耳机并检查库存”的任务重试机制Agent可以在工具调用结果不满足要求时自主重试。常见问题问题1Agent 如何选择工具依据 工具的 docstring问题2Agent 为什么没有调用工具问题3Agent 选错工具问题4如何知道 Agent 何时完成当 AIMessage 不包含 tool_calls 时formsginresponse[messages]:ifisinstance(msg,AIMessage):ifhasattr(msg,tool_calls)andmsg.tool_calls:print(还在调用工具...)else:print(完成最终答案,msg.content)问题5Agent 可以调用多少次工具问题6如何限制工具调用次数五、Agent的高级用法1设置Agent名称用法经典使用场景1. 流式输出归因2. 消息身份标记3. 调试与trace可读性4. 组件化封装5. 前端展示与运行态可观测性6. 作为稳定的运行时身份标识六、Agent的高级用法2系统提示词使用 create_agent 创建 Agent 时需传入 模型 和 工具 、可选地传入 系统提示词 。提示词为Agent提供了任务背景、行为准则和操作指南。系统指令即SystemMessage通过 system_prompt 设置定义 Agent 行为。这This parameter can be either astror aSystemMessagetype.七、Agent的高级用法3结构化输出模型 vs Agent的结构化输出对比结构化输出的4种策略LangChain的create_agent()函数自动处理结构化输出的全过程。用户只需通过 “response_format”参数 设置期望的输出模式Schema。当模型生成结构化数据时系统会自动捕获、验证并将结果存储在Agent状态的 structured_response键中。ProviderStrategy使用模型提供商的 原生结构化输出功能 实现结构化输出。ToolStrategytype / AutoStrategyNone默认配置表示不以结构化输出以 自然语言 响应用户问题。总结在实际大模型Agent开发场景中如果使用到了结构化输出推荐使用 “ToolStrategy”策略 所以后续重点介绍这种策略方式结构化输出。ToolStrategy使用详解结构化输出schema参数输出模式1Pydantic类型Pydantic类型的Schema支持数据验证是优先推荐使用的方式。fromlangchain.chat_modelsimportinit_chat_modelfromdotenvimportload_dotenvimportos load_dotenv(overrideTrue)DASHSCOPE_API_KEYos.getenv(DASHSCOPE_API_KEY)DASHSCOPE_BASE_URLos.getenv(DASHSCOPE_BASE_URL)modelinit_chat_model(modelopenai:qwen-plus,# 底层调用的是ChatOpenAIapi_keyDASHSCOPE_API_KEY,base_urlDASHSCOPE_BASE_URL)frompydanticimportBaseModel,Fieldfromlangchain.agents.structured_outputimportToolStrategyfromlangchain.agentsimportcreate_agentfromlangchain.messagesimportHumanMessageclassContactInfo(BaseModel):用户的联系方式name:strField(description用户姓名)email:strField(description用户邮箱地址)phone:strField(description用户的手机号)agentcreate_agent(modelmodel,response_formatToolStrategy(ContactInfo))responseagent.invoke({messages:[HumanMessage(从这段话中抽取结构化信息小明的邮箱地址为songhkatguigu.com手机号12345678912)]})formsginresponse[messages]:msg.pretty_print()观察日志可知这种方式将结构化信息作为 伪工具传递 显然使用了Function Calling方法。注意如果是结构化输出在系统提示词中最后提示结构化输出结果如果提示词中先结构化输出结果Agent已经执行完成可能会导致一些工具不会再被调用。系统提示词中最后加入“未找到用户”时的处理提示避免程序一直调用工具尝试查找对应用户信息。输出模式2TypedDict类型输出模式3JsonSchema类型输出模式4dataclass类型dataclass是Python 3.7引入的一个装饰器用于简化数据存储类的定义。多schema联合模式自定义工具消息tool_message_content参数错误处理handle_errors参数情况1设置为True/False/固定字符串handle_errors设置为Truehandle_errors设置为Falsehandle_errors设置为“请检查输入数据”情况2设置为指定异常类型情况3设置为自定义错误处理函数frompydanticimportBaseModel,FieldfromtypingimportUnionfromlangchain.agentsimportcreate_agentfromlangchain.agents.structured_outputimportToolStrategy,StructuredOutputValidationError,MultipleStructuredOutputsErrorfromrichimportprintasrprint# 自定义错误处理函数defcustom_error_handler(error:Exception)-str:自定义错误处理器error_strstr(error)print(f捕获到错误类型{type(error).__name__})print(f错误详情{error_str})ifisinstance(error,StructuredOutputValidationError):return数据格式有误请检查字段是否符合要求。elifisinstance(error,MultipleStructuredOutputsError):return检测到多个响应请选择最相关的一个进行返回。else:returnfError:{error_str}classContactInfo(BaseModel):个人联系信息name:strField(description姓名)email:strField(description电子邮箱)classEventDetails(BaseModel):活动详情event_name:strField(description活动名称)date:strField(description活动日期)agentcreate_agent(modelmodel,response_formatToolStrategy(Union[ContactInfo,EventDetails],tool_message_content提取完成,handle_errorscustom_error_handler))resultagent.invoke({messages:[{role:user,content:f请提取以下文本中内容姓名张三电子邮箱zhang3atguigu.com活动名称公司年会活动日期2026-07-15}]})rprint(result)八、Agent的高级用法4流式输出及模式流式输出的说明具体的输出模式values输出模式updates输出模式messages输出模式该模式中会输出流式返回的Token以及相关的元数据如来自哪个节点可以用在实现类似ChatGPT 的打字机效果场景为聊天机器人等交互式应用提供最佳的实时体验。tasks输出模式该模式会输出当前task任务开始和结束的时间包含任务的结果和错误信息该模式用于监控任务的生命周期debug输出模式该模式与tasks模式类似比task模式多输出任务步骤、时间戳、task类型task/task_result该模式用于调试、监控task任务的生命周期。checkpoints输出模式该模式中每当检查点checkpoint被创建时会触发输出输出包含检查点中的状态用于需要状态持久化、工作流恢复或分布式执行跟踪的高级场景。custom输出模式开发者通过 get_stream_writer 在工具或节点内部 自定义发送的数据 用于 输出 业务逻辑相关的进度信息如“已处理10/100条记录”、自定义日志或指标。流式输出模式总结我们可以根据不同的目标来选择不同的输出模式。例如实现 实时对话交互 优先选择messages模式观察Agent的 思考与执行步骤 优先选择updates模式需要查看 每一步状态 优先选择values/tasks/debug模式在工具执行时 输出自定义业务 日志优先选择custom模式。参考视频https://www.bilibili.com/video/BV1rv7A6oEeP?spm_id_from333.788.videopod.episodesvd_source0467ab39cc5ec5940fee22a0e7797575p51
返回列表