AyanbekDos/kurultai
GitHub: AyanbekDos/kurultai
零依赖的 Python CLI 工具,编排多个竞争性 AI 模型家族以红队攻击、辩论、锦标赛等方式多角度压力测试用户的想法,并借助 Claude Code 进行裁决。
Stars: 0 | Forks: 0
# Kurultai
**一个由相互竞争的 AI 模型组成的委员会来攻击你的想法——然后 Claude Code 会阅读记录,并指出它们都没看到的问题。**
零依赖(纯 Python 标准库,一个文件夹,任何 `python3` 即可运行)。支持五大家族模型(Grok、GPT、GLM、Kimi、Claude),并行查询,每个模型都通过提供商后备阶梯进行访问。评审步骤无需额外 API 调用:它直接在你已经打开的 Claude Code 对话中运行。
## 事实胜于雄辩
在这个代码库公开之前,它自己的发布文章被提交给了委员会。五位攻击者,十五次绝杀,五次被评为致命:
```
+------------------------------------------------+
| KURULTAI VERDICT · redteam · 5 voices |
| kill-shots: 15 · max: 5/5 (rival) |
| severity: 5/5 x5 · 4/5 x6 · 3/5 x4 |
| top: Title + first sentence is pure self-c... |
| survival: draft DOA - rewritten as evidence |
+------------------------------------------------+
```
Grok:*“纯粹是自吹自擂的噱头。”* Kimi:*“你把一个落地页带到了 workshop 里。”* Sonnet 发现草稿的示例输出看起来*“像是精心挑选且干净得不自然。”* 根据它们的裁决,这篇文章从头进行了重写。
完整的记录位于 [`examples/launch-post-redteam.md`](examples/launch-post-redteam.md) - 模型输出未经编辑;评审部分、卡片的存活行和一段介绍说明是由主席(Claude Code)添加的,这是设计好的工作流。其运行统计表的提供商列显示了运行中期的阶梯重路由(带有 `http 503` 后备说明的原始控制台日志在[它旁边](examples/launch-post-redteam-console.txt))。攻击者总成本:$0.04。
额外实验:一个全新的独立 Claude Fable 5 会话获得了与委员会相同的攻击简报。双方都没有完胜——独立会话发现了委员会漏掉的 4 次攻击,委员会发现了独立会话漏掉的 3 次攻击。记分牌、注意事项和两份原始输出:[`examples/solo-fable5-vs-council.md`](examples/solo-fable5-vs-council.md)。
## 快速开始
一个 key 就足够了(仅靠 OpenRouter 就能覆盖所有默认模型;仅靠 Perplexity 只能覆盖部分面板——它是一个用于提供 ground 和后备的阶梯):
```
cd kurultai # after git clone / download
export OPENROUTER_API_KEY=sk-or-... # or put it in .env (see .env.example)
python3 council.py doctor # who's alive
python3 council.py "should I extract this into a library or keep it in the app?"
```
一个简单的参数意味着 **redteam**——默认模式:五种视角(逻辑学家、怀有敌意的竞争对手、运营商、用户拥护者、混沌代理人)用带有严重性评级的绝杀攻击你的想法,并且每个都必须提出能化解其最严重攻击的最小修复方案。排名前列的攻击会打印到终端;完整的记录会以 `.md` + `.json` 格式存入 `runs/` 目录中。
## 评审步骤
该脚本故意**不**调用评审模型。每份记录都以一个结构化的裁决模板结束:
在 [Claude Code](https://claude.com/claude-code) 中打开记录,它会在对话中填补裁决——无需额外 API 调用;综合分析在你已经付费的订阅上运行。一个内置的 skill (`.claude/skills/kurultai/`) 使其一步到位:输入问题,Claude 召集委员会、等待、评审。该模板是纯 markdown,因此任何功能强大的对话都可以作为主席。
## 这只是另一个 LLM 包装器吗?
部分是的——它调用了模型。编排才是核心论点:
- 由单个模型模拟的 Persona 共享该模型的先验假设;而相互竞争的模型**家族**才是真正的意见不合。(在示例记录中,GPT 和 Grok 在不同的依据上各自给出了 5/5 不同的致命一击。)
- 数据是由**代码**从解析后的输出中计算出来的,而不是由一个扮演所有角色的模型叙述出来的:严重性分布、辩论中的置信度中位数、锦标赛中的对决计数。
- 辩论轮次是匿名的,并且通过轮换以防止锚定;锦标赛对决交替展示顺序,从而使位置偏差相互抵消。
- 一个挂掉的提供商永远不会终止一次运行:基于模型的阶梯 `自定义 endpoint -> Perplexity -> OpenRouter`,在 429/5xx 错误时进行重试,并且 `resume` 会向静默的模型重新提问以生成新版本(记录是只追加的,原件永远不会被触碰)。
如果模型家族的多样性对你的问题来说不重要,那么单模型 Persona 模拟确实更便宜。这个工具是针对那些模型多样性确实重要的情况的。
## 其他四种模式
```
python3 council.py debate "ship a free tier?" decision 2 # anonymous argument, N rounds,
# confidence median tallied by code
python3 council.py fusion question.md quality # independent panel + web grounding (Sonar)
python3 council.py tournament options.md # 2-6 options fight pairwise duels, panel votes
python3 council.py delphi "how many users churn in month 1?" 2 # Delphi-method numeric estimates
```
服务命令:`doctor`(哪些提供商存活)、`resume runs/.json`(仅重新询问静默的模型)、`stats`(每个提供商挽救调用的频率)、`voices`(声音、预设、阶梯)。
## 成本透明
攻击者需要消耗真实的 API 费用。每份记录都包含一张针对每种声音的表格:使用的提供商、时间、输入/输出 token、预估价格(费率可在 `forge.json` 中编辑)。典型运行成本:redteam 几美分,5 种声音 2 轮的辩论几十美分。评审步骤不会在你的现有订阅基础上增加任何成本。
## 安装详情
Keys 从环境变量中读取,然后是当前目录下的 `.env` 文件,接着是 `council.py` 旁边的 `.env` 文件(参见 [`.env.example`](.env.example)):
- `OPENROUTER_API_KEY` - 推荐;是每个默认模型的安全网
- `PERPLEXITY_API_KEY` - 可选;是第二梯队 + `fusion` 的网络 ground
- `FORGE_CUSTOM_BASE_URL` + `FORGE_CUSTOM_API_KEY` - 可选的第一梯队:任何兼容 OpenAI 的 endpoint(你的 proxy、vLLM、LiteLLM、Ollama 的兼容 API)
位于 `council.py` 旁边的可选 `forge.json` 文件可以覆盖所有内容:语言(`en`/`ru` - 所有 prompt、persona 和评审模板均内置双语支持)、自定义 voices 和 presets、为你自己的模型配置的阶梯、价格、并发度。示例:
```
{
"lang": "en",
"voices": { "pirate": { "model": "grok-4.3", "temp": 0.9,
"role": {"en": "Pirate"}, "story": {"en": "You are a pirate. Argue accordingly."} } },
"presets": { "crew": { "voices": ["pirate", "critic", "humanist"], "rounds": 2 } },
"ladder": { "my-model": [["custom", "my-model-id"]] }
}
```
要求 Python 3.8+。Windows:可在 `py -3` / WSL 下运行;当输出不是 TTY 时,颜色会自动禁用。
## 结构剖析
```
council.py CLI entry (bare argument = redteam)
forgecore/
config.py keys, forge.json overlay, i18n strings, prices
providers.py raw HTTP, the provider ladder, retries, doctor
voices.py personas, presets, prompts, judge templates (en/ru)
engine.py parallel rounds, transcripts, resume, stats
modes.py redteam / debate / fusion / tournament / delphi
tests/ pure-logic unit tests, no network: python3 -m unittest discover -s tests
examples/ the launch-post red-team run: input, transcript, console log
runs/ your transcripts (append-only, gitignored)
```
## 许可证
MIT。详见 [LICENSE](LICENSE)。
标签:DLL 劫持, 人工智能, 大语言模型, 思维导图/头脑风暴, 文本分析, 文档结构分析, 用户模式Hook绕过, 自动化辩论/评估, 逆向工具