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); // JSON 字符串整体参与签名
    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);
    // 解析 data.output_text,追加为 assistant 消息,再发起下一轮即可
}

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);
    // 从 res1 解析 data.id,例如 resp_xxx
    String previousResponseId = "resp_xxx"; // TODO: 替换为实际解析值

    // —— 第二轮 ——
    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