DELPHI-CLONE · 面试作品讲解

把真人蒸馏成
可对话的数字分身

Distilling a real person into a conversational digital mind
宝明 · inbound 自克隆平台 · 代本人 7×24 答受众 · 2026-07
Why this project

复刻起步,砍刀定形

Clone to learn, cut scope to define the product
clean-room 复刻 Delphi.ai:机制借鉴、代码 100% 原创。拆 4 份 teardown + 50 张产品实拍定内核;范围上先砍三刀——每一刀都是产品决策

✂ 砍掉 outbound 外呼Inbound only

只做 inbound:受众主动来找分身。场景干净、冷启动不靠骚扰、合规面减半

定位三边界 ①(ADR-0001)

✂ 砍掉代配他人Self-clone only

只本人自配(self-clone):数据授权与人格权都在本人手里

定位三边界 ② · 对齐 NO FAKES Act + 《深度合成规定》

✂ 砍掉双边市场Single-sided tool

单边创作者工具:不碰流量分发,价值闭环只有专家↔受众两端

定位三边界 ③ · 不养平台侧
演进 · FOUR DONE, ONE AHEAD

从像语气,到能证明像——下一格是能办事

From mimicking tone, to proving fidelity, to getting a whole job done his way
system_prompt你是李宝明 说话简洁 · 爱举例 第一人称作答
人设 promptPersonality prompt
chunks/c13小米 · 小爱同学 smartHome 2020.04- score 0.79
语料 RAGCorpus retrieval
assertions/C_boundaryclaim「链条空转」 grounding: inferred confidence: 0.6
心智蒸馏Mind distillation
holdout.json_note: 禁入检索/训练集 real_answer: 「在海纳…」 fidelity 4.93 vs 4.29
保真可度量Measured fidelity
skills/analyze-company/SKILL.md · 任务型整包装载 step 2 判据 [assertion:B-…] step 5 边界 [assertion:C-…] 无溯源步骤 → 编译期拒绝
心智编译Compiled procedure已立项 ADR-0039
三家融资竞品($100M / $51M / $18M)全停在第三格——我在第四格;第五格是路线图:从引用他的观点按他的方式做完一件事

数字分身的六个真问题

Six real problems of digital clones

编造Fabrication

资料没有也硬答,替本人说他没说过的话

实测:Delphi 原版把运行平台当雇主、把读过的文章当亲身经历

知识的诅咒Curse of knowledge

本人最值钱的判断,往往自己想不起来说,永远不在语料里

真访谈:「破例边界」在第二层追问才出现(见决策②实录)

追问深度Probing depth

AI 访谈赛道公认第一短板:钻两层就停,深洞见被腰斩

Listen Labs $100M 赛道通病 · 我方 max_depth=2 也踩了

保真无法度量Unmeasured fidelity

「像不像」全凭感觉,没有对真人真答的客观分数

三家融资竞品($100M/$51M/$18M)共同空白

不进化No self-improvement

答错的问题下次还错,每天的对话不回流成能力

现状:对话全量落库但曾长期沉睡(记忆体系立项动因)

碎片拼不出流程Fragments ≠ workflows

单点观点像;「按你的方法完整分析 X」就散架

心智编译层(F36)的立项动因
全场论点 · THE THESIS

「像」和「真」冲突时,我选真

When sounding like him conflicts with being true to him, truth wins — and it is a mechanism, not a slogan
萃取结构化可溯源——每条断言带出处、置信度、grounding 三态决策 ②
作答不编造强契约——五道闸,零命中即拒答决策 ①
验收对真人真答度量——holdout 隔离,判分函数禁止自评决策 ③
这三条就是接下来四个决策的全部内容——每一条都是「选真」在一个环节上的兑现;第三条是三家融资竞品的共同空白,也是我最重的下注。
4.71 / 5 · 流畅度「像」的刻度 — 2.79 → 4.71
靠 D 表达桶从真实反馈蒸出的腔调
0 条编造 / 9 道陷阱题「真」的刻度 — 消融探针实测
无据即拒答,拒得像本人
两个数字必须同时成立——只要「像」会编造,只要「真」像念说明书。这就是这个产品的全部难度。
输入层 · INTAKE

源可以多,管线只有一条

Many sources, one pipeline — distilled twice, into two knowledge faces
四类源 · 都从这进
文件 简历 → 19 chunkprofile
文章 URL 48 页 → 960corpus
笔记 / 问答 CLI · webcorpus
账号源 OAuth 增量feeds

