前言
ChatGPT 最近是真的火,公众号、B 站到处是博主晒和它的聊天截图。也有人做过深度测试,发现它并不总是靠谱,回答错了得你指出来,它马上回一句:
那我错了。您说的是对的……
认错倒是干脆,但有些网友说,它改了之后你再问一遍,回答的还是同一个错误答案。

不管怎么说,ChatGPT 确实让很多人震惊:能写代码、能写文章,还有人拿同样的问题去问它和 Google,觉得 ChatGPT 的回答完爆搜索结果,直呼 "Google Done"。
别人的感受听听就好,自己上手试了才算数。注册 ChatGPT 需要国外手机号收验证码,我用的是接码平台 SMS-Activate,花了 11 卢布左右,差不多一块钱,能接受。具体的注册教程网上很多,就不重复了。
关键是现在已经有不少 ChatGPT 的开源项目,我也拿 OpenAI 开放的接口探索了一番。
把 ChatGPT 搬进 Python
模型探索
先在 OpenAI 的接口文档里看模型介绍,主要有三类:
| 模型 | 描述 |
|---|---|
| GPT-3 | 一组可以理解和生成自然语言的模型 |
| Codex | 一组可以理解和生成代码的模型,能把自然语言转成代码 |
| Content filter | 经过微调的模型,检测文本是否敏感或不安全 |
以下内容主要是官方文档的翻译,了解即可。
GPT-3
| 型号 | 描述 | 最大请求 |
|---|---|---|
| text-davinci-003 | GPT-3 里最强的模型,能完成其他模型能做的所有任务,输出质量更高、更长,也更遵循指令。支持在文本中间插入补全,语义更连贯 | 4000 字符 |
| text-curie-001 | 能力不弱,比 Davinci 更快、成本更低 | 2048 字符 |
| text-babbage-001 | 能完成简单的任务,速度快、成本低 | 2048 字符 |
| text-ada-001 | 只能完成非常简单的任务,通常是 GPT-3 系列里最快、最便宜的 | 2048 字符 |
Davinci 通常效果最好,但其他模型在特定任务上也可能更快更省钱。比如 Curie 能做很多和 Davinci 一样的事,速度更快,成本只有它的十分之一。
建议实验阶段先用 Davinci 拿最好的结果,正式使用时再试试其他模型,看能不能用更低的延迟换到差不多的效果。也可以针对特定任务微调模型来提升性能。
Codex
Codex 是能理解和生成代码的 GPT-3 后代,训练数据包含自然语言和 GitHub 上数十亿行公开代码。它最擅长 Python,也精通 JavaScript、Go、Perl、PHP、Ruby、Swift、TypeScript、SQL 和 Shell 等十几种语言。
Content Filter
过滤器用来检测 API 生成的内容是否敏感或不安全,目前还在测试阶段,会把文本分成安全、敏感、不安全三类。它也会犯错,现在的设计偏向保守,所以误报率偏高。
用 Flask 实现在线聊天
摸清模型和接口调用方式后,用 Flask 把接口参数包一层,聊天就方便多了。在这之前还得找个网页模板。
Flask 路由函数
按 OpenAI 官方接口的调用方式,写一个 /ask 的 GET 接口,请求参数主要是 prompt(问题),返回回答:
@app.route('/ask')
def ask():
p = request.args.get('prompt', '')
eng = request.args.get('engine', 'text-davinci-003')
max_token = int(request.args.get('max_tokens', 256))
if not p:
return ""
response = openai.Completion.create(
engine=eng,
prompt=p,
temperature=0.3,
max_tokens=max_token,
n=1
)
return jsonify(result=response["choices"][0]["text"])
前端页面请求
我不懂前端,就算找了个现成模板,也折腾了好久才把前后端拼起来。默认用 text-davinci-003 模型,来看效果:

让 AI 写首古诗,结果它不知道从哪搬来了《春江花月夜》。要是不认识这首诗,还真会以为是它自己写的,估计其他诗也是网上搬的。换其他模型试了下,效果确实不敢恭维:

比如用 Ada 模型聊天,回复有时候连一句完整的话都算不上:

部署
最后部署到了 Azure,网站是 Slek - Chat and Discussion Platform,可以自己体验下,不过目前还有些 bug。另外 OpenAI 接口有 18 美元的免费额度,调用会扣费,目前还能用一阵子。

总结
上面只用了 OpenAI 接口的一小部分来做聊天,效果一般,也没有上下文关联。网页版 ChatGPT 不一样,它会记住上下文、能生成代码,应该是综合了多个模型的结果,我的小项目自然没法比。后面有空会继续完善这个聊天项目,接入代码生成等更多 OpenAI 接口,也试试其他聊天接口。
评论区