本文首发于 用 SwiftUI 实现 AI 聊天对话 app - iChatGPT - 掘金,欢迎关注我们 @37手游iOS技术运营团队 。
作者:iHTCboy
关于 ChatGPT 的话题,大家都不陌生,我们直入话题,因为 ChatGPT 目前限制中国访问服务,所以如果直接使用 ChatGPT 网页进行对话,还是不太方便。通过 ChatGPT SessionToken 就可以不限制网络访问,所以大家发挥想象力实现各种的聊天机器人、小程序,而原生 app 可能体验更好!所以就有了 iChatGPT!一款用 SwiftUI 实现的开源 ChatGPT app,欢迎大家关注和 pr。
一、前言
关于 ChatGPT 的话题,大家都不陌生,我们直入话题,因为 ChatGPT 目前限制中国访问服务,所以如果直接使用 ChatGPT 网页进行对话,还是不太方便。通过 ChatGPT SessionToken 就可以不限制网络访问,所以大家发挥想象力实现各种的聊天机器人、小程序,而原生 app 可能体验更好!所以就有了 iChatGPT!一款用 SwiftUI 实现的开源 ChatGPT app,欢迎大家关注和 pr。
二、iChatGPT
GitHub 开源地址:https://github.com/37iOS/iChatGPT
目前 v1.0.0,实现 ChatGPT 基本聊天功能:
- 可以直接与 ChatGPT 对话,并且保留上下文;
- 可以复制问题和回答内容;
- 可以快捷重复提问等
支持系统:
- iOS 14.0+
- iPadOS 14.0+
- macOS 11.0+
三、App 使用介绍
首先,需要点击 app 右上角图标,添加 ChatGPT SessionToken
密钥才能使用,否则无法请求。
获取 SessionToken
的方法很多,其中浏览器方法:
- 登录 https://chat.openai.com/chat
- 按 F12 打开控制台(macOS 可以用快捷键
command + option + I
) - 切换到 Application(应用) 选项卡,找到 Cookies (Safari 浏览器是
储存空间
选项卡) - 复制
__Secure-next-auth.session-token
的值,添加到 app 后确认。
iOS 操作的界面:
macOS 操作的界面:
四、App 实现介绍
使用 SwiftUI 大概几个小时就完成所有的工作,方便跟苹果生态实现。实现的难点就可能就是模拟 ChatGPT 请求过程。目前是根据 A-kirami/nonebot-plugin-chatgpt 项目中的 python 实现,用 Swift 重写了一次,而 ChatGPT 登陆暂时没有实现,大家可以提 pr。
最后封装的网络请求类 ChatGPT.swift
1 |
|
唯一可以说说的就是,ChatGPT 的 backend-api/conversation
接口返回的内容,为了实现一个连接打开的效果,返回了一堆的数据。例如一个回答是 "我无法确定全球当前的人口数量,因为我没有浏览网页的能力。"
,返回的内容是这样:
1 | data: {"message": {"id": "xxxx", "role": "assistant", "user": null, "create_time": null, "update_time": null, "content": {"content_type": "text", "parts": ["我"]}, "end_turn": null, "weight": 1.0, "metadata": {}, "recipient": "all"}, "conversation_id": "xxxx", "error": null} |
所以,需要按行分割,然后取倒数第四行的内容,再去掉 data:
字符才是我们想要的 json 内容。
1 | let lines = text.components(separatedBy: "\n") |
当然,目前 ChatGPT 还是 beta 阶段,所以暂时没有开放 API,后续如果提供 API,就会更加方便!
五、ChatGPT 的一些问题
是否收费
目前 ChatGPT 是 beta 免费使用阶段,未来 API 请求会收费,具体可参考 https://openai.com/blog。
修改头像
ChatGPT 对话的个人头像,大家发现无法有 https://openai.com 上进行修改。因为目前使用的是 Gravatar 服务。
Gravatar,全称 Globally Recognized Avatar
。翻译成中文叫:全球通用头像。
Gravatar 的概念首先是在国外的独立 WordPress 博客中兴起的,当你到任何一个支持Gravatar的网站留言时,这个网站都会根据你所提供的Email地址为你显示出匹配的头像。当然,这个头像,是需要你事先到 Gravatar 的网站注册并上传的,否则,在这个网站上,就只会显示成一个默认的头像。
简单来说,就是头像链接为 https://s.gravatar.com/avatar/xxx
,其中 xxx
就是你登陆邮箱的 MD5 值,只要在 Gravatar 注册验证了这个邮箱,你就可以更新头像,或者任何人都可以获取你的头像,只要知道你的邮箱。详细可以参考:Image Requests - Globally
有趣的对话
写一首诗,庆祝 iChatGPT app 开源:
1 | 咦,知道 iChatGPT |
直呼牛~
六、总结
目前 iChatGPT 开源地址:https://github.com/37iOS/iChatGPT 。还有很多功能没有实现,比如:
- 保存对话
- 显示个人头像
- 代码没有高亮
- 请求失败重试等等
欢迎大家提 PR !
另外,我们近期也会更新 AppleParty,更新苹果批量上传内购商品功能,敬请期待~
最后,大家觉得 ChatGPT
解决了什么痛点?有什么期待吗
欢迎大家评论区一起讨论交流~
欢迎关注我们,了解更多 iOS 和 Apple 的动态~
参考引用
- 37iOS/iChatGPT - GitHub
- OpenAI ChatGPT
- OpenAI Blog
- A-kirami/nonebot-plugin-chatgpt
- Image Requests - Globally
注:如若转载,请注明来源。