docs: add master-agent prompts and memory design
This commit is contained in:
@@ -0,0 +1,440 @@
|
||||
# 主 Agent 提示词与记忆分层设计
|
||||
|
||||
## 背景
|
||||
|
||||
当前 `master-agent` 会话已经具备这些能力:
|
||||
|
||||
- 真实对话链路:`APP / Web -> boss-web -> master-agent -> local-agent / OpenAI API -> 回写账本`
|
||||
- 当前对话模型选择
|
||||
- 当前对话推理强度选择
|
||||
- 微信式右上角三点菜单
|
||||
|
||||
但还有两个关键能力缺失:
|
||||
|
||||
1. 主 Agent 没有一套显式可管理的提示词体系
|
||||
2. 主 Agent 没有一套可见、可编辑、可沉淀的记忆体系
|
||||
|
||||
在当前产品形态下,这两个能力不能再停留在“代码里写死一段 prompt”或“隐性记忆”的阶段。因为实际使用中已经出现两类长期信息:
|
||||
|
||||
- 系统级规则和风格约束
|
||||
- 用户在大量对话、长期研发、项目推进过程中沉淀下来的偏好、进度、阻塞、结论
|
||||
|
||||
同时,项目是多租户结构:
|
||||
|
||||
- 管理员需要定义系统级主 Agent 规则
|
||||
- 每个用户又需要维护自己私有的长期上下文
|
||||
- 单个当前会话还可能需要额外临时约束
|
||||
|
||||
## 目标
|
||||
|
||||
1. 为主 Agent 建立分层提示词体系
|
||||
2. 为主 Agent 建立用户级记忆体系,并支持自动沉淀
|
||||
3. 在主 Agent 聊天页右上角三点菜单中增加:
|
||||
- `提示词`
|
||||
- `记忆`
|
||||
4. 支持在前台对记忆进行:
|
||||
- 新增
|
||||
- 编辑
|
||||
- 删除
|
||||
5. 支持在前台对提示词进行:
|
||||
- 查看管理员全局主提示词(只读)
|
||||
- 编辑用户私有主提示词
|
||||
- 编辑当前对话附加提示词
|
||||
6. 主 Agent 每次执行时,真实使用这些提示词和记忆,而不是只存不读
|
||||
|
||||
## 非目标
|
||||
|
||||
- 本轮不做向量数据库
|
||||
- 本轮不做复杂语义聚类
|
||||
- 本轮不做管理员全局记忆
|
||||
- 本轮不做提示词版本对比和历史回滚
|
||||
- 本轮不把提示词/记忆扩展到普通线程会话
|
||||
|
||||
## 设计总览
|
||||
|
||||
### 1. 提示词分层
|
||||
|
||||
主 Agent 提示词分三层:
|
||||
|
||||
1. `管理员全局主提示词`
|
||||
2. `用户私有主提示词`
|
||||
3. `当前对话附加提示词`
|
||||
|
||||
这三层不是互相覆盖,而是固定顺序叠加:
|
||||
|
||||
```text
|
||||
管理员全局主提示词
|
||||
+ 用户私有主提示词
|
||||
+ 当前对话附加提示词
|
||||
```
|
||||
|
||||
约束如下:
|
||||
|
||||
- 管理员全局主提示词:
|
||||
- 由管理员在 Web 后台配置
|
||||
- 全局唯一
|
||||
- 所有主 Agent 对话都会继承
|
||||
- 不可被用户层和对话层覆盖
|
||||
- 用户私有主提示词:
|
||||
- 每个用户独立维护
|
||||
- 用来表达长期偏好、表达方式、工作方式
|
||||
- 当前对话附加提示词:
|
||||
- 只作用于当前 `master-agent` 会话
|
||||
- 用来表达本轮对话的临时约束和上下文
|
||||
|
||||
### 2. 记忆分层
|
||||
|
||||
记忆只保留用户层,不做管理员全局记忆。
|
||||
|
||||
但用户记忆再分两类:
|
||||
|
||||
1. `用户通用记忆`
|
||||
2. `项目记忆`
|
||||
|
||||
#### 2.1 用户通用记忆
|
||||
|
||||
适合保存:
|
||||
|
||||
- 用户长期偏好
|
||||
- 常用语言/表达要求
|
||||
- 长期研究方向
|
||||
- 长期稳定的工作约束
|
||||
|
||||
例如:
|
||||
|
||||
- 用户偏好微信式交互
|
||||
- 用户偏好中文直接回复
|
||||
- 用户倾向先打通主链再做 UI 精修
|
||||
|
||||
#### 2.2 项目记忆
|
||||
|
||||
默认绑定到具体 `projectId`。
|
||||
|
||||
适合保存:
|
||||
|
||||
- 项目目标变化
|
||||
- 决策结论
|
||||
- 阻塞点
|
||||
- 风险
|
||||
- 重要进度结论
|
||||
- 关键线程/设备职责
|
||||
|
||||
例如:
|
||||
|
||||
- `boss` 项目服务器固定是 `106.53.170.158`
|
||||
- `wenshenapp` 当前真实线程导入规则已切到项目聚合 + 线程下钻
|
||||
- 某个设备上的某个线程负责某类任务
|
||||
|
||||
### 3. 前台呈现方式
|
||||
|
||||
前台不直接暴露复杂结构,而是保持轻量卡片式体验:
|
||||
|
||||
- 提示词页:按分层 section 展示
|
||||
- 记忆页:按列表卡片展示
|
||||
|
||||
但底层必须是结构化存储,以支撑未来的大量记忆沉淀、检索、过滤和去重。
|
||||
|
||||
## 数据模型
|
||||
|
||||
### 1. 管理员全局主提示词
|
||||
|
||||
建议增加一条系统配置记录,例如:
|
||||
|
||||
```ts
|
||||
interface MasterAgentPromptPolicy {
|
||||
globalPrompt: string;
|
||||
updatedAt: string;
|
||||
updatedBy?: string;
|
||||
}
|
||||
```
|
||||
|
||||
特点:
|
||||
|
||||
- 全局唯一
|
||||
- 不跟项目绑定
|
||||
- 只允许管理员修改
|
||||
|
||||
### 2. 用户私有主提示词
|
||||
|
||||
```ts
|
||||
interface UserMasterPrompt {
|
||||
account: string;
|
||||
content: string;
|
||||
updatedAt: string;
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 当前对话附加提示词
|
||||
|
||||
当前这层建议直接复用 `master-agent` 对话控制思路,挂在 `project` 上:
|
||||
|
||||
```ts
|
||||
interface ProjectAgentControls {
|
||||
modelOverride?: string;
|
||||
reasoningEffortOverride?: "low" | "medium" | "high";
|
||||
promptOverride?: string;
|
||||
updatedAt: string;
|
||||
}
|
||||
```
|
||||
|
||||
本轮新增:
|
||||
|
||||
- `promptOverride`
|
||||
|
||||
### 4. 用户记忆
|
||||
|
||||
```ts
|
||||
type MasterMemoryScope = "global" | "project";
|
||||
type MasterMemoryType =
|
||||
| "user_preference"
|
||||
| "project_progress"
|
||||
| "decision"
|
||||
| "risk"
|
||||
| "blocking_issue"
|
||||
| "research_note"
|
||||
| "workflow_rule";
|
||||
|
||||
interface MasterAgentMemory {
|
||||
memoryId: string;
|
||||
account: string;
|
||||
scope: MasterMemoryScope;
|
||||
projectId?: string;
|
||||
title: string;
|
||||
content: string;
|
||||
memoryType: MasterMemoryType;
|
||||
tags: string[];
|
||||
sourceMessageId?: string;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
lastUsedAt?: string;
|
||||
archived: boolean;
|
||||
}
|
||||
```
|
||||
|
||||
## 主 Agent 执行链合成规则
|
||||
|
||||
主 Agent 每次真正执行时,统一按下面顺序拼装上下文:
|
||||
|
||||
1. 管理员全局主提示词
|
||||
2. 用户私有主提示词
|
||||
3. 当前对话附加提示词
|
||||
4. 当前项目相关的项目记忆
|
||||
5. 用户通用记忆
|
||||
6. 当前运行时上下文
|
||||
7. 当前消息
|
||||
|
||||
### 记忆筛选原则
|
||||
|
||||
不是把所有记忆都塞进去,而是按相关性选一批:
|
||||
|
||||
- 当前项目命中的项目记忆优先
|
||||
- 最近使用过的用户通用记忆优先
|
||||
- 标签命中的记忆优先
|
||||
- 已归档的不参与默认拼装
|
||||
|
||||
### 管理员全局主提示词不可覆盖
|
||||
|
||||
这条是硬规则:
|
||||
|
||||
- 用户私有主提示词只能追加
|
||||
- 当前对话附加提示词也只能追加
|
||||
- 不允许声明“忽略管理员规则”
|
||||
- 不允许用户端删除或修改管理员全局主提示词
|
||||
|
||||
## 自动记忆沉淀规则
|
||||
|
||||
默认自动沉淀,但不是“所有聊天都入库”。
|
||||
|
||||
### 1. 允许自动写入的内容
|
||||
|
||||
只有满足“未来仍有使用价值”的信息才进入记忆:
|
||||
|
||||
- 对项目推进有持续价值
|
||||
- 对用户长期偏好有持续价值
|
||||
- 对系统后续调度和回答有稳定帮助
|
||||
|
||||
### 2. 自动分类
|
||||
|
||||
自动写入时分两类:
|
||||
|
||||
- 项目进度、决策、阻塞、风险:
|
||||
- 写为 `project` scope
|
||||
- 用户长期偏好、风格、研究方向:
|
||||
- 写为 `global` scope
|
||||
|
||||
### 3. 默认不写入的内容
|
||||
|
||||
这些内容默认不进入记忆:
|
||||
|
||||
- 打招呼
|
||||
- 一次性口头确认
|
||||
- 临时、马上会过期的状态
|
||||
- 未确认的猜测
|
||||
- 重复且没有新增信息的催促或抱怨
|
||||
- 纯操作性瞬时提示
|
||||
|
||||
### 4. 去重与合并
|
||||
|
||||
自动沉淀必须带基础去重:
|
||||
|
||||
- 如果识别到表达的是同一条长期事实
|
||||
- 优先更新已有记忆,而不是新增重复条目
|
||||
- 只刷新:
|
||||
- `updatedAt`
|
||||
- `lastUsedAt`
|
||||
- 必要时更新标题/内容
|
||||
|
||||
## 前台页面与入口
|
||||
|
||||
### 1. 主 Agent 聊天页右上角三点菜单
|
||||
|
||||
新增并调整为:
|
||||
|
||||
1. `提示词`
|
||||
2. `记忆`
|
||||
3. `模型`
|
||||
4. `推理强度`
|
||||
5. `会话信息`
|
||||
6. `刷新`
|
||||
|
||||
### 2. 提示词页
|
||||
|
||||
这是一个新的轻量编辑页。
|
||||
|
||||
包含三个 section:
|
||||
|
||||
1. `管理员全局主提示词`
|
||||
- 只读
|
||||
- 明确标注“不可覆盖”
|
||||
2. `我的主提示词`
|
||||
- 可编辑
|
||||
3. `当前对话附加提示词`
|
||||
- 可编辑
|
||||
|
||||
页面还需要提供:
|
||||
|
||||
- `查看组合结果`
|
||||
|
||||
目的是让用户知道当前主 Agent 真正看到的提示词是什么。
|
||||
|
||||
### 3. 记忆页
|
||||
|
||||
这是一个新的记忆管理页。
|
||||
|
||||
分两个 section:
|
||||
|
||||
1. `项目记忆`
|
||||
2. `我的通用记忆`
|
||||
|
||||
每条记忆卡片支持:
|
||||
|
||||
- 编辑
|
||||
- 删除
|
||||
|
||||
页面支持:
|
||||
|
||||
- 新增记忆
|
||||
|
||||
自动写入后的记忆也会直接出现在这里,而不是只存在后端。
|
||||
|
||||
## Web 后台
|
||||
|
||||
本轮需要补一个管理员可用的 Web 配置页,用来管理:
|
||||
|
||||
- `管理员全局主提示词`
|
||||
|
||||
这页只做一件事:
|
||||
|
||||
- 编辑和保存全局主提示词
|
||||
|
||||
本轮不扩展成复杂控制台,不加入记忆管理,不做多级配置中心。
|
||||
|
||||
## API 设计
|
||||
|
||||
本轮建议至少新增这些能力:
|
||||
|
||||
### 1. 管理员全局主提示词
|
||||
|
||||
- `GET /api/v1/master-agent/prompt-policy`
|
||||
- `POST /api/v1/master-agent/prompt-policy`
|
||||
|
||||
### 2. 用户私有主提示词
|
||||
|
||||
- `GET /api/v1/master-agent/user-prompt`
|
||||
- `POST /api/v1/master-agent/user-prompt`
|
||||
|
||||
### 3. 当前对话附加提示词
|
||||
|
||||
沿用现有:
|
||||
|
||||
- `GET /api/v1/projects/[projectId]/agent-controls`
|
||||
- `POST /api/v1/projects/[projectId]/agent-controls`
|
||||
|
||||
本轮在 payload 中加入:
|
||||
|
||||
- `promptOverride`
|
||||
|
||||
### 4. 用户记忆
|
||||
|
||||
- `GET /api/v1/master-agent/memories`
|
||||
- `POST /api/v1/master-agent/memories`
|
||||
- `POST /api/v1/master-agent/memories/[memoryId]`
|
||||
- `DELETE /api/v1/master-agent/memories/[memoryId]`
|
||||
|
||||
并支持:
|
||||
|
||||
- `scope=global|project`
|
||||
- `projectId`
|
||||
- `memoryType`
|
||||
|
||||
## 验收标准
|
||||
|
||||
本轮完成后,至少要满足:
|
||||
|
||||
1. 主 Agent 聊天页右上角三点菜单能看到 `提示词` 和 `记忆`
|
||||
2. `提示词` 页能:
|
||||
- 查看管理员全局主提示词
|
||||
- 编辑用户私有主提示词
|
||||
- 编辑当前对话附加提示词
|
||||
- 查看最终组合结果
|
||||
3. `记忆` 页能:
|
||||
- 查看项目记忆
|
||||
- 查看用户通用记忆
|
||||
- 新增、编辑、删除
|
||||
4. 主 Agent 实际执行时会读取:
|
||||
- 管理员全局主提示词
|
||||
- 用户私有主提示词
|
||||
- 当前对话附加提示词
|
||||
- 用户记忆
|
||||
5. 自动沉淀出的记忆会真实出现在记忆页
|
||||
6. 项目进度类记忆默认挂到 `projectId`
|
||||
7. 用户长期偏好类记忆默认挂到用户全局
|
||||
8. 管理员全局主提示词不能被用户端覆盖
|
||||
|
||||
## 风险与约束
|
||||
|
||||
### 1. 记忆膨胀
|
||||
|
||||
如果自动沉淀规则太宽,记忆会迅速变脏。
|
||||
因此本轮必须至少带上:
|
||||
|
||||
- 自动分类
|
||||
- 基础去重
|
||||
- 归档能力
|
||||
|
||||
### 2. prompt 过长
|
||||
|
||||
提示词和记忆叠加后,最终 prompt 不能无限增长。
|
||||
因此本轮虽然先不做复杂向量检索,但必须做最基础的筛选:
|
||||
|
||||
- 当前项目优先
|
||||
- 最近使用优先
|
||||
- 归档排除
|
||||
|
||||
### 3. 多租户边界
|
||||
|
||||
用户记忆必须严格按用户隔离:
|
||||
|
||||
- 用户 A 的记忆不能进入用户 B 的主 Agent
|
||||
- 项目记忆也必须同时受 `account + projectId` 约束
|
||||
|
||||
Reference in New Issue
Block a user