调用 AI,一条 REST 就够。
Prompt、版本、模型都在这里集中管理:网页上改 prompt、看 diff、一键回滚,多版本多模型横向对比。
业务方那侧,只要 POST 一个稳定的 slug —— 换模型、换版本、调 prompt,调用方一个字都不用改。
模型、重试、Key…… 复杂都收在后台。
调用 AI 不该是一堆配置。模型选型、temperature、prompt 拼接、失败重试、密钥管理 —— 这些全被 Prompt Exchange 收在后面。调用方只需发一条 HTTP 请求:把输入递进去,把结果拿回来。
client = OpenAI.new(api_key: ENV["ARK_KEY"]) prompt = "你是评审助手…" + comment + "…只返回 JSON" resp = client.chat( model: "doubao-1.5-pro", temperature: 0.2, max_tokens: 512, response_format: { type: "json_object" } ) with_retry(3) { … } # 慢调用别卡住请求 data = JSON.parse(resp.dig("choices", 0, …)) # 自己解析 / 兜错
# 只发一条 REST,body 就是业务输入 curl -X POST …/api/tasks/review-score/invoke \ -d '{ "input": { "comment": "发货很快" } }' → 202 { "run_id": 8812 } # 结果走回调,或 GET /api/runs/8812
换模型、调 prompt、加 Schema、改 temperature —— 全在后台点几下,这条 REST 一个字都不用动。
Prompt 变了,但没人给它版本管理。
Prompt 散落在各个服务的数据库和配置里,改一个字往往要发一次版;出了问题不知道改了什么、更不知道怎么退回去。Prompt Exchange 把这三件事一次解决。
改完即生效
在网页里改 prompt、激活新版本,线上立刻切换 —— 不改一行代码,不重新部署。
每次改动 = 一个不可变版本
行级 diff 看清改了什么,paper_trail 记录是谁在何时改的,历史版本永远躺在那儿。
一键回滚
回滚就是"重新激活某个历史版本"。同一 prompt 永远只有一个 production,秒级切回。
从编写、对比到调用,一条闭环。
每一块都用产品里真实的界面元素说话 —— 真实的 diff、真实的对比矩阵、真实的调用响应。
Task · 稳定调用点
一个 slug 打包 prompt + 版本通道 + 模型 + JSON + 回调。业务方只说"给这条评论打分",不管背后是哪个版本、哪个模型。
# 异步 · 立即 202 返回 run_id curl -X POST …/api/tasks/review-score/invoke -d '{ "input": { "comment": "发货很快" } }' → 202 { "run_id": 8812, "state": "pending" }
多模型注册表
国内五家 + OpenAI + Claude + 火山即梦,一处注册。API Key / AK / SK 全部加密存库,对比与调用随手切换。
版本化 & 行级 diff
任选两个版本并排比对,正文行级高亮、params 键级增删改一目了然,回滚就是激活历史版本。
对比台 · 样本 × 版本 × 模型 矩阵
选一批样本、几个版本、几个模型,后台并发跑出笛卡尔积,同一批输入公平横比 —— 一眼看出哪个组合更好,连 token、耗时、成本都摆在格子里。
| 样本 \ 组合 | v3 · 豆包 | v4 · 豆包 | v4 · Kimi | v4 · Claude |
|---|---|---|---|---|
| 好评 · "发货很快" | 4 |
5 |
5 |
4 |
| 差评 · "包装破损" | 2 |
1 |
2 |
1 |
| 中评 · "一般般吧" | 3 |
3 |
4 |
3 |
Schema 强约束输出
给版本挂一份 JSON Schema,走 with_schema 让模型稳定吐结构化数据;Schema 随版本走,可回滚。优先级 schema > json。
{ score:int,
sentiment:enum }
{ score: 4,
sentiment: "pos" }
生成车道 · 图 / 视频
同一套版本、试运行、记录闭环,也能管图片和视频生成的 prompt。接火山即梦,走两步异步生成协议。
统计 Dashboard · 调用量 / token / 成本 / 成功率
每个 task 花了多少钱、跑了多少次、成功率多少,一目了然。数据走每日 rollup,记录被清理也不会失真。
一条状态机管住每一个版本。
同一 prompt 在任意时刻只有一个 production。数据库层用可空唯一标记强制这条不变量 —— 不可能同时上线两个版本。
草稿版本
随便改、随便试运行
当前生效
API 调用命中它
归档留档
diff / 回滚随时可取
只押 RubyLLM 一个核心依赖。
用 RubyLLM 核心当 LLM 客户端,不押那些单人 prompt gem。后台异步执行慢调用,网页拿到 202 就走。