返回博客
如何用大模型 API 搭建智能体 Agent
2026/9/12 分钟阅读
如何用大模型 API 搭建智能体 Agent
搭建智能体 Agent 的核心在于让大模型具备「思考 - 行动 - 观察」的循环能力。通过函数调用(Function Calling)接口,模型可以决定调用哪个工具、传入什么参数,开发者只需实现工具逻辑并将结果返回给模型,即可构建出能处理复杂任务的自动化代理。
智能体的核心架构:ReAct 模式
目前最稳健的 Agent 实现模式是 ReAct(Reasoning + Acting)。它不是让模型一次性输出结果,而是让它以 JSON 格式输出思维链:先决定要调用什么工具,再根据返回结果决定下一步。这种结构比简单的 Prompt 工程更可靠,因为错误被限制在工具调用层面,而非幻觉层面。
一个标准的 Agent 循环包含三个状态:
- Think:模型分析当前上下文,决定是否需要工具。
- Act:模型输出工具调用指令。
- Observe:系统执行工具,将结果注入上下文。
最小可行实现:Python 代码示例
以下是基于 OpenAI 风格 API 的极简实现。重点在于 function_call 的处理循环。
import openai
import json
# 定义可用工具
TOOLS = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的当前天气",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称"}
},
"required": ["city"]
}
}
}
]
def execute_tool(name, arguments):
# 实际项目中这里应连接真实数据库或服务
if name == "get_weather":
return json.dumps({"city": arguments["city"], "temp": "25°C", "condition": "晴"})
return "Unknown tool"
def run_agent(messages):
while True:
response = openai.chat.completions.create(
model="gpt-4",
messages=messages,
tools=TOOLS,
tool_choice="auto"
)
message = response.choices[0].message
# 没有工具调用,直接返回最终答案
if not message.tool_calls:
return message.content
# 处理工具调用
for tool_call in message.tool_calls:
func_name = tool_call.function.name
func_args = json.loads(tool_call.function.arguments)
result = execute_tool(func_name, func_args)
# 将工具结果追加到对话历史,让模型继续推理
messages.append(tool_call) # 追加模型的工具调用消息
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": result
})
# 使用示例
messages = [{"role": "user", "content": "北京今天天气怎么样?"}]
answer = run_agent(messages)
print(answer)
常见陷阱与优化方向
1. 上下文溢出 随着工具调用次数增加,对话历史会迅速变长。务必实现上下文截断策略,只保留最近的 N 轮交互或关键摘要,否则 Token 成本会指数级上升。
2. 工具幂等性 确保你的工具函数是幂等的。模型可能会重试失败的工具调用,如果工具涉及数据库写入(如删除订单),重试可能导致数据重复。
3. 错误处理
当工具执行抛出异常时,不要直接中断。应将错误信息格式化后作为 content 返回给模型,让它有机会修正参数或换用其他工具。
下一步实践
建议从单工具场景开始验证 ReAct 循环的稳定性,再逐步引入多工具路由和记忆模块。你可以尝试将上述代码封装为类,并接入 LangChain 或 LlamaIndex 等框架以实现更复杂的链式调用。
推荐阅读《LLM Powered Autonomous Agents》论文,深入了解 ReAct 的理论基础与进阶变体。