AI Agent 开发入门:构建能自主完成任务的智能助手
AI Agent(智能代理)是能感知环境、制定计划、调用工具把任务跑完的 AI 系统。它和"问答机器人"的分界线在于:Chatbot 等用户提问、给出回答;Agent 拿到一个目标后,自己拆步骤、自己调 API、自己处理中间结果,遇到失败还会换条路再试。2026 年这个边界还在快速模糊,但开发思路已经基本定型。对刚接触的人来说,先用最小的例子把"模型 + 工具 + 循环"跑通,比研究各种框架重要得多。
什么是 AI Agent
与传统 AI 对话不同,Agent 的核心能力可以归纳为四点:
- 分解任务 — 把"帮我订下周去上海的机票"拆成查航班、比价格、下单、发确认邮件
- 使用工具 — 调用 API、查询数据库、操作网页、发送邮件
- 记忆上下文 — 记住前一步的结果,喂给下一步
- 自我纠错 — 某步失败时,换参数或换工具重试
Agent vs 传统 Chatbot
| 特性 | 传统 Chatbot | AI Agent |
|---|---|---|
| 交互方式 | 一问一答 | 自主执行任务 |
| 工具使用 | 不能 | 可以调用 API/工具 |
| 任务规划 | 不能 | 能分解和规划 |
| 记忆 | 有限(对话窗口) | 长期记忆 |
| 自主性 | 被动响应 | 主动执行 |
判断一个需求该用哪个,最简单的标准是:用户需要的是"信息"还是"结果"。查天气是信息,Chatbot 就够;把天气结果整理成报告并发邮件,那是结果,才需要 Agent。
用 Function Calling 构建 Agent
OpenAI 的 Function Calling(工具调用)是目前上手门槛最低的 Agent 构建方式,不需要框架,纯 API 就能跑。下面的例子定义了两个工具——查天气和发邮件,然后让 Agent 先查再发,完整展示一次工具调用闭环:
import json
from openai import OpenAI
client = OpenAI()
# 定义 Agent 可使用的工具
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的天气信息",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称"}
},
"required": ["city"]
}
}
},
{
"type": "function",
"function": {
"name": "send_email",
"description": "发送邮件",
"parameters": {
"type": "object",
"properties": {
"to": {"type": "string"},
"subject": {"type": "string"},
"body": {"type": "string"}
},
"required": ["to", "subject", "body"]
}
}
}
]
# 实际函数实现
def get_weather(city):
return f"{city}当前温度 25°C,晴"
def send_email(to, subject, body):
print(f"发送邮件到 {to}: {subject}")
return "邮件已发送"
# Agent 循环
def run_agent(user_message):
messages = [
{"role": "system", "content": "你是一个智能助手,可以使用工具帮助用户完成任务。"},
{"role": "user", "content": user_message}
]
while True:
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools
)
choice = response.choices[0]
# 如果 AI 没有调用工具,直接返回
if not choice.finish_reason == "tool_calls":
return choice.message.content
# 执行工具调用
messages.append(choice.message)
for tool_call in choice.message.tool_calls:
func_name = tool_call.function.name
args = json.loads(tool_call.function.arguments)
if func_name == "get_weather":
result = get_weather(**args)
elif func_name == "send_email":
result = send_email(**args)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": result
})
# 使用 Agent
result = run_agent("帮我查一下北京的天气,然后把结果用邮件发送到 [email protected]")
print(result)
整个循环其实就三步:模型决定"要不要调用工具、调哪个"→ 你执行真实函数 → 把结果回填给模型 → 循环直到模型给出最终答案。finish_reason == "tool_calls" 就是"还要继续干活"的信号。注意把超时、异常和工具返回的错误都 catch 住,否则一个坏工具能让整个循环卡死。
参考:OpenAI Function Calling 指南 https://platform.openai.com/docs/guides/function-calling
Agent 框架对比
| 框架 | 语言 | 特点 | 适合场景 |
|---|---|---|---|
| LangChain | Python/JS | 最流行,生态丰富 | 复杂 Agent |
| CrewAI | Python | 多 Agent 协作 | 团队任务 |
| AutoGen | Python | Microsoft 出品 | 多 Agent 对话 |
| OpenAI Assistants | API | 托管服务 | 快速原型 |
参考:LangChain 文档 https://python.langchain.com/
什么时候别用 Agent
Agent 不是万能的。一个固定流程(比如每天零点拉报表)用 cron + 脚本就够,硬套 Agent 只会增加不稳定性和成本;每步都要人确认的合规场景(财务、法务)也不适合让模型自主决策。判断标准很简单:流程越固定、出错代价越高,越该用确定性代码而不是 Agent。反过来说,只要流程能明确拆成步骤、且每步有可验证的输入输出,就适合 Agent——判断标准是"能不能写清楚验收条件"。
一个落地场景
电商运营团队建了一个"日报 Agent":每天早上自动拉取订单数据,用数据分析脚本算转化率,对比昨日和上周同期,异常时调用 IM 工具往群里发提醒。整条链路没有人在中间,运营只需要看结果——这就是"信息"和"结果"的差别。为了不出乱子,他们在 Agent 外层加了三道闸:只读数据权限、写操作必须二次确认、所有动作落日志。Agent 的自由度要给,但边界要画清楚,尤其是涉及钱和用户数据的操作。
常见问题
- Agent 一直循环调用工具停不下来:给 while 循环加最大步数上限,比如 10 步强制终止并返回当前结果。
- 工具参数经常传错:Function Calling 靠的是描述写得好,参数说明写清楚,模型误调用的概率会明显下降;必要时再用 JSON Schema 做校验。
- 和 RAG 怎么配合:Agent 可以把"检索知识库"也当成一个工具,先查资料再动手,能显著减少瞎猜。
16IDC 观察
AI Agent 是 AI 应用 的下一个演进方向,2026 年已经在客服、数据分析、自动化运营里落地。对 网站开发 者来说,Function Calling 是最容易上手的入口——不需要额外框架,直接通过 API 实现。先把一个工具接好、把错误处理写扎实,比一口气上框架更重要。同时留意各家的 Agent 协议和托管编排服务,下半年这个领域的产品化会更快。