LangChain--07智能体----Agent的基本用法

📅 2026/7/15 5:29:35 👁️ 阅读次数 📝 编程学习
LangChain--07智能体----Agent的基本用法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 智能体
    • 1、理解Agents
    • 2、Agent的基本用法1:模型的传入方式
      • 2.1 传入模型字符串
      • 2.2 传入模型对象
    • 3、Agent的基本用法2:如何调用Agent
    • 4、Agent的基本用法3:绑定工具
      • 4.1 基本用法
      • 举例1:绑定一个工具
      • 举例2:调用langchain内置的工具
      • 举例3:绑定多个工具
      • 4.2 工具调用流程分析
      • 4.3 重试机制
      • 4.4 常见问题

智能体

1、理解Agents






2、Agent的基本用法1:模型的传入方式



更多参数参考:https://reference.langchain.com/python/langchain/agents/factory/create_agent

2.1 传入模型字符串


2.2 传入模型对象


3、Agent的基本用法2:如何调用Agent


举例1:

fromlangchain.agentsimportcreate_agentfromlangchain.chat_modelsimportinit_chat_modelfromdotenvimportload_dotenvimportos load_dotenv(override=True)fromrichimportprintasrprint# 以init_chat_model为例model=init_chat_model(model="gpt-5.4-mini",model_provider="openai",api_key=os.getenv("CLOSEAI_API_KEY"),base_url=os.getenv("CLOSEAI_BASE_URL"))agent=create_agent(model=model)# 调用# response= agent.invoke({# "messages":[# {"role":"user","content":"你好"}# ]# })response=agent.invoke({"messages":["你好"]})rprint(response)
{'messages':[HumanMessage(content='你好',additional_kwargs={},response_metadata={},id='eb353a30-9042-4007-a0a4-b9607e0dd711'),AIMessage(content='你好!有什么我可以帮你的吗?',additional_kwargs={'refusal':None},response_metadata={'token_usage':{'completion_tokens':13,'prompt_tokens':7,'total_tokens':20,'completion_tokens_details':{'accepted_prediction_tokens':0,'audio_tokens':0,'reasoning_tokens':0,'rejected_prediction_tokens':0},'prompt_tokens_details':{'audio_tokens':0,'cached_tokens':0},'latency_checkpoint':{'engine_tbt_ms':4,'engine_ttft_ms':36,'engine_ttlt_ms':82,'pre_inference_ms':86,'service_tbt_ms':4,'service_ttft_ms':274,'service_ttlt_ms':316,'total_duration_ms':239,'user_visible_ttft_ms':188}},'model_provider':'openai','model_name':'gpt-5.4-mini-2026-03-17','system_fingerprint':None,'id':'chatcmpl-E01MoXhhF4EOspY5xZGRx1AUknyOy','service_tier':'default','finish_reason':'stop','logprobs':None},id='lc_run--019f4b40-b73b-75d2-9a09-eeea10233483-0',tool_calls=[],invalid_tool_calls=[],usage_metadata={'input_tokens':7,'output_tokens':13,'total_tokens':20,'input_token_details':{'audio':0,'cache_read':0},'output_token_details':{'audio':0,'reasoning':0}})]}

fromlangchain.agentsimportcreate_agentfromlangchain.chat_modelsimportinit_chat_modelfromdotenvimportload_dotenvimportos load_dotenv(override=True)fromrichimportprintasrprint# 以init_chat_model为例model=init_chat_model(model="gpt-5.4-mini",model_provider="openai",api_key=os.getenv("CLOSEAI_API_KEY"),base_url=os.getenv("CLOSEAI_BASE_URL"))agent=create_agent(model=model)# 调用response=agent.invoke({"messages":[{"role":"system","content":"你是一个精通数学的老师,擅长以通俗易懂的方式讲解数学问题"},{"role":"user","content":"100 + 20 * 3 = ?"}]})rprint(response)
{'messages':[SystemMessage(content='你是一个精通数学的老师,擅长以通俗易懂的方式讲解数学问题',additional_kwargs={},response_metadata={},id='7f0d8a15-a18e-4ee9-83f6-f60e012f7006'),HumanMessage(content='100 + 20 * 3 = ?',additional_kwargs={},response_metadata={},id='2339bb7a-f228-4333-bc7c-53367389e790'),AIMessage(content='先算乘法:\n\n-\\(20\\times3=60\\)\n\n再算加法:\n\n-\\(100+60=160\\)\n\n所以答案是**160**。',additional_kwargs={'refusal':None},response_metadata={'token_usage':{'completion_tokens':44,'prompt_tokens':43,'total_tokens':87,'completion_tokens_details':{'accepted_prediction_tokens':0,'audio_tokens':0,'reasoning_tokens':0,'rejected_prediction_tokens':0},'prompt_tokens_details':{'audio_tokens':0,'cached_tokens':0},'latency_checkpoint':{'engine_tbt_ms':4,'engine_ttft_ms':33,'engine_ttlt_ms':231,'pre_inference_ms':76,'service_tbt_ms':5,'service_ttft_ms':292,'service_ttlt_ms':482,'total_duration_ms':420,'user_visible_ttft_ms':215}},'model_provider':'openai','model_name':'gpt-5.4-mini-2026-03-17','system_fingerprint':None,'id':'chatcmpl-Dmg7y7OFSvrnW0HMOc31Luk0j7QaT','service_tier':'default','finish_reason':'stop','logprobs':None},id='lc_run--019e8db7-2d24-73d3-a7dd-3c336762b6f4-0',tool_calls=[],invalid_tool_calls=[],usage_metadata={'input_tokens':43,'output_tokens':44,'total_tokens':87,'input_token_details':{'audio':0,'cache_read':0},'output_token_details':{'audio':0,'reasoning':0}})]}

