提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 智能体
-
- 1、理解Agents
- 2、Agent的基本用法1:模型的传入方式
-
- [2.1 传入模型字符串](#2.1 传入模型字符串)
- [2.2 传入模型对象](#2.2 传入模型对象)
- 3、Agent的基本用法2:如何调用Agent
- 4、Agent的基本用法3:绑定工具
-
- [4.1 基本用法](#4.1 基本用法)
- 举例1:绑定一个工具
- 举例2:调用langchain内置的工具
- 举例3:绑定多个工具
- [4.2 工具调用流程分析](#4.2 工具调用流程分析)
- [4.3 重试机制](#4.3 重试机制)
- [4.4 常见问题](#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:
python
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from dotenv import load_dotenv
import os
load_dotenv(override=True)
from rich import print as rprint
# 以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)
python
{
'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}
}
)
]
}

python
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from dotenv import load_dotenv
import os
load_dotenv(override=True)
from rich import print as rprint
# 以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)
python
{
'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 \\times 3 = 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:绑定一个工具
- 调用查询天气工具进行天气查询
python
from langchain_core.tools import tool
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from dotenv import load_dotenv
import os
load_dotenv(override=True)
from rich import print as rprint
# 以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)
def get_weather(city : str):
"""
查询天气的工具
Args:
city : 具体的城市
"""
return f"{city}天气晴朗,温度是15℃"
agent = create_agent(
model = model,
tools = [get_weather]
)
response = agent.invoke({
"messages" : [
{"role":"system","content":"你是一个查询天气的助手,根据用户的提问查询天气。如果问题跟天气无关,你可以说:我不清楚这个问题的答案"},
{"role":"user","content":"北京的天气如何?"}
]
})
rprint(response)
python
{
'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/

python
from langchain_tavily import TavilySearch
from langchain_core.tools import tool
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from dotenv import load_dotenv
import os
load_dotenv(override=True)
from rich import print as rprint
# 以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:绑定多个工具
python
from langchain.agents import create_agent
from langchain.tools import tool
from dotenv import load_dotenv
from rich import print as rprint
load_dotenv(override=True)
@tool(parse_docstring=True)
def get_weather(city: str):
"""
天气查询工具
Args:
city: 城市名称
"""
return f"{city}今天天气挺好"
@tool(parse_docstring=True)
def get_news():
"""
新闻查询工具
"""
return "近期,受全球储蓄芯片短缺等多重因素影响,多地回收商称废旧手机回收市场迎来"火热潮",回收价格普遍上涨,旧手机成"香饽饽"。"
agent = create_agent(
model,
tools=[get_weather, get_news]
)
response = agent.invoke({
"messages": ["你好,杭州今天的天气如何?今天有哪些新闻?"]
})
rprint(response)

4.2 工具调用流程分析





4.3 重试机制
Agent可以在工具调用结果不满足要求时,自主重试。
python
from langchain.agents import create_agent
from langchain.tools import tool
from langchain.messages import SystemMessage, HumanMessage
from dotenv import load_dotenv
from rich import print as rprint
load_dotenv(override=True)
flag = 0
@tool
def get_weather(city: str):
"""
天气查询工具
Args:
city: 城市名称
"""
global flag
flag += 1
if flag < 3:
# raise Exception("暂时无法访问")
return "TEMP_UNAVAILABLE: 天气服务暂时不可用,请稍后重试"
return f"{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 常见问题