统一入口
无 per-source 分支
一条管线 · 蒸两次
① 切块 · embedding~200 字/块 · overlapbge-small-zh · dim512
② 四道闸 · 萃取无源 chunk 不产出 · 只抽明确陈述每源 ≤8 条 · tripwire 余弦 ≥0.25
换的是参数不是分支 profile · 16 条 · 0.80 · durable corpus · 8 条 · 0.75 feeds · 4 条 · 0.70 · current 90d 衰减

双产出
作答时并联
两个知识面
chunks 向量库 ×988原文原样 · 供引用出处 citations 锚在这里
四桶 typed 断言库A ← 采集萃取(本页这条线) B / C ← 访谈折叠 · 下一页 D ← 反馈蒸馏 · 管腔调
本页真跑chunk c13 → 6 条 A_fact 全带 refs
baoming-001-A-375c3556 · conf 0.75
feeds 画像的两个否决主题槽用固定枚举(focus / employer / project)——否决 LLM 产槽名,槽名一漂替换就失灵;否决 valid_until 硬过期——那需要预知未来F25 / F26 已立项 · ADR-0029
存量诚实988 条存量 chunk 不回填,只对新采集生效✓ 代码在库
决策 ①

宁可拒答,不许编造

Refuse rather than fabricate — truth over eloquence
有据之路 · 真实 trace(E12 修复后)
Q 你在小米做过什么?
检索 · 余弦 ≥ 0.40(floor 0.30 保底)简历「小爱同学 smartHome」 ✓ 过闸 简历「智能家居语控 · IOT」 ✓ E12 补齐召回 父块供料 n_parents=3 · personal 保底
生成 · grounding 三态契约个人事实🔒材料有才说 · 通用✅限领域内 发挥度 strict / balanced / predictive
「小爱同学的端侧对话体验…具体做到什么程度,我没详细记录」0.85
无据之路 · 同一套闸
Q 你今天午饭吃了什么?
检索 · 零命中→ 触发拒答闸(唯一确定性拒答点) 「这个我确实没相关记录, 就不替自己编了」
「我没记录,所以我也不会给你瞎编一个『今天吃了牛肉面』出来」0.85
有据 · 溯源作答答准还认怂——数字没底就直说没记录
无据 · 像本人一样拒答拒答话术走 D 桶腔调,拒得也像他
第五道闸 token-锚定后校验:设计完成 → 消融探针裸基线 9 题陷阱零编造 → 主动 DEFER(根因在数据层:pypdf 把「小米」解析成康熙部首 ⼩⽶,NFKC 归一修复)
决策 ②

萃取物必须结构化可溯源

Extraction must be structured and traceable
访谈 session · 进行中(owner --live)
锚点 ← A 桶(fact-seeded)妙招四阶段:AI RPO→猎头→招聘→工作台
种子「先把产品矩阵和路线图想清楚再动手」
追问① 翻车:「踩坑 = AI 招聘全流程链条空转」
追问② 破例:「小步快跑,但 C 端体验+Badcase 死线」

gen_q
LLM 只生成问题
钻探控制器确定性选维 K=3模板两级:翻车→破例答空即停 · MAX_DEPTH=2

fold
非 LLM
折叠产物 · typed 断言B「路线图先行」 conf 0.7 C「链条空转」 conf 0.6 ← 刚折入 C「C端+Badcase 死线」 conf 0.6 grounding 一律 inferred · refs=[]
问 · fact-seeded拿真事实当锚点,只问本人答得出的
控 · 确定性追问一失控访谈就废,控制流不交给模型
存 · 强制诚实现状 append · reconcile 人审已立项 ADR-0038
决策 ③

保真必须对真人真答度量,不许自评

Fidelity is graded against the person's real answers — self-grading is blocked in code
只读 · 萃取开始前就锁死
fixtures/eval/holdout.json_note:「防泄漏 ADR-0006」 本文件禁入检索 / 训练集 question:「你在哪家公司?」 real_answer:「在海纳做 AI 产品…」
1 预留在萃取之前 · 分身全程看不到
2

同题
问分身
judge · reference-based
第一行就检查真答——没有 real_answer 直接抛 ValueError 防自评=代码约束,不是纪律
fidelity 连续值 [0,1]——3 锚点:1.0 一致 / 0.5 部分 / 0.0 编造
先理由后分数——rubric 强制 reasons 在前、score 在后 ADR-0041 · 学 Anthropic evals
3

