模型调试中心 (Model Playground)
模型调试中心是一个开箱即用的交互式在线调试台(访问路径:/workspace/model-playground)。无需编写任何测试脚本或搭建本地开发环境,即可直接测试多模型连通性、调试 Prompt 与工具调用(Tool Calling),并实时观察流式打字与深度思考链(Reasoning)输出效果。
核心特性
- 多协议统一兼容:支持 OpenAI Chat (
/v1/chat/completions)、Anthropic Messages (/v1/messages) 与 Responses API (/v1/responses) 三种协议无缝切换; - 双向 cURL 脚本联动:界面修改即时生成标准 cURL 命令;也可直接粘贴外部 cURL 脚本,系统自动逆向解析并回填参数;
- 流式指标与思考链感知:实时捕获首字到达延迟(TTFT)、总耗时、Token 细粒度消耗(含 Reasoning Tokens)以及逐帧 SSE 数据流;
- 直通底层审计日志:调试完成后可基于 Request ID 一键调出完整的 LLM 审计日志抽屉,核对网关实际路由与上游真实响应。
界面概览
模型调试中心采用等高自适应双栏设计,所有操作与调试结果均在一屏内完成。

1. 顶部控制中枢
- 协议切换:点击胶囊按钮快速切换
OpenAI Chat、Anthropic Messages或Responses API; - 虚拟密钥:下拉选择当前用户权限范围内的虚拟密钥(已脱敏),或选择
✍️ 自定义 Key临时输入; - 目标模型:按厂商(OpenAI、Anthropic、DeepSeek、MiniMax、Zhipu 等)分类展示当前密钥可调用的模型列表;
- 场景预设:内置 6 组常用用例,支持一键载入配置;
- 传输模式:自由切换
🌊 流式(SSE 长连接逐帧输出)与⚡ 非流式(整包返回); - 主操作按钮:提供置顶的「发送请求」(支持快捷键
Ctrl+↵/Cmd+↵)与「终止输出」按钮。
2. 左侧:cURL 请求面板
- 路径指示:顶部动态显示当前请求端点(如
POST /v1/chat/completions); - 脚本操作:提供「格式化」(自动整理排版与 JSON 缩进)与「复制内容」(一键复制完整命令);
- 双向编辑器:在输入框内修改 JSON 载荷将直接生效;直接粘贴外部 cURL 命令时,系统会自动逆向提取 URL、Token、模型及消息体并同步回填到界面。
3. 右侧:CLI 终端与诊断看板
- 状态与耗时:实时展示 HTTP 响应状态码、端到端总耗时与首字延迟(TTFT);
- Token 消耗:细粒度统计输入(Prompt)、思考(Reasoning)、输出(Completion)及总计 Tokens;
- 全链路穿透:点击高亮的「查看完整 Audit 详情」按钮,可直接拉出底层审计日志抽屉;
- 终端输出区:流式模式下逐行实时追加原始 SSE 帧(
data: {...}),末尾高亮data: [DONE];非流式模式下展示格式化 JSON。
4. 审计日志详情抽屉 (Audit Drawer)
请求执行完成后,点击右侧看板上的 「查看完整 Audit 详情」 按钮,屏幕右侧将滑出对应的日志抽屉(LogDetailDrawer)。

