语言与视觉
先选择兼容模型
调用前先通过模型发现与加载确认模型可用。所选模型的 supported_endpoints 必须包含目标接口路径。这些 API 会直接转发所选模型的协议,可选参数与响应细节可能随本机运行时或远端提供方变化。以下展示典型的非流式响应节选,实际返回的生成文本、Token 数或 ID 可能不同。
使用 Responses 生成
POST /v1/responses
传入 model 与 input,input 可以是字符串或支持的结构化输入项。生成文字位于 output[] 内 message 的 content 中,不是统一的顶层 text 字段。
请求示例:
curl --fail-with-body "$EDGESPEAK_BASE_URL/responses" \
-H "Content-Type: application/json" \
-d '{"model":"Qwen/Qwen3.5-4B","input":"Say hello in one short sentence.","max_output_tokens":128}'输出示例:
{
"id": "resp_example",
"object": "response",
"status": "completed",
"model": "Qwen/Qwen3.5-4B",
"output": [
{
"type": "message",
"role": "assistant",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "Hello!"
}
]
}
]
}支持推理的模型可能在 message 前返回 reasoning 项,解析时应按类型读取,不要假定 output[0] 就是文字。
使用 Chat Completions 生成
POST /v1/chat/completions
传入 model 与包含角色、内容的 messages[],适合自行管理聊天历史的客户端。
请求示例:
curl --fail-with-body "$EDGESPEAK_BASE_URL/chat/completions" \
-H "Content-Type: application/json" \
-d '{"model":"Qwen/Qwen3.5-4B","messages":[{"role":"user","content":"Say hello in one short sentence."}],"max_tokens":128}'输出示例:
{
"id": "chatcmpl_example",
"object": "chat.completion",
"model": "Qwen/Qwen3.5-4B",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello!"
},
"finish_reason": "stop"
}
]
}生成文字位于 choices[].message.content。如果模型调用了工具,响应中还会返回 tool_calls。
指定翻译语向
POST /v1/responses 与 POST /v1/chat/completions 接受可选的顶层 translation 对象,用于指定翻译方向与风格:
| 字段 | 说明 |
|---|---|
target_language | 本轮译成的语言,BCP-47 写法,如 en、ja、zh-TW。 |
language_pair | 两个不同语言组成的数组,如 ["zh", "ja"]。原文属于其中一项时译成另一项,适合来回对译。 |
source_language | 原文语言提示。有 language_pair 时用来判断原文是哪一项;省略时按原文文字判断。 |
style | 翻译风格:natural、conversational 或 faithful。 |
目标语言的判定顺序:target_language 优先;其次按 language_pair 取原文之外的那一项,判断不出原文属于哪一项时译成第二项;两者都没有时,原文是中文(或 source_language 为中文)译成英语,否则译成中文。
- 本机翻译模型:按上述规则组织翻译请求。
- 通用对话模型与云端服务同样生效:语言对、目标语言与风格写进发给模型的口译提示词,Chat 追加在首条 system 消息末尾(没有就补一条),Responses 追加在
instructions末尾。translation字段本身不转发给云端服务。 - 省略
translation或传null时请求不做任何改动。 - 写法不对(字段未知、类型不对、语言对两项相同、风格不在上述取值中)返回 400
translation_options_invalid;语言不受支持返回 400translation_language_unsupported。
{
"model": "Qwen/Qwen3.5-4B",
"input": "我们下周一开会。",
"translation": {
"language_pair": ["zh", "ja"],
"style": "conversational"
}
}上例把中文原文译成日语;原文是日语时则译成中文。MCP 的 edgespeak_create_response 与 Realtime 的 session.translation 使用同一种写法。
使用 Messages 生成
POST /v1/messages
适合兼容 Anthropic 协议的客户端。传入 model、messages 与 max_tokens。网关支持使用 x-api-key 鉴权,并会转发请求中显式传入的 anthropic-version 与 anthropic-beta。调用前请先在模型目录中确认模型支持该接口。
请求示例:
curl --fail-with-body "$EDGESPEAK_BASE_URL/messages" \
-H "Content-Type: application/json" \
-d '{"model":"Qwen/Qwen3.5-4B","max_tokens":128,"messages":[{"role":"user","content":"Say hello in one short sentence."}]}' \
-H "anthropic-version: 2023-06-01"输出示例:
{
"id": "msg_example",
"type": "message",
"role": "assistant",
"model": "Qwen/Qwen3.5-4B",
"content": [
{
"type": "text",
"text": "Hello!"
}
],
"stop_reason": "end_turn",
"usage": {
"input_tokens": 16,
"output_tokens": 3
}
}从 content[] 中读取 text 块。此响应结构与 Responses 和 Chat Completions 均不相同。
文本分词
POST /v1/tokenize
此示例使用本机运行时的 content 输入。Token ID 取决于所选模型的 Tokenizer。远端提供方的分词格式可能不同,网关会转发其支持的格式。
请求示例:
curl --fail-with-body "$EDGESPEAK_BASE_URL/tokenize" \
-H "Content-Type: application/json" \
-d '{"model":"Qwen/Qwen3.5-4B","content":"Hello world."}'输出示例:
{
"tokens": [
9707,
1879,
13
]
}返回的数组内容仅为示意,请勿硬编码这些 ID。若仅返回数组,可以直接计算其长度获取 Token 数。纯文本分词不包含聊天模板可能额外插入的 Token。
读取语言模型流
为生成请求添加 stream: true 并使用 curl -N。按 SSE 事件边界解析,不要把单个网络 chunk 当成完整事件。下面用 Chat Completions 演示,其他接口使用各自对应的事件名。
请求示例:
curl --fail-with-body "$EDGESPEAK_BASE_URL/chat/completions" \
-H "Content-Type: application/json" \
-d '{"model":"Qwen/Qwen3.5-4B","messages":[{"role":"user","content":"Say hello."}],"stream":true,"max_tokens":128}' \
-N输出示例:
data: {"id":"chatcmpl_example","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"Hello!"},"finish_reason":null}]}
data: {"id":"chatcmpl_example","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]以上为事件流节选。不同协议的事件命名不同:Responses 通常使用 response.output_text.delta 与 response.completed,Messages 使用 content_block_delta 与 message_stop。不要把 Chat Completions 的 [DONE] 解析逻辑套用到所有协议。流开始后的错误也可能表现为连接断开,需要根据各协议自身的标志确认是否结束。
发送图片或视频
调用前请先选择声明支持视觉的模型。下面的 Python 3 脚本将本地 JPEG 转成完整 JSON 请求,避免不同操作系统的 base64 命令行差异。请在 photo.jpg 所在目录下运行,脚本会生成 vision-request.json。
请求示例:
python3 - <<'PYIMAGE'
import base64, json
from pathlib import Path
data = base64.b64encode(Path("photo.jpg").read_bytes()).decode("ascii")
body = {"model": "Qwen/Qwen3.5-4B", "messages": [{"role": "user", "content": [
{"type": "text", "text": "Describe this image."},
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64," + data}}
]}], "max_tokens": 256}
Path("vision-request.json").write_text(json.dumps(body), encoding="utf-8")
PYIMAGE
curl --fail-with-body "$EDGESPEAK_BASE_URL/chat/completions" \
-H "Content-Type: application/json" -d @vision-request.json输出示例:
{
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "A mountain lake under a clear sky."
},
"finish_reason": "stop"
}
]
}输出内容为响应节选,具体描述取决于输入图片。Chat Completions 支持直接传入原生视频,格式为 {"type":"input_video","input_video":{"data":"视频字节的 base64"}}。具体要求参阅视频前置条件、采样与大小限制与上下文窗口配置。Realtime 接口不接受原生视频。
继续阅读:Realtime 实时会话 · API 索引