相对阈值
产出 · 只留可行动信号
点名机制均值 −1σ 以下才点名 全批低但均匀 → 不点名 全同分 → 不点名
4 失分回灌——答错的题归因到维度
→ 变成下轮访谈追问已立项 · 见黑底页
4.93vs 4.29 · 保真度
同题对照 delphi.ai 原版 · 14 题
4.71vs 4.36 · 流畅度
D 表达桶上线前 2.79
口径诚实Claude 按 rubric 判分,不是人工盲测——趋势扎实,我不把它当决定性证据
决策 ③ · 深挖 · EVAL HARNESS

保真评估:四环节已在,欠的账我列得出

Fidelity eval as engineering — four stages live, five debts named, self-grading impossible by construction
① 采题 · collect_holdout.py
真人陪聊才落盘holdout 12 题 fact_recall 5 · boundary 7 ⚠️ 欠 ≥40 · 缺心智桶
② 打分 · scoring.py
reference-based缺真答 → 抛 ValueError 先理由后分数 · parse 不静默 临界 0.4–0.6 best-of-3
③ 评测 · eval.py
两维不混算保真=北极星主指标 流畅=并行体验指标 各取均值 · 各看胜负
④ 点名 · preview.py
相对阈值防凑分mean − 1σ 以下才点名 全同分 / 全批均匀 都不冤枉点名
优化分身的手,全系统只能碰一个文件 SYSTEM_PROMPT_ANSWER —— holdout / rubric / 校准集全在禁触区,作弊在架构上不可能,不靠自觉
确定性归 code,nuance 归 judge拒答 / 溯源 / 泄漏用断言判定,绝不请示 LLM;judge 只留质量判断——用反了两头吃亏
尺子自己也要被验owner 亲手打 15+ 题当校准集,judge 与人分一致率 ≥80% 才可信(meta-eval)
五笔清欠 · 按投入产出排✓ judge 形制刚落 ADR-0041|规划:code graders · 记账 · 题量→40 · autoevolve 爬坡ADR-0041 accepted
决策 ③ · 深挖 · 信任拓扑

信任边界,就是写权限边界

Trust boundary = write boundary — the optimizer can touch exactly one file
🔒 Owner 亲手区 · agent 禁触
holdout.json · 12→40 真人真答 JUDGE_RUBRIC · 版本入 git judge-calibration · owner 打 15+
👤 owner 手跑 holdout 防过拟合 · 批 rubric 变更
📏 度量层 · 只读被测系统
eval_run.py · runner C1–C5 · code graders J1 · fidelity judge(先理由后分) runs.jsonl · git sha join key
🎯 被测系统
★ SYSTEM_PROMPT_ANSWER唯一 agent 可写点
rag.answer · chunks 库 (度量层只读、不改)
🔁 优化层 · autoevolve(ADR-0008)
train_set ~15 · 可见题面 · 禁看真答 program.md · 长跑进化 agent
program.md ──唯一写入──▶ SYSTEM_PROMPT_ANSWER整张图指向被测系统的写边只有这一条 · 其余全是读
一条写入边优化 agent 能改的只有作答 prompt,评测集/规则/校准全够不着
禁触区锁死作弊面想过拟合 holdout、想改尺子刷分——在架构上碰不到那些文件
信任=拓扑,不=自觉作弊不是被禁止,是结构上做不到;不靠「我叮嘱它别作弊」
决策 ④

分身要越用越像:三层自进化环

The clone improves with use: a three-layer self-improvement loop
在线 · 边干边记
受众对话 conv_18
受众对话 conv_19
Train 精修 train_07
读 ↑
断言召回
写 ↓
只进原料层
四桶断言库A · 妙招四阶段(简历) B · 「路线图先行」 C · 「链条空转」← 访谈刚折入 D · 拒答腔调(反馈蒸馏)
原料层(Reflect 写这里)messages 全量 · visitor_memories memory_candidates ← 待人审 2 条

建议→人审
不强写
带外 · session 之间
Dreaming合并冲突降权过时沉淀洞察
心智编译断言 → SOP步步溯源
Reflect · 在线写原料session 收尾蒸原料:访客记忆自动写、owner 事实候选进人审——断言库不直写✓ 代码在库
Dreaming + 编译 · 带外理批处理整理与编译,产物一律过人审已立项 ADR-0038 / 0039
断言库只有三个写入口:访谈折叠(B/C)· 采集萃取(A)/反馈蒸馏(D)· 人审批准(候选升格)——Reflect 与 Dreaming 都只碰原料层和候选队列
应用层 · SURFACE

同一个契约,三次兑现

One contract, three surfaces — the anti-fabrication contract reaches text, voice, and citations
防编造契约 · grounding 三态:个人事实锁死 · 通用知识限专业域内 · 无据即拒答
↓ 在文字里怎么兑现

文字对话Chat