- 真实路由追溯:直观核对网关实际转发的目标供应商账号与真实模型名称;
- 上游网络耗时:对比网关记录的上游往返真实耗时,排查网络抖动;
- 全报文复盘:完整呈现包含 Headers、System/User Prompt、思考过程与原始返回的 JSON 载荷,便于开发复现与合规审计。
内置场景预设
在顶部「用例预设」下拉菜单中,可一键载入以下 6 组典型配置。所有预设均全面支持三大协议:载入预设后,切换顶部的协议胶囊(OpenAI Chat / Anthropic Messages / Responses API),系统适配器会自动将消息历史、思考链参数与工具定义转译为目标协议的标准请求结构(如 Anthropic 的 system 与 tool_use、Responses API 的 input 序列等)。
| 预设名称 | 适用协议 | 测试目的与预置内容 |
|---|---|---|
| 💬 基础通用对话 | 全协议通用 | 验证基础单轮问答与模型连通性 |
| 🧠 深度思考链推理 | 全协议通用 | 针对 DeepSeek-R1、MiniMax-M3 等推理模型开启 thinking 模式,查看思考过程与思考 Tokens |
| 🛠️ Tool Calling 函数调用 | 全协议通用 | 预置 get_current_weather 工具定义,验证模型对意图的识别与工具调用参数构造能力 |
| 🔄 Tool Calling 交互多轮闭环 | 全协议通用 | 预置工具调用后的结果回传消息,验证模型基于上下文整合最终回答的能力 |
| 🔀 多工具声明与智能路由 | 全协议通用 | 同时注入天气查询与计算器两个工具,测试模型在多候选函数下的分流准确度 |
| 📋 结构化输出 / JSON Mode | 全协议通用 | 注入 JSON Mode 约束,验证模型输出合规结构化 JSON 的能力 |
快速上手
- 选择凭据与模型:在顶部选择可用的虚拟密钥,并在模型下拉列表中选中目标模型;
- 载入或编辑内容:
- 方式 A:在「用例预设」中选择对应场景,系统会自动填充请求内容;
- 方式 B:直接在左侧编辑框修改 JSON 消息体,或直接粘贴现成的 cURL 命令;
- 发起请求:点击「发送请求」或敲击
Ctrl+Enter(macOS 为Cmd+Enter); - 查看结果与穿透审计:
- 在右侧终端观察流式输出、首字延迟 (TTFT) 与 Token 计数;
- 请求完成后,点击「查看完整 Audit 详情」按钮展开审计抽屉,核对网关实际转发的上游厂商与底层请求明细。
生产代码示例
在演练场中调试通过的配置,可以直接迁移到应用程序中。网关同时兼容 OpenAI Chat、Anthropic Messages 与 Responses API 三套协议契约:
bash
curl -s -X POST "http://OMNICORTEX_URL/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-xxxxxxxx" \
-d '{
"model": "deepseek/deepseek-r1",
"messages": [
{ "role": "system", "content": "你是一个助手。" },
{ "role": "user", "content": "你好,请用一句话介绍你自己。" }
],
"stream": true
}'bash
curl -s -X POST "http://OMNICORTEX_URL/anthropic/v1/messages" \
-H "Content-Type: application/json" \
-H "x-api-key: sk-xxxxxxxx" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-3-5-sonnet-20241022",
"system": "你是一个助手。",
"messages": [
{ "role": "user", "content": "你好,请用一句话介绍你自己。" }
],
"max_tokens": 1024,
"stream": true
}'bash
curl -s -X POST "http://OMNICORTEX_URL/v1/responses" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-xxxxxxxx" \
-d '{
"model": "gpt-4o",
"instructions": "你是一个助手。",
"input": [
{
"type": "message",
"role": "user",
"content": [{ "type": "input_text", "text": "你好,请用一句话介绍你自己。" }]
}
],
"stream": true
}'python
from openai import OpenAI
# 将 base_url 指向 OmniCortex,api_key 填入虚拟密钥
client = OpenAI(
base_url="http://OMNICORTEX_URL/v1",
api_key="sk-xxxxxxxx"
)
response = client.chat.completions.create(
model="deepseek/deepseek-r1",
messages=[
{"role": "system", "content": "你是一个助手。"},
{"role": "user", "content": "你好,请用一句话介绍你自己。"}
],
stream=True
)
for chunk in response:
delta = chunk.choices[0].delta
# 兼容思考模型的思维链字段
if hasattr(delta, "reasoning_content") and delta.reasoning_content:
print(delta.reasoning_content, end="", flush=True)
elif delta.content:
print(delta.content, end="", flush=True)typescript
import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'http://OMNICORTEX_URL/v1',
apiKey: 'sk-xxxxxxxx',
});
async function main() {
const stream = await client.chat.completions.create({
model: 'deepseek/deepseek-r1',
messages: [{ role: 'user', content: '你好,请用一句话介绍你自己。' }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content || '');
}
}
main();go
package main
import (
"context"
"fmt"
"github.com/sashabaranov/go-openai"
)
func main() {
config := openai.DefaultConfig("sk-xxxxxxxx")
config.BaseURL = "http://OMNICORTEX_URL/v1"
client := openai.NewClientWithConfig(config)
resp, err := client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: "deepseek/deepseek-r1",
Messages: []openai.ChatCompletionMessage{
{Role: openai.ChatMessageRoleUser, Content: "你好,请用一句话介绍你自己。"},
},
},
)
if err != nil {
panic(err)
}
fmt.Println(resp.Choices[0].Message.Content)
}常见问题排查
| 现象 / 状态码 | 可能原因 | 解决办法 |
|---|---|---|
401 Unauthorized | 虚拟密钥不存在、已停用或格式错误 | 检查「模型与治理」→「虚拟密钥」中凭证的状态 |
403 Forbidden | 密钥未被授权调用当前选中的模型 | 检查虚拟密钥绑定的访问策略集中的「模型可用范围」 |
429 Too Many Requests | 触发了请求频次 (RPM) 或 Token 速率 (TPM) 限制 | 稍后重试,或在访问策略集中调高配额 |
502 / 504 Gateway Error | 上游模型厂商响应超时或服务异常 | 检查「模型供应商」中对应厂商的运行状态与网络连通性 |
| 审计抽屉提示等待落盘 | 生产环境下日志为异步批量落盘 | 系统内置自动轮询机制;若超时未出,可稍后在「LLM运行日志」中按 Request ID 检索 |
| cURL 逆向解析失败 | 粘贴的命令缺少 URL、引号未闭合或 JSON 格式不合法 | 点击「格式化」检查语法,或确保包含合法的 -H 与 -d '{...}' 结构 |