代码集成
代码集成
从服务端代码调用 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 jsonimport osimport urllib.errorimport urllib.requestapi_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 errorprint(data.get("choices", [{}])[0].get("message", {}).get("content", ""))
Go
此示例使用 Go 标准 net/http 包。
package mainimport ("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。可选的 OpenAIuser字段用于 end-user tracking,不是 prompt body。 - 示例包含可选的
route和route_mode字段。移除它们即可使用默认可用路由。 - 生产错误处理请解析
error.code,并遵循 Errors 指南。