界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
效率与协作 · SKILL.md

people-kb

people-kb

【效率与协作】名片知识库 / 人物志。在日常对话中被动感知用户聊到的人(朋友、同事、家人、合作方都记), 一人一档持续沉淀到知识库,让 Agent 越来越懂用户身边的人。三件事: ① 被动记录 — 对话里出现某个具体的人+关于 ta 的信息时,主动沉淀到 `人物 - {名字}`; ② 召回 — 再次聊到这个人时,先召回 memory 里的一句话指针,再 knowledge_search 拉全量档案补进上下文; ③ 去重与整理 — 按月去重,定期合并同一个人的零散记录。 存储走知识库(scene=work/life),不占用 memory(人物档案会越来越大)。

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: people-kb version: 1.0.0 description: > 名片知识库 / 人物志。在日常对话中被动感知用户聊到的人(朋友、同事、家人、合作方都记), 一人一档持续沉淀到知识库,让 Agent 越来越懂用户身边的人。三件事: ① 被动记录 — 对话里出现某个具体的人+关于 ta 的信息时,主动沉淀到 人物 - {名字}; ② 召回 — 再次聊到这个人时,先召回 memory 里的一句话指针,再 knowledge_search 拉全量档案补进上下文; ③ 去重与整理 — 按月去重,定期合并同一个人的零散记录。 存储走知识库(scene=work/life),不占用 memory(人物档案会越来越大)。 trigger: "记一下.(是谁|这个人|他是|她是)|记到people|整理进people|归到people|人物档案|这个人|我同事|我朋友|我的朋友|我的同事|我们组的|团队成员|认识了|介绍下.(是谁)|.*最近怎么样|.*是个什么样的人|谁是|关于.*的信息" author: Ethan Agent license: MIT platforms: [linux, macos, windows] metadata: ethan: tags: [People, Knowledge, Relationship, Recall]

People KB(名片知识库 / 人物志)

把用户身边的人沉淀成一人一档的「人物志」,日积月累,让 Agent 越来越懂这些人。 数据写知识库(scene 区分 work/life),memory 里只放一句话「指针」用于召回。

🎯 核心理念

  • 朋友、同事、家人、合作方都记 —— 不只是打工场景。是「你认识的人」的知识库。
  • 被动感知:不需要用户显式说"记一下"。只要对话里出现一个具体的人 + 一条关于 ta 的信息,就应该沉淀。
  • 档案是活的:每次聊到都可能补充,档案随时间变厚,画像越来越准。
  • 存储在知识库、索引在 memory:全量档案放知识库(可以很大);memory 里只留一句话指针,负责"下次聊到这个人时把 ta 捞回来"。

🚫 硬规则

R1:写档案只用 knowledge_* 工具

人物档案的所有写入必须通过 knowledge_add / knowledge_edit,禁止 file_write / shell。路径由后端管理,不要自己拼 vault 路径。

  • 新建 → knowledge_add(title, content, tags, scene)
  • 追加 → knowledge_edit(source, content, mode="append", scene)
  • 整篇改写 → knowledge_edit(source, content, mode="replace", scene)

R2:档案条目命名固定为 人物 - {名字}

  • 标题:人物 - {名字}(如 人物 - 张三)
  • tags:["people", "{名字}"](外加关系标签,如 "colleague" / "friend" / "family")
  • scene:同事/工作关系 → work;朋友/家人/生活关系 → life(拿不准默认 work)
  • title 里禁止出现 /、\、连续 -、前后空格

R3:memory 指针(召回索引,务必写)

首次为某人建档、或档案有重要更新(换了关系/职业/重要标签)时,用 memory_write 写一条极短的人物指针:

  • memory_type="relationship"
  • content:一句话,形如 "用户的同事张三,负责支付方向,是直属下属;详细档案见知识库人物-张三"
  • 只写身份锚点(谁、什么关系、一句话画像),不要把事件流水写进 memory —— 那些留在知识库档案里
  • 同一个人只维护一条指针(内容变化时 memory_write 会按内容 supersede,直接用最新的一句话覆盖式重写即可)

