ianarawjo/ChainForge · 上手攻略
- 仓库:ianarawjo/ChainForge
- 链接:https://github.com/ianarawjo/ChainForge
- 分类:ai
- 作者:spark
- 更新:2026-07-17
这是什么
ChainForge 是一个给 LLM prompt 做对抗测试的开源可视化编程环境(visual programming environment),学术出身 —— 作者 Ian Arawjo 在 Harvard HCI 组做博后期间发表(CHI 2024 论文 "ChainForge: A Visual Toolkit for Prompt Engineering and LLM Hypothesis Testing"),目前在 Université de Montréal 任助理教授、HCI 方向,最近一次提交 2026-06-10,仓库 3.0k+ Stars,MIT 协议,TypeScript / Python 双栈。
它把 prompt engineering 重新定义成"多模型 × 多 prompt 变体 × 多评测指标"的笛卡尔积实验,而不是"打开 ChatGPT 试试这句话行不行"——你拖拽节点连成数据流,ChainForge 自动把所有组合全跑一遍,按指标可视化对比。内核是 ReactFlow(前端)+ Flask(后端),左右两边是 node 化拼装,中间是自动展开的实验。
跟一次性聊天产品的根本区别:ChainForge 假设 prompt 评估永远是"批量 × 多组 × 多模型 × 可重现"的活,所以 UI 围绕"对比"和"导出/分享"转。
解决什么问题
prompt engineer 的痛点通常不是"写不出 prompt",而是:
- 没法批量对比:在 ChatGPT/Cursor 里来回切换试不同 prompt,想起哪个试哪个,没法系统比较。
- 跨模型差异:同一句 prompt 在 GPT-4o、Claude 3.5、Gemini、Llama 上行为差异巨大,但人脑没法记得住所有模型、所有变体的结果。
- 没法分桶分析:想看"当 prompt 变量 X 取不同值时输出怎么变",人肉很难枚举。
- 评测指标主观:大多数评测靠人打分,结果不可重现、不可分享。
ChainForge 一条数据流直接解四个问题:
- 把 prompt template + 输入变量 + LLM 节点 + 评测节点 + 可视化节点在画布上拖出来;
- 引擎自动对所有组合跑一次(同 prompt × 不同 model、同 prompt × 输入参数 all combinations、同 prompt × 不同 system message…);
- 评测节点用 Python 脚本写,支持 LLM-as-judge、也可以自定义 heuristic;
- 实验可导出 cforge 文件、可 Share 链接,可在 UI 里以 Plotly 表格/散点/直方图形式对比。
快速安装
方式一:本地 pip 安装(最常用)
# Python ≥ 3.8
pip install chainforge
chainforge serve
默认监听 http://localhost:8000,用 Chrome / Firefox / Edge / Brave 打开(Safari 在某些 WebSocket / 渲染上有 edge case)。
方式二:Docker
git clone https://github.com/ianarawjo/ChainForge
cd ChainForge
docker build -t chainforge .
docker run -p 8000:8000 chainforge
打开 http://127.0.0.1:8000。
方式三:免安装 web 版
https://chainforge.ai/play/ 直接用浏览器玩,但 README 说"feature set is limited"——比如本地环境变量自动加载、自定义 Python 评测、Ollama 本地模型等高级功能只在本地版可用。
配 API key
UI 右上角 Settings 填 OpenAI/Anthropic/Google/AWS/Together/HF 等 key,或把 OPENAI_API_KEY、ANTHROPIC_API_KEY 等写到环境变量(强烈推荐)。
支持的模型 provider(README 列):
- OpenAI(含 Azure OpenAI endpoints)
- Anthropic
- Google Gemini / Vertex
- DeepSeek
- HuggingFace Inference & Endpoints
- Together.ai
- Ollama(本地模型,ChainForge 调 Ollama HTTP API)
- Aleph Alpha
- Amazon Bedrock(含 Anthropic Claude 3 on-demand)
- 自定义任何 provider(写 custom provider script,详见 docs)
⚠️ PyPI 包名是
chainforge,CLI 命令是chainforge serve。pip 装完两个都能直接用,不会再装chainforge-cli这种东西。
核心用法
1. 第一个 flow:跨模型 × 跨 prompt 变量对比
走典型流程:
- Prompt Template 节点:写带
{game}占位符的 prompt。 - Text 节点(输入):列出
game的若干取值(["chess", "go", "poker", "Dota 2"]),把这些值灌进 prompt 模板。 - LLM 节点 ×N:拖几个不同 provider 的 LLM 节点(GPT-4o-mini / Claude-haiku / Gemini-Flash),把上一个节点的输出接进来。
- Inspector / Visualization 节点:把 prompt、变量名、模型名、回复内容连出来,自动生成可交互的响应检视器和 Plotly 图(散点显示回复长度 vs 模型 / 直方显示不同 prompt 下的质量分布)。
- 点 Run → ChainForge 对每个 (model × input variable 取值) 调一次 API,把所有结果拉回画布。
2. 导入数据集做 ground-truth eval
用 Tabular Data 节点导入 CSV / JSON,把字段填到 prompt template 的变量里,Eval 节点对比回复与期望答案。典型的"答数学题""信息抽取""分类"评测都能这么搭。
3. 多 prompt 模板 × 多模型组合
画布上挂两个 Prompt Template 节点、三个 LLM 节点、一个 Eval 节点,所有连线起来 = ChainForge 自动展开 2 × 3 × N(N = 输入变量组合数)的查询矩阵。
4. Prompt 排列(Prompt permutations)
ChainForge 设计哲学:"对输入所有取值 × prompt template × model setting 三笛卡尔积发请求"。比起"问一句看一句",一次能烧几百个 query,验证 prompt 是否真的稳。
5. AI 辅助生成评估
UI 上有 "用 AI 帮我写 eval" 按钮:内置 genAI 能力帮你合成测试样本(生成"虚假输入 / ground truth"),或把"我想评估回复是否包含 X" 翻译成一段 Python eval 脚本。
6. 分享实验(cforge + Share link)
- cforge 文件:导出整个 flow 图 + 数据 + 配置,存盘、版本管理、团队复用;
- Share 按钮:web 版点 Share 生成唯一链接(https://chainforge.ai/play/?f=xxx),免登录可看;
- README 里有个 prompt injection 测试样本:拿一条 prompt 试图骗 LLM 吐 secret key——这种 ablation 用 ChainForge 几行就能跑出来。
典型适用场景
- 学术评测 / 论文图表:发 LLM 行为类论文需要补一组 "X 模型 vs Y 模型在 Z prompt 上的分布"图,ChainForge 是最快搭脚手架的方式。
- 内部 prompt 团队评估:选模型、挑 prompt 写法、挑 system message 时,用 ChainForge 配一组 CSV 真实业务 query 一晚上跑完,第二天看 Plotly 收敛哪个组合。
- 红队 / 对抗测试:写 red-team prompt + 评估"是否泄漏 / 是否拒绝 / 是否过度配合",cforge 文件存档。
- 教学:CHI/ACL 论文里被引用做"prompt engineering 训练工具",可视化降低学生入门门槛。
- 跨 provider 决策:CTO 选 LLM 供应商时,拿同一份业务 query 在 5 个 provider 上跑一遍,ChainForge 一次性出表。
坑与注意
- 浏览器兼容性:作者明确说 Safari 有问题,强制用 Chromium 内核浏览器(Chrome / Edge / Brave / Firefox)。
- Share link 限制:web 版最多 10 个活跃 flow,每个 < 5MB(压缩后),"10 个以后最老的链接会失效"。重要实验必须 Export 成 cforge,Share 仅作短期传阅。
- 跑大规模 query 时:笛卡尔积很容易一次发几千个请求,先用小样本和 1-2 个模型验证 pipeline,再开全量;OpenAI/Anthropic 会按 rate limit 限流,必要时减并发起几个 batch。
- Eval 节点 = Python 脚本:不是声明式 metric,是写 def eval_response(LLM_response) -> score,所以评测逻辑自己负责;好在可以 chain LLM 做 LLM-as-judge。
- Ollama 本地模型:要预先在同机起好 Ollama daemon(
ollama serve),再在 ChainForge Settings 里配 provider endpoint。 - 不是"自动工具":ChainForge 是实验台,不会自己发现"哪个 prompt 最优"——可视化对比还要人来读。
- 版本号:PyPI 包没在 README 给具体版本(PyPI 历史显示长期迭代),以
pip install chainforge --upgrade为准。
与同类对比
| 维度 | ChainForge | LangSmith (Hub) | Promptfoo | PromptLayer | OpenAI Evals |
|---|---|---|---|---|---|
| 形态 | 可视化画布 | 云端 + SDK | CLI + YAML | SaaS + SDK | CLI + YAML (官方老化) |
| 跨模型 | ✅ 内置 10+ provider | 仅自家 + 自定义 | ✅ 多 provider | ✅ | 主要 OpenAI |
| Prompt 排列自动展开 | ✅(设计哲学) | ❌ 自写 | ✅(matrix 配置) | ❌ 自写 | ✅ |
| 可视化 | Plotly 内置交互图 | 内置 | 仅 CLI 表格 | 内置 | 内置 |
| 离线/本地跑 | ✅ Flask 本地 | ❌ | ✅ | ❌ | ✅ |
| 导出可重现 | cforge 文件 | dataset ID | JSON/YAML | JSON | JSON |
| 学术背景 | CHI 2024 论文 | LangChain | OSC-aligned | — | OpenAI 官方已弃维护 |
| License | MIT | 闭源 | MIT | 闭源 | MIT |
| 维护活跃度 | 作者 1 人主导,半年活跃 | LangChain 团队高频 | 高频 | 中等 | 低 |
定位差别:ChainForge = "实验台 / 可视化",Promptfoo = "CI/CD 评测",LangSmith = "闭环 + 监控 + hub 三合一"。如果你要快速"看一张图决定用哪个 prompt",ChainForge 最短路;要把 eval 接入 CI gate,就用 Promptfoo;要全生命周期可观测就走 LangSmith / Langfuse。
一句话推荐
写 prompt 时最缺的不是聊天框,是"对照实验"——ChainForge 就是给 prompt engineer 用的 Jupyter Notebook,把多模型 × 多 prompt 笛卡尔积一键跑出来对比。
具体动作:pip install chainforge && chainforge serve → 浏览器打开 localhost:8000 → 拖 Prompt Template / LLM / Inspector 三节点先跑通一次"5 个 prompt 变量 × 3 个模型"的小实验,感受 Plotly 对比图;记住保存为 cforge 文件,重要实验别只靠 web Share 链接。