🔧 工具调用: visualize:read_me
💭 思考中...
🔧 工具调用: visualize:show_widget
💭 思考中...
一个通用 Agent 可以形式化地定义为一个五元组:
[ \mathcal{A} = \langle \mathcal{O}, \mathcal{M}, \mathcal{S}, \mathcal{H}, \mathcal{P} \rangle ]
其中 (\mathcal{O}) 为核心调度器(Orchestrator),(\mathcal{M}) 为记忆模块(Memory),(\mathcal{S}) 为技能模块(Skill),(\mathcal{H}) 为历史模块(History),(\mathcal{P}) 为策略函数(Policy)。
Agent 在每一个时间步 (t) 的决策过程为:
[ a_t = \mathcal{P}\bigl(o_t,; \mathcal{M}t,; \mathcal{H}{<t},; \mathcal{S}\bigr) ]
即在当前观测 (o_t)、当前记忆状态、历史轨迹和可用技能集合共同作用下,输出动作 (a_t)。
调度器是 Agent 的"大脑",负责整个推理—计划—行动循环。
推理引擎采用 ReAct(Reason + Act)范式,每步生成格式为:
- Thought:当前思考与分析
- Action:调用哪个 Skill,带什么参数
- Observation:Skill 返回结果
**规划器(Task Planner)**将复杂目标分解为子任务序列,采用层次化任务网络(HTN):
[ G \xrightarrow{\text{decompose}} {g_1, g_2, \ldots, g_n}, \quad g_i \xrightarrow{\text{assign}} s_i \in \mathcal{S} ]
**自我反思(Reflection)**模块在每轮行动后评估结果,计算目标满足度得分 (r_t \in [0,1]),若 (r_t < \theta) 则触发重规划。
记忆系统分为四层,对应人类认知的不同层次:
承载当前上下文窗口,容量受 LLM token 限制约束:
[ \mathcal{M}{work} = \bigl{(role_i, content_i)\bigr}{i=1}^{N}, \quad \sum_i \text{len}(content_i) \leq L_{max} ]
管理策略为滑动窗口 + 重要性保留:优先级高的内容(如系统提示、当前目标)永久保留,低优先级内容按 FIFO 淘汰。
存储过去的对话片段与事件,基于向量数据库(如 Qdrant、Chroma)实现:
存储时,对每个片段 (e) 计算嵌入:(\mathbf{v}_e = \text{Embed}(e)),并附加元数据 ({timestamp, importance, session_id})。
检索时,给定查询 (q),取 Top-K 相关片段:
[ \mathcal{M}{ep}^(q) = \underset{e \in \mathcal{M}*{ep}}{\arg\text{top-}K}; \cos\bigl(\text{Embed}(q),; \mathbf{v}_e\bigr) ]
存储结构化事实与知识,采用知识图谱形式:(\mathcal{G} = (V, E)),节点为实体,边为关系。支持基于 SPARQL 或自然语言转 Cypher 的查询。
存储成功的技能执行策略模板,格式为:
[ {task_pattern \to (skill_sequence, param_template, success_rate)} ]
当新任务与已有模式的相似度 (\text{sim}(task_{new}, pattern_i) > \delta) 时,直接复用该策略,减少推理开销。
重要性评分采用综合公式:
[ \text{importance}(m) = \alpha \cdot \text{recency}(m) + \beta \cdot \text{relevance}(m) + \gamma \cdot \text{frequency}(m) ]
其中 (\text{recency}(m) = e^{-\lambda \Delta t}) 为时间衰减项,(\alpha + \beta + \gamma = 1)。低于阈值 (\epsilon) 的记忆条目定期归档或删除。
每个 Skill 以 JSON Schema 形式注册:
{
"name": "web_search",
"description": "在互联网上搜索实时信息",
"parameters": {
"query": {"type": "string", "description": "搜索关键词"},
"max_results": {"type": "integer", "default": 5}
},
"returns": {"type": "array", "items": {"type": "string"}},
"timeout_sec": 10,
"retry_policy": {"max_attempts": 3, "backoff": "exponential"}
}Orchestrator 将意图描述 (intent) 与所有技能描述做语义匹配:
[ s^* = \underset{s \in \mathcal{S}}{\arg\max}; \cos\bigl(\text{Embed}(intent),; \text{Embed}(desc_s)\bigr) ]
若最高得分低于置信阈值 (\tau),则退化为 LLM 直接生成参数(Function Calling 模式)。
所有技能在隔离沙箱中运行,保证:
- 超时控制:超过 (T_{timeout}) 自动中断
- 资源配额:内存、CPU、网络带宽限制
- 错误隔离:Skill 异常不传播到主进程
成功执行后记录反馈信号 (f = (skill, params, result, reward)),累积到程序记忆。当同类任务失败率超过阈值时,触发技能改写或新技能生成流程。
以时间序列存储完整的 Agent 行为轨迹:
[ \mathcal{H} = \bigl[(t_1, o_1, a_1, r_1), (t_2, o_2, a_2, r_2), \ldots\bigr] ]
每条记录包含:时间戳、输入观测、输出动作、环境反馈。日志持久化到关系型数据库(如 PostgreSQL),同时异步推送到向量库以支持语义检索。
对长历史进行分层摘要,压缩比 (\rho = |summary| / |original|) 通常控制在 (0.1 \sim 0.2)。
采用滑动窗口摘要:每 (W) 轮对话触发一次摘要,新摘要与旧摘要融合后注入工作记忆:
[ summary_{k+1} = \text{LLM}\bigl(summary_k \oplus \mathcal{H}_{[k \cdot W,; (k+1) \cdot W)}\bigr) ]
在关键节点(子任务完成、用户确认)保存 Agent 完整状态:
[ snapshot_t = \bigl(\mathcal{M}_{work}^t, ; goals_t, ; plan_t, ; env_state_t\bigr) ]
支持断点续传:Agent 崩溃或会话中断后,从最近快照恢复,而非从零开始。
每次决策记录决策链,包括"为何选择该 Skill"、"依据哪些 Memory",输出结构化日志供人工审查与合规核查,实现完整的可解释性追踪。
一次完整的 Agent 运行步骤如下:
1. 接收用户输入 o_t
2. [History] 检索近期历史摘要,注入上下文
3. [Memory] 向量检索相关情节记忆与语义知识
4. [Orchestrator] Thought → 推理当前状态与目标差距
5. [Skill Router] 选择最优 Skill s*,抽取参数
6. [Skill Executor] 沙箱执行,返回 Observation
7. [Memory] 将 Observation 写入工作记忆
8. [History] 将 (o_t, a_t, result) 追加到日志
9. [Reflection] 评估 r_t,决定继续 / 重规划 / 终止
10. 输出最终结果给用户
| 设计维度 | 核心原则 |
|---|---|
| Memory | 分层存储、按需检索、重要性衰减淘汰 |
| Skill | Schema 标准化、语义路由、沙箱隔离、反馈自学习 |
| History | 完整记录、分层压缩、快照断点、可审计决策链 |
| 整体 | 模块解耦、异步并发、失败优雅降级 |
这套方案的核心优势在于:Memory 赋予 Agent 持久认知能力,Skill 赋予其可扩展行动能力,History 赋予其可追溯反思能力,三者协同驱动 Orchestrator 完成复杂的长时程任务。