OpenAI 秘钥注册与国内代替品
月之暗面的注册与使用
- 在国内使用 OpenAI 的接口,必须有境外的服务器或者通过中转服务器进行中转,而且响应的速度较慢,如果没法通过特殊手段实时访问 OpenAI 接口,可以考虑其代替品 —— MoonShot (月之暗面),也是目前国内唯一一个可以不修改代码,只修改 秘钥 + API 接口,就可以直接使用 OpenAI SDK 的大语言模型;
- MoonShot 大语言模型的参数和 OpenAI 几乎保持一致,可以完美适配课程;
OpenAI 请求参数详解
- 请求参数:
参数名 类型 必填 默认值 详细说明 modelstring 是 — 模型名称,如 gpt-3.5-turbo/gpt-4o/gpt-4o-minimessagesarray 是 — 对话消息数组,包含 role和contenttemperaturenumber 否 1 随机性,0~2;值越低越精准,越高越创意 max_tokensinteger 否 — 生成回复的最大 Token 数量 top_pnumber 否 1 核采样,0~1;控制词汇多样性,与温度二选一 ninteger 否 1 返回多少条独立回复 streamboolean 否 false 是否流式输出(打字机效果) stopstring/array 否 — 停止符,遇到指定内容自动停止生成 frequency_penaltynumber 否 0 -2~2,降低重复内容概率 presence_penaltynumber 否 0 -2~2,鼓励生成新主题/新概念 response_formatobject 否 — 指定返回格式,如 {"type":"json_object"}seedinteger 否 — 随机种子,固定后可实现输出结果可复现 toolsarray 否 — 函数调用 (Function Calling) 配置 tool_choicestring/object 否 — 控制函数调用策略 userstring 否 — 用户ID,用于OpenAI审计与安全监控 - 请求参数示例:
const res = await fetch("https://api.openai.com/v1/chat/completions", { method: "POST", headers: { "Authorization": "Bearer YOUR_KEY", "Content-Type": "application/json" }, body: JSON.stringify({ model: "gpt-4o", messages: [ { role: "system", content: "专业前端工程师,TS代码" }, { role: "user", content: "手写Promise.all" } ], temperature: 0.2, max_tokens: 1024, top_p: 1, frequency_penalty: 0.3, presence_penalty: 0.1, stream: false, n: 1, stop: null, seed: 42, response_format: { type: "text" } }) });
OpenAI 响应参数详解
- 核心字段详解:
字段路径 类型 说明 示例/取值 idstring 请求唯一标识,用于排查问题 chatcmpl-8xYzABC123xyzobjectstring 响应类型,固定值 chat.completioncreatedinteger 响应创建时间戳 (秒) 1704096000modelstring 本次调用的模型名称 gpt-4o-mini、gpt-3.5-turbochoicesarray 回复选项列表,长度由 n参数控制数组,通常 1 个元素 choices[].indexinteger 选项在数组中的索引 0(默认)choices[].messageobject 回复消息主体 - choices[].message.rolestring 角色,固定值 assistantchoices[].message.contentstring 回复内容 (核心文本) 你好!我是AI助手...choices[].message.function_callobject 函数调用 (需开启工具调用) 非工具调用时为 nullchoices[].finish_reasonstring 生成结束原因 见下方说明 choices[].logprobsobject Token 概率 (需开启 logprobs) 未开启时为 nullusageobject Token 统计 (计费依据) - usage.prompt_tokensinteger 输入 (Prompt) Token 数 12usage.completion_tokensinteger 输出 (Completion) Token 数 18usage.total_tokensinteger 总 Token 数 (prompt+completion) 30 - finish_reason 取值说明:
取值 含义 处理建议 stop正常结束 (触发停止序列或自然完成) ✅ 正常使用,解析内容 length达到 max_tokens限制,内容可能不完整⚠️ 增大 max_tokens或缩短提示content_filter内容违反安全策略被过滤 ❌ 调整输入,规避敏感内容 function_call触发工具调用,返回函数参数 🔄 执行函数后回传结果 null流式响应中表示生成未结束 🔄 流式场景下持续接收直到 stop - 流式响应差异 (stream: true):
- 流式返回 Server-Sent Events (SSE) 格式,每个事件为 JSON 片段,仅含 choices[].delta 而非 message:
- 前端解析:拼接 choices[].delta.content,直到 finish_reason: “stop” 或 [DONE];
data: {"id":"...","object":"chat.completion.chunk","created":...,"choices":[{"index":0,"delta":{"content":"你好"},"finish_reason":null}]} data: {"id":"...","object":"chat.completion.chunk","created":...,"choices":[{"index":0,"delta":{},"finish_reason":"stop"}]} data: [DONE] - 标准响应示例 (非流式):
{ "id": "chatcmpl-8xYzABC123xyz", "object": "chat.completion", "created": 1704096000, "model": "gpt-4o-mini", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "你好!我是AI助手,有什么可以帮你的?" }, "finish_reason": "stop", "logprobs": null } ], "usage": { "prompt_tokens": 12, "completion_tokens": 18, "total_tokens": 30 } }
Playground 介绍与最大化利用
初窥 LLMOps 助力大模型落地
上一篇