OpenAI 对话
面向开发者的文本对话能力,同步返回模型回复 。
- 单轮:传
input 即可。 - 多轮(推荐):客户端维护历史,每次把完整对话放进
messages(可控、可裁剪,成本可预期)。 - 多轮(可选):用上次返回的
data.id 作为 previous_response_id,由后端接上下文(约 30 天;历史仍计入每轮 input 计费)。
一、接口
| 说明 |
地址 |
| 对话补全 |
POST https://kf.fw199.com/gateway/ai/openai/completions |
二、公共参数
| 参数 |
必需 |
说明 |
| appid |
是 |
应用 ID |
| timestamp |
是 |
时间戳 |
| sign |
是 |
签名 |
三、对话补全 completions
业务参数
| 参数 |
必需 |
说明 |
| model |
是 |
模型名称,请联系客服。 |
| input |
条件 |
单轮纯文本;与 messages 二选一 |
| messages |
条件 |
JSON 数组多轮:[{"role":"user","content":"..."}] |
| previous_response_id |
否 |
接上次返回的 id, 侧续写(建议配合 store) |
| instructions |
否 |
系统说明 |
| max_output_tokens |
否 |
最大输出;缺省 8192,同时用于余额预估 |
| client_request_id |
否 |
自定义传入 |
| store |
否 |
是否让后端保留 response;续写时默认 true |
| tier |
否 |
价格档,默认 standard |
四、Java 调用示例(单轮)
@Test
public void openaiCompletions() throws Exception {
String apiUrl = Config.AIOpenAICompletionsUrl;
Map<String, String> data = new HashMap<>();
data.put("appid", Config.AppId);
data.put("timestamp", String.valueOf(System.currentTimeMillis() / 1000));
data.put("model", "gpt-6-sol");
data.put("input", "用一句话介绍未来AI的发展趋势。");
data.put("instructions", "回答简洁,中文。");
data.put("store", "false");
data.put("sign", Utils.Sign(data, Config.AppSecret));
String result = doHttpRequest(apiUrl, data);
System.out.println("result:" + result);
}
3.2 多轮示例(推荐:客户端维护 messages)
每轮把已有 user/assistant 历史与本轮用户话一并放入 messages,无需依赖后端存档。
@Test
public void openaiCompletionsMultiTurn() throws Exception {
String apiUrl = Config.AIOpenAICompletionsUrl;
String messages = "["
+ "{\"role\":\"user\",\"content\":\"我叫小明,喜欢跑步。\"},"
+ "{\"role\":\"assistant\",\"content\":\"你好小明!跑步很棒。\"},"
+ "{\"role\":\"user\",\"content\":\"根据刚才的信息,用一句话介绍我。\"}"
+ "]";
Map<String, String> data = new HashMap<>();
data.put("appid", Config.AppId);
data.put("timestamp", String.valueOf(System.currentTimeMillis() / 1000));
data.put("model", "gpt-6-sol");
data.put("messages", messages);
data.put("instructions", "根据对话上下文回答,简洁中文。");
data.put("max_output_tokens", "256");
data.put("sign", Utils.Sign(data, Config.AppSecret));
String result = doHttpRequest(apiUrl, data);
System.out.println("result:" + result);
}
3.3 多轮示例(可选:previous_response_id)
第一轮用 input;第二轮只传新问题,并带上上一轮返回的 data.id。注意:历史上下文仍计入每轮 input 计费;蜂巢 侧默认约保留 30 天。
@Test
public void openaiCompletionsWithPreviousResponseId() throws Exception {
String apiUrl = Config.AIOpenAICompletionsUrl;
Map<String, String> turn1 = new HashMap<>();
turn1.put("appid", Config.AppId);
turn1.put("timestamp", String.valueOf(System.currentTimeMillis() / 1000));
turn1.put("model", "xxx");
turn1.put("input", "记住:我最喜欢的颜色是蓝色。");
turn1.put("store", "true");
turn1.put("max_output_tokens", "128");
turn1.put("sign", Utils.Sign(turn1, Config.AppSecret));
String res1 = doHttpRequest(apiUrl, turn1);
System.out.println("turn1:" + res1);
String previousResponseId = "resp_xxx";
Map<String, String> turn2 = new HashMap<>();
turn2.put("appid", Config.AppId);
turn2.put("timestamp", String.valueOf(System.currentTimeMillis() / 1000));
turn2.put("model", "xxx");
turn2.put("previous_response_id", previousResponseId);
turn2.put("input", "我最喜欢什么颜色?");
turn2.put("store", "true");
turn2.put("max_output_tokens", "128");
turn2.put("sign", Utils.Sign(turn2, Config.AppSecret));
String res2 = doHttpRequest(apiUrl, turn2);
System.out.println("turn2:" + res2);
}
四、成功响应示例
{
"code": 0,
"message": "ok",
"data": {
"id": "resp_095f3ea07f516537016acc9fa067608193bf1d1ca93ccf7f8e",
"model": "xxx",
"output_text": "未来AI将朝着更智能、更可靠、更易用的方向发展,并更深地融入日常生活和各行各业。",
"usage": {
"input_tokens": 25,
"cached_tokens": 0,
"cache_write_tokens": 0,
"output_tokens": 34,
"reasoning_tokens": 0,
"total_tokens": 59
},
"billing": {
"amount": "0.004095",
"sn": "1116060547775729664"
},
"request_id": "1116060547775729664"
},
"trace_id": "74a8d2db-1a87-4c5f-b802-9888abdc5055"
}
外层字段
| 字段 |
类型 |
说明 |
| code |
int |
0 成功;非 0 见下方错误码 |
| message |
string |
结果说明,成功一般为 ok |
| data |
object |
业务数据;失败时可能为空 |
| trace_id |
string |
链路追踪 ID,排障时提供给客服 |
data 字段
| 字段 |
类型 |
说明 |
| id |
string |
模型返回的 response id;下一轮可作 previous_response_id |
| model |
string |
实际使用的模型 / 部署名 |
| output_text |
string |
模型回复正文 |
| usage |
object |
本轮 token 用量 |
| billing |
object |
扣费信息 |
| request_id |
string |
蜂巢侧请求号;未传 client_request_id 时由服务端生成 |
| previous_response_id |
string |
若本轮请求带了该参数,原样回显(可选) |
data.usage
| 字段 |
类型 |
说明 |
| input_tokens |
int |
本轮 input 总 token(含续写拼上的历史) |
| cached_tokens |
int |
prompt cache 命中 token |
| cache_write_tokens |
int |
prompt cache 写入 token |
| output_tokens |
int |
输出 token(已含 reasoning) |
| reasoning_tokens |
int |
其中推理占用的 token(计入 output,单独展示) |
| total_tokens |
int |
本轮合计,一般为 input + output |
data.billing
| 字段 |
类型 |
说明 |
| amount |
string |
金额(元,CNY |
| sn |
string |
流水号 |
文档更新时间: 2026-10-12 17:21 作者:admin