作用:下次用户提到这个人时,recall_memory 会先召回这句指针,Agent 据此知道"这是用户认识的人",再 knowledge_search 拉全量档案。

⚡ 快速路径

被动记录(核心,默认行为)

触发:对话中出现一个具体的人 + 关于 ta 的可沉淀信息。判断标准——满足下面任一条就该记:

  • 提到某人的身份/关系("我同事张三"、"我朋友小林"、"我妹")
  • 提到某人做了什么 / 发生了什么("张三今天把支付联调搞定了"、"小林最近换工作了")
  • 提到某人的特点/偏好/近况("张三特别较真"、"小林喜欢滑雪"、"李姐孩子刚上小学")

不记:泛指的人("有个用户"、"某个同事"没点名)、纯路人、一次性无信息量的提及。

流程:

  1. 提取 {名字}、{关系}(同事/朋友/家人/合作方/…)、{信息}、{scene}(按 R2)
  2. knowledge_search(query="人物 {名字}", scene=...) 找档案:
    • 不存在 → knowledge_add 建档(见 references/profile-format.md 的新建模板),并按 R3 写 memory 指针
    • 存在 → knowledge_read 读全文,按月去重(见 references/recall-and-dedup.md)后 knowledge_edit 追加时间线条目
  3. 回复确认:记到了谁、记了什么(一句话,别啰嗦)

低打扰原则:被动记录时不要每条都追问。信息明确就直接记+一句话确认;只在关系/名字有歧义时才问。

召回(聊到熟人时补上下文)

触发:用户消息里出现一个可能是"用户认识的人"的名字,或问"X 最近怎么样 / X 是谁 / X 是个什么样的人"。

流程:

  1. recall_memory 命中人物指针 → 确认这是用户认识的人
  2. knowledge_search(query="人物 {名字}", scene="work") + 生活向再搜 scene="life",找到档案
  3. knowledge_read 读全文,把关系、画像、最近时间线提炼进当前回答的上下文
  4. 若用户是在"聊这个人的新情况",顺带走一遍被动记录把新信息沉淀进去

显式整理

触发:「把 xxx 整理进 people」「记到 people 里」「给 X 建个档案」。

  1. 从消息/上下文提取 {名字}: {信息} 列表
  2. 逐个走被动记录流程(建档 or 追加 + 指针)
  3. 回复:列出写入了哪些人、各写了什么

🗂️ 与其他技能的关系

技能关系
team-manager消费者:绩效/CR/群扫描识别出的工作事件,写进本技能的 人物 - {名字} 时间线(带 [亮点]/[问题] 工作标签)。存储格式归本技能管。
task-and-schedule-manager「X 生日 6.1」「下周约 X 吃饭」这类含人物的时间信号,转交 task-and-schedule-manager 建提醒;人物本身信息留在这里。
recall_memory / memory_write人物指针的读写通道(R3)。

🧹 定期整理(建议配定时任务)

同一个人可能被零散记了多条、或名字写法不一("张三" vs "老张")。建议用 task-and-schedule-manager 配一个低频任务(如每月)做整理,prompt 见 references/recall-and-dedup.md 的「定期整理」章节:合并重名档案、去重时间线、补全画像摘要、刷新 memory 指针。

⚠️ 约束

  • 隐私边界:人物档案仅存本地知识库,绝不发送到任何外部渠道/群/个人。
  • 客观记录:时间线以事实为主;主观印象放"画像"段落并注明是印象。
  • 敏感信息:薪资、绩效评级、健康隐私等,除非用户明确要求,否则不写档案。
  • 不臆造:拿不准名字/关系时先问,不要猜一个写进去。

📎 详细规范

  • references/profile-format.md — 人物档案的结构、新建/追加模板、字段规则
  • references/recall-and-dedup.md — 召回流程、按月去重、memory 指针写法、定期整理 prompt
我的收藏