LangChain--07智能体----Agent的高级用法

LangChain--07智能体----Agent的高级用法 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档文章目录Agent的高级用法1设置Agent名称Agent的高级用法2系统提示词Agent的高级用法3结构化输出7.1 模型 vs Agent的结构化输出对比7.2 结构化输出的4种策略① ProviderStrategy② ToolStrategy③ type / AutoStrategy④ None7.3 ToolStrategy使用详解7.3.1 结构化输出schema参数7.3.2 自定义工具消息tool_message_content参数7.3.3 错误处理handle_errors参数Agent的高级用法4流式输出及模式Agent的高级用法1设置Agent名称Agent的高级用法2系统提示词举例1fromlangchain_tavilyimportTavilySearchfromlangchain.agentsimportcreate_agentfromlangchain.chat_modelsimportinit_chat_modelfromdotenvimportload_dotenvimportos load_dotenv(overrideTrue)# 1.导入模型modelinit_chat_model(modelgpt-5.4-mini,model_provideropenai,api_keyos.getenv(CLOSEAI_API_KEY),base_urlos.getenv(CLOSEAI_BASE_URL))# 2.导入工具web_searchTavilySearch(max_results2)# 3.创建Agentagentcreate_agent(modelmodel,tools[web_search],system_prompt你是一名多才多艺的智能助手可以调用工具帮助用户解决问题。)# 4.运行Agent获得结果resultagent.invoke({messages:[{role:user,content:请帮我查询2026年足球世界杯是哪个国家举办的}]})rprint(result)举例2fromlangchain.agentsimportcreate_agentfromlangchain_core.messagesimportSystemMessagefromlangchain_core.toolsimporttoolfromrichimportprintasrprint# 工具实现两数相加tooldefadd_numbers(a:int,b:int)-str:计算并返回两个数的和。returnf和为{ab}# 创建客服助手Agentagentcreate_agent(modelmodel,tools[add_numbers],# 工具列表# system_prompt你是一个数学助手解决日常的算术问题system_promptSystemMessage(content你是一个数学助手解决日常的算术问题))responseagent.invoke({messages:[{role:user,content:10加上20再加上30是多少}]},)rprint(response)# print(response[messages][-1].content)举例3fromlangchain.agentsimportcreate_agentfromlangchain.toolsimporttoolfromlangchain.messagesimportSystemMessage,HumanMessage flag0tooldefget_weather(city:str): 天气查询工具 Args: city: 城市名称 globalflag flag1ifflag3:# raise Exception(暂时无法访问)returnTEMP_UNAVAILABLE: 天气服务暂时不可用请稍后重试returnf{city}今天天气挺好messages[HumanMessage(你好杭州今天的天气如何)]agentcreate_agent(modelmodel,tools[get_weather],system_promptSystemMessage(你是一个天气助手。当工具返回以 TEMP_UNAVAILABLE: 开头的结果时说明是临时故障不要立即放弃你应再次调用同一个工具最多重试 3 次。如果 3 次后仍失败再向用户说明服务暂时不可用。))responseagent.invoke({messages:messages})# print(response)formsginresponse[messages]:msg.pretty_print()Agent的高级用法3结构化输出7.1 模型 vs Agent的结构化输出对比7.2 结构化输出的4种策略① ProviderStrategy② ToolStrategy③ type / AutoStrategy④ None7.3 ToolStrategy使用详解7.3.1 结构化输出schema参数7.3.2 自定义工具消息tool_message_content参数7.3.3 错误处理handle_errors参数Agent的高级用法4流式输出及模式fromlangchain.chat_modelsimportinit_chat_modelfromdotenvimportload_dotenvimportos# 从.env文件中加载环境变量load_dotenv(overrideTrue)CLOSEAI_API_KEYos.getenv(CLOSEAI_API_KEY)CLOSEAI_BASE_URLos.getenv(CLOSEAI_BASE_URL)modelinit_chat_model(modelgpt-5.4-mini,model_provideropenai,api_keyCLOSEAI_API_KEY,base_urlCLOSEAI_BASE_URL)rom langchain.agentsimportcreate_agentfromlangchain.toolsimporttoolfromtypingimportDict,Anyfromrichimportprintasrprinttooldefquery_customer_data(customer_id:str)-Dict[str,Any]: 查询客户基本信息 Args: customer_id: 客户ID用于唯一标识客户 Returns: 包含客户基本信息的字典如姓名、等级、加入日期等 # 模拟数据库查询return{name:张三,level:VIP,join_date:2023-01-15}tooldefcheck_order_history(customer_id:str)-Dict[str,Any]: 查询客户订单历史 Args: customer_id: 客户ID用于唯一标识客户 Returns: 包含客户订单历史的字典如总订单数、总花费等 return{total_orders:15,total_spent:25800.00}tooldefget_current_promotions()-Dict[str,Any]: 获取当前可用促销活动 Returns: 包含当前可用促销活动的字典如活动名称、有效日期等 return{promotions:[老用户优惠,会员专属折扣],valid_until:2027-01-31}# 创建客户服务Agentcustomer_service_agentcreate_agent(modelmodel,tools[query_customer_data,check_order_history,get_current_promotions])forchunkincustomer_service_agent.stream({messages:[{role:user,content:查询客户id为cust1234的完整的信息、历史订单和可用优惠}]},stream_modevalues):rprint(chunk)print(-*50)