council
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSkill: council
Skill:council
🧭 Chọn backend cho mỗi seat (model rẻ vs Claude), chạy nhiều seat song song (1 worktree/seat — KHÔNG nhiều opencode/1 folder) → xem orca-dispatch-reference (nguồn chân lý duy nhất).
A deterministic harness around Andrej Karpathy's
(https://github.com/karpathy/llm-council) three stages — Stage 1 "First
Opinions", Stage 2 "Review" (anonymized peer-rank), Stage 3 "Final Response"
(chairman) — wired onto orca orchestration.
llm-council🧭 为每个 seat 选择 backend(廉价 model 与 Claude),并行运行多个 seat(每个 seat 使用一个 worktree——不要在同一个文件夹中运行多个 opencode)→ 参见 orca-dispatch-reference(唯一事实来源)。
围绕 Andrej Karpathy 的
(https://github.com/karpathy/llm-council) 三阶段设计的 deterministic harness:
Stage 1「First Opinions」、Stage 2「Review」(匿名化 peer-rank)、
Stage 3「Final Response」(chairman),并接入 orca orchestration。
llm-councilWHAT
WHAT
Purpose và context
Purpose 与 context
- Purpose: chạy một hội đồng LLM kiểu Karpathy 3 stage trên orca orchestration — N seat trả lời độc lập, chấm chéo MÙ (ẩn danh), chairman tổng hợp — kèm transcript tất định và report HTML bắt buộc (Stage 4).
- Trigger (when to use): Hard questions where one model's answer is risky and you want a panel + an audit trail of who-ranked-what, with the favour-your-own bias removed by blinding. For a single quick answer, just ask one model. Lời gọi: "run a council", "llm-council", "panel of models", "blind peer-rank these answers", "ensemble + chairman", hoặc .
/council - Non-goals: không dùng cho câu hỏi nhanh một đáp án; không gọi model; không chọn model cho seat (việc của adapter
council.py); report không thêm phán xét mới ngoài transcript.harness/council.config.yaml
- Purpose: 在 orca orchestration 上运行 3 阶段 Karpathy 风格 LLM council——N 个 seat 独立作答、进行 BLIND 交叉评审、由 chairman 综合——同时生成 deterministic transcript 和强制 HTML 报告(Stage 4)。
- Trigger(何时使用): 面对单个 model 的回答可能存在风险的困难问题,希望使用 panel,并保留 who-ranked-what 审计轨迹,同时通过 blinding 消除偏袒自身答案的倾向。如果只需要快速回答,直接询问一个 model 即可。调用方式:「run a council」「llm-council」「panel of models」「blind peer-rank these answers」「ensemble + chairman」或 。
/council - Non-goals: 不用于需要快速单答的问题;不调用 model;不负责为 seat 选择 model(这是 adapter
council.py的职责);report 不会添加 transcript 之外的新评判。harness/council.config.yaml
Mental model
Mental model
Split of labour:
- owns the DETERMINISTIC protocol and never calls a model: anonymize (strip author → A/B/C by stable sha256 order), mean-rank aggregation, dissent surfacing, the anchor guard (seed-driven, per-judge presentation order — no
harness/scripts/council.py), and the json+md transcript.Math.random - The orca orchestration owns the MODEL GENERATIONS: each seat's answer,
each judge's ranking, the chairman's synthesis. It dispatches them exactly
like any other multi-agent wave (see ,
orca-workflow).orchestration - is the ONE adapter (
harness/council.config.yaml): which model fills each seat, the judge models, the chairman. Every value is anverified: false. The engine never branches on these — it only stamps them into the transcript. Finalize the council by editing this one file.# ASSUMPTION (not verified)
question → Stage 1 answers.json → Stage 2a blind packet (A/B/C + presentation order) → Stage 2b judges.json → Stage 2c transcript (mean-rank, dissent, chairman_brief) → Stage 3 chairman_synthesis → Stage 4 HTML report versioned职责划分:
- 负责 DETERMINISTIC protocol,且绝不调用 model:匿名化(去除 author → 按稳定 sha256 顺序映射为 A/B/C)、mean-rank 聚合、暴露 dissent、anchor guard(由 seed 驱动、按 judge 设定 presentation order——不使用
harness/scripts/council.py),以及生成 json+md transcript。Math.random - orca orchestration 负责 MODEL GENERATIONS:每个 seat 的回答、每个 judge 的排名、chairman 的综合。它与其他任何 multi-agent wave 完全相同地进行 dispatch(参见 、
orca-workflow)。orchestration - 是唯一的 adapter(
harness/council.config.yaml):指定每个 seat 使用的 model、judge models 和 chairman。每个值都是verified: false。engine 从不根据这些值分支,只会将它们写入 transcript。通过编辑这一个文件完成 council 的最终配置。# ASSUMPTION (not verified)
question → Stage 1 answers.json → Stage 2a blind packet(A/B/C + presentation order)→ Stage 2b judges.json → Stage 2c transcript(mean-rank、dissent、chairman_brief)→ Stage 3 chairman_synthesis → Stage 4 版本化 HTML reportInput và output contract
Input 与 output contract
| Field | Required? | Ý nghĩa | |
|---|---|---|---|
| In | câu hỏi | có | cùng một câu cho mọi seat; |
| In | | có | seats / judges / chairman ( |
| In | roster persona ( | không | lens góc nhìn thêm vào prompt Stage-1 |
| In | | không | seed anchor guard, ghi đè |
| Out | | có | |
| Out | | có | blind packet; consensus, winner, dissent, |
| Out | | có (bắt buộc) | report versioned, không ghi đè; |
| 字段 | 是否必填 | 含义 | |
|---|---|---|---|
| In | question | 是 | 传给所有 seat 的同一个问题; |
| In | | 是 | seats / judges / chairman( |
| In | roster persona( | 否 | 为 Stage-1 prompt 增加额外的 lens 视角 |
| In | | 否 | anchor guard 的 seed,覆盖 |
| Out | | 是 | |
| Out | | 是 | blind packet;consensus、winner、dissent、 |
| Out | | 是(强制) | 版本化 report,不覆盖已有文件; |
Rules và capabilities
Rules 与 capabilities
- RULE-01 (MUST): NGÔN NGỮ (bắt buộc): mọi seat/judge/chairman PHẢI trả lời bằng tiếng Việt CÓ DẤU đầy đủ; chèn câu này vào MỌI prompt Stage-1/Stage-2/Stage-3.
- RULE-02 (MUST): Output run luôn dưới — never bare
scratchpad/council-<slug>/or a repo-root folder.run/ - RULE-03 (MUST): Blindness, not exclusion, is the guard — judge chỉ thấy nhãn A/B/C, theo presentation order của mình.
- RULE-04 (MUST): Roster luôn cài ≥1 cặp đối-trọng; size lẻ (3/5) để mean-rank không hoà.
- RULE-05 (MUST): Stage-4 HTML luôn render; lỗi renderer chỉ WARN, KHÔNG bao giờ giết lệnh hay
rank.transcript.{json,md} - RULE-06 (MUST): never calls a model; engine never branches on config values — chỉ stamp vào transcript.
council.py - Capabilities: dispatch model generation qua lớp orchestration (seat/judge/chairman); tính toán protocol tất định cục bộ; ghi file transcript + HTML; không mạng/CDN cho report.
- RULE-01 (MUST):语言(强制): 所有 seat/judge/chairman 必须使用带完整变音符号的越南语回答;必须将此句插入 Stage-1/Stage-2/Stage-3 的每个 prompt。
- RULE-02 (MUST):每次运行的输出始终位于 ——绝不使用裸露的
scratchpad/council-<slug>/或 repo 根目录下的文件夹。run/ - RULE-03 (MUST):保障机制是 Blindness(匿名化),而不是排除——judge 只能看到 A/B/C 标签,并按照自己的 presentation order 查看答案。
- RULE-04 (MUST):roster 始终包含 ≥1 对观点相反的 persona;size 使用奇数(3/5),以避免 mean-rank 出现平局。
- RULE-05 (MUST):Stage-4 HTML 必须始终完成渲染;renderer 报错时只能输出 WARN,绝不能中断 或
rank。transcript.{json,md} - RULE-06 (MUST):绝不调用 model;engine 绝不根据 config 值分支——只将其写入 transcript。
council.py - Capabilities:通过 orchestration 层 dispatch model generation(seat/judge/chairman);在本地执行 deterministic protocol 运算;写入 transcript + HTML;report 不依赖网络或 CDN。
Failure boundaries
Failure boundaries
- không exit 0, hoặc
council.py selftestkhông có runtime chạy → blocked, không chạy council.orca status --json - Seat trả lời không dấu → report cũng mất dấu (render trung thực) → nhắc lại RULE-01 và chạy lại seat đó.
- Thiếu judges → chỉ phát blind packet rồi dừng (partial, chờ Stage 2b).
rank - Renderer HTML lỗi → WARN, transcript vẫn có (partial cho Stage 4, chạy lại ).
render - Roster thiếu cặp đối-trọng → cảnh báo stderr; gõ sai case/persona → gợi ý gần nhất, không fail trơ.
- 未以 0 退出,或
council.py selftest显示没有运行中的 runtime → blocked,不得运行 council。orca status --json - seat 的回答不含变音符号 → report 同样不会显示变音符号(如实渲染)→ 提醒 RULE-01,并重新运行该 seat。
- 缺少 judges → 只生成 blind packet,然后停止(partial,等待 Stage 2b)。
rank - HTML renderer 报错 → 输出 WARN,transcript 仍然存在(Stage 4 为 partial,重新运行 )。
render - roster 缺少观点相反的 persona 对 → 向 stderr 输出警告;case/persona 拼写错误 → 给出最接近的建议,不发生无声失败。
HOW
HOW
Main workflow
Main workflow
| Step | Type | Inputs | Action | Outputs/exit | Failure/next |
|---|---|---|---|---|---|
| W01 | deterministic | repo, runtime | Preconditions: | đủ điều kiện | thiếu → blocked |
| W02 | effect | câu hỏi (+ lens) | Stage 1 — dispatch một worker mỗi seat, gom | | seat lỗi/không dấu → chạy lại seat |
| W03 | deterministic | | Stage 2a — | blind packet | — |
| W04 | effect | packet | Stage 2b — dispatch judge với câu trả lời mù theo presentation order, gom | | — |
| W05 | deterministic | answers + judges | Stage 2c — | transcript + report | render lỗi → WARN, B02 |
| W06 | effect | | Stage 3 — dispatch chairman, dán | transcript đủ | — |
| W07 | deterministic | transcript | Stage 4 — | report versioned mới | lỗi → WARN, transcript giữ nguyên |
Chi tiết từng bước (nguồn chân lý cho W01–W07):
| Step | Type | Inputs | Action | Outputs/exit | Failure/next |
|---|---|---|---|---|---|
| W01 | deterministic | repo、runtime | 前置条件: | 条件齐备 | 缺失 → blocked |
| W02 | effect | question(+ lens) | Stage 1——为每个 seat dispatch 一个 worker,汇总 | | seat 失败或缺少变音符号 → 重新运行 seat |
| W03 | deterministic | | Stage 2a—— | blind packet | — |
| W04 | effect | packet | Stage 2b——按 presentation order 向 judge dispatch 盲化答案,汇总 | | — |
| W05 | deterministic | answers + judges | Stage 2c—— | transcript + report | render 失败 → WARN、B02 |
| W06 | effect | | Stage 3——dispatch chairman,将 | 完整 transcript | — |
| W07 | deterministic | transcript | Stage 4—— | 新版本化 report | 失败 → WARN,transcript 保持不变 |
各步骤详情(W01–W07 的唯一事实来源):
Preconditions
Preconditions
- exits 0 (engine is healthy).
python3 harness/scripts/council.py selftest - shows a running runtime; orchestration enabled.
orca status --json - Seats/judges/chairman set in .
harness/council.config.yaml
- 以 0 退出(engine 健康)。
python3 harness/scripts/council.py selftest - 显示 runtime 正在运行;orchestration 已启用。
orca status --json - 中已设置 seats/judges/chairman。
harness/council.config.yaml
Protocol (maps each stage to an orca dispatch)
Protocol(每个 stage 对应一次 orca dispatch)
Stage 1 — First Opinions (orchestration generates)
Stage 1 — First Opinions(由 orchestration 生成)
Dispatch one worker per seat in , same question to each.
council.config.yamlNGÔN NGỮ (bắt buộc): mọi seat/judge/chairman PHẢI trả lời bằng tiếng Việt CÓ DẤU đầy đủ (đúng chính tả, đủ dấu thanh + dấu mũ). TUYỆT ĐỐI không viết tiếng Việt không dấu (ASCII).render trung thực text đầu vào (council.py, không normalize) — nếu seat trả lời mất dấu thì report cũng mất dấu. Chèn câu này vào MỌI prompt Stage-1/Stage-2/Stage-3.ensure_ascii=False
bash
orca orchestration task-create --spec "Answer: <question>" --json
orca orchestration dispatch --task <task_id> --to <seat_handle> --inject --json
orca orchestration check --wait --types worker_done --timeout-ms 300000 --jsonCollect the replies into — , where
is the seat id (the real identity; it gets stripped next).
answers.json[{"id","author","text"}, ...]author按照 为每个 seat dispatch 一个 worker,并向所有 worker 提供同一个问题。
council.config.yaml语言(强制): 所有 seat/judge/chairman 必须使用带完整变音符号的越南语回答(拼写正确,完整包含声调符号和元音符号)。绝对不要写不带变音符号的越南语(ASCII)。会如实渲染输入文本(council.py,不做 normalize)——如果 seat 的回答丢失变音符号,report 也会丢失。必须将此句插入 Stage-1/Stage-2/Stage-3 的每个 prompt。ensure_ascii=False
bash
orca orchestration task-create --spec "Answer: <question>" --json
orca orchestration dispatch --task <task_id> --to <seat_handle> --inject --json
orca orchestration check --wait --types worker_done --timeout-ms 300000 --json将回复汇总到 ——,其中 是 seat id(真实身份,下一步会被去除)。
answers.json[{"id","author","text"}, ...]authorStage 2a — blind packet (council.py is deterministic)
Stage 2a — blind packet(由 council.py deterministic 处理)
bash
python3 harness/scripts/council.py prepare answers.json --config harness/council.config.yaml --out scratchpad/council-<slug>/<slug>release-gatescratchpad/run/run-council*/scratchpad/council-<slug>/council.packet.{json,md}bash
python3 harness/scripts/council.py prepare answers.json --config harness/council.config.yaml --out scratchpad/council-<slug>/<slug>release-gatescratchpad/run/run-council*/scratchpad/council-<slug>/council.packet.{json,md}Stage 2b — Review (orchestration generates)
Stage 2b — Review(由 orchestration 生成)
Dispatch each judge in the BLIND answers, in that judge's
presentation order. Ask each to return a ranking of the labels (best first).
Collect into — .
council.config.yamljudges.json[{"judge","ranking":["B","A","C"]}, ...]Blindness, not exclusion, is the guard: a judge may be a seat, but it cannot recognise its own answer, so it cannot play favourites.
按照每个 judge 自己的 presentation order,向其 dispatch 中的 BLIND 答案。要求每个 judge 返回标签的排名(最佳答案排在最前)。
council.config.yaml将结果汇总到 ——。
judges.json[{"judge","ranking":["B","A","C"]}, ...]保障机制是 Blindness,而不是排除:judge 可以同时也是一个 seat,但无法识别自己的答案,因此不能偏袒自己。
Stage 2c — aggregate (council.py is deterministic)
Stage 2c — aggregate(由 council.py deterministic 处理)
bash
python3 harness/scripts/council.py rank answers.json --judges judges.json --config harness/council.config.yaml --out scratchpad/council-<slug>/Writes : mean-rank consensus, the winner, the
dissent table (most-contested answer), and a .
scratchpad/council-<slug>/council.transcript.{json,md}chairman_briefbash
python3 harness/scripts/council.py rank answers.json --judges judges.json --config harness/council.config.yaml --out scratchpad/council-<slug>/写入 :mean-rank consensus、winner、dissent table(争议最大的答案)以及 。
scratchpad/council-<slug>/council.transcript.{json,md}chairman_briefStage 3 — Final Response (orchestration generates)
Stage 3 — Final Response(由 orchestration 生成)
Dispatch the chairman the from the transcript (consensus order +
the dissent points it must resolve). Its synthesis is the final answer; paste it
back under in the transcript for the record, then
to regenerate the Stage-4 HTML with the
synthesis shown (the report auto-written during has an empty synthesis
because rebuilds from answers+judges only).
chairman_briefchairman_synthesiscouncil.py render <transcript.json>rankrank将 transcript 中的 dispatch 给 chairman(共识顺序 + chairman 必须解决的 dissent 点)。其 synthesis 是最终答案;将其粘贴回 transcript 的 中留档,然后运行 ,重新生成包含 synthesis 的 Stage-4 HTML(rank 期间自动写入的 report 中 synthesis 为空,因为 rank 仅根据 answers+judges 重建)。
chairman_briefchairman_synthesiscouncil.py render <transcript.json>Stage 4 — HTML report (MANDATORY, tự render trong council.py, offline)
Stage 4 — HTML report(强制,由 council.py 内部离线渲染)
Luôn render — không cần cờ, không phụ thuộc skill ngoài. Mỗi lần thành
công, (nằm ngay trong ) ghi một
versioned —
(NNN tăng dần, KHÔNG ghi đè → mỗi run một bản ghi bất biến) + là con
trỏ tiện dụng (gitignore, tránh diff-churn). Không CDN (system font + inline SVG
favicon/grain) → offline; không coupling . Feed thuần từ
transcript vừa build () → không bịa gì mới, mọi chuỗi seat tại chỗ
(chống HTML-injection). Toàn khối render bọc try/except: lỗi renderer chỉ WARN,
KHÔNG bao giờ giết lệnh hay (Taleb blast-radius guard).
Tên+lăng kính ủy viên lấy từ ; câu hỏi hiển thị khi truyền
(bỏ trống → report ẩn dòng question thay vì in placeholder).
rankrender_report_html(t, personas)council.py.htmlllmwiki/html/council/council-report-NNN-seed<seed>.htmllatest.htmldocs-site-macosthtml.escaperanktranscript.{json,md}council.personas.yaml--questionTrang có đúng ba section, theo thứ tự:
- Ý kiến hội đồng. Mỗi seat một card (viền màu = , xếp theo consensus rank + huy chương), answer tự format
sha256(author)thành list. Nguồn:(1)(2)(3)+t["answers"].t["aggregate"] - Bỏ phiếu KÍN (blind vote). Bảng phiếu dùng NHÃN A/B/C ẩn danh: mỗi judge
một hàng, ranking theo nhãn + presentation-order của anchor guard. Reveal map
A/B/C → author chỉ ở cuối section.
Nguồn: +
t["judge_rankings"].t["anchor_guard"] - Dashboard cuối. KPI (winner / most-contested / đồng thuận) + bảng mean-rank
consensus, và hiển thị nổi bật KHI đã được dán vào transcript (rank build lại từ answers+judges nên field này rỗng cho tới khi chairman fill — lúc đó khối synth tự ẩn). Nguồn:
chairman_synthesis/t["winner"]/t["most_contested"].t["aggregate"]
Vì mọi số liệu lấy từ transcript đã deterministic, report chỉ là lớp trình bày —
không thêm phán xét mới. Same transcript → cùng HTML.
始终渲染——不需要 flag,也不依赖外部 skill。 每次 成功后,(直接位于 中)会写入一个版本化的 文件——(NNN 递增,绝不覆盖 → 每次运行都保留一份不可变记录)+ 作为便捷指针(加入 gitignore,避免 diff churn)。不使用 CDN(system font + inline SVG favicon/grain)→ 完全离线;不与 耦合。数据仅来自刚构建的 transcript()→ 不会编造任何新内容;所有 seat 字符串都在写入时通过 处理(防止 HTML-injection)。整个 render 块都包裹在 try/except 中:renderer 出错时只输出 WARN,绝不会中断 或 (Taleb blast-radius guard)。
委员的名称和 lens 来自 ;传入 时显示问题(留空 → report 隐藏 question 行,而不是打印 placeholder)。
rankrender_report_html(t, personas)council.py.htmlllmwiki/html/council/council-report-NNN-seed<seed>.htmllatest.htmldocs-site-macosthtml.escaperanktranscript.{json,md}council.personas.yaml--question页面严格包含以下三个 section,并按此顺序排列:
- 委员会意见。 每个 seat 对应一张 card(边框颜色 = ,按 consensus rank + 奖章排序),answer 中的
sha256(author)会自动格式化为列表。 来源:(1)(2)(3)+t["answers"]。t["aggregate"] - 匿名投票(blind vote)。 投票表使用匿名的 A/B/C 标签:每个 judge 占一行,ranking 按标签和 anchor guard 的 presentation order 排列。仅在 section 末尾揭示 A/B/C → author 的映射。
来源: +
t["judge_rankings"]。t["anchor_guard"] - 最终 Dashboard。 包含 KPI(winner / most-contested / consensus)、mean-rank consensus 表,并在 已写入 transcript 时突出显示(rank build 仅根据 answers+judges 重建,因此该字段在 chairman fill 前为空;填入后 synth 区块自动显示)。 来源:
chairman_synthesis/t["winner"]/t["most_contested"]。t["aggregate"]
由于所有数字都来自 deterministic transcript,report 只是展示层——不会增加新的评判。相同 transcript → 相同 HTML。
Branches
Branches
| ID | Kind | Guard | Hành vi | Skip / failure | Rejoin |
|---|---|---|---|---|---|
| B01 | user_optional | muốn đa dạng GÓC NHÌN (ít provider) | bốc roster persona (mục Persona lenses dưới), chèn lens vào prompt Stage-1 (động) hoặc field | không bốc → seat = model thuần | W02 |
| B02 | recovery | report HTML lỗi hoặc cần hiện | chạy lại | renderer vẫn lỗi → WARN, transcript là nguồn | kết thúc |
| B03 | conditional_required | chạy | chỉ phát blind packet rồi dừng | — | W04 |
| ID | Kind | Guard | Behaviour | Skip / failure | Rejoin |
|---|---|---|---|---|---|
| B01 | user_optional | 需要多样化视角(provider 较少) | 抽取 roster persona(见下方 Persona lenses),将 lens 动态插入 Stage-1 prompt,或在 config 中固定设置 | 不抽取 → seat = 纯 model | W02 |
| B02 | recovery | report HTML 出错,或需要显示 | 重新运行 | renderer 仍然出错 → WARN,transcript 仍是事实来源 | 结束 |
| B03 | conditional_required | 运行 | 只生成 blind packet,然后停止 | — | W04 |
Validation và stopping
Validation 与 stopping
Tất định: (12 checks) chứng minh cùng + + seed → transcript byte-identical; report chỉ là lớp trình bày của transcript. Cần review: chất lượng synthesis của chairman. Dừng sau W07 khi report có synthesis.
selftestanswers.jsonjudges.jsonDeterministic:(12 项检查)证明相同的 + + seed 会产生 byte-identical transcript;report 只是 transcript 的展示层。需要人工 review:chairman synthesis 的质量。当 report 已包含 synthesis 时,在 W07 后停止。
selftestanswers.jsonjudges.jsonExamples
Examples
- Positive: "run a council: có nên tách monorepo không" với 3 ghế → 3 seat trả lời tiếng Việt có dấu →
roster --case decisionra A/B/C → 3 judge rank →preparera winner + dissent → chairman tổng hợp →rank --out scratchpad/council-monorepo/ghirendercó synthesis.council-report-NNN-seed<seed>.html - Boundary/failure: exit khác 0 → dừng ở W01, không dispatch seat nào. Renderer lỗi trong
council.py selftest→ chỉ WARN,rankvẫn được ghi, chạy lạicouncil.transcript.jsonsau.render
- Positive:「run a council:是否应该拆分 monorepo?」配合 生成 3 个 seat → 3 个 seat 使用带变音符号的越南语回答 →
roster --case decision生成 A/B/C → 3 个 judge rank →prepare生成 winner + dissent → chairman 综合 →rank --out scratchpad/council-monorepo/写入包含 synthesis 的render。council-report-NNN-seed<seed>.html - Boundary/failure:的退出码不为 0 → 停在 W01,不 dispatch 任何 seat。
council.py selftest期间 renderer 出错 → 只输出 WARN,rank仍会写入,之后重新运行council.transcript.json。render
Reference — Persona lenses — góc nhìn "vĩ nhân" (optional, ADDITIVE)
Reference — Persona lenses —「伟人」视角(可选,ADDITIVE)
Mặc định mỗi seat = một MODEL trả lời. Lớp persona thêm đa-dạng GÓC NHÌN: mỗi seat đội một
lens (Feynman / Munger / Taleb / Rams …) — quan trọng khi đa-dạng-model bị hạn chế (chỉ có ít
provider). Engine KHÔNG đổi: persona chỉ là chữ nhét vào prompt Stage-1.
council.pyQuên tên ai / cú pháp gì? (hoặc trống) in hết case (theo VIỆC) · profile · 18 persona — chọn theo việc, không cần nhớ tên.
Nhớ nhầm vẫn gọi chính xác được: khớp theo TÊN lẫn id, không phân biệt hoa/thường ( ok); gõ sai → gợi ý gần nhất ( → "ý bạn là 'risk'?"), không fail trơ.
council.py roster --listroster--case--personas Feynman,Taleb--case risksBốc 3-5 người theo case (thuần code, log-được):
bash
python3 harness/scripts/council.py roster --list # catalog: case/profile/persona
python3 harness/scripts/council.py roster --case risk # 3 ghế, có ≥1 cặp đối-trọng
python3 harness/scripts/council.py roster --case ml-ai --size 5 # 5 ghế
python3 harness/scripts/council.py roster --profile lean # 5 người execution-lean
python3 harness/scripts/council.py roster --personas feynman,taleb,rams --json- Case tag: (bảng trong
design · strategy · debug · risk · product · decision · simplify · ml-ai).harness/council.personas.yaml - Luật: roster luôn cài ≥1 cặp đối-trọng (chống phòng vọng âm); thiếu → cảnh báo ở stderr. Size lẻ (3/5) để mean-rank không hoà.
- Thư viện: 18 persona + 13 cặp đối-trọng (nguồn ).
github.com/0xNyk/council-of-high-intelligence
Dùng trong protocol: sau khi bốc roster, gán mỗi persona vào một seat — có 2 cách:
- Động (khuyên): orchestrator lấy output , với mỗi seat chèn lens vào prompt Stage-1: "Trả lời qua lăng kính <name>: <lens>. <sig>."
roster --json - Cố định: điền field mỗi seat trong
persona:.harness/council.config.yaml
Roster + lý do bốc (case, cặp tension) ghi vào transcript để auditable (Trụ 5). Phần "model nào fill seat" vẫn là unknown đã quarantine ở () — persona-lens độc lập với nó.
council.config.yamlverified默认每个 seat = 一个 MODEL 回答。Persona 层增加多样化视角:每个 seat 佩戴一个 lens(Feynman / Munger / Taleb / Rams 等)——当多 model 方案受限时(只有少数 provider),这一点尤其重要。Engine 不变:persona 仅作为文本插入 Stage-1 prompt。
council.py忘记名称或命令语法? (或直接运行 )会打印全部 case(按工作类型)· profile · 18 persona——按 选择工作类型,无需记忆名称。
即使记错也能准确调用:既可按名称也可按 id 匹配,不区分大小写( 可用);拼写错误 → 给出最接近的建议( →「你是指 'risk' 吗?」),不会无声失败。
council.py roster --listroster--case--personas Feynman,Taleb--case risks按 case 抽取 3–5 人(纯代码、可记录日志):
bash
python3 harness/scripts/council.py roster --list # catalog: case/profile/persona
python3 harness/scripts/council.py roster --case risk # 3 ghế, có ≥1 cặp đối-trọng
python3 harness/scripts/council.py roster --case ml-ai --size 5 # 5 ghế
python3 harness/scripts/council.py roster --profile lean # 5 người execution-lean
python3 harness/scripts/council.py roster --personas feynman,taleb,rams --json- Case tag:(表格位于
design · strategy · debug · risk · product · decision · simplify · ml-ai)。harness/council.personas.yaml - **规则:**roster 始终包含 ≥1 对观点相反的 persona(防止群体偏袒);缺失时向 stderr 输出警告。Size 使用奇数(3/5),以避免 mean-rank 出现平局。
- 库:18 persona + 13 对观点相反的 persona(来源:)。
github.com/0xNyk/council-of-high-intelligence
**在 protocol 中使用:**抽取 roster 后,将每个 persona 分配给一个 seat——有两种方式:
- **动态(推荐):**orchestrator 获取 输出,并为每个 seat 将 lens 插入 Stage-1 prompt:「Trả lời qua lăng kính <name>: <lens>. <sig>.」
roster --json - **固定:**在 中为每个 seat 填写
harness/council.config.yaml字段。persona:
Roster + 抽取原因(case、tension pair)会写入 transcript,以便审计(支柱 5)。「哪个 model 填充 seat」仍是未知项,已在 中隔离();它与 persona-lens 相互独立。
harness/council.config.yamlverifiedReference — council.py commands
Reference — council.py commands
| Command | Does |
|---|---|
| full aggregation → transcript.json + .md |
| + auto-writes versioned |
| emits the blind packet, then stops |
| blind packet only (Stage 2a) |
| re-render Stage-4 HTML từ transcript đã có (vd sau khi dán |
| bốc 3-5 persona-lens (thuần lookup, ≥1 cặp đối-trọng); |
| conformance vectors; asserts determinism + correctness |
Flags: (anchor-guard seed; overrides config ),
(transcript json/md), ,
(câu hỏi thật hiện trên report; bỏ trống → ẩn dòng question).
Stage-4 HTML versioned luôn ghi vào — no flag needed.
--seed Nanchor_seed--out DIR--config harness/council.config.yaml--question "..."llmwiki/html/council/| Command | 作用 |
|---|---|
| 完整聚合 → transcript.json + .md |
| 额外自动写入版本化的 |
| 生成 blind packet,然后停止 |
| 仅生成 blind packet(Stage 2a) |
| 根据已有 transcript 重新渲染 Stage-4 HTML(例如粘贴 |
| 抽取 3–5 个 persona-lens(纯 lookup,≥1 对观点相反的 persona); |
| conformance vectors;断言 determinism + correctness |
Flags:(anchor-guard seed;覆盖 config 中的 )、
(transcript json/md)、、
(在 report 中显示真实问题;留空 → 隐藏 question 行)。
版本化的 Stage-4 HTML 始终写入 ——无需额外 flag。
--seed Nanchor_seed--out DIR--config harness/council.config.yaml--question "..."llmwiki/html/council/Reference — Adapter boundary (build-now-adapt-later)
Reference — Adapter boundary(build-now-adapt-later)
- Contract (built + tested now): the json schemas (,
answers.json, transcript) and all the deterministic ops injudges.json.council.py - Quarantine (): model identities in
verified: false. The math is independent of them.harness/council.config.yaml - Adapt later (one file): edit seats/judges/chairman in the config, run a
real council, then flip . No engine change.
verified: true
- **Contract(当前已构建并测试):**json schemas(、
answers.json、transcript)以及judges.json中所有 deterministic 运算。council.py - Quarantine():
verified: false中的 model identities。协议运算不依赖这些身份。harness/council.config.yaml - **Adapt later(只需一个文件):**在 config 中编辑 seats/judges/chairman,运行一次真实 council,然后将 改为
verified。无需修改 engine。true
Reference — Determinism guarantees
Reference — Determinism guarantees
Same + + seed → byte-identical transcript every
run. Anonymization depends on , not input order or author, so neither
position nor authorship leaks. The anchor guard is seeded per judge from the
arg — never the global RNG. proves all of this (12 checks).
answers.jsonjudges.jsonsha256(id)selftest每次运行使用相同的 + + seed,都会产生 byte-identical transcript。匿名化依赖 ,而不是输入顺序或 author,因此 position 和 authorship 都不会泄露。Anchor guard 根据参数为每个 judge 单独设定 seed——绝不使用全局 RNG。 会证明以上性质(12 项检查)。
answers.jsonjudges.jsonsha256(id)selftest