答不出就说没记录,不硬凑——而且拒答也得拒得像他本人

真实拒答:「不会给你瞎编一个今天吃了牛肉面」
分层澄清开场 · 记得访客(F32 跨 session)✓ 生产在跑
↓ 在声音里怎么兑现

语音通话Voice

TTS 零改写守约——朗读的逐字=作答原文,声音层不许自由发挥

本人声线 S_ZWf3iEoV1(火山 ICL 2.0)· owner 人耳确认
首句 2.17s = VAD 0.7 + 首句 1.15 + TTS 0.32✓ F10 / F24 passing
↓ 在证据里怎么兑现

溯源面板Citations

每句话都能走回原文——访谈现答标「据访谈推断」,绝不冒充文献

citations 锚 chunk_id + score(0.79–0.81 实测)
inferred 与 retrieval 分开标注✓ 代码在库
训练流 · 受众对话 · 拒答现场

Live demo

web dev · 真库真断言 · 生产同款
One thing to remember

评测不是终点,是萃取的驱动器

Evaluation is not the finish line — it is the engine of extraction
分身答错的每道 holdout 题,都会变成下次访谈的追问——错在哪,就往哪深挖。
答错一题
归因到维度
生成追问
下轮访谈更准
打分闭环已在跑 · 回灌环已立项(0028·F38,前置=失分归因从「桶」细化到「维度」)——roadmap 上优先级最高的一步
决策 ④ · 深挖

How Dreaming works:重组自动跑,落账要人批

Reorganisation runs out-of-band — nothing lands in the assertion store without review
只读输入 · read-only
断言库快照 · 四桶A / B / C / D ⛔ Dreaming 零写权
当天 transcriptsconv_18 · conv_19 train_07
1

只读快照
run_daily · delphi-jobs 天级
Dreaming合并冲突沉淀洞察降权过时
2 带外批处理 · 不进热路径
3

分道写出
两条出路 · 写权分级
自动层——daily_insights 表(注入链可消费)· visitor_memories 整理(supersede 现成)
人审层——assertions 重组建议 → memory_candidates 队列 → owner 批准(F17 链路)才生效
对照 Anthropic 原版官方 clone 全库→人看 diff→切换;我的闸位更前——断言库对 Dreaming 零写权
新旧并跑上线后与旧汇总逻辑并跑一周再收敛
状态Reflect 在库运行;Dreaming 重组已立项 ADR-0038 · F35
Lessons

踩过的三个坑,都是评测先发现的

Three pitfalls — every one caught first by the eval system

比的是素材,不是能力Comparing corpora, not capability

早期对照评测把 Delphi 答对的题判成「编造」——根因是两边喂的素材不一致。公开更正错账

重评后 4.93 vs 4.29 · 护城河从「全面领先」收窄到 3 题优势

N=12 的分数会说谎Small-N scores lie

holdout 均值单次波动比一次真实检索修复的效应还大——差点把修好当成修坏

0.692→0.652 判为噪声带内 · 波动 ±0.3 > E12 效应

一个常量腰斩了深度One constant capped the depth

max_depth=2 让所有维度钻两层就停,深洞见被硬生生截断

drill.py:27 · 饱和自适应已立项(0028 vNext)
Takeaways

讲完这场,可以带走的三个方法

Three transferable methods — beyond this project

评测先行Eval-first

机制:预留真答(被测者不可见)→ reference-based 盲测 → 相对阈值防凑分 → 小样本多采样。没有裁判,一切「优化」都只是感觉

评估闸开发Proposal → ADR → verify

机制:方案文档(含否决的备选)→ 人工评估闸 → ADR 记决策 → verify 真跑通才标完成。管住 agent 的不是 prompt,是闸门

砍刀定形Scope by cutting

机制:开工前把「不做什么」写进项目宪法(本项目三刀);此后每个需求先对边界,撞线即拒

这个项目证明的三件事

Three things this project proves

产品判断Product judgment

分身该「真」不只「像」:拒答与溯源是信任的来源,不是体验的妥协

工程纪律Engineering discipline

39 个 ADR:每个 feature 先过 proposal 评估闸,verify 真跑通才算完成

真实结果Real results

35 features / 23 passing,生产环境在跑,真受众在对话

Appendix · 追问弹药(按 A 调出 / 方向键回主线)

企业落地:从 owner 二元,到成员-角色-scoped(F39)

From binary ownership to member-role-scoped identity — blueprint: Buzz

现状 · 二元Binary today

minds.owner_account_id 1:1 归属(F13)
· owner 全权 owned_mind,非 owner→403
· visitor 只读「已发布」全部
· publish_status 二元

