第 1 章:什么是 Agent
本章解决的问题
很多前端面试会把“接入过 LLM”误当成“理解 Agent”。这一章把 LLM、Agent、Harness 三个概念拆开,让你能准确描述 Agent 的组成。
交互图解:Agent、Harness 与插件服务全景 · 查看图解导读
大白话理解
LLM 是一个会“接话”的模型。你给它一段文本,它返回一段文本。
Agent 是一个会“办事”的系统。它不只会说话,还会:
- 读当前任务。
- 决定下一步。
- 调用工具,例如搜索、读文件、执行命令。
- 把工具结果放回上下文。
- 重复,直到任务完成。
Harness 是让 Agent 稳定跑起来的运行时平台。它管理模型、工具、会话、权限、日志和界面。
一个简单的比喻:
- LLM 是“大脑”。
- Tool 是“手和工具箱”。
- Session Log 是“记忆”。
- Agent Loop 是“做事节奏”。
- Permission 是“安全规则”。
- Web UI 是“控制台”。
必须掌握的概念
1. LLM
LLM 根据上下文预测下一个 token。前端通常不训练模型,而是通过 HTTP 请求使用模型服务。
2. Agent
Agent 是一个可以持续行动的软件系统。最小 Agent 至少包含:
输入
-> 模型决定
-> 工具执行
-> 工具结果
-> 模型再次决定
-> 最终输出3. Agent Harness
Harness 是 Agent 的运行时框架。它把模型、工具、记忆、权限和协议组合起来。
DeepSeek Harness 用一句话概括自己的架构:
一切皆插件。
这意味着模型适配器、工具注册表、会话日志和 Agent Loop 都是可替换的插件,而不是写死在一个主循环里。
4. 前端在 Agent 产品中的角色
前端不只是聊天框,而是:
- 展示流式文本。
- 展示思考过程。
- 展示工具调用状态和结果。
- 处理用户批准、拒绝和继续。
- 管理会话、断线重连和历史记录。
DeepSeek Harness 对应实现
DeepSeek Harness 的核心包可以对应到 Agent 的最小组成:
| Agent 概念 | DeepSeek Harness 服务 |
|---|---|
| 记忆 | ctx.sessions 和 Session Log |
| 思考与行动节奏 | ctx.agentLoop |
| 工具 | ctx.tools |
| 模型 | ctx.llm |
| 人设和提示词 | ctx.systemPrompt |
| Agent 公共接口 | ctx.agents |
这些对应关系来自 packages/core/README.md。你不需要记住源码路径,只要知道平台把 Agent 拆成了这些可替换服务。
代码示例
下面的 TypeScript 示例不是完整产品代码,而是帮助你理解 Agent 的核心结构。
type Role = 'user' | 'assistant' | 'tool'
interface Message {
role: Role
content: string
}
interface Tool {
name: string
description: string
run(input: string): Promise<string>
}
async function runAgent(
messages: Message[],
model: (messages: Message[]) => Promise<{ text: string; toolCall?: { name: string; input: string } }>,
tools: Map<string, Tool>,
): Promise<Message[]> {
for (let i = 0; i < 8; i += 1) {
const reply = await model(messages)
messages.push({ role: 'assistant', content: reply.text })
if (!reply.toolCall) return messages
const tool = tools.get(reply.toolCall.name)
const result = tool ? await tool.run(reply.toolCall.input) : 'unknown tool'
messages.push({ role: 'tool', content: result })
}
return messages
}这个例子说明了 Agent 与普通 API 调用的区别:它有一个显式循环,会把工具结果重新交给模型。
面试怎么问
问:你理解的 AI Agent 是什么?
回答要点:
- Agent 不只是调用 LLM。
- Agent 通常包括模型、工具、记忆、循环和权限。
- 前端负责把 Agent 的中间状态可视化,并处理用户交互。
问:LLM 和 Agent 有什么区别?
回答要点:
- LLM 负责生成文本。
- Agent 负责完成目标。
- Agent 使用 LLM 做决策,但还需要工具和状态管理。
问:为什么不能只在前端写一个 fetch 调用模型?
回答要点:
- 单次调用只能回答问题,不能持续执行任务。
- 工具调用、流式输出、取消、恢复、审计和安全都需要运行时支持。
- 前端还要处理高频流式状态,不能让每次 token 都触发整棵树重渲染。
自测题
- 用一句话说明 Agent 和 LLM 的区别。
- 一个最小 Agent 至少包含哪些部分?
- 前端在 Agent 产品中主要承担什么?
- DeepSeek Harness 中“一切皆插件”意味着什么?
本章小结
Agent 的核心是“模型 + 循环 + 工具 + 记忆 + 权限”。前端不是这个系统的旁观者,而是负责把动态、流式、可中断的过程呈现给用户。
进一步阅读:
packages/core/README.mddocs/architecture.md