接棒知识交接方案(合并两份)
本篇合并 OpenFDE Demo 接棒方案与 Agent 交接方案两份文档。服务器家目录路径已泛化为
/。
#一、OpenFDE Demo 接棒方案
#接棒(Baton)· 开源项目方案
2026-07-30 · 讨论稿 v2(v1 把它当成"演示 Demo"写了,这版按你说的改成开源项目) 还没动手写任何代码,tky 上也一行没改。
#0. 定位纠正(v1 → v2 最大的改动)
它是一个开源项目,不是一场演示。 演示是副产品——项目做出来了,顺手录个五幕演示当宣传素材,但产品本体要能被别人 fork 下来真用,而不是只够在台上跑一遍。
这条改动往下推,有三个连带结果:
| v1(演示思路) | v2(开源项目思路) | |
|---|---|---|
| 数据存哪 | 每人一个 SQLite 文件,跑在 tky | Supabase Postgres(因为要上 Vercel,Serverless 没法存 SQLite 文件) |
| 后端在哪 | tky 上一个 Python 服务 | Next.js API Routes,跟前端一起上 Vercel |
| Hermes 的地位 | 核心,没它就没东西可演 | 可选的增强层。主体不装 Hermes 也能完整跑;接上 Hermes 才有"常驻 agent + 飞书私聊 + 定时任务" |
| 数据隔离怎么讲 | 物理隔离(现场 ls 给人看) |
Postgres employee_id + RLS,README 里讲清边界 |
| 成功标准 | 5 分钟不出丑 | 别人 fork → 建个 Supabase → 填 3 个环境变量 → 部署到 Vercel → 能用 |
"Hermes 变成可选"这一条是关键。如果核心功能非得先在 VPS 上装 Hermes,这个项目的采纳门槛就高到没人会试。改成可选之后:Vercel 那一份是所有人都能跑的完整产品,tky 上那一份是"接了 Agent 层"的参考实现。
#1. 项目做什么
给小微企业(<10 人)每个员工一个私有知识 Agent:员工把自己手上的材料喂给它,日常问它;离职/换岗时把记忆按范围勾选、经接收方确认后移交给接手人,全程留审计日志。
一句话卖点
已有产品把知识当成一个有权限的池子;接棒把知识当成一份有主人、可以被移交的资产。
为什么这题没人做过
- 企微 / 钉钉离职继承 —— 交接的是所有权与在途流程(客户归属、群主、审批单换手)。没有任何一步在做提炼,接手人还得自己去 180 天聊天记录里考古。
- Glean / Onyx / Dust —— 架构上镜像源系统的 ACL。员工账号一停用,他的私聊和个人盘就从索引里消失。离职恰恰是这类架构最先失效的时刻——这是结构性的,不是"他们忘了做"。
- 飞书知识问答 / 腾讯 ima / 扣子 / Dify —— 全是「共享知识库」范式:知识一开始就在公共空间、靠权限管谁能看。它不承认"知识先长在个人身上",而小微企业的真实状态恰恰是知识 100% 长在个人身上、从没进过公共空间。
- Mem0 / Zep / Letta —— 记忆基础设施,不是交接产品。只有 Letta 有原生交接原语(共享 memory block、
.afexport/import)。
三条产品主张
- 交接是一个动作,不是一次权限变更 —— 有触发时点、范围勾选、接收方确认、回执、审计日志。
- 交接的是提炼后的判断,不是原始记录 —— 不给 180 天聊天记录,给"这家客户报价底线 92 折,前任口头承诺过年底免运费(出处:报价单 v3 第 2 页)"。
- 知识先归个人,再显式移交 —— 符合销售不愿一开始全公开的真实心理。
⛔ 一个刻意的"不做":不做全量克隆。Letta 的 .af 含完整消息历史,把前任所有对话原样倒过去既是产品错误(噪音淹没),也是合规风险(前任私聊、别的客户信息一起过去)。全量导出只用在「离职封存」。这句"我们刻意不做全量复制"本身就是项目最有说服力的一点。
可引用的硬数据(只用这两个)
- 42% 的机构知识"只存在于某一个人身上" —— Panopto Workplace Knowledge Report(同报告:每周浪费 5.3 小时等信息;<1000 人企业年损约 240 万美元生产力)。
- 替换一名员工的成本 = 年薪 0.5–2 倍 —— Gallup。
⛔ 中文侧没有可靠一手数据,网上"离职成本 1.5–2 倍""流动率 50%"追不到原始报告,别引。
#2. 架构
┌─────────────────────────── Vercel(前后端一体,这是项目主体)────────────────────────┐
│ Next.js 16 + React 19 + Tailwind 4 + shadcn/ui │
│ │
│ 页面 总览 / 我的知识库 / 记忆条目 / 交接 / 审计日志 │
│ API Routes /api/ingest /api/search /api/memory /api/handoff /api/ask │
│ 文件 Vercel Blob(原始文件) │
│ 数据 Supabase Postgres(Leo-hub):documents / chunks / memory_items │
│ / handoffs / handoff_items / audit_log,靠 employee_id + RLS 隔离 │
│ 问答 任意 OpenAI 兼容端点(默认阶跃,可换云雾/DeepSeek/自建 llm-relay) │
└───────────────────────────────────┬───────────────────────────────────────────────┘
│ 可选(不接也能完整用)
│ HTTPS + Bearer token
┌───────────────────────────────────▼─── tky(Agent 层,参考实现)──────────────────┐
│ baton-agentd(瘦服务,绑 127.0.0.1,nginx 反代 baton-api.saveme505.help) │
│ ├─ 每员工一个队列(不同人并行 / 同一人串行) │
│ └─ hermes -p emp_wang -z "<问题>" --cli --yolo --resume "baton_wang" │
│ │
│ <HOME>/.hermes/profiles/emp_wang/ ← 一人一个完全独立的家目录 │
│ ├─ memories/MEMORY.md (⚠️ 注入上限 2200 字符,只放人设和指针) │
│ ├─ skills/baton-kb/ 反向 HTTP 调 Vercel 的 /api/search 拿知识 │
│ └─ SOUL.md ⭐ 铁律:业务问题必须先检索,禁止凭记忆编造 │
│ │
│ 飞书(新建的专用应用)→ lark-cli 长连接 → 分发到对应员工的 profile │
└───────────────────────────────────────────────────────────────────────────────────┘#关键技术决策,以及为什么
① 前后端都在 Vercel,走你原来那一套部署
Next.js API Routes 当后端,不另起服务。部署流程完全照旧:改本地 → git commit(LeoLee0812 / Leo,中文注释)→ push 到 main → Vercel Git 集成自动部署,⛔ 不手动 vercel deploy。域名挂 baton.saveme505.help。部署完回 ~/personal/projects-hub/src/lib/projects-meta.tsx 补一条 PROJECT_META({ icon, description, tint, group: "backend" }),否则会以灰色地球落进"其他"。
⚠️ Vercel 环境变量的坑:标为 sensitive 的变量写进去后 CLI/后台/API 三条路都读不回明文。跑任何 vercel 写类命令前先 cp .env.local .env.local.bak(media-studio 就是这么丢过四个孤本值)。
② 检索用 pgvector + pg_trgm,⛔ 不用 Postgres 原生全文检索
Postgres 的 to_tsvector 不会切中文(没装 zhparser 的话,一整句会被当成一个词),这是个必踩的坑。所以:
- 语义检索走
pgvector(embedding 用云雾的text-embedding-3-small,1536 维,你已经在raphael_lore_build.py里跑通过这条链路) - 精确匹配走
pg_trgm(客户名"宏远建材"、合同号这种,trigram 对中文子串匹配很好用,且 Supabase 一定有这个扩展) - 两路结果用 RRF 融合 这比 v1 的 SQLite FTS5 方案多写一点代码,但换来的是"能上 Vercel"和"别人一键部署"。
③ 双层存储 —— 交接的是记忆层,不是知识层 这个拆分同时解决了"到底交接什么"这个最难的问题:
| 层 | 存什么 | 存哪 | 怎么交接 |
|---|---|---|---|
| 知识层 | 报价单、合同、开户材料、往来摘要 | documents + chunks(Blob 存原文件) |
交勾选范围内的原始文件 + 出处清单 |
| 记忆层 | 客户约定、报价底线、供应商渠道、人际雷区 | memory_items(每人几十条,人可读可编辑) |
交接的主体,逐条勾选 |
| 注入层 | 人设 + "你继承了王销售的客户约定,回答会带来源标注" | Hermes profile 的 MEMORY.md(⚠️ 2200 上限) |
交接时补一段 |
④ 隔离:employee_id + RLS,并在 README 里讲清边界
v1 用"每人一个 SQLite 文件"是为了演示时能 ls 给人看;上了 Postgres 就没这个便利了,所以改成每个查询强制带 employee_id 过滤 + Supabase RLS 兜底。⚠️ 这条要在代码里做成单一入口(所有查询过一个 scopedQuery(employeeId)),漏一处就是跨人泄漏——README 的安全章节要明写这个风险点和我们的做法。
⑤ Hermes 是可选层
不接 Hermes:网页里问答走普通 LLM 调用(/api/ask 拿检索结果拼 prompt),功能完整。
接上 Hermes:多出「每人一个常驻 agent 人格」「飞书私聊直接问」「定时任务(每晚扫新文件、每周生成一份"你这周新增了哪些约定")」「skill 生态」。README 分成两节:Quick start(纯 Vercel) 和 Agent 层(可选,需要一台 VPS)。
⑥ 飞书必须新建一个专用应用 不能复用现有那个(详见第 4 节)。走长连接(无需公网 IP/域名/验签)。 ⚠️ 已知限制:群里交互卡片的按钮回调只能走 Webhook,长连接收不到(私聊是否同样受限未验证)→ 勾选和确认一律做在网页上,飞书只负责问答和送达通知。交接报告也不手拼飞书文档 block(几十个 block + QPS 限制),发富文本消息 + 一个指向网页报告的链接。
#3. 仓库结构
仓库:LeoLee0812/baton(中文名「接棒」)。⭐ 建仓时立刻填 description + topics(fde / forward-deployed-engineer / knowledge-handover / agent-memory / hermes-agent / nextjs / supabase)。ChatDemo 那次就是 description 和 topics 全空,GitHub 上搜 ChatDemo 前 15 条全是仿微信聊天 demo,等于把唯一入口废了。
baton/
├── README.md 中文。定位 / 一键部署 / 架构图 / 安全边界 / Agent 层可选说明
├── supabase/migrations/ 建表 SQL(含 pgvector + pg_trgm + RLS policy)
├── src/
│ ├── app/
│ │ ├── page.tsx 总览:员工卡片(文件数 / 记忆条目数 / 最后活跃)
│ │ ├── kb/[employee]/page.tsx 我的知识库:拖文件、解析进度、chunk 列表带出处
│ │ ├── memory/[employee]/page.tsx 记忆条目:按类型分组、可编辑(交接的标的物)
│ │ ├── handoff/page.tsx 交接:选人 → 勾范围 → bundle 预览 → 发起 → 等确认
│ │ ├── audit/page.tsx 审计日志:谁/何时/哪些项/交给谁/何时确认/未交接项封存
│ │ └── api/{ingest,search,ask,memory,handoff,audit}/route.ts
│ ├── lib/
│ │ ├── db.ts Supabase 客户端 + ⭐ scopedQuery(employeeId) 单一入口
│ │ ├── parse.ts 文件 → markdown(PDF/Word/Excel/PPT)
│ │ ├── chunk.ts 按标题切 + 800~1000 token 滑窗,每片记 {file, page}
│ │ ├── embed.ts 云雾 text-embedding-3-small(key 只读 env,⛔ 不留明文 fallback)
│ │ ├── retrieve.ts pgvector + pg_trgm 双路 + RRF 融合
│ │ ├── extract.ts 文档 → 记忆条目(LLM 抽取,带出处)
│ │ └── handoff.ts bundle 生成 / 写入接收方 / 封存 / 审计
│ └── components/ shadcn/ui
├── agent/ ⭐ 可选 Agent 层(部署到 VPS,不上 Vercel)
│ ├── agentd.py 瘦服务:每员工队列 → hermes -p
│ ├── feishu_bridge.py lark-cli 长连接 → 按 open_id 分发
│ └── profile-template/
│ ├── SOUL.md ⭐ 检索铁律
│ └── skills/baton-kb/ 反向调 Vercel /api/search
├── seed/ 虚构演示数据(3 个员工)
└── docs/
├── 架构.md
├── 部署.md Vercel + Supabase + 可选 VPS
└── 演示脚本.md 五幕(宣传素材用,不是产品的一部分)#4. ⭐ tky 上的 Hermes:拉斐尔清理 + 干净重装
你要的是:拉斐尔整个不要了,Hermes 删掉重装,大脑还是阶跃星辰。 下面是我盘出来的真实影响面——有几件事会连带死掉,需要你先点头。
#4.1 现状(刚查的)
- Hermes v0.18.2,pip 装在
/usr/local/lib/hermes-agent,家目录<HOME>/.hermes(406 MB),有 1 个本地 carried commit 没上游 hermes-gateway.service在跑,已连两个平台:LINE = connected、Telegram = connectedfeishu-bot.service在跑(BOT_BACKEND=hermes,即飞书拉斐尔)<HOME>/.hermes/.env= 543 行 / 28 KB(比记忆里写的"2.6 万行"小得多),里面是一大批孤本 key:STEPFUN_API_KEYDEEPSEEK_API_KEYFIRECRAWL_API_KEYRESEND_KEYTAVILY_API_KEYTELEGRAM_BOT_TOKENLINE_CHANNEL_ACCESS_TOKENSLACK_BOT_TOKENVERCEL_TOKENSUPABASE_*FAL_KEYELEVENLABS_API_KEYBROWSERBASE_*…<HOME>/.hermes/profiles/还不存在(从没建过命名 profile)
#4.2 删了会死什么
❌ 会死(需要你确认可以死)
| 会死的东西 | 说明 |
|---|---|
飞书拉斐尔(feishu-bot.service) |
你在飞书私聊问它、让它操作服务器的那个运维 agent |
| Telegram @Raphael_tky_bot | |
| LINE bot | ⚠️ 这个要特别确认——按我的记忆它连着情侣站那套(project_line_couple_bot)。它现在是 connected 状态 |
chat-history skill(跨会话检索) |
|
raphael-lore 63 条世界观知识库 |
你花了两轮、派了 3 个并行 fork 建的那个 |
state.db 里全部会话历史 / kanban.db |
✅ 不会死(我核实过)
- 每早 09:00 的飞书日报播报(
daily_feishu.py)—— 它直连 DeepSeek + 飞书 raw API,不走 hermes - 英语日报(
daily_english_feishu.py)、A 股推荐(daily_stock_recommend.py)—— 同上,不走 hermes - 自建 Firecrawl、llm-relay(new-api)、scribe-api、ollama、XFCE 桌面、Cockpit —— 都是独立服务
⚠️ 会连带弄坏一个(容易漏)
ashare-auto-git.service 用 EnvironmentFile=-<HOME>/.hermes/.env。删 .env 之前必须先把它需要的变量搬到一个独立的 env 文件,否则这个服务静默取空值。
(另外顺手一句:vncserver.service 现在是 failed 状态,跟本次无关,但你要用 /tky 桌面的话得先修。)
#4.3 我建议的执行顺序
第 0 步 全量备份(在动手之前,且备份要落两处)
tar -czf <HOME>/hermes-backup-20260730.tar.gz <HOME>/.hermes <HOME>/night-run
再 scp 回 Mac 本地一份 → ~/Desktop/沉淀/tky-hermes-备份-20260730.tar.gz
⭐ 单独把 .env 抽出来存成 ~/Desktop/配置信息/tky-hermes-env-备份-20260730.md
(里面是几十把孤本 key,这一步是整个方案里最不能省的一步)
第 1 步 先把 ashare-auto-git 的 env 依赖搬走
把它实际需要的变量抽到 <HOME>/ashare/.env,改 unit 的 EnvironmentFile 指向新文件
第 2 步 停服务(先 stop 观察一天,再 disable,别一步到位)
systemctl stop feishu-bot hermes-gateway
systemctl disable feishu-bot hermes-gateway
第 3 步 卸载 + 清空
pip uninstall(或直接删 /usr/local/lib/hermes-agent)
mv <HOME>/.hermes <HOME>/.hermes.old-20260730 ← ⭐ 用 mv 不用 rm,留一周再删
第 4 步 重装最新版
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | sh
(现在线上应该已经比 v0.18.2 新了;那 1 个 carried commit 一并丢掉,正好干净)
第 5 步 只配阶跃,不接任何消息平台
config.yaml: provider: stepfun / default: step-router-v1 / context 256K
.env: 只放 STEPFUN_API_KEY + STEPFUN_BASE_URL=https://api.stepfun.com/step_plan/v1
⛔ 不写 TELEGRAM / LINE / SLACK / WHATSAPP 任何 token —— 从零开始,要哪个再加哪个
⚠️ 验证 key 时别用 `set -a; . .env` 整体 source(会静默取空,然后被误诊成 401 key 失效),
用 python 正则单独抽那一行
第 6 步 建 3 个 profile(接棒的员工 agent)
hermes profile create emp_wang --clone --description "华东区销售,家居建材,负责宏远建材"
hermes profile create emp_li --clone --description "华东区销售,接手王销售的客户"
hermes profile create emp_zhao --clone --description "采购,与销售客户无关"
验证:hermes -p emp_wang -z "你是谁" --cli --yolo → 有回应、不串台
ls <HOME>/.hermes/profiles/ → 三个独立家目录为什么建议 mv 而不是 rm:406 MB 而已,机器有 335 G 空闲。留一周,万一发现某个 skill 或某段历史还想要,还能捞回来。一周后没想起来再删。
#5. ⭐ 已经预知的最大一个技术坑
你在 raphael-lore 上踩过并解决过:即使强制预加载 skill,模型依然不去执行检索脚本,而是凭训练记忆自信编造了完全不存在的内容(连人名都编得很像)。解法是把触发写成 SOUL.md 里"铁律"同级的强制条款。
接棒的 SOUL.md 必须写死:
涉及任何客户、报价、合同、供应商、交接的问题,必须先执行 baton-kb 检索,回答必须带出处(文件名 + 页码)。绝对禁止凭记忆编造;检索不到就明确说"我的资料里没有"。涉及交接来的内容,必须标注"来源:<前任> 交接,<日期>"。
这条既是工程必需,也是 writeup 里最好的一个"现场手记"点——这正是 OpenFDE 的核心受众(想转型 FDE 的工程师)想看的东西。
#6. 演示脚本(降级成宣传素材,不再是产品目标)
背景公司「合力供应链」8 人,家居建材代理的私域销售。3 个员工:王销售(离职)、李销售(接手)、赵采购(无关第三人)。
| 幕 | 演什么 |
|---|---|
| 0 立论 | "42% 的机构知识只存在于某一个人身上" |
| 1 拖文件入库 | 拖 3 份文件,实时刷"解析中 → 已入库 12 片" |
| 2 提问 | "宏远建材上次报价多少?为什么给到这个折扣?" → 答案 + 可点开核对的出处 |
| 3 一键交接 | 勾选:客户约定 ✅ / 供应商渠道 ✅ / 个人私聊内容 ❌ → 接收方确认 |
| 4 接收方答得出 | 用第 2 幕的原句再问一次 → 答得出,标"来源:王销售交接" |
| 4.5 隔离反证 | 问赵采购的 Agent 同一个问题 → "我的资料里没有" ⭐ 这一幕比任何成功案例都更能建立信任 |
| 5 审计 + 封存 | 审计表一屏;未交接项已随账号封存 |
⛔ 三件别做:① 别接真实微信/企微数据(授权和会话存档资质解释成本极高)② 别宣称"完整继承聊天记录"③ 别把全量克隆当卖点。 合规:演示数据 100% 虚构,README 首屏明说。你已有的微信解密导出能力一律不进这个项目(沿用隐私铁律:真实记录只留本地、绝不部署)。
#7. 阶段
| 阶段 | 做什么 | 验收 |
|---|---|---|
| P0 | tky:备份 → 清理拉斐尔 → 重装 Hermes → 配阶跃 → 建 3 个 profile | hermes -p emp_wang -z "你是谁" 有回应;ls profiles/ 三个目录 |
| P1 | Supabase 建表(pgvector + pg_trgm + RLS)+ Next 项目骨架 + shadcn | 本地 pnpm dev 起得来,能连上 Supabase |
| P2 | 入库链路:上传 → 解析 → 切片 → embedding → 入库;检索 API | 传一份 PDF,/api/search 返回 chunk 且带文件名 + 页码 |
| P3 | 记忆条目抽取 + 编辑页 | 从文档抽出"客户约定/报价底线"等条目,每条带出处,可在页面上改 |
| P4 | 交接 + 审计 | 勾一半条目交接 → 确认 → 李销售那边答得出且标来源 → 未勾选项在李销售那边查不到 → 审计表完整一行 |
| P5 | 上线:Vercel 部署 + baton.saveme505.help + projects-hub 补 META |
线上能跑完 P2–P4 全链路 |
| P6 | 可选 Agent 层:agentd + baton-kb skill + SOUL 铁律 |
hermes -p emp_wang -z "宏远建材报价" 答案带真实出处;emp_zhao 同问答"资料里没有" |
| P7 | 飞书(需要你先建应用)+ 每员工队列 | 三人分别私聊各答各的;同一人连发两条不串上下文 |
| P8 | README / 虚构种子数据 / 五幕录屏 / 小红书图 + writeup | 干净环境按 README 能部署成功 |
P1–P5 是产品本体(不装 Hermes 也完整可用),P0/P6/P7 是 Agent 层,P8 是引流。
#8. 要你拍板的几件事
- LINE bot 能不能一起死? 它现在 connected,按我的记忆连着情侣站那套。删 Hermes 就一起断。要留的话得先记下它的配置,重装后单独把 LINE 通道接回来。
- 飞书拉斐尔 / Telegram 拉斐尔确认都不要了? 我按"不要"来做,但删掉后你在飞书就没那个能操作服务器的运维 agent 了(每早的日报播报不受影响,那个不走 hermes)。
raphael-lore那 63 条世界观知识库要不要单独存一份再删? 你花了两轮建的。我默认整包备份进 tar,但不单独留。- 名字:
baton(接棒)?还是走 ChatDemo 的命名法叫别的? - 前端风格:拿
~/Desktop/沉淀/FDE/zhixingyuan那套(Next 16 + shadcn + GSAP,深色)改,还是重新起一套视觉? - 范围:先做完 P1–P5(Vercel 上完整可用的产品)再回头做 Agent 层,还是 P0 先把 tky 收拾干净?我建议先 P1–P5——tky 那边是破坏性操作,等产品本体跑起来了再动,风险最小。
#附:这轮我做了什么 / 没做什么
- 没做:tky 上一行没改(没停服务、没删东西、没建 profile);没写代码;没建仓库。
- 做了:只读盘查了 tky 上 hermes 的依赖面(
grepsystemd unit、crontab -l、gateway_state.json、.env的变量名清单——没打印任何 key 的值)。 - 顺带两个发现:
vncserver.service现在是 failed(/tky桌面用不了,跟本次无关);.env实际是 543 行 / 28 KB,不是记忆里写的 2.6 万行。 - 到期提醒:本机
lark-cli的 user 身份 refresh token 8 月 3 日过期(今天 7 月 30 日)。Demo 用 bot 身份不受影响,但你别的依赖 user 身份的脚本这几天要跑一次lark-cli auth login。
#二、Agent 交接方案
#接棒 · 方案 v3
2026-07-30。FDE 那套包装全部去掉了。这就是一个开源项目。 还没写任何代码,服务器上一行没改。
#一句话
给小公司每个人配一个 Agent,管住自己手上的资料。同事之间可以互相问对方的 Agent;人走了或者换岗,一键把该给的交出去。
#五个功能
1. 一人一个 Agent 10 个人的公司,一台服务器上开 10 个 Hermes,各自完全独立(自己的记忆、自己的资料、互相看不见)。
2. 后台上传资料,Agent 自动学 后台里每个人有自己的文件夹。文件拖进去,他的 Agent 定时去扫,发现新文件就自己解析、记进自己的记忆里。第一版只做文档材料(报价单、合同、开户材料、客户资料这些),聊天记录先不做。
3. 飞书私聊问自己的 Agent 想不起来的事,在飞书直接私信自己的智能体:"那个客户叫什么名字""上次给宏远报了多少钱"。答案会带上出处——是从哪个文件的第几页看到的,能点开核对。
4. 我的 Agent 能去问老王的 Agent 我问我的 Agent,它自己答不出来,就去问老王的 Agent,拿到答案再回给我,并且告诉我"这是从老王的 Agent 那儿问来的"。 老王能设置自己哪些东西允许被同事问到、哪些不行。后台里能看到所有跨人提问的记录。
5. 一键交接 点"交接",选交给谁,勾选要交哪些东西(客户约定 ✅ / 供应商渠道 ✅ / 某些私人内容 ❌),对方确认后,记忆条目 + 动过的原始文件 + 出处一起过去。 交接完飞书发通知,也可以发邮件。后台留一份记录:谁、什么时候、交了哪些、交给谁、对方什么时候确认的。 不光是离职用——平时销售之间同步一批客户信息也走这套。
#后台管理端长什么样(重点)
用 shadcn/ui,深色为主。左边侧边栏 + 右边内容区,标准后台布局。
#侧边栏
公司名 / 当前身份切换(演示时能一键切成王销售、李销售、赵采购)/ 五个菜单 / 底部主题切换。
#页面 1 · 总览
- 顶上四个数字卡片:员工数、文件总数、记忆条目总数、本月交接次数
- 中间是员工卡片墙:每人一张卡,头像 + 名字 + 岗位 + 三个小数字(文件数 / 记忆条目数 / 最近活跃)+ 一个状态点(在职 / 已交接 / 已封存)
- 卡片点进去就是那个人的知识库
- 右边一条动态时间线:谁刚上传了文件、谁的 Agent 问了谁、哪笔交接刚被确认
#页面 2 · 我的知识库
- 上半是拖拽上传区(虚线框,拖进去就开始跑)。上传中的文件带进度条 + 状态文字:"解析中 → 切片 12 片 → 已入库"
- 下半是文件表格:文件名、类型图标、大小、入库时间、切了几片、状态。点开一行,抽屉里展开这个文件被切成的每一片内容,每片标着"第 X 页"
- 右上角搜索框,直接搜自己的库,搜出来的结果高亮命中词、下面挂一行"来源:报价单v3.pdf · 第2页",可以点开
#页面 3 · 记忆条目(交接的标的物,这页最重要)
- 按类型分组的卡片列表,五类:客户约定 / 报价底线 / 供应商渠道 / 人际雷区 / 流程习惯
- 每张卡:一句话结论 + 底部一行小字"出处:xxx.pdf 第2页"(可点)+ 右上角三个开关
- 可编辑(点一下就地改,因为 AI 抽出来的东西得人过一遍)
- 允许同事的 Agent 问到(就是功能 4 的开关)
- 交接时默认包含
- 顶部一排筛选 chip + 一个"重新抽取"按钮
#页面 4 · 交接
左右两栏:
- 左:从谁交给谁(两个头像选择器,中间一个箭头)+ 交接原因(离职 / 换岗 / 日常同步)
- 右:勾选清单。按类型折叠,每组一个全选,每条一个勾。下面还有一块"原始文件"也是勾选的
- 底部:交接预览(生成一份"接手人会看到什么"的卡片,可以先看再发)+ 发起按钮
- 发起后进等待确认状态:一个进度条式的三步——已发起 → 对方已查看 → 对方已确认
#页面 5 · 记录
两个 tab:
- 交接记录:表格,每行是一笔交接,点开看当时勾了哪些、原文是什么。未交接的部分标"已随账号封存"
- 跨人提问记录:谁的 Agent 在什么时候问了谁的 Agent 什么问题、拿到了什么、依据是哪条
#视觉
深色底、圆角卡片、大量留白。用 shadcn 的 Card / Table / Sheet / Dialog / Badge / Switch / Progress / Tabs / Command(搜索)/ Sonner(提示)。图标用 lucide。 交接那一页是主场,可以做一点动效(勾选时条目飞到右边、确认成功的动画)。
#技术怎么搭
前端 + 后台管理端:Next.js + shadcn/ui,上 Vercel。部署照你原来那套:改本地 → git commit → push 到 main → Vercel 自动部署,挂 saveme505.help 的子域名,部署完去导航站补一条图标和简介。
数据:Supabase(Postgres)。表大概是:员工、文件、切片、记忆条目、交接单、交接明细、跨人提问日志。原始文件存 Vercel Blob。 检索用 向量 + 三元组模糊匹配两路合并(因为 Postgres 自带的全文检索不切中文,客户名、合同号这种得靠模糊匹配才搜得准)。
Agent 层(跑在你的东京服务器上):
- Hermes 一人一个 profile(
hermes -p emp_wang)。Hermes 自带这个功能,一人一个完全独立的家目录,不用自己造。 - 一个瘦服务在中间转发:飞书消息进来 → 认出是谁 → 派给他的 Agent。同一个人的消息排队处理(Hermes 是有状态会话,并发跑会互相踩上下文,这是踩过的坑)。
- 飞书用长连接接,不用公网域名、不用配回调、不用验签。
- ⚠️ 飞书要新建一个专用应用——现在服务器上那个飞书 bot(拉斐尔)正在收同一批消息,共用一个应用会两边抢答。
关于 Hermes 要不要重装:你上次说拉斐尔不要了、整个删掉重装、大脑还用阶跃。这件事我盘过了,有连带影响(Telegram bot、LINE bot 会一起断,.env 里有几十把孤本 key 必须先备份,还有一个 ashare-auto-git 服务在读那个 .env)。详细的清理步骤和影响清单在上一版文档里(OpenFDE-Demo-接棒方案-20260730.md 第 4 节),这版不重复。
我的建议是:先把网页那部分做出来能跑,再动服务器。删 Hermes 是不可逆操作,等产品本体跑起来了再动,风险最小。
#"我的 Agent 去问老王的 Agent" 怎么实现
这是你原话里我一开始理解错的地方,单独说清楚:
- 我问我的 Agent:「宏远建材这个客户以前谁跟的,报价什么情况」
- 我的 Agent 先查自己的库 → 查不到
- 它调一个叫
问同事的工具:问同事(老王, "宏远建材的报价情况") - 中间那个瘦服务把这个问题转给老王的 Agent,但只允许它在"老王勾了允许对外"的范围里作答
- 老王的 Agent 回一句话 + 出处,转回给我的 Agent
- 我的 Agent 告诉我答案,并注明「以下来自老王的 Agent」
- 后台的「跨人提问记录」里落一条
两个要注意的:
- 只允许问一跳。不然我问老王、老王去问老李、老李又回来问我,会无限套娃。
- 默认是"允许被问但要留痕",不是"随便问"。老王在记忆条目页面上一条一条控制哪些能被问到。要更严就再加一档"每次都要老王点同意"(异步等确认)。
#分几步做
| 步 | 做什么 | 做完能看到什么 |
|---|---|---|
| 1 | 后台界面 + 假数据 | 一个能点的完整后台,五个页面都在,长得好看。数据是假的,但交互全通 |
| 2 | 建库 + 上传解析入库 | 真的传一份 PDF 进去,真的切片、真的能搜出来、真的带出处 |
| 3 | 记忆条目抽取 + 编辑 | 从文档里自动抽出"客户约定"这类条目,每条带出处,能在页面上改 |
| 4 | 交接 + 记录 | 真交接一次:勾一半 → 对方确认 → 接手人那边查得到、没勾的查不到、记录里有完整一行 |
| 5 | 上线 | Vercel 部署 + 子域名 + 导航站收录 |
| 6 | 服务器上的 Agent 层 | Hermes 一人一个,命令行里能问出带出处的答案;问不相关的人答"我的资料里没有" |
| 7 | 飞书 | 三个人分别私聊,各答各的 |
| 8 | Agent 之间互问 | 我的 Agent 真的去问老王的 Agent,记录里能看到 |
我建议从第 1 步开始:先把后台做出来给你看,好不好看当场就知道,不好看改起来也便宜。后面几步都是往这个壳子里填真东西。
#要你定三件事
- 名字。现在暂用「接棒」(英文
baton)。你要是有别的想法就说。 - 要不要我先把第 1 步做出来——就是那个后台,五个页面,假数据,能点。做完发给你看长什么样,你看着改。
- 界面风格:深色科技风,还是浅色干净风?(你手上
zhixingyuan那个站是深色 + shadcn + 动效,可以直接拿来当底子改)
来源:沉淀/03-项目方案与交接/OpenFDE-Demo-接棒方案-20260730.md;沉淀/03-项目方案与交接/接棒-Agent交接方案-20260730.md(整理于 2026-08-18)