Poco 使用手册
API 文档

Chat Completions

使用 OpenAI 兼容协议发起文本、图片和文件对话,并处理非流式与 SSE 响应。

端点:POST /openapi/v1/chat/completions

该接口适合复用 OpenAI SDK 或已有的 Chat Completions 客户端。它兼容常用请求和响应结构,但实际执行能力、模型与权限由 Poco API Key 的配置决定。

请求头

Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxx
Content-Type: application/json

也可使用 x-api-key: sk-...。

请求参数

参数类型必填说明
modelstring是协议兼容字段,用于响应回显;不覆盖 API Key 的模型配置
messagesarray是至少一条消息;当前只执行最后一条 user 消息
streamboolean否默认 false;设为 true 时返回 SSE
metadata.session_idUUID string否续聊当前用户有权访问且绑定 Key 匹配的会话
idempotency_keystring否同一会话内标识同一次业务请求,最长 128 个字符
ninteger否当前只支持 1;其他值返回 HTTP 400
max_tokensinteger否协议兼容字段;当前不会覆盖 Agent 运行配置
temperature、top_pnumber否协议兼容字段;当前不会覆盖 Agent 运行配置
stopstring / string[]否协议兼容字段;当前不会覆盖 Agent 运行配置
userstring否协议兼容字段,不用于鉴权或切换用户身份

没有在表中列出的额外 OpenAI 字段可能会被请求模型接收,但不会自动获得对应语义。接入方不应依赖未明确说明的字段。

执行目标和能力来源见 API Key 管理。协议 model 用于兼容与回显,实际模型按 Key、专家或团队配置解析。非流式等待和 SSE 错误帧见 错误处理。

非流式文本对话

curl -X POST 'https://<poco-host>/openapi/v1/chat/completions' \
  -H 'Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "gpt-4o",
    "stream": false,
    "messages": [
      {"role": "user", "content": "你好"}
    ]
  }'
{
  "id": "chatcmpl-xxx",
  "object": "chat.completion",
  "created": 1739529600,
  "model": "gpt-4o",
  "choices": [
    {
      "index": 0,
      "message": { "role": "assistant", "content": "你好!" },
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 20,
    "completion_tokens": 10,
    "total_tokens": 30
  }
}

响应头 X-Session-Id 标识会话,X-Run-Id 标识本轮运行。建议业务系统同时保存这两个值。

继续已有会话

{
  "model": "gpt-4o",
  "stream": false,
  "messages": [{ "role": "user", "content": "继续上一轮" }],
  "metadata": {
    "session_id": "<existing-session-uuid>"
  }
}

不传 session_id 通常创建新会话;首次请求也支持创建幂等。续聊会检查用户归属和绑定 Key,相同用户换另一把 Key 也不能读取已绑定的会话。自有未绑定 Key 的普通会话可以在 API 续聊时转为 API 会话并绑定当前 Key;外嵌会话不可续聊。

图片输入

支持 image_url 和 input_image,URL 可以是 HTTP(S) 地址或 data:image/...;base64,...:

{
  "model": "gpt-4o",
  "stream": false,
  "messages": [
    {
      "role": "user",
      "content": [
        { "type": "text", "text": "请描述这张图" },
        {
          "type": "image_url",
          "image_url": { "url": "https://example.com/demo.png" }
        }
      ]
    }
  ]
}

HTTP(S) 图片地址在受理请求时由 Backend 下载,无法访问或返回的不是图片时返回 HTTP 400,规则与 Messages 图片和文件 相同。

文件输入

Poco 扩展支持 file 和 document 内容块,来源可使用 base64、Data URL 或 attachments/...:

{
  "model": "gpt-4o",
  "stream": false,
  "messages": [
    {
      "role": "user",
      "content": [
        { "type": "text", "text": "请总结这个 PDF" },
        {
          "type": "file",
          "file_name": "spec.pdf",
          "source": {
            "type": "base64",
            "media_type": "application/pdf",
            "data": "<BASE64_PDF>"
          }
        }
      ]
    }
  ]
}

当前不支持 OpenAI 原生 file_id 上传或引用流程。

流式响应

将 stream 设为 true 后,响应类型为 text/event-stream。每条消息以 data: {json} 发送,最后以 data: [DONE] 结束:

data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","created":1739529600,"model":"gpt-4o","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}

data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","created":1739529600,"model":"gpt-4o","choices":[{"index":0,"delta":{"content":"你"},"finish_reason":null}]}

data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","created":1739529600,"model":"gpt-4o","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

data: [DONE]

客户端应逐条拼接 choices[0].delta.content,并在收到 [DONE] 后结束。HTTP 连接中断不等于运行失败;需要确认最终状态时,可使用 X-Session-Id 查询会话。

该协议当前不提供结构化输出。需要 JSON Schema 约束结果时,请改用 Messages 结构化输出。

On this page