主题
Python 与 JavaScript
以下示例调用 COCO API 的 Chat Completions 兼容端点,仅用于服务端或可信本地环境。运行会产生真实用量;文档编写时没有用你的密钥执行这些生成请求。
准备环境变量
将 COCO_API_KEY 设置为本站密钥,COCO_MODEL 设置为该密钥分组可用的精确模型名称。不要把真实密钥硬编码进源码。
macOS / Linux 示例:
sh
export COCO_API_KEY='YOUR_COCO_API_KEY'
export COCO_MODEL='YOUR_MODEL_ID'占位符需要替换。共享机器应通过密钥管理服务或私密配置注入,避免将密钥长期保存在命令历史中。
Python
在项目自己的虚拟环境安装 OpenAI Python SDK:
sh
python3 -m venv .venv
source .venv/bin/activate
python -m pip install openai以下代码显式设置 base_url,不会把请求发到 OpenAI 官方默认域名。示例关闭 SDK 自动重试,便于首次测试时控制意外重复请求。
python
import os
from openai import OpenAI, APIStatusError, APIConnectionError
client = OpenAI(
api_key=os.environ["COCO_API_KEY"],
base_url="https://api.cocoapi.top/v1",
timeout=120.0,
max_retries=0,
)
try:
result = client.chat.completions.create(
model=os.environ["COCO_MODEL"],
messages=[{"role": "user", "content": "Reply with OK only."}],
max_tokens=32,
)
if result.choices:
print(result.choices[0].message.content or "No text content returned.")
else:
print("No choices returned. Check the response and usage log.")
except APIStatusError as error:
print("HTTP status:", error.status_code)
print("Request ID:", error.response.headers.get("x-oneapi-request-id", "unavailable"))
except APIConnectionError:
print("Connection failed. Check the network, TLS, proxy and timeout settings.")
finally:
client.close()max_tokens 适用于支持该字段的模型。若模型拒绝该参数,请按它的协议说明改用适配参数;不要仅因 HTTP 400 就启用无限重试。
SDK 的自定义 base_url 用法参考 OpenAI Python 官方文档。这不代表本站实现 SDK 暴露的所有官方接口。
JavaScript / Node.js
Node.js 20+ 可直接使用内置 fetch。将示例作为 ESM 文件运行,例如 example.mjs。不要把这段密钥调用直接放到公开网页前端。
javascript
const key = process.env.COCO_API_KEY;
const model = process.env.COCO_MODEL;
if (!key || !model) {
throw new Error('Set COCO_API_KEY and COCO_MODEL first.');
}
try {
const response = await fetch('https://api.cocoapi.top/v1/chat/completions', {
method: 'POST',
headers: {
Authorization: `Bearer ${key}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
model,
messages: [{ role: 'user', content: 'Reply with OK only.' }],
max_tokens: 32,
stream: false
}),
signal: AbortSignal.timeout(120000)
});
const requestId = response.headers.get('x-oneapi-request-id') || 'unavailable';
if (!response.ok) {
console.error(`HTTP ${response.status}; request ID: ${requestId}`);
process.exitCode = 1;
} else {
const result = await response.json();
console.log(result.choices?.[0]?.message?.content ?? 'No text content returned.');
}
} catch (error) {
console.error('Request failed:', error.name);
process.exitCode = 1;
}这里没有自动重试,也没有打印请求头或密钥。需要更完整的错误诊断时,在私密环境检查经过脱敏的响应体。
接入生产应用前
- 将密钥保存在后端,浏览器只访问你自己的受控业务接口。
- 给最终用户做鉴权和速率限制,不能让后端变成任何人都能调用的公开转发接口。
- 限制输出长度、并发和费用预算,配置监控与异常告警。
- 验证实际需要的协议、流式结束行为和账单,不要只验证 HTTP 200。
- 日志中保留必要的状态码、时间、模型和请求编号,避免记录完整提示词和敏感请求头。