
liangyi
One idea, two opposing expert views, one synthesized decision. A Claude Code workflow for adversarial product development — inspired by the I Ching.
Install with your AI
Paste into Claude Code, Cursor, or any agent — it reads the repo and wires the tool into your project.
Install and set up liangyi (git-clone project) into my current project. Found on https://claudeers.com/liangyi Repo: https://github.com/wenboxia/liangyi Homepage/docs: https://liangyi-five.vercel.app Detected install method: git-clone → git clone https://github.com/wenboxia/liangyi Category: skills. Platforms: cli, api, web, mobile. Read the repo's README for exact setup and env vars, then install it and wire it into my project. Claudeers Health Verdict: unknown; community-verified: false. Confirm the source before running anything.
git clone https://github.com/wenboxia/liangyi
// compatibility
| Platforms | cli, api, web, mobile |
|---|---|
| Operating systems | — |
| AI compatibility | claude |
| License | MIT |
| Pricing | open-source |
| Language | HTML |
两仪 · Liangyi
一念生两仪,两仪成决策。
一个想法进去,一份经过四轮对抗审查的方案出来。
- P1 对抗式方案生成:两位底模坐标不同的专家各自独立出方案,由执笔者融合成 v1。
- P2 四轮批判链:投资人批判 → 零上下文单盲复审 → 方向漂移检测与回退 → 前提拆台与致命论据分级。执笔与四轮批判各开独立窗口,互不共享上下文;单盲复审、前提拆台与专家 B 来自与执笔者不同的厂商、不同对齐路线。
- 多出口循环:拆台判定驱动回退——回 P1 整链重跑、回 P2 重压批判链、结构性死锁退出,两轮封顶。
- HITL 节点:在方向回退与拆台判定两个关键节点提供人工判断选项,auto / hitl 两档可切换。
为什么要这么做:单个模型自己写、自己审,审不出自己的盲区。
在线体验 → https://liangyi-five.vercel.app 把你的想法输进去,看它走完全部 13 步(演示档,每人每天 3 次)。
它解决什么
一个人拿着一个想法去问 AI,AI 会顺着他说。再问一次,还是顺着说。三轮之后方案很漂亮,但里面没有一处被认真反对过——方案的边界是被 AI 的顺从画出来的,不是被人的判断画出来的。
两仪把这件事拆开:出方案的和批判的必须是不同坐标的模型,四轮批判来自四个新开的窗口,每一轮只处理一条,最后由人(或规则)判「这还是我想要的吗」。
快速开始
pip install -r requirements.txt
cp .env.example .env # 填四个 key:OpenRouter / DeepSeek / Moonshot / Zhipu
python3 -m engine.run --check # 预检:硬规则 + provider
python3 -m engine.run -s scenarios/what-to-wear.yaml # 跑一条完整的链
跑完看结果:
python3 -m engine.inspect runs/<运行目录> # 每步谁在跑、花了多少
python3 -m engine.inspect runs/<运行目录> --diff idea-v1.md idea-v5.md
两个档位:--mode auto 全自动一次不停;--mode hitl 在两个边界决策点停下来问人,每处给两份旗舰模型的建议。
网页同样支持两档。 选「人工判断」后,链条会在「方向漂移回退」(2C)和「拆台判定」(2D)两处停下: 给你看诊断或分级表、「你当初要 X,现在变成 Y」的摘要,三个选项与终端一致,可附一段指令; 选「接受」不多花一次模型调用,改指令则那一步重跑一次。顾问材料包可下载,自己去问 GPT / Claude。 运行中可以停止、继续、失败时只重试那一步,跑完可下载整份运行记录。
在线入口本地起:python3 web/server.py,然后打开 http://127.0.0.1:8765。
十三步 · 状态机
auto 档(全自动一次不停)
flowchart TB
classDef anchor fill:#F0EEE6,stroke:#B0AEA5,color:#141413
classDef divA fill:#E4ECF2,stroke:#8FA3B3,color:#141413
classDef divB fill:#E8F0E6,stroke:#8FB08F,color:#141413
classDef hitl fill:#FBEFE9,stroke:#D97757,stroke-width:2px,color:#141413
classDef route fill:#FFF4D6,stroke:#C9A227,color:#141413
classDef exitA fill:#F8DADA,stroke:#B04141,color:#141413
classDef exitB fill:#DCEEF3,stroke:#3E7A8C,color:#141413
classDef exitC fill:#E9E8E4,stroke:#666,color:#141413
classDef done fill:#141413,stroke:#141413,color:#FAF9F5
SEED([原初想法]) --> P0[P0 忠实精炼<br/>anchor]
P0 --> P10[P1.0 生成对抗角色<br/>anchor · 假对立检测]
P10 -. 假对立 → 重生成 ≤1 次 .-> P10
P10 --> P1A[P1A 专家 A<br/>anchor]
P10 --> P1B[P1B 专家 B<br/>divergent_a · 与 A 互不可见]
P1A --> P14[P1.4 融合 → v1<br/>anchor 执笔]
P1B --> P14
P14 --> P2A[P2A 投资人批判<br/>anchor · 新窗口] --> AF[2A-fix → v2<br/>执笔]
AF --> P2B[P2B 零上下文单盲<br/>divergent_b · 只见正文] --> BF[2B-fix → v3<br/>执笔]
BF --> P2C[P2C 知情复审<br/>anchor · 对照 v1/v3 查漂移]
P2C --> CR[2C-rollback → v4<br/>执笔按诊断自判回退]
CR --> P2D[P2D 拆台<br/>divergent_a · 只攻前提] --> DF[2D-fix → v5<br/>执笔分级判定]
DF --> R1
R1{致命论据 ≥ 2?<br/>K 级 × 具体性高}
R1 -- 否 --> V5[产出 v5]
R1 -- 是 · 第 1 轮 --> EA[出口 A · 回 P1<br/>整链重跑]
R1 -- 是 · 第 2 轮 · 议题重叠 ≥ 60% --> EC([出口 C · 结构性死锁])
R1 -- 是 · 第 2 轮 · 重叠 < 60% --> FORCE[终止条件兜底<br/>强制产出 v5] --> V5
V5 --> R2{K 占比 ≥ 60%<br/>且第 1 轮?}
R2 -- 是 --> EB[出口 B · 回 P2<br/>v5 当新初稿]
R2 -- 否 --> END([结束])
EA -. 新一轮 · 窗口全新开 .-> P0
EB -. 新一轮 · 只重跑批判链 .-> P2A
class P0,P10,P1A,P14,P2A,AF,BF,P2C,CR,DF anchor
class P1B,P2D divA
class P2B divB
class R1,R2 route
class EA exitA
class EB exitB
class EC exitC
class END,V5 done
hitl 档(只有 ★ 处不同:两个停点各有三个选项,「前提错了」直接接出口 A)
flowchart TB
classDef anchor fill:#F0EEE6,stroke:#B0AEA5,color:#141413
classDef divA fill:#E4ECF2,stroke:#8FA3B3,color:#141413
classDef divB fill:#E8F0E6,stroke:#8FB08F,color:#141413
classDef hitl fill:#FBEFE9,stroke:#D97757,stroke-width:2px,color:#141413
classDef route fill:#FFF4D6,stroke:#C9A227,color:#141413
classDef exitA fill:#F8DADA,stroke:#B04141,color:#141413
classDef exitB fill:#DCEEF3,stroke:#3E7A8C,color:#141413
classDef exitC fill:#E9E8E4,stroke:#666,color:#141413
classDef done fill:#141413,stroke:#141413,color:#FAF9F5
SEED([原初想法]) --> P0[P0 忠实精炼<br/>anchor]
P0 --> P10[P1.0 生成对抗角色<br/>anchor · 假对立检测]
P10 -. 假对立 → 重生成 ≤1 次 .-> P10
P10 --> P1A[P1A 专家 A<br/>anchor]
P10 --> P1B[P1B 专家 B<br/>divergent_a · 与 A 互不可见]
P1A --> P14[P1.4 融合 → v1<br/>anchor 执笔]
P1B --> P14
P14 --> P2A[P2A 投资人批判<br/>anchor · 新窗口] --> AF[2A-fix → v2<br/>执笔]
AF --> P2B[P2B 零上下文单盲<br/>divergent_b · 只见正文] --> BF[2B-fix → v3<br/>执笔]
BF --> P2C[P2C 知情复审<br/>anchor · 对照 v1/v3 查漂移]
P2C --> CR[2C-rollback → v4<br/>执笔]
CR --> H1{{★ HITL ① 停下等你<br/>诊断 + 「当初要 X → 现在变成 Y」}}
H1 -- 接受 --> P2D
H1 -- 指定回退 / 指定保留<br/>带指令重跑 --> CR
P2D[P2D 拆台<br/>divergent_a · 只攻前提] --> DF[2D-fix → v5<br/>执笔分级判定]
DF --> H2{{★ HITL ② 停下等你<br/>分级表 + 判定}}
H2 -- 按判定走 --> R1
H2 -- 框架内改<br/>带指令重跑 --> DF
H2 -- ★ 前提错了 --> EA
R1{致命论据 ≥ 2?<br/>K 级 × 具体性高}
R1 -- 否 --> V5[产出 v5]
R1 -- 是 · 第 1 轮 --> EA[出口 A · 回 P1<br/>整链重跑]
R1 -- 是 · 第 2 轮 · 议题重叠 ≥ 60% --> EC([出口 C · 结构性死锁])
R1 -- 是 · 第 2 轮 · 重叠 < 60% --> FORCE[终止条件兜底<br/>强制产出 v5] --> V5
V5 --> R2{K 占比 ≥ 60%<br/>且第 1 轮?}
R2 -- 是 --> EB[出口 B · 回 P2<br/>v5 当新初稿]
R2 -- 否 --> END([结束])
EA -. 新一轮 · 窗口全新开 .-> P0
EB -. 新一轮 · 只重跑批判链 .-> P2A
class P0,P10,P1A,P14,P2A,AF,BF,P2C,CR,DF anchor
class P1B,P2D divA
class P2B divB
class R1,R2 route
class EA exitA
class EB exitB
class EC exitC
class END,V5 done
class H1,H2 hitl
图源:docs/visualizations/build_flow_mmd.py(两图共用主体,改一处两边同步)。
图例:灰 = anchor(执笔 / 专家 A / 投资人 / 知情复审)· 蓝 = divergent_a(专家 B / 拆台)· 绿 = divergent_b(单盲)· 橙边 = HITL 停点(auto 档自动通过,hitl 档停下等你)· 虚线 = 回边。
两个档位走的是同一张图:auto 在两个橙边节点按执笔者判定直接通过;hitl 在那里停下,三选一后接着走。
P0 忠实性和 2A/2B-fix 的范围扩大化两个检测器在所有档位后台运行,只记录不打断。
| 槽位 | 正式档(CLI 默认) | 演示档(网页) |
|---|---|---|
| anchor | claude-sonnet-5 · A1·B1 | gpt-5.6-luna · A2·B1 |
| divergent_a | deepseek-v4-pro · A3·B3 | deepseek-v4-flash · A3·B3 |
| divergent_b | glm-5.3 · A3·B2 | glm-4-flash · A3·B2 |
批判步和修改步交替,每一次批判来自一个新开的、坐标不同的窗口;每一次修改都由同一个执笔窗口完成——分歧在审查环节,不在修改环节,否则方案会变成多个 AI 的拼贴。
最后一步给每条拆台论据分级(打不打前提 × 具体性高不高),按规则走四种收场之一:
| 收场 | 条件 |
|---|---|
| 产出 v5 | 没有致命论据,方向站得住 |
| 回 P1 重做 | 两条以上致命论据,方向被推翻,整链重跑 |
| 回 P2 重压 | 大部分批判打前提但没被证死,成品当新初稿只重跑批判 |
| 结构性死锁 | 第二轮仍撞同一堵墙,停下出报告 |
最多两轮、单链 $3 封顶。
为什么是这几个模型
选型分两件事判:坐标判不判得了(硬规则)、能力够不够用。
底模坐标两个维度。维度 A · 冲突偏向:A1 规范优先(有一份独立于任务的成文规范压过任务——Claude、Gemini)/ A2 权限优先(规范是「谁说了算」的权限链——GPT)/ A3 任务优先(没有独立规范层,奖励全部来自任务完成度——DeepSeek、Kimi、GLM)。维度 B · 语料文化:B1 英文母语 / B2 中文母语 / B3 跨文化双核。
后训练目标未公开的厂商不进入任何组合(Qwen、豆包、MiniMax)——手上有可用的 key 也不用,这是自我约束的证明。
| 窗口 | 默认模型 | 坐标 | 承担 |
|---|---|---|---|
| 执笔 | claude-sonnet-5 | A1·B1 | 写初版并执行全部修改 |
| 专家 A | claude-sonnet-5 | A1·B1 | P0 精炼、P1 出方案 |
| 专家 B | deepseek-v4-pro | A3·B3 | 独立出方案,看不到 A |
| 投资人批判 | claude-sonnet-5 | A1·B1 | 新开窗口,没有作者包袱 |
| 单盲复审 | glm-5.3 | A3·B2 | 零上下文,只收方案正文 |
| 知情复审 | claude-sonnet-5 | A1·B1 | 对照 v1 与 v3 |
| 拆台 | deepseek-v4-pro | A3·B3 | 必须由任务优先坐标承担——有规范层的底模会在最关键那一刀上把攻击软化掉 |
默认:Claude × 4 + DeepSeek × 2 + GLM × 1。跨维度是硬规则,具体模型可替换。 在线演示用的是同结构的便宜档:GPT × 4 + DeepSeek Flash × 2 + GLM Flash × 1,一条链实测 8–10 分钟、$0.07–0.09。
六条核心机制
- 四轴 divergence —— 任何一对窗口都应在 AI 身份、角色、上下文、范围四个维度不同
- P2 链跨底模坐标至少一维 —— 同坐标 = 假覆盖。代码在开跑前检查,不过不开跑
- 单盲 = 零上下文 —— 给了背景它就开始猜意图。窗口主动拒绝任何注入历史的尝试
- 作者 ≠ 批判者 —— 执笔窗口负责所有修改,批判和复审各自新开
- Linear 链路防认知过载 —— 一次处理一条批判,四条齐上会逼人同时持有四个框架
- 知情复审查的是漂移,不是错漏 —— 细节错漏属于 2A;它问的是响应完前两轮后有没有从最初定位偏移
项目结构
engine/ 13 步链条的可运行实现:编排、窗口隔离、路由、检测器、trace
prompts/ 每一步的提示词,在线入口共用这同一批文件
test_guarantees.py 83 条结构保证测试
web/ 在线入口:一步一个无状态请求,运行目录整个来回传
scenarios/ 场景文件(seed + 可选预写角色)
docs/ 方法论本体、评测方法、实测案例
retrospective/ 一次回溯对照用的封存判据
experiments/ 2026-04 到 05 的六次手工实验档案
深一层的材料
| 想知道 | 看 |
|---|---|
| 方法论本体、判据、红线 | docs/liangyi-workflow-refined.md |
| 拿一个真实项目倒回去重跑的对照 | docs/case-voyageguard.md |
| 凭什么信上面那个案例的数字 | docs/evaluation.md |
| 引擎每一步谁在跑、两个档位差在哪 | engine/PIPELINE.md |
| 二十条方法论合规检验,含失败项 | engine/VALIDATION.md |
| 全自动变种为什么是实验工具不是产品形态 | docs/liangyi-auto-variant.md |
验到了什么、没验到什么
验到了:链条在 13 条真实运行上跑通(含一次完整回溯对照);83 条结构保证测试锁住机制而不是措辞;循环的出口 A(回 P1)、B(回 P2)用真实判定书离线驱动过。
没验到:出口 A、B 没有一次真实运行走完第二轮;结构性死锁出口 C 需要议题重叠度参数,当前编排器不传,真实运行不可达、也没有测试用例;判定与复判同属一家模型,跨厂商复核没做;回溯案例只有一个项目、跑一次。
还有一条要写在明处:拆台那一步的判定不稳定。同一个场景、同一份待判文档,三次运行分别判出「打中前提 5 条 / 致命 0」「5 / 2」「0 / 0」。整条链上唯一能推翻方向的判断点,自己就在骰子上。细节见 docs/evaluation.md。
作者
夏文博 · AI 产品经理 · 方法论建立于 2026-04-18 一整天的讨论。MIT License。
// faq
What is liangyi?
One idea, two opposing expert views, one synthesized decision. A Claude Code workflow for adversarial product development — inspired by the I Ching.. It is open-source on GitHub.
Is liangyi free to use?
liangyi is open-source under the MIT license, so it is free to use.
What category does liangyi belong to?
liangyi is listed under skills in the Claudeers registry of Claude-compatible tools.
// embed badge
[](https://claudeers.com/liangyi)
// retro hit counter
[](https://claudeers.com/liangyi)
// reviews
// guestbook
// related in Claude Skills
An agentic skills framework & software development methodology that works.
💫 Toolkit to help you get started with Spec-Driven Development
AI coding assistant skill (Claude Code, Codex, OpenCode, Cursor, Gemini CLI, and more). Turn any folder of code, SQL schemas, R scripts, shell scripts, docs,…