在真刀真枪上线前在沙盘里死测保底

用好咱们的内部沙盘(Playground)和免死金牌的测试模式(Test mode),放心大胆去验那些牵一发的 AI 工作流大改动。既不用怕惊了线上客人的驾,也不用冤大头似地白烧大厂的真金白银代币。

概览(Overview)

在你把脑门一新改出来的工作流往线上大闸推之前,你得有个底气这些改动没跑偏。ModelRiver 给您摆了几套练兵沙场:Playground (Production) 真枪实弹练兵场Playground (Test mode) 打空包弹演练场,以及纯给代码跑的 Test mode 测试通道:这哥几个各有各的看家本领。请求日志(Request Logs)给每一发试射都记录在案,供你拿着放大镜查验死角。


这几大试炼场底细全扒明(Testing environments explained)

真枪实弹练兵场:Playground (Production)

  • 它干啥的: 拿着真家伙直接去敲那些 AI 大厂的门调真接口跑你的流。
  • 啥时候用: 上线赴死前最后一哆嗦的定音盘,要真真切切看到 AI 咋回嘴的。
  • 得放多少血: 真烧钱,扣的可是你真金白银买的大厂模型额度(跑的真 API)。
  • 查日志拿啥滤: Playground (Production)
  • 在头上打啥烙印(请求前缀): pg:

空包弹演习场:Playground (Test mode)

  • 它干啥的: 拦下真发大厂的活,拿你预先捏好的结构化输出(structured outputs)里的样板假数据应付差事。
  • 啥时候用: 在调排工作流走向、配参数或者走连路管道时,纯验逻辑走水,不想白白倒大厂钱时。
  • 得放多少血: 敞开免费造:一丁点都不去麻烦各大厂的真接口。
  • 查日志拿啥滤: Playground (Test mode)
  • 在头上打啥烙印(请求前缀): pg_test_mode:

机器通道下的测试档:Test mode (API)

  • 它干啥的: 在收你们后台代码打来的 API 接口指令时,只要挂了 test mode 死牌,全给塞假数据挡回去,概不去叫真模型起夜。
  • 啥时候用: 给你们家 CI/CD 流水线做自动跑偏测试、跑大集成套件检验时。
  • 得放多少血: 敞开免费用:不扯哪怕一根大厂 API 的羊毛。
  • 查日志拿啥滤: Test mode
  • 在头上打啥烙印(请求前缀): test:

照章打表步步为营的走桩验盘(Step-by-step testing workflow)

1. 先进空跑测试档测个没病没灾(Validate in test mode first)

上手先掐进 Test mode,把工作流大骨架管路验个通顺:

  1. 登台入室,在项目控制台里点开你刚改的工作流。
  2. 戳一下那个 Test 烧杯小图标,让它按空包测试模式跑一圈。
  3. 转身进 请求大日志(Request Logs) 盘里 → 把漏斗掐死在 Playground (Test mode)
  4. 解剖看它吞进排出的底料包,对证那大骨架管线是不是走窜了。

给你看看空包测试档回吐死样板(Example test mode response):

JSON
1{
2 "choices": [
3 {
4 "message": {
5 "content": "{\"product_name\": \"Sample Product\", \"description\": \"This is a test response using structured output sample data.\"}",
6 "role": "assistant"
7 },
8 "finish_reason": "stop"
9 }
10 ],
11 "usage": {
12 "prompt_tokens": 0,
13 "completion_tokens": 0,
14 "total_tokens": 0
15 }
16}

敲黑板看清啦: 在这空跑测试档底下,这 Token 耗用记表全吃 0 鸭蛋。因为这压根就没迈出过大厂门槛打真包,吐出来的字全是直接抄你在结构化底栏里预先捏好的样板字(sample data)。

2. 挂真枪实弹去趟各大厂的地雷阵(Test with real providers)

