马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 Furau 于 2023-9-23 08:34 编辑
前言
近段时间 chatgpt应用层出不穷
renpy具有强大的GUI绘制和交互能力,搭配Python的丰富生态 通过很低的开发成本就可以完成一个功能完善的chatgpt AI 对话 程序
效果演示
开发思路以及流程
对话AI程序按照传统的开发思维可以把程序拆分两个具体的部分
1.程序交互前端
2.数据交互后端
其中,程序交互前端我们使用renpy的界面绘制和交互语句就可以完成 详情可以翻阅中文文档
官方文档
输入语句:https://doc.renpy.cn/zh-CN/input.html#renpy.input
输出的几种方式
https://doc.renpy.cn/zh-CN/menus.html
https://doc.renpy.cn/zh-CN/displaying_images.html#show
得益于renpy完善的交互能力,这个部分是一劳永逸的开发,代码也很简单。
前端部分的任务是:
把搜集到的交互数据进行合理的打包,方便后续后端对数据进行操作
各位可以自由发挥,设计更好的交互前端程式。(比如根据不同回答内容做不同界面优化,或者显示某些问题答案的时候,给予一定优化显示)
主要的难点部分在于数据交互后端。
后端部分的任务是:
设计完善的API,把前端修缮好的数据提交给chagpt
chatgpt是openai公司的产物,因为特殊原因,国内网络环境访问官方原生API会出现一些问题
这里有几种解决方案:
1.使用官方OPENAI库(优点,OPENAI有官方Python库renpy无缝对接,无需额外的网络请求,可以第一时间体验最新功能,缺点:请求使用的key会暴露在外容易失效,需要本机正常访问外网服务,并且对接官方成本相对高昂)
2.租赁服务器发送建立中转API接口(优点,比1更加安全,无需暴露key,缺点:传递数据速度对比1稍慢,中转服务器容易被封IP ,更换IP比较麻烦成本也相对高昂)
3.爬虫当前主流服务二次封装接口(优点,成本极低,最小资金投入的方案,更灵活,因为只要是能够长期活着的站点,API 稳定性肯定有保障 缺点:不太道德,而且需要长期的维护)
4.对接第三方API接口服务商(优点,成本低,只调用3.5接口只需要很少的花费,包含2,3的全部优点,缺点,服务商良萎不齐,需要自行斟酌判断)
建议测试学习的开发者使用3,4方案,商业使用的可以按照自己的需求自行选择
本程序使用第四种方案,调用的第三方免费的接口,代码也完全按照第四种方案的调度方式,其他的API调用方案与本方案给出的代码逻辑类似,可以自行理解进行二次开发
免费用作教育,学习用途的第三方接口 项目推荐 https://github.com/chatanywhere/GPT_API_free
主程序代码(script.rpy)
[RenPy] 纯文本查看 复制代码 # chagpt 对接代码
# Furau 2023年9月23日 05:34:00
define e = Character("Chatgpt 3.5")
init python:
import requests
import json
# 请求头
headers = {
"Authorization": "Bearer sk-oAVGu2Q3K8ligKkqXPoFSSS7ePWv5lXrpq6tm5XXXXXXXXXL",
"User-Agent": "Apifox/1.0.0 (https://apifox.com)",
"Content-Type": "application/json",
"Accept": "*/*",
"Cache-Control": "no-cache",
"Host": "api.chatanywhere.com.cn",
"Accept-Encoding": "gzip, deflate, br",
"Connection": "keep-alive"
}
# 请求体
data = {
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Hello!"}]
}
# 游戏在此开始。
label start:
scene bg room
show eileen happy
# 此处显示各行对话。
label midd:
e "任何问题都可以向我提问"
define pov = Character("[povname]")
python:
povname = renpy.input("输入你的问题", length=32)
povname = povname.strip()
data["messages"][0]["content"] = povname
# response = (sys.path)
response = requests.post("https://api.chatanywhere.com.cn/v1/chat/completions", headers=headers, data=json.dumps(data))
response_data = response.json()
content = response_data['choices'][0]['message']['content']
if not povname:
povname = "您没有输入问题"
povname = content
menu:
"chat: [povname]!":
"chat: [povname]!"
# e "chat: [povname]!"
show eileen vhappy
jump midd
# 此处为游戏结尾。
return
为防止key泛滥,这里只展示程序逻辑,其中的API KEY已经经过字符串加密处理,如需查看效果或者进行开发测试可以下载demo或者源代码文件。
下载
源代码:https://wwwb.lanzouw.com/iHYpm19i4ugj
demo: https://wwwb.lanzouw.com/iLgDS19i4ved
|