暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何搭建一个 ChatGPT 应用?

浮之静 2023-03-18
761

最近 ChatGPT 刷屏的事件真是太多了(都疯了,国外的产品疯了,国内的媒体疯了
)。我也跟风发了好多篇 AI 资讯类文章,但是作为技术人,今天想来点硬核的东西。

ChatGPT & OpenAI & API key

很多人(小白用户)一直分不清 ChatGPT 官网,OpenAI 和 API Key 到底是啥关系。简单来说就是:

  • ChatGPT 官网
    :是 chat.openai.com[1]ai.com[2] 这两个网址,当你在浏览器登录账号后可以直接访问的东西。官方目前只有一个网站(其他所有打着 ChatGPT 旗号的网站都是第三方应用)

  • OpenAI
    :OpenAI是一家美国人工智能(AI)研究实验室,由非营利性 OpenAI Incorporated (OpenAI Inc.) 及其营利性子公司 OpenAI Limited Partnership (OpenAI LP) 组成,后与微软合作,推出了一系列 AI 应用,ChatGPT 只是 OpenAI 旗下的一款应用。

  • API key
    :是 OpenAI 提供给开发者的可以用来请求 gpt 系列(例如最近比较火的 gpt3.5 和刚刚发布的 gpt4)大模型的接口,ChatGPT 官网也是基于接口实现网站。目前所有的第三方应用都是基于接口在实现。你可以在这里创建管理自己的 API Key[3]

  • ChatGPT Plus
    :它是一个 ChatGPT 官网的会员,可以理解为各种视频网站开的会员,可以让你更丝滑的体验 gpt 聊天。但是它并不同于 API key,它们直接没有什么联系,如果要使用 API key 仍需要额外付费。

搭建应用

目前市面上有很多支持 API Key 的第三方应用,如果你不了解它的运作方式,大概率会为此支付高昂的接口费用(文末的附录可查看具体模型价格)。

价格影响因素

  • 模型类型

  • 模型 Tokens 使用数

Tokens 分词器

chat completions
接口按 token 计费,所以会有专门的算法来计算 token 消耗(输入和输出全部都会计入到 token)。在 chat completions 接口返回的 usage 字段会有具体消耗的 token 数。

  • OpenAI Tokenizer[4]

  • Tiktokenizer[5] - OpenAPI 标记器的网页版

  • openai/tiktoken[6] - 用于 OpenAI 模型的快速 BPE 标记器

接口使用

  • Chat completions 文档[7]

  • 创建 Chat completion[8] - 官方提供了 curl
    python
    node.js
    的代码示例

# 接口地址
POST https://api.openai.com/v1/chat/completions

复制

以 curl 为例:

curl https://api.openai.com/v1/chat/completions \ # 接口地址
-H "Content-Type: application/json" \ # 设置请求头,数据类型为 json 格式
-H "Authorization: Bearer $OPENAI_API_KEY" \ # 设置请求头,自己的 API Key
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Hello!"}]
}'


复制

以 node.js 为例:

// 安装 openai 依赖,执行 `npm i openai`
// 使用此官方包的好处:不在需要自己设置请求头,只需要简单配置即可
const { Configuration, OpenAIApi } = require("openai");

// OPENAI_API_KEY:API Key 在这里创建 https://platform.openai.com/account/api-keys
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);

const completion = await openai.createChatCompletion({
// 使用的模型
model: "gpt-3.5-turbo",
// 需要发送的信息,数组格式,如果需要支持上下文联系,则需要将之前产生的对话全部再次发送
messages: [{role: "user", content: "Hello world"}],
// 是否使用流形式发送,默认不开启(打字效果)
stream: false,
// 最大令牌数,输入标记和生成标记的总长度受模型上下文长度的限制(可选参数,一般是 4096)
max_tokens: 4096,
// 其他可选参数,请查看文档
});
console.log(completion.data.choices[0].message);

复制

返回数据:

{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "\n\nHello there, how may I assist you today?",
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}

复制

第三方可靠吗?

TypingMind[9] 为例。它支持用户使用 API Key(目前测试试用阶段)或直接购买其服务。但是我在试用后发现了一个巨大的问题,众所周知,每次聊天对话都需要消耗 Token,AI 才能给用户返回结果(但是这是一个双向的过程,即收/发消息都需要消耗 Tokens),在这里的 Tokens 的消耗是不可以避免的。真正爆炸的是一个连续的对话,会造成 Tokens 消耗的滚雪球(为了让 AI 记住聊天的上下文,更加智能的回答你的问题,就需要将之前所有的聊天内容作为一条信息发送给 AI)。

请求:

返回:

新坑预告

我目前正在开发基于 API Key 的 ChatGPT 客户端(预计很快可以发布 0.1.0 版本),并且我为它取了一个新名字 NoFWL
,ChatGPT 功能只是它规划版图里很小的一个子模块。之前 ChatGPT 桌面应用支持的所有功能都会被 NoFWL 应用所支持,并且远不止于此:

# 没有自由的工作生活:希望未来它的强大,可以让人更高效,从而变得自由
NoFWL -> No Free Work Life

复制

仓库地址:https://github.com/lencx/nofwl

附录

API Pricing[10]

接口价格

GPT-4

ModelPromptCompletion
Model8K contextPrompt$0.03 / 1K tokensCompletion$0.06 / 1K tokens
Model32K contextPrompt$0.06 / 1K tokensCompletion$0.12 / 1K tokens

Chat

ModelUsage
Modelgpt-3.5-turboUsage$0.002 1K tokens

InstructGPT

ModelUsage
ModelAda (Fastest)Usage$0.0004 / 1K tokens
ModelBabbageUsage$0.0005 / 1K tokens
ModelCurieUsage$0.0020 / 1K tokens
ModelDavinci (Most powerful)Usage$0.0200 / 1K tokens

Fine-tuning 模型

ModelTrainingUsage
ModelAdaTraining$0.0004 / 1K tokensUsage$0.0016 / 1K tokens
ModelBabbageTraining$0.0006 / 1K tokensUsage$0.0024 / 1K tokens
ModelCurieTraining$0.0030 / 1K tokensUsage$0.0120 / 1K tokens
ModelDavinciTraining$0.0300 / 1K tokensUsage$0.1200 / 1K tokens

Embedding 模型

ModelUsage
ModelAdaUsage$0.0004 / 1K tokens

Image 模型

ResolutionPrice
Resolution1024×1024Price$0.020 / image
Resolution512×512Price$0.018 / image
Resolution256×256Price$0.016 / image

Audio 模型

ModelUsage
ModelWhisperUsage$0.006 / minute (rounded to the nearest second)

References

[1]

chat.openai.com: https://chat.openai.com

[2]

ai.com: https://ai.com

[3]

API Key: https://platform.openai.com/account/api-keys

[4]

OpenAI Tokenizer: https://platform.openai.com/tokenizer

[5]

Tiktokenizer: https://github.com/dqbd/tiktokenizer

[6]

openai/tiktoken: https://github.com/openai/tiktoken

[7]

Chat completions 文档: https://platform.openai.com/docs/guides/chat

[8]

创建 Chat completion: https://platform.openai.com/docs/api-reference/chat

[9]

TypingMind: https://www.typingmind.com

[10]

API Pricing: https://openai.com/pricing


文章转载自浮之静,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论