Apifox 增强 AI 接口调试功能:展示 DeepSeek 思考过程、自动合并 SSE 响应

常见 AI 大模型的 API 都支持流式输出,以便让用户可以实时看到 AI 的回复,而无需长时间等待。AI 流式输出一般遵循 SSE(Server-Sent Events)格式。
Apifox 是国内最早支持调试 SSE 接口的工具。随着越来越多的开发者在项目中使用 AI 接口,Apifox 进一步增强了 SSE 调试功能,对 AI 接口做了专门的优化。
现在,只要你在 Apifox 中发起 HTTP 请求,符合 OpenAI、Gemini、Claude 等 AI 常见格式的流式响应就会自动合并为可读文本,实时以自然语言呈现响应。不仅如此,对于一些特定的 AI 推理模型,如 DeepSeek R1,Apifox 还能展示在生成答案前的思考过程。

下面我们就进一步介绍这一全新功能的使用方法,在开始之前,请确保你的 Apifox 已更新到最新版本(≥2.6.49)。
三步开启 AI 接口的流式调试
步骤 1:新建接口
将 Apifox 更新到最新版本后,将其打开并新建一个 HTTP 项目,在项目中新建接口。
你可以填写任一 AI 模型的接口地址,并配置相应的 API Key。比如 DeepSeek 的 API,你可以将下面的 cURL 导入到 Apifox,注意 stream
字段的值需要为 true
:
curl https://api.deepseek.com/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {{API_KEY}}" \
-d '{
"model": "deepseek-chat",
"messages": [
{"role": "system", "content": "你是一位诗人"},
{"role": "user", "content": "写一首关于春天的诗"},
{"role": "assistant", "content": "春风拂面柳丝长..."},
{"role": "user", "content": "请继续补充第二、三和四段"}
],
"stream": true
}'

步骤 2:发送请求
发送请求后,Apifox 会自动识别接口返回的 Content-Type
是否包含 text/event-stream
。如果包含,系统会自动将响应解析为 SSE 事件并进行流式输出。

步骤 3:查看实时响应
在「时间线」视图中,你将看到实时滚动的流式响应内容。事件流会自动合并成可读文本,直观地呈现在响应面板中。

自动合并流式响应
Apifox 内置了对主流 AI 模型的支持,可以自动识别并合并以下格式的流式响应:
- 兼容 OpenAI API 格式的响应(DeepSeek 等绝大多数 AI 模型的 API 都兼容该格式)
- 兼容 Gemini API 格式的响应
- 兼容 Claude API 格式的响应
只要你调用的 AI 模型返回格式与以上任意一种格式相匹配,Apifox 都会自动将消息片段合并为完整的回复内容。
对于某些 AI 推理模型,如 DeepSeek R1,Apifox 还支持在「时间线」中展示模型的思考过程,帮助你更直观地了解 AI 的推理过程。

自定义合并规则
如果自动合并功能未能正常工作,说明 SSE 返回的响应格式不在内置支持列表中,对此 Apifox 提供了两种自定义合并规则的方法,可以根据实际情况采取以下措施:
方式 1:配置 JSONPath 提取规则
当 SSE 返回的事件内容是 JSON 格式,但不符合 OpenAI、Gemini、Claude 等内置的识别规则时,你可以手动配置 JSONPath 来提取所需内容。例如下面的原始 SSE 响应:
data: {"choices":[{"index":0,"message":{"role":"assistant","content":"你"},"logprobs":null,"finish_reason":"stop"}]}
data: {"choices":[{"index":0,"message":{"role":"assistant","content":"好"},"logprobs":null,"finish_reason":"stop"}]}
对于这个 JSON 结构,要提取 content
字段的内容,正确的 JSONPath 配置应是:
$.choices[0].message.content
这个 JSONPath 表达式的含义是:
$
表示 JSON 的根节点choices[0]
表示选择 choices 数组的第一个元素message.content
表示在该元素下 message 对象的 content 属性
这个配置将提取出内容:
你好
方式 2:自定义脚本
对于非 JSON 格式的 SSE 消息,可以在 Apifox 的「后置操作」中编写自定义脚本。你可以定义如何处理每个事件片段,无论是文本、XML 还是其它格式的数据,这种方法都能帮助你灵活地处理响应内容。
例如某个 AI 接口返回的 SSE 消息是纯文本格式,而不是 JSON 数据。每个事件片段可能只是一些简单的文本行,例如:
data: 你
data: 好
在 Apifox 中,你可以编写如下自定义脚本来处理这些文本数据:
// 获取返回的 SSE 事件流内容
const sseContent = pm.response.text();
// 假设每行文本代表一个事件片段,我们可以简单地按行分割并处理
const eventLines = sseContent.split('\n');
// 存储合并后的事件内容
let mergedContent = '';
// 处理每个事件片段,去除空行并合并
eventLines.forEach(line => {
if (line.trim()) {
// 提取 'data: ' 后面的内容并合并
let eventData = line.replace(/^data:\s*/, '');
mergedContent += eventData;
}
});
// 将结果显示在 body 的 "Visualize" 标签页
pm.visualizer.set(mergedContent);
// 最后,将合并后的数据输出
console.log("合并后的事件流:", mergedContent);
这个脚本将会把每个事件片段按行分割,将处理后的内容显示在 body 的 "Visualize" 标签页,并打印到控制台。你可以根据实际需要进一步修改处理逻辑,进行更复杂的文本解析。
总结
Apifox 的全新 SSE 调试功能,尤其是在流式响应的自动合并和 AI 推理过程的实时可视化方面,为 AI 模型调试提供了极大的便利。你不仅可以更加高效地调试 AI 接口,还能更深入地了解模型的推理过程。更新你的 Apifox,现在就去试试吧!