当你看这骨架跑通空包弹、有了十拿九稳的底气,立刻拉开架势去过真厂的火:

  1. 在演兵盘(Playground)里直接戳那个 Run(跑主线)(这下连的就是 Production 真家伙池子去跑了)。
  2. 一样扭身进 请求大日志(Request Logs) → 把筛子指死到 Playground (Production)
  3. 把全盘时间轴拉底:眼毒地盯着它看到底挑翻了哪家模型、到底吞掏了多大的 Token 额度底耗、以及回答到底像不像糊弄鬼。
  4. 去解肚皮看回包体,验验它吐字的准星和灵气底线。

3. 去盘 Webhook 连抛和回调后院的路数通不通(Validate webhook and callback flow)

碰上那等异步放长线的事件派单工作流:

  1. 在练兵盘 Playground 放它跑个来回。
  2. 死盯那时间走轴,看 Webhook 有没有真抛单成功且拿到下放交付送达的回条。
  3. 扒下面皮对对那 Webhook 里塞的瓤(Payload),看看对不对得齐你们家接单后台定下的规矩口径。
  4. 是那种挂事件钩子的活计,还要去拿证据查实究竟那回路回声包有没有顺利收到盘库。
Playground Test Timeline
OpenAI gpt-4o-mini success 650ms
Webhook success 32ms
Backend simulated

小窗贴条: 记死记好,在 playground 这个练兵地界里,那个由你家后院该往回吐的回叫声包(Backend callbacks)纯粹是 模拟演戏(simulated) 出来的:ModelRiver 在这不真傻站着死等你们后台回话。这就图让你能把 AI 抽嘴出活和往下扔 Webhook 当作上下两段单拆出来互不干涉地单独验明正身。

4. 跟真刀真枪线上的实景抵肩硬碰硬(Compare with production behavior)

待到你这改动光荣挂帅上了真战场口:

  1. 把漏表定死在 Live mode 去瞧真大客人们跑趟起落的真活水。
  2. 拿着前脚刚从沙盘(playground)跑出来的吐字灵性、耗流死长、和代币食量跟这实跑大活做个一比一的找茬游戏。
  3. 猫腰隐身在日志堆里盯防一切之前全没测着、或是跑了偏位的妖路子死局。
  4. 如果半道出了岔子漏了水,就把那挂掉的实景单和你在沙盘里大顺的死包一起揪出来,挨个对齐缝去死查是啥带偏歪的。

CI/CD 自动流水线的进阶装配经(CI/CD integration example)

把你这免烧香的空跑 API 测线门面接到死锁严严实实的自动化打版口:

Bash
# 打一出纯测试档的空跑单
curl -X POST https://api.modelriver.com/v1/chat/completions \
-H "Authorization: Bearer $MODELRIVER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "your-workflow-id",
"messages": [{"role": "user", "content": "Test message"}],
"test_mode": true
}'
 
# 接包后看下它的回吐长盘口身板
# (它吐出来的绝全是你们塞的样板假数据,一滴没薅大厂)

事完了回 请求大日志(Request Logs) 总营验明正身:

  1. 拿夹子夹死 Test mode 滤签。
  2. 验底看看刚打的跑单有没有落案在此。
  3. 解囊看那破肚的回包瓤身骨正不正,合不合你们在门外的框想。

让在沙盘里不走冤枉路的铁训心机(Tips for effective testing)

  • 得红白喜事全过堂(Always test both happy path and edge cases): 别尽测皆大欢喜的顺溜话。死长的大咒、带诡异偏锋的词、连屁都不放半个的空包,统统得拉去跑。
  • 锁死规矩看那大样板出字(Verify structured outputs): 如果你给模型套上了定式框要规矩字,那就在沙盘往死里榨验看它有没有出格乱踩线。
  • 专门测大厂翻脸的倒霉死命路(Test failover behavior): 有门道可以故意给主模型挖个坑造死它的门道,好亲眼皮皮这老备胎大员是不是真顺溜倒位顶差了。
  • 莫骗骗自己跑自娱白卷(Keep test data realistic): 少拿 "test", "hello" 这等儿戏当包扔,往死里扒线上的真长带血口供来做饵,这验底才能打入真道。
  • 盘算好大代币饭盆(Review token usage): 拿测试卷跑的和上了真跑马大场后比一比代币进肚总表,别让上线这肚皮敞开没死限的吃了惊魂大暴差。

收兵整装往下一站探