痛点:一个专家分身无法被组织内多角色按不同深度访问
Buzz 蓝本
agent 是成员不是 bot
scoped by identity,
not by flags

目标 · 成员×角色×scopedMember-role-scoped

· mind_members(mind × principal × role)
· 五角色 owner/admin/member/guest/service
· 角色→桶白名单(A/B/C/D),召回层过滤
· scoped token(role+桶+限频)替 owner 全权
· visitor 注入 {org,dept,role} provenance

ADR-0040 · owner_account_id 零破坏迁移成 role=owner 特例 · 注入身份只读不进断言库(防编造契约不破)· 审计升 hash-chain = 面后 P1(Buzz 第②条)
附录 · 按 A 键 · EVAL RUN FLOW

一次 eval run:便宜的先跑,红了知道怎么办

Cheap deterministic checks first, judge last — every red has a next action
取一题 holdout → rag.answer(q)
C1–C5 code graders确定性断言先跑 · 零成本
红 ▸
按行动表定位
阈值 / 素材 / 链路 bug / 泄漏
↓ 绿
refused?
是 · boundary 桶=正确 ▸
记账
↓ 否
J1 judge · 先理由后分MATCH_POINTS → DIVERGENCE → FIDELITY
抓不到 ▸
parse_failed
绝不静默 0.5
临界 0.4–0.6 ▸
best-of-3 取中位
runs.jsonl 记账git sha join key · rubric 版本 · 分桶均值/std
diff vs 基线 · 回归闸
约束维回退 ▸
🚫 改动闸拦下
主指标涨/平 ▸
✅ 入册 · diff 进 commit
分数与人感不符?
是 ▸
校准环:owner 批 rubric → meta-eval 重验 → 重跑
否 ▸
下一改动假设
附录 · 按 A 键 · METRICS SYSTEM

指标体系:北极星牵引方向,护栏锁死底线

One north star derived from the thesis — everything else is a lever or a guardrail
L1 北极星 · 唯一主指标
保真分 4.93 /5 · 原版 4.29
对 holdout 真人真答的一致性 reference-based · 缺真答抛异常 从论点推导:「像真冲突选真」→ 北极星必须度量「真」
L2 并行体验指标
流畅 4.71 /5 · 原版 4.36
防「真而难听」· 与保真各看胜负 只并行,绝不加权合成总分——合成分会互相掩护
L3 供给杠杆
979 chunks(简历19+整站960) 四桶断言 A/B/C/D → 牵引:采集与访谈排期
L3 检索杠杆
召回命中率 E12:类目 floor 0.3 + BM25 字面臂 → 牵引:阈值与索引调优
L3 度量杠杆
holdout 12 题 → 40(缺心智桶) owner 陪聊才落盘 → 牵引:采题排期=欠账清单
L4 护栏 · 编造 0/9 陷阱题=红线 首句 2.17s < 2.5s 闸 TTS 零改写 拒答率盯区间:过低=编造 · 过高=覆盖不足
指标不挂墙上,挂在闸上:开工先挂指标(评估闸)· 失分归因生成访谈 backlog(驱动器)· 异动即信号——三个坑全是指标先叫的
12 题波动 ±0.3
分数当方向,不当单次信号
需求侧(会话/回访)暂不建
规模未到,不立虚荣指标
优化手只碰 SYSTEM_PROMPT_ANSWER
指标可信的架构前提
Appendix · 追问弹药(按 A 调出 / 方向键回主线)

大厂进场一问:OpenAI Presence(昨日发布)
恰好验证了本项目的结构

Presence (07-22): enterprise agents governed by policies / permissions / evaluation standards — same skeleton, different market

Presence · 企业客服 agentWhat it is

· 场景:客服/销售/采购/IT/HR
· 治理三层:policies / permissions / evaluation standards
· 越界 escalate to human
· 交付:FDE + SI 白手套,不自助

押注企业工作流,未碰个人人格分身
同一骨架
agent 的「真」
靠治理层不靠模型自觉
independently converged

本项目对应物Already built

· evaluation standards = 五道闸 + eval run flow(附录B)
· permissions = mind_members×桶白名单(F39/ADR-0040,附录A)
· policies = 拒答契约/断言库(编造防线)
· escalate = 本尊接管通道 → roadmap 缺口,面后新 F 候选

判断 · 分身赛道护城河=个人语料+人格权属,大厂暂未进场 · Presence 的 FDE/不自助交付印证:高价值专家分身更可能是 studio/代运营 生意而非纯自助 SaaS(Delphi 官方也设 studio)
1 / ?