【ai】如何接入chatGPT api

一、一般步骤

获取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'; // 替换为您的API密钥
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'; // 替换为您的 API 密钥
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'; // 替换为您的 API 密钥
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'; // 替换为您的 API 密钥
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 --save openai
# or
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 数量取决于您请求的文本生成任务的长度以及模型的响应。

收费标准

余额查看


喜欢这篇文章?打赏一下支持一下作者吧!
【ai】如何接入chatGPT api
https://www.cccccl.com/20240102/ai/如何接入chatGPT api/
作者
Jeffrey
发布于
2024年1月2日
许可协议