AI Agent 深度解析:从「会聊天的模型」到「能干活的数字员工」

AI Agent 深度解析:从「会聊天的模型」到「能干活的数字员工」

如果 2023 年是「大模型元年」(大家都在玩 ChatGPT 式的问答),那 2025—2026 年就是 Agent 元年。模型不再只是回答问题的「嘴」,而是被装上了「手」和「脑子」——能自己定计划、调工具、改文件、跑命令,把一件复杂的事从头干到尾。

这篇文章把我这两年做 AI 编程助手(WCode)、接混元/DeepSeek 等模型的实战经验,系统性地梳理一遍:Agent 到底是什么、它由哪些部件构成、为什么「工具调用」是命门、多智能体怎么协作,以及工程落地时那些教科书不会告诉你的坑。

一、什么是 AI Agent

一句话:Agent 是以大模型为推理核心、能自主感知环境、规划步骤、调用工具、并根据结果迭代,直到完成目标的系统。

它和「聊天机器人」的本质区别有三个:

维度 聊天机器人 AI Agent
目标 回答这一句话 完成一个开放式任务
行动 只生成文本 调用工具改变外部世界
控制流 一问一答 自主循环(Plan→Act→Observe→…)

一个典型的 Agent 任务长这样:「帮我把 blog.aibycode.com 的证书换成新下载的那张,并验证 443 端口确实在提供服务」。人类要做十几步,Agent 可以自己读文件、SSH、改 nginx、重载、用 openssl s_client 验证——每一步的结果再喂回模型,决定下一步。

二、核心架构:Agent Loop

所有 Agent 共享同一个骨架,我称为 Agent Loop(智能体循环):

        ┌─────────────────────────────────────────┐
        │              用户输入 / 目标             │
        └───────────────────┬─────────────────────┘
                            ▼
                    ┌───────────────┐
                    │   大模型「大脑」 │
                    │  (LLM / Reasoning)│
                    └───────┬───────┘
              ┌─────────────┼─────────────┐
              ▼             ▼             ▼
        ┌──────────┐  ┌──────────┐  ┌──────────┐
        │  规划     │  │  记忆     │  │  工具调用 │
        │ Planning │  │ Memory   │  │  Tools   │
        └────┬─────┘  └────┬─────┘  └────┬─────┘
             │            │            │
             └────────────┼────────────┘
                          ▼
                  ┌───────────────┐
                  │  执行 / 观察   │ ◀── 结果回灌,循环
                  │ Act & Observe │
                  └───────┬───────┘
                          ▼
                  任务完成?─是─▶ 输出结果
                      │否
                      └──▶ 回到「大脑」

五个关键部件:

  1. 感知(Perception):把用户输入、文件内容、命令输出、网页文本等「环境信息」喂给模型。
  2. 规划(Planning):模型把大目标拆成可执行的步骤。这是 Agent 智商的上限。
  3. 行动(Action):通过**函数调用(Function Calling / Tool Use)**真正去改变世界——读文件、发 HTTP、执行 shell。
  4. 观察(Observation):把行动的结果(成功/报错、返回数据)再回灌给模型。
  5. 记忆(Memory):短期是上下文窗口里的对话,长期是向量库/文件里沉淀的知识。

三、规划与推理:ReAct 与 Plan-and-Execute

ReAct(Reasoning + Acting) 是当前最主流的范式:模型交替产出「思考(Thought)」和「动作(Action)」,环境返回「观察(Observation)」,如此循环。它把 CoT(思维链)和工具调用拧成一股绳,显著提升复杂任务成功率。

但当任务很长时,纯 ReAct 容易「走到一半忘了初衷」。于是有了 Plan-and-Execute:先让模型一次性产出完整计划(甚至分阶段、等用户确认),再逐步执行。我自己的 WCode 就用这招——进入「计划模式」先给方案,用户 review 通过后才动手改文件,避免 Agent 自作主张乱改代码。

工程上还有一个关键细节:确认环节(approval gate)。像「删除文件」「执行支付」这类不可逆动作,必须在 Agent Loop 里插入人类确认,否则一个幻觉就可能删库。

四、工具与函数调用:Agent 的命门

没有工具调用的模型,做不成 Agent。 模型本身只能「想」和「说」,只有把 calculator、read_file、shell、http_request 这类能力以结构化 schema 暴露给它,它才能「做」。

函数调用的本质:模型输出一段 JSON,声明「我要调哪个函数、参数是什么」,由宿主程序真正执行,再把结果回填。注意——模型并不直接运行代码,它只是决定「调什么、传什么」,执行权永远在宿主手里,这是安全边界。

{
  "name": "read_file",
  "arguments": { "path": "/etc/nginx/nginx.conf" }
}

一个常见的致命误区:拿了不支持 function calling 的模型就硬上 Agent,结果模型退化成纯聊天,永远「我想帮你读一下文件……」却从不真调工具。所以选型第一条铁律——模型必须支持 tools / function calling,否则再聪明也只是个嘴。

