代码集成

以 Markdown 格式查看

从服务端代码调用 OpenModels 聊天补全端点。请将 API 密钥保存在环境变量中,并通过兼容 OpenAI 的 messages 数组发送提示词。

端点:

POST https://api.getopenmodels.com/v1/chat/completions

环境变量:

OM_API_KEY=ale-...

不要在源代码或客户端浏览器包中硬编码 API 密钥。

请求结构

{
"model": "kimi-k2.7-code",
"route": { "provider": "<provider-for-this-model>" },
"route_mode": "balanced",
"messages": [
{
"role": "user",
"content": "Hello!"
}
]
}

Node.js

此示例使用 Node.js 18 及更高版本内置的 fetch API。

const apiKey = process.env.OM_API_KEY;
if (!apiKey) {
throw new Error("Missing OM_API_KEY");
}
async function main() {
const response = await fetch("https://api.getopenmodels.com/v1/chat/completions", {
method: "POST",
headers: {
"Authorization": `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "kimi-k2.7-code",
route: { provider: "<provider-for-this-model>" },
route_mode: "balanced",
messages: [
{
role: "user",
content: "Hello!",
},
],
}),
});
const data = await response.json();
if (!response.ok) {
throw new Error(data?.error?.message || data?.error || `OpenModels error ${response.status}`);
}
console.log(data.choices?.[0]?.message?.content ?? "");
}
main().catch((error) => {
console.error(error);
process.exit(1);
});

Python

此示例仅使用 Python 标准库模块。

import json
import os
import urllib.error
import urllib.request
api_key = os.environ["OM_API_KEY"]
payload = {
"model": "kimi-k2.7-code",
"route": {"provider": "<provider-for-this-model>"},
"route_mode": "balanced",
"messages": [
{
"role": "user",
"content": "Hello!",
}
],
}
request = urllib.request.Request(
"https://api.getopenmodels.com/v1/chat/completions",
data=json.dumps(payload).encode("utf-8"),
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
},
method="POST",
)
try:
with urllib.request.urlopen(request, timeout=60) as response:
data = json.loads(response.read().decode("utf-8"))
except urllib.error.HTTPError as error:
detail = error.read().decode("utf-8")
raise RuntimeError(f"OpenModels error {error.code}: {detail}") from error
print(data.get("choices", [{}])[0].get("message", {}).get("content", ""))

Go

此示例使用 Go 标准 net/http 包。

package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
"os"
)
func main() {
apiKey := os.Getenv("OM_API_KEY")
if apiKey == "" {
panic("Missing OM_API_KEY")
}
payload := map[string]any{
"model": "kimi-k2.7-code",
"route": map[string]string{"provider": "<provider-for-this-model>"},
"route_mode": "balanced",
"messages": []map[string]string{
{
"role": "user",
"content": "Hello!",
},
},
}
body, err := json.Marshal(payload)
if err != nil {
panic(err)
}
req, err := http.NewRequest(
http.MethodPost,
"https://api.getopenmodels.com/v1/chat/completions",
bytes.NewReader(body),
)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+apiKey)
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
responseBody, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
panic(fmt.Sprintf("OpenModels error %d: %s", resp.StatusCode, string(responseBody)))
}
var data struct {
Choices []struct {
Message struct {
Content string `json:"content"`
} `json:"message"`
} `json:"choices"`
}
if err := json.Unmarshal(responseBody, &data); err != nil {
panic(err)
}
if len(data.Choices) > 0 {
fmt.Println(data.Choices[0].Message.Content)
}
}

说明

  • OM_API_KEY 保留在服务端。不要在前端代码中暴露它。
  • 使用 messages 传递 chat prompts。可选的 OpenAI user 字段用于 end-user tracking,不是 prompt body。
  • 示例包含可选的 routeroute_mode 字段。移除它们即可使用默认可用路由。
  • 生产错误处理请解析 error.code,并遵循 Errors 指南。