Skip to content
签到签到

第 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 至少包含:

text
输入
-> 模型决定
-> 工具执行
-> 工具结果
-> 模型再次决定
-> 最终输出

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 的核心结构。

ts
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 都触发整棵树重渲染。

自测题

  1. 用一句话说明 Agent 和 LLM 的区别。
  2. 一个最小 Agent 至少包含哪些部分?
  3. 前端在 Agent 产品中主要承担什么?
  4. DeepSeek Harness 中“一切皆插件”意味着什么?

本章小结

Agent 的核心是“模型 + 循环 + 工具 + 记忆 + 权限”。前端不是这个系统的旁观者,而是负责把动态、流式、可中断的过程呈现给用户。

进一步阅读:

  • packages/core/README.md
  • docs/architecture.md