五、记忆系统

  • 短期记忆:就是上下文窗口(context window)。现在主流模型已经 128K–256K tokens,足以塞进一个中型代码库。但它会随对话增长而变贵、变慢。
  • 长期记忆:把历史对话、知识文档做 Embedding 存进向量库(如 pgvector、Milvus),需要时按相似度检索回灌。这是让 Agent「记得你上个月聊过什么」的方式。
  • 反思记忆(Reflection):Agent 自己总结「刚才哪步做错了、下次怎么改」,把结论写进记忆,形成自我进化。

六、多智能体协作

单个 Agent 容易顾此失彼。复杂系统会拆成多个「角色 Agent」:

  • Supervisor(主管):拆解任务、派活、汇总。
  • Worker(执行者):各司其职,比如一个管写代码、一个管测试、一个管检索。
  • Critic(评审):专门挑刺,复核产出质量。

编排方式通常是「主管—下属」树状或「流水线」串列。我搭 WCode 时就把「设计 / 写方案 / 开发 / 自测」拆成节奏化阶段,等价于一个轻量多智能体。多智能体的代价是 token 消耗和延迟翻倍,所以不是越多越好,能单 Agent 解决的别上编排。

七、工程落地的关键挑战

教科书不会告诉你这些:

  1. 幻觉与「装作完成」:模型可能编造一个「命令执行成功」的回执。对策是以真实工具返回值(exit code、文件是否存在)为准,绝不信模型的自我描述。
  2. 上下文污染:长任务里早期的错误信息会一直占着窗口,带偏后续决策。需要定期压缩/摘要历史(WCode 里专门做了 token 压缩)。
  3. 成本与延迟:每次循环都是一次完整 LLM 调用。要设最大循环次数上限,避免「死循环烧钱」。
  4. 端点与密钥必须同源:我踩过的血泪坑——tokenhub 的 key 在老混元 API 端点上永远 401,因为两个平台 key 不通用。排障第一步永远是 curl 用同源端点直接验证。
  5. 安全边界:工具权限最小化。给 Agent 一个能 rm -rf 的 shell 是灾难;写文件要限定目录;不可逆操作必须人类确认。

八、一个可运行的最小 Agent

下面这段 Python,用 ReAct 循环 + 函数调用实现了「会算数的 Agent」,直接对接你正在用的 tokenhub 端点、模型 hy3:

import json, os
from openai import OpenAI

client = OpenAI(
    base_url="https://tokenhub.tencentmaas.com/v1",
    api_key=os.environ["WCODE_API_KEY"],
)

TOOLS = [{
    "type": "function",
    "function": {
        "name": "calculator",
        "description": "计算一个数学表达式,例如 '123 * 456'",
        "parameters": {
            "type": "object",
            "properties": {"expr": {"type": "string"}},
            "required": ["expr"],
        },
    },
}]

def calculator(expr: str) -> str:
    # 生产环境请用安全求值器,这里仅演示
    return str(eval(expr, {"__builtins__": {}}, {}))

messages = [
    {"role": "system",
     "content": "你是会调用工具解决问题的助手,需要做算术时必须调用 calculator。"},
    {"role": "user", "content": "123 乘以 456 是多少?"},
]

for _ in range(5):                 # Agent Loop:最多 5 轮
    resp = client.chat.completions.create(
        model="hy3", messages=messages, tools=TOOLS, tool_choice="auto")
    msg = resp.choices[0].message
    messages.append(msg)

    if msg.tool_calls:             # 模型决定「动手」
        for call in msg.tool_calls:
            args = json.loads(call.function.arguments)
            result = calculator(args["expr"])
            messages.append({
                "role": "tool",
                "tool_call_id": call.id,
                "content": result,
            })
        continue
    print("最终答案:", msg.content)  # 没有工具调用 = 任务完成
    break

跑起来你会看到:模型第一轮先 tool_calls 调 calculator("123 * 456"),拿到 56088 后,第二轮不再调工具,直接给出自然语言答案。这就是一个最小但完整的 Agent。

九、未来展望

  • 更长的记忆与更稳的规划:模型上下文继续拉长,规划会从事后补救走向「事前仿真」。
  • Agent 即服务:每个 SaaS 都会暴露「可被 Agent 调用的 API」,人不再点界面,而是对 Agent 下指令。
  • 端侧 Agent:手机/车机本地小模型跑 Agent,隐私数据不出设备。
  • 可验证的 Agent:形式化验证 + 沙箱执行,让 Agent 的每一步都可审计、可回滚。

结语

Agent 不是又一个 AI 噱头,而是把「大模型」从「问答玩具」变成「数字员工」的必经之路。它的工程难度不在模型,而在循环控制、工具治理、记忆管理与安全边界——这恰恰是决定一个 Agent 能不能真正交付的护城河。

这篇是我「博客 AI 系列」的第一篇。接下来计划写:向量检索与 RAG 实战、 function calling 的工程化封装、以及用 WCode 讲透「计划模式」的设计哲学。欢迎在评论区点题。

如果你也在做 Agent 方向的落地,欢迎交流踩坑经验。

← 返回首页