# 文本对话与原生协议

<a id="text-completions"></a>

<a id="文本对话"></a>

## 文本对话

`POST /v1/chat/completions`

文本模型统一支持 Chat Completions，可直接用于 WorkBuddy 等兼容客户端。支持多轮对话、图片输入、函数工具调用与 SSE；具体能力以所选模型为准。非流式响应包含 `choices[].message`。

Responses 使用 `POST /v1/responses`，请求包含 `model` 与 `input`；Messages 使用 `POST /v1/messages`，请求包含 `model`、`messages` 与 `max_tokens`，可携带 `anthropic-version`。两者传 `stream: true` 请求 SSE。Gemini 使用 `POST /v1beta/models/{model}:generateContent` 与 `contents`，流式路径为 `:streamGenerateContent?alt=sse`。

文本 Responses 返回本站响应 ID。查询、取消、删除和 `input_items` 使用该 ID；续接时填入 `previous_response_id`，继续同一响应上下文。Chat Completions 使用 messages 传递历史对话与工具结果，不使用 previous\_response\_id；其他接口的开放范围以模型目录为准。

 参数 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
 `model` | `string` | 是 | 文本模型 ID，可从模型目录获取。 |
 `messages` | `array` | 是 | 对话消息数组；文本模型支持其协议允许的图文内容和工具消息，具体能力由模型决定。 |
 `temperature` | `number` | 否 | 采样温度，范围 0 到 2。 |
 `top_p` | `number` | 否 | 核采样参数，范围 0 到 1。 |
 `max_tokens` | `integer` | 否 | 最大输出 token 数，必须大于 0。 |
 `max_completion_tokens` | `integer` | 否 | 最大完成 token 数，必须大于 0。 |
 `response_format` | `object` | 否 | 响应格式要求；是否支持取决于所选文本模型。 |
 `stream` | `boolean` | 否 | 文本模型传 true 返回 SSE；原有按次模型以实际接口支持为准。 |
 `tools / tool_choice` | `array / string / object` | 否 | 文本模型透传工具定义和选择参数，是否支持由模型决定。 |

 **文本对话**  `POST /v1/chat/completions`

```bash
curl https://y.junlistudio.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6-sol",
    "messages": [
      {"role": "system", "content": "You are a concise assistant."},
      {"role": "user", "content": "用三句话介绍这项服务。"}
    ],
    "temperature": 0.7,
    "stream": false
  }'
```

```python
from openai import OpenAI

client = OpenAI(api_key="YOUR_API_KEY", base_url="https://y.junlistudio.com/v1")
result = client.chat.completions.create(
    model="gpt-6-sol",
    messages=[
        {"role": "system", "content": "You are a concise assistant."},
        {"role": "user", "content": "用三句话介绍这项服务。"},
    ],
    temperature=0.7,
)
print(result.choices[0].message.content)
```
