用户画像构建器(User Profile Builder)
本技能有两大功能
| 功能 | 做什么 | 怎么触发 |
|---|---|---|
| 功能一:建立用户画像 | 产出一份结构化、可迭代的 Markdown 个人画像档案。两种模式:访谈驱动(零素材,9 批 × 4 问,20-40 分钟)/素材驱动(用户已有笔记、文档、聊天记录等,先扫描提取再只补缺口) | 用户说"给我建档""构建用户画像""更新我的画像""帮我做一份个人画像" |
| 功能二:基于画像做分析与决策 | 命中相关问题后,先取画像做约束过滤,再输出贴合用户真实条件、资源与目标的个性化分析、方案、决策建议;答完后按需轻量回写更新画像 | 用户说"结合我的情况分析""按我的实际条件给建议""你了解我吗",或问题本身依赖其个人约束(职业/副业/财务/健康/关系/内容规划等) |
两者的关系:功能一是为功能二服务的——建档不是终点,让后续每一次分析和决策都"基于这个人"而不是"基于一般人",才是这个技能存在的理由。
用途(为什么值得建画像)
把"了解用户"这件事从零散对话升级为结构化、可迭代、可复用的档案资产。画像建好后,它就是后续一切问题的分析底座:分析、建议、方案设计、合作方式、优先级取舍,都先读画像做约束过滤,再给结论——避免每次从零问、避免建议与用户实际约束冲突、避免正确的通用答案对这个人却是错的。
一句话概括价值:让后续每一次分析和决策都"基于这个人",而不是"基于一般人"。
核心价值不在于"记录信息",而在于产出三样别处没有的东西:
- 约束条件——每个维度都要写"对建议的含义"(如"投资风格保守 → 不推荐投流/囤货型打法")
- 内在张力提示——用户自己没意识到的矛盾(如"想副业变主业" vs "主业必须保底")
- 可复用的判断依据——后续任务直接读取,用于筛选方案、排出优先级、判断某建议能不能提
何时使用
功能一 · 建档与更新
- 用户明确要求建档 / 构建画像 / 更新画像。
- 反复出现"建议不够贴合""每次都要重新解释我的情况"时,主动建议建档。
- 已有画像需要增量修正(用户口头更正事实、补充新维度)。
功能二 · 读画像做分析决策
- 用户说"结合我的情况分析""按我的实际条件给建议""你了解我吗""以后给建议更准"。
- 用户要做的分析或决策依赖其个人约束:职业选择、副业路径、财务规划、健康节奏、关系处理、内容定位等——先读画像,再动结论。
- 用户抱怨过往建议"不贴合实际""太泛"时,用画像定位偏差来源。
功能二 · 高频盲区(2026-09-18 实测漏触发,务必重点看)
用户在倾诉而不是提问时最容易漏触发——他描述一件已经发生的个人变故,末尾问"我该怎么办""怎么排解心情"。这不是通用心理疏导题,答案完全取决于他是谁:
- 收入/福利/职业状态发生变化:降薪、绩效停发、福利取消、单位改制、岗位调整
- 健康、家庭、人生节点上的重大变化
- 关系冲突、被压榨、被误解等处境类倾诉
- 任何"通用答案对这个人恰好是错的"的处境求助
判定口径:只要用户描述的是他自己身上正在发生的事,且索要的是"我该怎么办",就属于本技能范围——先读画像,再答。
不属于本技能
- 通用知识、代码调试、翻译计算等与"这个人是谁"无关的问题——直接作答,不要读画像(详见"调用边界")。
主档案位置(跨工作区可直接读取)
本技能的主档案固定放在技能目录内,因此在任何工作区都能读取,无需知道用户的其他项目放在哪:
<技能目录>/用户画像.md # 例如 ~/.workbuddy/skills/user-profile-builder/用户画像.md
解析方式(按优先级):
- 技能目录内
用户画像.md(默认、跨工作区可用) - 配置记录的路径
~/.workbuddy/config/user-profile-builder.json(仅当用户要求把档案放到别处时)
读取路径的可靠做法是运行脚本,不要凭记忆拼路径:
python scripts/profile_store.py path # 输出画像文件的绝对路径
其他用户使用本技能时,其画像生成在他们自己的技能目录里,彼此互不可见。
调用边界:什么时候读、什么时候不读
画像文件约 1.5-2 万字符(数千 token),读取与更新都有成本。只在会改变结论时才读,不要每个问题都读。
应当读取(先读画像,再作答)
| 场景 | 例子 |
|---|---|
| 个性化分析/建议 | "帮我规划下副业节奏""我该不该换组""这笔钱怎么安排" |
| 依赖个人约束的决策 | 涉时间预算、财务状况、健康限制、家庭节点、职业边界的取舍 |
| 用户明确要求结合自身 | "结合我的情况""按我的实际条件""你了解我" |
| 长期方案/多步骤规划 | 月度计划、年度目标、内容矩阵、学习路径 |
| 优先级排序与取舍 | "先做哪个""值不值得投入" |
| 处境倾诉 + 求对策 | "单位降薪了,我怎么排解心情、又怎么面对""我被架住了怎么办" |
| 重大变化后的重新规划 | 收入结构变化、职业状态变化、家庭节点变化后,既有方案需要整体重排 |
不应读取(直接作答)
| 场景 | 例子 |
|---|---|
| 通用知识与事实查询 | 名词解释、原理、历史、行情数据 |
| 技术问题 | 代码调试、报错排查、API 用法、命令语法 |
| 一次性独立任务 | 翻译、计算、格式转换、写一段通用文案 |
| 与个人处境无关 | 通用模板、通用方法论、工具选型(除非涉及他的约束) |
| 时间敏感的小请求 | 快速查询类;读完画像反而拖慢响应 |
判断口径(一句话):如果答案与"这个人具体是谁、有什么约束"无关,就不要读;如果换一个人答案会不同,就该读。
省 token 的读取方式:先判断需要哪几个维度,再定向读取相关章节,不要整篇载入。例如只关心时间可行性 → 只读"时间与精力账"和"健康档案"两节;关心变现 → 读"事业与副业""财务画像""时间与精力账"。
命中自检(答前 30 秒过一遍)
- 他说的是他自己的事,还是在问一个通用知识?(自己的事 → 该读)
- 换一个人,答案会不会不同?(会不同 → 该读)
- 他是在倾诉 + 要对策吗("怎么办""怎么调整心态""压得喘不过气")?(是 → 该读,别当心理科普答)
- 他有没有为这个主题建过档?(有 → 先读画像,再扫一遍同主题的历史结论,最后才答)
- 我的回答里会出现具体数字吗?(会 → 必须来自画像或他工作区的既有分析,一律不许自己估)
先查存量,再开新篇(硬规则)
用户习惯把重要主题建档——财务、职场、维权、感情各有专门工作区,其中往往已经有同主题的历史分析(含已经算过的数、已经定过的策略)。
处境类问题开答前,必须:
- 读画像相关章节(拿约束);
- 扫一遍他工作区里同主题的既有文件(拿已经算过的数、已经定过的结论);
- 弄清"上次分析之后事情进展到哪一步了",本轮只答增量;
- 与本轮新情况冲突时,明确指出既有结论哪里需要改,而不是默默另起一套。
理由很实际:数字冲突会直接摧毁用户对建议的信任。 同一个指标,上一份分析写 A、这一轮凭印象估成 B,用户会立刻发现你在瞎说。凭印象估算用户的财务/时间数字,是这类任务最严重的失败模式。
回答后更新画像
每次调用画像回答问题后,做一次轻量增量更新,判断是否需要落笔:
| 情况 | 动作 |
|---|---|
| 用户补充/更正了长期有效的事实(约束、目标、偏好、时间、财务等) | 更新:用最小编辑改对应条目;更正类标注 (YYYY-MM-DD 用户更正) |
| 收入 / 职业状态 / 家庭节点发生结构性变化(降薪、绩效停发、岗位调整、家庭计划提前或推迟) | 必须更新:这类变化会让画像中财务与职业部分的所有推论同时失效,不回写等于后续每次分析都踩着过期前提 |
| 用户透露了新的结构性矛盾 | 更新:追加到"内在张力提示" |
| 出现新的硬性约束(如明确"不接受 X") | 更新:追加到"给建议时的硬约束" |
| 只是本次问题的临时信息(一次性的、短期有效) | 不更新,避免档案膨胀 |
| 是闲聊、通用问题、或没产生新信息 | 不更新 |
更新纪律:
- 最小改动:只改相关条目,不重写整篇,不重新排版。
- 不重复:已有条目能覆盖就合并,不新增同义条目。
- 只写长期价值信息:临时状态(今天心情、单次安排)不写。
- 不写入他人隐私:涉及他人只写"对用户的影响",不写其可识别信息。
- 一次更新后简短告知用户改了哪一条(一两行,不要长篇说明)。
- 用户明确说"这个别记"时,立即改为不写入,并按其要求处理已写内容。
核心原则
- 分批访谈,不要一次问完:每轮最多 4 个问题,答完立即写档,再进下一批。用户答一批的耐心远高于答 30 问。
- 零素材也能建:访谈驱动模式不依赖任何既有材料,问题设计要保证通用。
- 不编造、不推断填充:问不到就留空并标注"待补",禁止用常识推测用户情况。
- 每条信息都要有"含义":事实写进"内容"列,推论写进"对建议的含义"列。
- 档案是活文档:事实可原地更正(标注日期),日志类内容只追加不覆盖。
- 隐私就地处理:画像默认只存本地,不主动上传、不外发;对外分享前必须做脱敏扫描并告知文件路径。
- 按需调用,不滥用:只在"结论会因人而异"的问题上读取画像(见"调用边界"),通用问题直接作答——过度调用会浪费时间与 token。
- 读写成对:读过画像后,若产生了新的长期有效信息,顺手做一次轻量更新(见"回答后更新画像"),不留悬空信息。
- 先查存量,再开新篇:处境类问题先读画像、再扫同主题历史结论,只答增量;涉及具体数字必须取自画像或既有分析,绝不凭印象估算(详见"先查存量,再开新篇")。
- 处境难处 ≠ 通用心理疏导:用户说"我该怎么办/怎么调整心态"时,先按他的真实约束算清楚处境,再谈情绪——先给确定性,再给安慰。恐慌多半来自"不知道最坏有多坏",把最坏写成具体数字,痛感自然下降。
工作流
> 以下是功能一(建立画像)的完整流程,第 0-5 步走一遍即可产出档案。
> 功能二(读画像做分析决策)的流程是:判断是否属于"该读"的场景 → 定向读取相关章节 → 扫一遍工作区里同主题的既有分析,接上"上次到哪一步" → 用画像的"硬约束"过滤候选方案 → 只输出本轮增量 → 按需轻量回写。详见上文"调用边界""先查存量,再开新篇"与"回答后更新画像"三节。
第 0 步:确认模式与存放位置
先问用户建画像的方式(合并成一次提问):
- 访谈驱动(推荐默认)/ 素材驱动(已有积累)/ 两者结合
- 存放位置:默认就放在技能目录(
<技能目录>/用户画像.md),跨工作区可直接读取,通常无需询问。仅当用户另有要求时,才用scripts/profile_store.py set --path <目录>改到自定义目录。
素材驱动时追加确认:允许扫描的目录(必须由用户明确指定,禁止自行扩大范围)。
第 1 步:初始化档案
python scripts/profile_store.py init --name "<用户称呼>"
脚本会把 assets/profile-template.md 复制为 <目录>/用户画像.md(已存在则不覆盖)。若用户未指定目录,先问再建,不要擅自决定。
第 2 步:素材扫描(仅素材驱动模式)
用 Glob/Grep 扫描用户批准目录,提取事实并映射到模板章节。要点:
- 只读提取,不修改任何源文件。
- 提取结果先汇总成"已获得 / 仍缺失"清单给用户确认,再落笔。
- 素材里出现的隐私信息(他人姓名、证件号、具体地址、账号密码等)不写入画像,只写必要的关系性描述。
第 3 步:分批访谈补齐缺口
按 references/interview-batches.md 的九批题库推进。每批 4 问,用选择题形式降低作答成本(选项要覆盖真实分布,避免"是/否"式废问题)。规则:
- 每批结束后立即写入档案对应章节,再开始下一批。
- 用户答"不确定 / 没想过"是合法答案,记为"待明确"并标注可否影响后续建议。
- 遇到答案暴露矛盾(时间预算 vs 目标、风格 vs 打法),当场追问一句确认,然后写进"内在张力提示"章节。
- 全部批次结束后做一次收尾确认:还有哪块想补、隐私边界如何设。
第 4 步:生成"张力提示"与"建议约束"
这是画像的精华章节,必须主动产出,不要等用户提:
- 从已收信息中找互相冲突或未闭环的结构性问题(目标与资源不匹配、时间账对不上、约束与打法等)。
- 每条写成"张力 + 需要什么才能解决",供后续对话主动调用。
- 把硬约束整理成"给建议时的过滤规则"(如"只按 X 能力报价""内容形式按完全匿名设计")。
第 5 步:校验与交付
python scripts/profile_store.py check "<画像文件路径>"
脚本会列出缺失章节与空章节。按结果补问或标注"待补"。交付时告知用户文件路径与更新方式。
第 6 步:持续维护
- 用户口头更正事实 → 原地修改该条并标注
(YYYY-MM-DD 用户更正)。 - 新增维度 → 追加新章节,不要打散既有结构。
- 每次修改后同步一条工作日志(若用户在项目工作区协作)。
- 日常调用时:按"调用边界"判断是否读取;读过之后按"回答后更新画像"做轻量增量更新,并在回复末尾用一两行说明改了哪一条。
- 后续任何分析建议任务开始前,先读画像(建议定向读相关章节),并在回复中体现已应用的约束。
资源说明
用户画像.md—— 主档案(技能目录内,跨工作区可读;本机私有,分发前必须删除,见下节)。references/interview-batches.md—— 九批访谈题库(含提问方式、选项设计要点、批次节奏)。构建画像时必读。references/profile-template.md—— 画像结构说明与各章节填写要求。初始化前可先看以理解产出形态。assets/profile-template.md—— 可直接复制的空白画像模板(脚本 init 使用)。scripts/profile_store.py—— 主档案定位(path)、配置(get/set)、初始化(init)、完整性校验(check)。纯标准库,无外部依赖。
分发与分享安全(重要)
用户自用时,主档案放在技能目录内是安全的(跨工作区可读、不外传)。但一旦要分享/打包/上传这个技能,必须先处理:
- 删除技能目录内的
用户画像.md(含真实姓名、单位、财务、关系等敏感信息)。 - 打包前用隐私扫描确认无残留(脚本会做校验,但校验不覆盖所有敏感形态,需人工确认)。
- 分享给他人时只提供"方法与模板":对方在自己的技能目录里生成属于自己的画像。
交付他人的正确形态:SKILL.md + references/ + assets/ + scripts/,不含 用户画像.md、不含任何本机配置。
质量校验清单
交付前逐条自检:
- [ ] 每个维度都有"内容 + 对建议的含义"两列,而非只有事实罗列
- [ ] 已生成"内在张力提示"章节,且至少 2 条
- [ ] 已有"给建议时的硬约束"清单,可直接被后续任务消费
- [ ] 无编造信息;未答项明确标注"待补 / 待明确"
- [ ] 档案头部含建档日期、更新方式、隐私提示
- [ ] 敏感信息(他人隐私、证件号、账号、密码)未写入
- [ ] 用户已确认存放路径与是否对外分享
隐私红线
- 画像含高度敏感信息,默认仅存本地,不主动上传、不外发;不写入任何联网请求、不外传给第三方服务。
- 对外分享 / 脱敏导出 / 打包分发技能前:必须先处理画像文件(删除或排除),并扫描敏感字段、给出明确文件路径与命中清单,经用户逐条确认。
- 用户明确禁止的事项写入"隐私边界"章节,后续任务强制执行。
- 他人信息(伴侣、同事、亲友)只写"与用户的关系和影响",不写其可识别隐私。
- 素材扫描仅限用户批准目录;不越界扫描系统目录或个人无关目录。
- 更新画像时使用最小编辑,避免把整篇内容复制到对话、日志或摘要中——不要为了"展示"而回显敏感内容,只说明改了哪一条。