4、Agent的基本用法3:绑定工具

这里的工具可以是LangChain内置的,也可以是自定义的。LangChain生态中已经内置集成了非常多的
实用工具,开发者可以快速调用这些工具完成更加复杂工作流的开发。
LangChain内置工具列表:https://docs.langchain.com/oss/python/integrations/tools
其中典型的工具如下:

4.1 基本用法

Agents支持绑定一或多个工具。

举例1:绑定一个工具

  • 调用查询天气工具进行天气查询
fromlangchain_core.toolsimporttoolfromlangchain.agentsimportcreate_agentfromlangchain.chat_modelsimportinit_chat_modelfromdotenvimportload_dotenvimportos load_dotenv(override=True)fromrichimportprintasrprint# 以init_chat_model为例model=init_chat_model(model="gpt-5.4-mini",model_provider="openai",api_key=os.getenv("CLOSEAI_API_KEY"),base_url=os.getenv("CLOSEAI_BASE_URL"))# 定义一个工具@tool(parse_docstring=True)defget_weather(city:str):""" 查询天气的工具 Args: city : 具体的城市 """returnf"{city}天气晴朗,温度是15℃"agent=create_agent(model=model,tools=[get_weather])response=agent.invoke({"messages":[{"role":"system","content":"你是一个查询天气的助手,根据用户的提问查询天气。如果问题跟天气无关,你可以说:我不清楚这个问题的答案"},{"role":"user","content":"北京的天气如何?"}]})rprint(response)
{'messages':[SystemMessage(content='你是一个查询天气的助手,根据用户的提问查询天气。如果问题跟天气无关,你可以说:我不清楚这个问题 的答案',additional_kwargs={},response_metadata={},id='f676e465-aca9-469d-82f4-b668f36acd78'),HumanMessage(content='北京的天气如何?',additional_kwargs={},response_metadata={},id='719e990a-81d8-429f-a39f-1a6827a1ba33'),AIMessage(content='',additional_kwargs={'refusal':None},response_metadata={'token_usage':{'completion_tokens':18,'prompt_tokens':170,'total_tokens':188,'completion_tokens_details':{'accepted_prediction_tokens':0,'audio_tokens':0,'reasoning_tokens':0,'rejected_prediction_tokens':0},'prompt_tokens_details':{'audio_tokens':0,'cached_tokens':0},'latency_checkpoint':{'engine_tbt_ms':11,'engine_ttft_ms':135,'engine_ttlt_ms':340,'pre_inference_ms':94,'service_tbt_ms':12,'service_ttft_ms':818,'service_ttlt_ms':1017,'total_duration_ms':932,'user_visible_ttft_ms':724}},'model_provider':'openai','model_name':'gpt-5.4-mini-2026-03-17','system_fingerprint':None,'id':'chatcmpl-DmgQANJLGFzARwjtPmTPQPs1lC4Fm','service_tier':'default','finish_reason':'tool_calls','logprobs':None},id='lc_run--019e8dc8-63c2-7a22-b87d-b192ffe95044-0',tool_calls=[{'name':'get_weather','args':{'city':'北京'},'id':'call_DPkqzBdPpUHfSfEvr3NvJhka','type':'tool_call'}],invalid_tool_calls=[],usage_metadata={'input_tokens':170,'output_tokens':18,'total_tokens':188,'input_token_details':{'audio':0,'cache_read':0},'output_token_details':{'audio':0,'reasoning':0}}),ToolMessage(content='北京天气晴朗,温度是15℃',name='get_weather',id='452810b7-c3e4-4ef0-a535-6a753c6f454c',tool_call_id='call_DPkqzBdPpUHfSfEvr3NvJhka'),AIMessage(content='北京天气晴朗,温度是 15℃】【。',additional_kwargs={'refusal':None},response_metadata={'token_usage':{'completion_tokens':16,'prompt_tokens':208,'total_tokens':224,'completion_tokens_details':{'accepted_prediction_tokens':0,'audio_tokens':0,'reasoning_tokens':0,'rejected_prediction_tokens':0},'prompt_tokens_details':{'audio_tokens':0,'cached_tokens':0},'latency_checkpoint':{'engine_tbt_ms':5,'engine_ttft_ms':49,'engine_ttlt_ms':129,'pre_inference_ms':98,'service_tbt_ms':5,'service_ttft_ms':728,'service_ttlt_ms':805,'total_duration_ms':717,'user_visible_ttft_ms':630}},'model_provider':'openai','model_name':'gpt-5.4-mini-2026-03-17','system_fingerprint':None,'id':'chatcmpl-DmgQCMCEEudUJXawvV78S7FpknJnV','service_tier':'default','finish_reason':'stop','logprobs':None},id='lc_run--019e8dc8-6eb1-7ae2-a8f3-68c7b65ee8cd-0',tool_calls=[],invalid_tool_calls=[],usage_metadata={'input_tokens':208,'output_tokens':16,'total_tokens':224,'input_token_details':{'audio':0,'cache_read':0},'output_token_details':{'audio':0,'reasoning':0}})]}


