2026年,「Agent」这个词在AI圈的热度已经快追上当年的Transformer了。各大厂都在推自己的Agent框架,OpenAI有GPTs,Google有Project Mariner,连AWS都搞了个Bedrock Agents。
但说实话,你把那些商业框架扒开看,核心没那么神秘。
上周我自己搓了一个能搜资料、写总结、发邮件的Agent,连依赖库带主逻辑,不到200行Python。今天把思路和代码拆开聊聊。
## Agent到底是什么
别被营销话术绕晕了。Agent就是**一个能自主调用工具、做决策、完成多步骤任务的AI系统**。
传统的LLM调用是「一问一答」——你问它北京天气怎么样,它给你一段文字。Agent模式是:你丢一个任务过去,比如「帮我查一下北京下周的天气,如果有雨就发邮件提醒我」,它会自己规划步骤、调用API、判断结果、执行下一步。
核心就三个组件:
– **大脑**:一个LLM,负责理解任务、做决策
– **工具集**:它能够调用的外部能力(搜索API、发邮件、读文件等)
– **记忆/上下文**:记录它做到哪一步了,下一步该干啥
## 实战:搭一个迷你Agent
说干就干。我用DeepSeek的API当大脑,给Agent挂了三个工具:搜索(用DuckDuckGo)、网页抓取、和本地文件写入。
“`python
import json
import requests
from openai import OpenAI
# 初始化LLM
client = OpenAI(api_key=”sk-xxx”, base_url=”https://api.deepseek.com”)
# 工具定义
tools = [
{
“name”: “web_search”,
“description”: “搜索互联网获取最新信息”,
“parameters”: {
“type”: “object”,
“properties”: {
“query”: {“type”: “string”, “description”: “搜索关键词”}
},
“required”: [“query”]
}
},
{
“name”: “save_to_file”,
“description”: “把内容保存到本地文件”,
“parameters”: {
“type”: “object”,
“properties”: {
“filename”: {“type”: “string”},
“content”: {“type”: “string”}
},
“required”: [“filename”, “content”]
}
}
]
“`
关键点来了:**不要一次性把所有工具结果都塞给LLM**。Agent的核心是循环——每次LLM返回一个工具调用意图,你就执行,把结果塞回给LLM,让它判断下一步。
“`python
def run_agent(task, max_steps=10):
messages = [
{“role”: “system”, “content”: “你是一个自动化助手。一步步完成任务,每次只调用一个工具。”},
{“role”: “user”, “content”: task}
]
for step in range(max_steps):
response = client.chat.completions.create(
model=”deepseek-chat”,
messages=messages,
tools=tools,
tool_choice=”auto”
)
msg = response.choices[0].message
# 如果LLM说任务完成了,就退出
if not msg.tool_calls:
return msg.content
# 执行工具调用
for tool_call in msg.tool_calls:
args = json.loads(tool_call.function.arguments)
if tool_call.function.name == “web_search”:
result = do_search(args[“query”])
elif tool_call.function.name == “save_to_file”:
result = do_save(args[“filename”], args[“content”])
# 把工具执行结果加回对话
messages.append(msg)
messages.append({
“role”: “tool”,
“tool_call_id”: tool_call.id,
“content”: str(result)
})
return “达到最大步数限制”
“`
这个循环就是Agent的核心模式——**ReAct(Reasoning + Acting)**。LLM思考 -> 决定调用工具 -> 拿到结果 -> 再思考 -> 再调用…直到任务完成。
## 一个真实任务跑通全过程
我让它做这件事:
> “搜索2026年5月AI Agent的最新动态,总结3条关键趋势,保存到agent_trends.md”
Agent的执行日志是这样的:
**Step 1**:LLM决定调用 `web_search(query=”2026年5月 AI Agent 最新动态”)`
**Step 2**:拿到搜索结果,LLM分析后说”信息不够全面,再搜一个更精准的关键词”
**Step 3**:调用 `web_search(query=”2026 agentic AI trends”)`
**Step 4**:综合两轮搜索结果,LLM生成了3条趋势总结
**Step 5**:调用 `save_to_file(filename=”agent_trends.md”, content=…)`
**Step 6**:返回「任务完成!」
全程不到30秒。换个写法加上并行工具调用,还能更快。
## 踩过的坑
几个实战中遇到的注意点,写出来省得你走弯路:
**1. 工具返回结果太长怎么办**
搜索一次可能返回几千字的页面内容,全部塞回对话里,上下文窗口一会就满了。解决方案:加一层摘要——工具执行完先让一个小模型压缩结果,再喂回主对话。
**2. 循环死锁**
Agent有时候会陷入「搜索 -> 发现新东西 -> 再搜索 -> 再发现」的无限循环。一定要设 `max_steps` 上限,而且在system prompt里明确说「如果发现信息够用了就停止」。
**3. 工具调用格式兼容性**
不同模型的tool calling格式略有差异。DeepSeek和OpenAI的格式最接近,Claude需要用另外一种格式。跨模型迁移时第一件事就是跑工具调用测试。
## 什么时候该用框架
自己手搓Agent适合学习和小型自动化任务。如果要在生产环境跑,建议上成熟的框架:
– **LangGraph**:目前最成熟的Agent编排框架,支持有状态图、人机交互、条件分支
– **CrewAI**:多Agent协作场景,让几个Agent各司其职
– **AutoGen**:微软出品,多Agent对话轮换做得不错
– **Semantic Kernel**:如果你们技术栈是.NET,这个最省事
我个人的建议是:**先手搓一个理解原理,再选框架**。不然你连Agent循环都没跑通过,就被框架的抽象层搞晕了。
## 最后说两句
Agent这个方向最让我兴奋的点不在于它能做什么,而在于**它把LLM从一个对话工具变成了一台能自主行动的机器**。你给它一个目标,它自己想办法达成,过程中不断调整策略。
门槛已经很低了。你不需要几十人的AI团队,不需要GPU集群,一个API Key加200行Python就能跑起来。
下一个周末项目?不如试试让Agent帮你自动整理一周的技术文章、监控某个GitHub项目的动态、或者定时抓取竞品信息更新到Notion——做出来了记得来评论区分享。