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",而是:

  1. 没法批量对比:在 ChatGPT/Cursor 里来回切换试不同 prompt,想起哪个试哪个,没法系统比较。
  2. 跨模型差异:同一句 prompt 在 GPT-4o、Claude 3.5、Gemini、Llama 上行为差异巨大,但人脑没法记得住所有模型、所有变体的结果。
  3. 没法分桶分析:想看"当 prompt 变量 X 取不同值时输出怎么变",人肉很难枚举。
  4. 评测指标主观:大多数评测靠人打分,结果不可重现、不可分享。

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_KEYANTHROPIC_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 变量对比

走典型流程:

  1. Prompt Template 节点:写带 {game} 占位符的 prompt。
  2. Text 节点(输入):列出 game 的若干取值(["chess", "go", "poker", "Dota 2"]),把这些值灌进 prompt 模板。
  3. LLM 节点 ×N:拖几个不同 provider 的 LLM 节点(GPT-4o-mini / Claude-haiku / Gemini-Flash),把上一个节点的输出接进来。
  4. Inspector / Visualization 节点:把 prompt、变量名、模型名、回复内容连出来,自动生成可交互的响应检视器和 Plotly 图(散点显示回复长度 vs 模型 / 直方显示不同 prompt 下的质量分布)。
  5. 点 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 脚本。

  • 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 链接。