一、一般步骤
获取API密钥
首先,你需要注册ChartGPT并获取API密钥。这个密钥将用于身份验证,以便访问API。
发送HTTP请求
使用您喜欢的HTTP客户端库(如axios、node-fetch等),发送HTTP POST请求到所选的API端点。确保您在请求头中包含正确的Authorization标头,将API密钥作为Bearer令牌进行传递,并将请求主体格式化为JSON格式。
处理响应
处理API返回的响应,根据您的应用场景使用生成的文本或其他输出。
二、获取API密钥
访问openai官网
官网地址:https://openai.com/
选择APIKeys菜单
创建并复制key
三、发送HTTP请求
文本生成端点示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| const axios = require('axios');
async function callTextGenerationAPI(prompt) { const apiKey = 'YOUR_API_KEY'; const endpoint = 'https://api.openai.com/v1/completions';
try { const response = await axios.post(endpoint, { prompt: prompt, max_tokens: 100, temperature: 0.7, }, { headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json', }, });
return response.data.choices[0].text.trim(); } catch (error) { console.error('Error calling ChatGPT API:', error.response.data); throw error; } }
async function main() { try { const prompt = "Translate the following English text to French: 'Hello, how are you?'"; const response = await callTextGenerationAPI(prompt); console.log('Response:', response); } catch (error) { console.error('An error occurred:', error); } }
main();
|
语言翻译端点示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| const axios = require('axios');
async function translateText(text, sourceLanguage, targetLanguage) { const apiKey = 'YOUR_API_KEY'; const endpoint = 'https://api.openai.com/v1/engines/davinci-codex/completions';
try { const response = await axios.post(endpoint, { prompt: `Translate from ${sourceLanguage}: "${text}" to ${targetLanguage}.`, max_tokens: 50, temperature: 0.7, }, { headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json', }, });
return response.data.choices[0].text.trim(); } catch (error) { console.error('Error calling ChatGPT API:', error.response.data); throw error; } }
async function main() { try { const text = "Hello, how are you?"; const sourceLanguage = "en"; const targetLanguage = "fr"; const translation = await translateText(text, sourceLanguage, targetLanguage); console.log('Translation:', translation); } catch (error) { console.error('An error occurred:', error); } }
main();
|
对话生成端点示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| const axios = require('axios');
async function generateDialogue(prompt) { const apiKey = 'YOUR_API_KEY'; const endpoint = 'https://api.openai.com/v1/engines/davinci/completions';
try { const response = await axios.post(endpoint, { prompt: prompt, max_tokens: 50, temperature: 0.7, }, { headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json', }, });
return response.data.choices[0].text.trim(); } catch (error) { console.error('Error calling ChatGPT API:', error.response.data); throw error; } }
async function main() { try { const prompt = "Customer: Can you help me with my issue?"; const dialogue = await generateDialogue(prompt); console.log('Dialogue:', dialogue); } catch (error) { console.error('An error occurred:', error); } }
main();
|
代码生成端点示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| const axios = require('axios');
async function generateCode(description) { const apiKey = 'YOUR_API_KEY'; const endpoint = 'https://api.openai.com/v1/engines/davinci-codex/completions';
try { const response = await axios.post(endpoint, { prompt: description, max_tokens: 200, temperature: 0.7, }, { headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json', }, });
return response.data.choices[0].text.trim(); } catch (error) { console.error('Error calling ChatGPT API:', error.response.data); throw error; } }
async function main() { try { const description = "Generate a Python function to calculate the Fibonacci sequence."; const code = await generateCode(description); console.log('Generated code:', code); } catch (error) { console.error('An error occurred:', error); } }
main();
|
参数说明
endpoint
是指 API 的具体 URL 地址,它表示您要访问的 API 的位置和功能。在 HTTP 请求中,endpoint 是请求的目标位置。
model
这个参数用于指定要使用的GPT模型。不同的模型具有不同的规模和能力。您可以根据自己的需求选择合适的模型。
主要的 GPT 模型标识符包括:
- GPT-4 and GPT-4 Turbo 一组改进了GPT-3.5的模型,能够理解并生成自然语言或代码
- GPT-3.5 Turbo 一组改进了GPT-3.5的模型,能够理解并生成自然语言或代码
- DALL·E 一个能够根据自然语言提示生成和编辑图像的模型
- TTS 一组能够将文本转换为自然听起来的语音音频的模型
- Whisper 一个能够将音频转换为文本的模型
- Embeddings 一组能够将文本转换为数值形式的模型
- Moderation 一个经过微调的模型,能够检测文本是否可能敏感或不安全
- GPT base 一组无指导的模型,能够理解并生成自然语言或代码
max_tokens
这个参数控制着模型生成文本的最大长度。它表示生成文本时使用的最大标记数量。在OpenAI的GPT模型中,文本被切分成标记(tokens),比如单词或子词。通过调整这个参数,您可以控制生成文本的长度。如果您希望生成的文本更长,可以增加这个值;如果您希望生成的文本更短,可以减少这个值。请注意,增加max_tokens可能会增加生成文本的耗时。
temperature
这个参数控制着模型生成文本的创造性程度。它是一个用于调整模型对下一个标记的选择随机性的指数。较低的temperature值会导致更加确定性的选择,生成的文本更加保守和可预测;而较高的temperature值会导致更多的随机性,生成的文本更加多样化和创新性。通常情况下,0.7是一个适中的temperature值,但您可以根据需求进行调整,以获得最佳的生成结果。
stop
用于指定生成文本的停止条件,例如指定一个或多个停止词或短语,当模型生成了其中任何一个停止词或短语时,停止生成并返回结果。
top_p
用于控制生成文本时模型预测的多样性,表示模型在预测下一个标记时考虑的概率质量。
timeout
用于指定请求的超时时间。
四、NPM包的封装
openai
github
https://github.com/openai/openai-node
安装
1 2 3
| npm install
yarn add openai
|
使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| import OpenAI from 'openai';
const client = new OpenAI({ apiKey: xxx, baseURL: xxx, });
async function handleError(error) { console.error(error); }
async function generateImage(prompt) { try { const result = await client.images.generate({ model: "dall-e-3", prompt, size: "1024x1024", quality: "standard", style: "vivid", n: 1, }); console.error(result.data[0].url); } catch (error) { handleError(error); } }
async function createChat(prompt) { try { const result = await client.chat.completions.create({ model: "gpt-4", messages: [ { role: "user", content: prompt }, ], }); console.error(result.choices[0].message); } catch (error) { handleError(error); } }
generateImage("一个韩国高中生"); createChat("介绍一下台湾吧");
|
流式处理响应
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import OpenAI from 'openai';
const openai = new OpenAI();
async function main() { const stream = await openai.chat.completions.create({ model: 'gpt-4', messages: [{ role: 'user', content: 'Say this is a test' }], stream: true, }); for await (const chunk of stream) { process.stdout.write(chunk.choices[0]?.delta?.content || ''); } }
main();
|
chatgpt
github
https://github.com/transitive-bullshit/chatgpt-api
五、突破访问限制
由于众所周知的原因,国内无法访问部分网络资源;以下为突破限制的方案
使用第三方代理
这种最简单,不需要自己维护,直接从网上找比较常用的代理即可,例如,使用第三方代理如api.openai-proxy.com,直接将官方接口域名 api.openai.com 替换为 api.openai-proxy.com 即可在国内网络环境下直接调用。
这种方式如果能找的一个性能很好的转发代理,速度快,没有限额,但是缺点是第三方服务虽然号称只做转发,不会泄露用户API Key,但是存在挂掉的风险。
WildCard提供OpenAI API转发服务
之前如果开通过WildCard虚拟卡,可以申请使用其提供给「OpenAI API 转发」。
Cloudflare提供的AI Gateway
使用AI Gateway可以让开发者在Cloudflare的全球边缘网络上部署和控制AI应用,例如连接到OpenAI的API。
六、费用
OpenAI GPT API 的计费是基于生成的 tokens 数量来计算的。一个 token 可以理解为 API 处理的一个标记(token),例如一个单词、一个标点符号或者一个子词。因此,生成的 tokens 数量取决于您请求的文本生成任务的长度以及模型的响应。
收费标准
余额查看