什么是 AI Agent?与大模型有什么本质不同?

#RAG#Agent#面试八股

什么是 AI Agent?与大模型有什么本质不同?

大模型(Large Language Model,LLM)本质上是一个无状态的函数:给一段文本,返回一段文本,调用结束它就把这次输入忘干净。 Agent(智能体)是包在这个函数外面的一层运行时:它把模型输出的"意图"翻译成动作,真的去执行,再把执行结果塞回上下文,如此往复,直到任务完成或放弃。

一句话:模型负责"想下一步该干什么",Agent 负责"真的去干,并把结果带回来"。差别不在模型多大,而在谁掌握控制权。

1. 结论:差别在控制权,不在参数量

同一个模型,套上循环和工具就是 Agent,不套就只是聊天接口。判断一段代码是不是 Agent,看三个特征:

  1. 有循环:模型可以被调用多次,每次的输入依赖上一次的执行结果;
  2. 有动作:模型的输出不只是给人看的文本,还能触发副作用(查库、发请求、改文件);
  3. 有自主性:下一步做什么由模型决定,而不是由代码里写死的 if/else 决定。

三个都满足才算 Agent;缺第三个,那叫工作流(Workflow)。

2. 机制:单次调用 vs 循环调用

单次调用(LLM)
  问题 ──▶ [模型] ──▶ 答案
           一次前向,结束

Agent
  目标 ──▶ [模型] ──▶ 决策(想) ──▶ [运行时] ──▶ 动作(做)
             ▲                                   │
             └──────── 观察结果(看) ◀────────────┘
                     直到 任务完成 / 预算耗尽

模型自己不执行任何东西,它只产出"要做什么"的表示(自然语言或结构化 JSON)。执行、重试、超时、权限校验,全部落在运行时里。这层分离是理解 Agent 的关键:模型是易错的概率组件,运行时是确定性的工程组件。

3. 对比表:把差异摊开看

维度大模型(单次调用)Agent(智能体)
输入输出文本进、文本出,一问一答目标进,可能多轮动作后才出结果
状态无状态,靠外部拼上下文有状态,会话、草稿、工具结果都要维护
能否改变外部世界不能,只能建议能,工具调用会产生真实副作用
错误处理答错就答错,没有第二次机会可以观察失败、换工具、改参数重试
延迟与成本一次推理,可控与步数成正比,可能放大 5~20 倍
可测试性输入输出对得上就能回归路径不确定,要按轨迹(trace)评估
失败模式幻觉、答非所问幻觉 + 死循环 + 工具误用 + 越权操作

4. 一个最小可运行的 Agent 循环

不需要框架,二十行就能看清 Agent 的骨架:

TOOLS = {"get_weather": lambda city: f"{city} 晴,26 度"}

def run_agent(llm, question, max_steps=5):
    messages = [
        {"role": "system", "content": "需要外部数据时只输出 ACTION: 工具名(参数)"},
        {"role": "user", "content": question},
    ]
    for _ in range(max_steps):
        reply = llm(messages)                 # 模型只负责决定下一步
        if "ACTION:" not in reply:
            return reply                      # 没有动作,视为任务结束
        name, arg = parse_action(reply)       # 解析 get_weather(北京)
        try:
            obs = TOOLS[name](arg)            # 运行时负责执行与兜底
        except Exception as exc:
            obs = f"工具调用失败:{exc}"       # 失败信息也喂回模型
        messages.append({"role": "assistant", "content": reply})
        messages.append({"role": "user", "content": f"OBSERVATION: {obs}"})
    return "达到最大步数仍未完成"

# 输入:北京今天天气怎么样
# 第 1 轮输出 ACTION: get_weather(北京) → OBSERVATION: 北京 晴,26 度
# 第 2 轮输出:北京今天晴,26 度,适合外出。

这段代码暴露了 Agent 工程里 80% 的坑:解析可能失败、工具可能抛异常、循环可能不收敛、上下文会越来越长。真正的框架做的事就是把这些兜底做扎实。

5. 常见追问

问:Agent 一定比 Prompt 链(链式调用)好吗? 不一定。任务路径固定、对延迟敏感、错误代价高的场景(如支付、发版),写死的工作流更可靠也更便宜。Agent 的价值在于"路径事先说不清",用模型换掉一部分分支判断。

问:Agent 的自主性边界怎么划? 按"副作用不可逆程度"划。读操作可以放开让模型自己决定,写操作、资金操作、对外发送的消息必须加人工确认(Human-in-the-loop,人在回路)或白名单。自主性不是越多越好,是够用就好。

问:Agent 和 Copilot 是一回事吗? 不是。Copilot 是交互形态(人主导、模型补全),Agent 是执行形态(模型主导、人验收)。同一个产品里可以既有人补全又有后台 Agent。

问:怎么判断该上 Agent? 用三个问题过一遍:任务步骤是否每次都不同?是否需要读取外部实时数据?失败一次能否接受重试?三个都是"是",才值得引入循环。

小结

大模型给的是"一次推理",Agent 给的是"一个能反复试错的执行过程"。两者的工程重心完全不同:前者调提示词和上下文,后者调循环终止、工具契约、状态管理和成本上限。面试里能把"控制权在谁手里"讲清楚,比背框架名字有用得多。

笔记加载中…