Skip to Content

Chat Completions

POST https://api.fenno.ai/v1/chat/completions Authorization: Bearer <FENNO_API_KEY> Content-Type: application/json

请求字段

字段类型含义
modelstring,必填实际可用的 Chat Completions 模型 ID
messagesarray,必填对话历史,角色与内容类型需模型支持
streamboolean返回 SSE 分片,而不是一次性响应
temperature、top_pnumber,可选模型支持时的采样控制
max_completion_tokens 或 max_tokensinteger,可选依模型而定的输出限制,不保证两者都接受
tools、tool_choicearray / string 或 object函数定义与工具选择策略
response_formatobject,可选JSON 模式或受支持的 JSON Schema 配置
reasoning_effortstring,可选模型相关的推理控制,不是 Responses 的 reasoning 对象

Python 示例

安装 openai,设置 FENNO_API_KEY 与 FENNO_MODEL:

import os from openai import OpenAI client = OpenAI( base_url="https://api.fenno.ai/v1", api_key=os.environ["FENNO_API_KEY"], timeout=60.0, max_retries=0, ) response = client.chat.completions.create( model=os.environ["FENNO_MODEL"], messages=[ {"role": "system", "content": "Answer concisely."}, {"role": "user", "content": "What is an API gateway?"}, ], ) print(response.choices[0].message.content)

每次请求需要携带相关历史,chat completion ID 不是服务端会话句柄。

响应字段

字段含义
id、model、object响应标识与模型信息
choices[].messageassistant 文本和/或 tool_calls
choices[].finish_reason常见为 stop、length、tool_calls 或安全相关结束原因
usage服务返回时的输入与输出 token 信息

不要假设每条 assistant 消息都有纯文本;工具调用时 content 可能为空。达到输出上限也不代表结构化答案完整。

流式响应

SDK 使用 stream=True,JSON 使用 "stream": true。读取 choices[].delta,不是 choices[].message。部分分片只有角色或工具参数,也可能出现空 choices。SSE 以 [DONE] 结束,同时仍要检查结束原因。

stream_options.include_usage 是依模型而定的可选项,不应因为缺少 usage 分片就拒绝展示回答,也不能把缺失当成零费用。

继续阅读函数调用、结构化输出、流式响应和错误格式。