举例2:调用langchain内置的工具

绑定内置的TavilySearch搜索工具,可以借助Tavily进行网络搜索和信息爬取。
这里我们需要先在tavily官网注册并获得API-KEY(每月有免费额度):https://www.tavily.com/

fromlangchain_tavilyimportTavilySearchfromlangchain_core.toolsimporttoolfromlangchain.agentsimportcreate_agentfromlangchain.chat_modelsimportinit_chat_modelfromdotenvimportload_dotenvimportos load_dotenv(override=True)fromrichimportprintasrprint# 以init_chat_model为例model=init_chat_model(model="gpt-5.4-mini",model_provider="openai",api_key=os.getenv("CLOSEAI_API_KEY"),base_url=os.getenv("CLOSEAI_BASE_URL"))# 使用内置的工具web_search=TavilySearch(max_results=2,tavily_api_key=os.getenv("TAVILY_API_KEY"),)agent=create_agent(model=model,tools=[web_search])response=agent.invoke({"messages":[{"role":"user","content":"请帮我查询2024年诺贝尔物理学奖得主是谁?"}]})rprint(response)


举例3:绑定多个工具

fromlangchain.agentsimportcreate_agentfromlangchain.toolsimporttoolfromdotenvimportload_dotenvfromrichimportprintasrprint load_dotenv(override=True)@tool(parse_docstring=True)defget_weather(city:str):""" 天气查询工具 Args: city: 城市名称 """returnf"{city}今天天气挺好"@tool(parse_docstring=True)defget_news():""" 新闻查询工具 """return"近期,受全球储蓄芯片短缺等多重因素影响,多地回收商称废旧手机回收市场迎来“火热潮”,回收价格普遍上涨,旧手机成“香饽饽”。"agent=create_agent(model,tools=[get_weather,get_news])response=agent.invoke({"messages":["你好,杭州今天的天气如何?今天有哪些新闻?"]})rprint(response)

4.2 工具调用流程分析





4.3 重试机制

Agent可以在工具调用结果不满足要求时,自主重试。

fromlangchain.agentsimportcreate_agentfromlangchain.toolsimporttoolfromlangchain.messagesimportSystemMessage,HumanMessagefromdotenvimportload_dotenvfromrichimportprintasrprint load_dotenv(override=True)flag=0@tooldefget_weather(city:str):""" 天气查询工具 Args: city: 城市名称 """globalflag flag+=1ifflag<3:# raise Exception("暂时无法访问")return"TEMP_UNAVAILABLE: 天气服务暂时不可用,请稍后重试"returnf"{city}今天天气挺好"messages=[SystemMessage(""" 你是一个天气助手。 当工具返回以 'TEMP_UNAVAILABLE:' 开头的结果时, 说明是临时故障,不要立即放弃; 你应再次调用同一个工具,最多重试 3 次。 如果 3 次后仍失败,再向用户说明服务暂时不可用。 """),HumanMessage("你好,杭州今天的天气如何?")]agent=create_agent(model,tools=[get_weather])response=agent.invoke({"messages":messages})rprint(response)# for msg in response["messages"]:# msg.pretty_print()

模型三次调用get_weather ,最终获得了满意的结果

4.4 常见问题