N·00API 调用
在代码里直接调用模型
不经过任何客户端,用 OpenAI 的两种协议在自己的代码里调用模型:推荐的 Responses API,以及兼容面最广的 Chat Completions(旧协议)。地址都是 https://api.xylemnode.com/v1,同一把密钥两种协议通用(个别分组只开放 Responses,分组名里有注明)。
Responses API
OpenAI 现在推荐的协议:input 放内容,instructions 写系统提示,用官方 SDK 时结果直接在 output_text 里。推理模型在它上面表现更好,文件搜索、代码执行、生图这些内置工具和推理摘要也只在它上面提供。
- 01
发出
第 一个 请求 POST /v1/responses,用 Bearer 鉴权。input 可以是一句话,也可以是消息数组;instructions 相当于系统提示。下面是 macOS / Linux 的写法,Windows 见页面底部的说明。
terminal curl https://api.xylemnode.com/v1/responses \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-你的密钥" \ -d '{ "model": "gpt-6.1-sol", "instructions": "你是一个简洁的助手。", "input": "用一句话介绍你自己。" }' - 02
用 SDK 读
取 结果 装好官方 SDK(pip install openai,需要 Python 3.10 以上),把 base_url 指向 XylemNode 即可。返回的 output 是一组条目,常常先有一条推理,再有一条消息,所以别写死 output[0];SDK 的 output_text 已经把文本拼好。也可以设好环境变量 OPENAI_BASE_URL(值为 https://api.xylemnode.com/v1)和 OPENAI_API_KEY,代码里直接写 OpenAI()。
python from openai import OpenAI client = OpenAI(base_url="https://api.xylemnode.com/v1", api_key="sk-你的密钥") response = client.responses.create( model="gpt-6.1-sol", instructions="你是一个简洁的助手。", input="用一句话介绍你自己。", ) print(response.output_text) - 03
流
式 输出 加上 stream=True,结果会按事件逐段返回:把每个 response.output_text.delta 事件里的 delta 拼起来,收到 response.completed 就结束了,用量也在这个事件里。
python from openai import OpenAI client = OpenAI(base_url="https://api.xylemnode.com/v1", api_key="sk-你的密钥") stream = client.responses.create( model="gpt-6.1-sol", input="用一句话介绍你自己。", stream=True, ) for event in stream: if event.type == "response.output_text.delta": print(event.delta, end="", flush=True) elif event.type == "response.completed": print("\n用量:", event.response.usage) - 04
多
轮 对话 最稳的做法是自己维护上下文:把上一轮的回复作为 assistant 消息接回 input,再追加新的问题。previous_response_id 依赖服务端保存的上一轮,在 Claude、Gemini 模型上不支持,换了上游也可能找不到,所以示例里没有用它。
python from openai import OpenAI client = OpenAI(base_url="https://api.xylemnode.com/v1", api_key="sk-你的密钥") history = [{"role": "user", "content": "推荐一本讲分布式系统的书。"}] first = client.responses.create(model="gpt-6.1-sol", input=history) print(first.output_text) # 上一轮的回复接回去,再追加新问题 history += [ {"role": "assistant", "content": first.output_text}, {"role": "user", "content": "它适合入门吗?"}, ] second = client.responses.create(model="gpt-6.1-sol", input=history) print(second.output_text)
常用参数
- 接口
POST https://api.xylemnode.com/v1/responses- input
一句话,或 user / assistant 消息数组- instructions
系统提示- max_output_tokens
输出上限,包含推理用掉的 token- reasoning
{ "effort": "high" } 这样设推理强度,可选值以模型为准- text.format
结构化输出(JSON Schema)- stream
true 时按事件流返回
Chat Completions(旧协议)
OpenAI 的上一代协议,也是「OpenAI 兼容」这个说法的由来:绝大多数第三方 SDK、框架和客户端默认都按它发请求。OpenAI 仍在长期支持它,已经在用的代码不必为了换协议而改。
- 01
发出
第 一个 请求 POST /v1/chat/completions,用 Bearer 鉴权。messages 是对话数组:developer 放系统提示(新模型推荐用它,system 也照样能用),user 放问题。下面是 macOS / Linux 的写法,Windows 见页面底部的说明。
terminal curl https://api.xylemnode.com/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-你的密钥" \ -d '{ "model": "gpt-6.1-sol", "messages": [ { "role": "developer", "content": "你是一个简洁的助手。" }, { "role": "user", "content": "用一句话介绍你自己。" } ] }' - 02
用 SDK 读
取 结果 同一个官方 SDK,base_url 指向 XylemNode。文本在 choices[0].message.content;finish_reason 是 length 时,说明回答被长度上限截断了。Node.js 的写法相同(需要 Node.js 22 以上):npm install openai,再 new OpenAI({ baseURL, apiKey })。
python from openai import OpenAI client = OpenAI(base_url="https://api.xylemnode.com/v1", api_key="sk-你的密钥") completion = client.chat.completions.create( model="gpt-6.1-sol", messages=[ {"role": "developer", "content": "你是一个简洁的助手。"}, {"role": "user", "content": "用一句话介绍你自己。"}, ], ) print(completion.choices[0].message.content) - 03
流
式 输出 加上 stream=True,结果以 data: 开头的数据块逐段返回:把每块的 choices[0].delta.content 拼起来,读到 data: [DONE] 就结束了。最后通常还有一块 choices 为空、只带用量的数据,所以取 choices[0] 之前先判断一下。
python from openai import OpenAI client = OpenAI(base_url="https://api.xylemnode.com/v1", api_key="sk-你的密钥") stream = client.chat.completions.create( model="gpt-6.1-sol", messages=[{"role": "user", "content": "用一句话介绍你自己。"}], stream=True, ) for chunk in stream: if chunk.choices and chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="", flush=True) - 04
多
轮 对话 Chat Completions 不在服务端保存上下文,每次请求都要带上完整的 messages:把模型上一轮的回复作为 assistant 消息加回去,再追加新的问题。
python from openai import OpenAI client = OpenAI(base_url="https://api.xylemnode.com/v1", api_key="sk-你的密钥") messages = [{"role": "user", "content": "推荐一本讲分布式系统的书。"}] first = client.chat.completions.create(model="gpt-6.1-sol", messages=messages) reply = first.choices[0].message.content print(reply) # 上一轮的回复接回去,再追加新问题 messages += [ {"role": "assistant", "content": reply}, {"role": "user", "content": "它适合入门吗?"}, ] second = client.chat.completions.create(model="gpt-6.1-sol", messages=messages) print(second.choices[0].message.content)
常用参数
- 接口
POST https://api.xylemnode.com/v1/chat/completions- messages
developer(或 system)· user · assistant · tool- max_completion_tokens
输出上限,包含推理用掉的 token;取代已弃用的 max_tokens- reasoning_effort
推理强度,可选值以模型为准- response_format
结构化输出(json_schema)- stream
true 时按 data: 数据块返回,以 [DONE] 结束