近期 ChatGPT
在国内又㕛叒叕火了,但是其实我觉得这次火的莫名其妙。我为什么说“又”呢,其实 ChatGPT
在去年11月底的时候已经出现了,12月份我就看到当时很多群里的小伙伴都在聊这个事情。但是最近我咋感觉有人在炒作呢???听说有人靠 chatGPT
又发财了。
开头又讲多了,本篇文章呢,带大家使用 OpenAI 的 API 来实现与 ChatGPT
的对话。
代码其实非常简单,感兴趣的小伙伴可以进行二次开发。官方文档提供了 python
、nodejs
的 library,第三方社区提供了C#
、Go
、Java
等 library,就连虚幻引擎都有库,但是就是没有 Rust 的相关library,Rust 社区的大佬们不给力啊,哈哈。
其实我自己去 Rust 的 crate.io
上搜过,发现也有几个openai
相关的 library,我没有测试,大家可以试用下。
没有库,那只能是自己调用 API 去实现了。其实,我们仅仅用到了一个接口
POST https://api.openai.com/v1/completions
主要的参数介绍:
model
:训练模型,官方有三种模型,分别是GPT-3
、Codex
、Content filter
,这里我们仅仅选用 GPT 的模型,可以理解和生成自然语言。
而在 GPT-3 模型下又存在了不同等级的 GPT 模型,这里我们当然选择的是 GPT-3 中最强的模型 text-davinci-003
。
prompt
:用于生成完成、编码为字符串、字符串数组、标记数组或标记数组数组的提示。说白了就是我们与 GPT
对话的内容。
max_token
: 在结果中产生的最大数量的 token
,可选参数,默认为 16
。我们传递的prompt
的 token
数不能超过模型的上下文长度。大多数模型的上下文长度为 2048 个 token
(text-davinci-003
模型支持4000个)。对于常见的英语文本,一个 token
通常对应 4 个字符的文本。说白了,这个是接口的花费,每 1000 个 token
等于 0.02美元,该字段影响结果的字数。
temperature
:采样温度,可选参数,默认为 1
,值的范围是 0-2之间闭区间([0-2])。该值越大,输出的结果则更加随机,值越小结果越准确。
了解清楚接口的使用方法了,我们就可以开搞了。j有接口请求,异步操作需要用到 reqwest
和 tokio
library。返回的结果需要 json 解析,还需要用到 serde
library (不是必须)。
注:为了演示结果,并没有按照规范去处理每个错误结果,在代码中使用了大量的 unwrap
,实际开发场景并不推荐。
#[tokio::main]
async fn main() {
// 请填入自己账号的openai 的 api_key
let api_key = "";
// 对话内容
let prompt = "chatgpt是什么";
// 完成时要生成的最大 token 数
let max_tokens = 4000;
// 训练模型
// 功能最强大的 GPT-3 模型。可以完成其他模型可以完成的任何任务,通常具有更高的质量、更长的输出和更好的指令遵循。还支持在文本中插入补全。
let model = "text-davinci-003";
let url = "https://api.openai.com/v1/completions";
let mut headers = HeaderMap::new();
headers.insert(CONTENT_TYPE, "application/json".parse().unwrap());
headers.insert(AUTHORIZATION, format!("Bearer {}", api_key).parse().unwrap());
let body = format!(r#"{{"model": "{}", "prompt": "{}", "max_tokens": {}, "temperature": 0}}"#, model, prompt, max_tokens);
let response = reqwest::Client::builder().build().unwrap()
.post(url)
.headers(headers)
.body(body)
.send().await.unwrap()
.json::<GPTResult>().await.unwrap();
// dbg!(&response);
let choices = response.choices.unwrap();
let choice = choices.get(0).unwrap();
println!("{:?}", choice.text.as_ref().unwrap().trim());
}
代码输出结果:
代码实现其实很简单,总共不过几十行代码。
简单说下如何拿到 openAI 的 apikey 吧。前提你需要一个 openAI 账号,没有的话可以想办法注册,也可以在群内艾特我,告诉你们注册的方法。
登录 OpenAI 的后台 https://platform.openai.com/login
,找到 Uses - API Keys
,点击 Create new secret key
,即可生成。
每个新账号都会赠送 18 美元,接口调用会慢慢消耗赠送的 18 美元,换算关系如下,上面我也提到了,大约每4个英文字符等于1个token
,1000 个 token
大约 750 个单词。Davinci 模型 1000个 token 花费 0.02 美元。如果不调用 API 接口,只是正常使用官网的 Chat GPT
聊天,那这个是免费的。
Chat-GPT
火了,它会替代人类部分的工作吗?它的应用场景有哪些呢?这些都需要我们去思考,目前在国内已经很多公司将 Chat-GPT
接入了微信公众号、小程序等等,这也算是二次开发吧。如果有朋友想更深入的了解 Chat-GPT
还可以做哪些事情, 可以参考 OpenAI 的官方文档(文末附上)。
OpenAI API官方文档:https://platform.openai.com/docs/introduction
Gitee源码: 点击下方“阅读原文”免费获取本节课程源码
Github源码: 请前往公众号菜单-教程源码-Github来获取
【公众号主页-官方社群-微信社群 获取 二维码加入】