Skip to content

模型调试中心 (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 ChatAnthropic MessagesResponses 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 的 systemtool_use、Responses API 的 input 序列等)。

预设名称适用协议测试目的与预置内容
💬 基础通用对话全协议通用验证基础单轮问答与模型连通性
🧠 深度思考链推理全协议通用针对 DeepSeek-R1、MiniMax-M3 等推理模型开启 thinking 模式,查看思考过程与思考 Tokens
🛠️ Tool Calling 函数调用全协议通用预置 get_current_weather 工具定义,验证模型对意图的识别与工具调用参数构造能力
🔄 Tool Calling 交互多轮闭环全协议通用预置工具调用后的结果回传消息,验证模型基于上下文整合最终回答的能力
🔀 多工具声明与智能路由全协议通用同时注入天气查询与计算器两个工具,测试模型在多候选函数下的分流准确度
📋 结构化输出 / JSON Mode全协议通用注入 JSON Mode 约束,验证模型输出合规结构化 JSON 的能力

快速上手

  1. 选择凭据与模型:在顶部选择可用的虚拟密钥,并在模型下拉列表中选中目标模型;
  2. 载入或编辑内容
    • 方式 A:在「用例预设」中选择对应场景,系统会自动填充请求内容;
    • 方式 B:直接在左侧编辑框修改 JSON 消息体,或直接粘贴现成的 cURL 命令;
  3. 发起请求:点击「发送请求」或敲击 Ctrl+Enter(macOS 为 Cmd+Enter);
  4. 查看结果与穿透审计
    • 在右侧终端观察流式输出、首字延迟 (TTFT) 与 Token 计数;
    • 请求完成后,点击「查看完整 Audit 详情」按钮展开审计抽屉,核对网关实际转发的上游厂商与底层请求明细。

生产代码示例

在演练场中调试通过的配置,可以直接迁移到应用程序中。网关同时兼容 OpenAI ChatAnthropic MessagesResponses 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 '{...}' 结构