用 SwiftUI 实现 AI 聊天对话 app - iChatGPT

一、前言

关于 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 使用介绍

iChatGPT-02.jpeg

首先,需要点击 app 右上角图标,添加 ChatGPT SessionToken 密钥才能使用,否则无法请求。

iChatGPT-03.jpeg

获取 SessionToken 的方法很多,其中浏览器方法:

  1. 登录 https://chat.openai.com/chat
  2. 按 F12 打开控制台(macOS 可以用快捷键 command + option + I
  3. 切换到 Application(应用) 选项卡,找到 Cookies (Safari 浏览器是 储存空间 选项卡)
  4. 复制 __Secure-next-auth.session-token 的值,添加到 app 后确认。

iChatGPT-04.jpeg

操作的界面如下:

iChatGPT-05.jpeg

四、App 实现介绍

使用 SwiftUI 大概几个小时就完成所有的工作,方便跟苹果生态实现。实现的难点就可能就是模拟 ChatGPT 请求过程。目前是根据 A-kirami/nonebot-plugin-chatgpt 项目中的 python 实现,用 Swift 重写了一次,而 ChatGPT 登陆暂时没有实现,大家可以提 pr。

最后封装的网络请求类 ChatGPT.swift


class Chatbot {
   
	
	let apUrl = "https://chat.openai.com/"
	let sessionTokenKey = "__Secure-next-auth.session-token"
	let timeout = 30
	var sessionToken: String
	var authorization = ""
	var conversationId = ""
	var parentId = ""
	let  id = ""
	
	init(sessionToken: String) {
   
		self.sessionToken = sessionToken
	}
	
	func headers() -> [String: String] {
   
		return [
			"Host": "chat.openai.com",
			"Accept": "text/event-stream",
			"Authorization": "Bearer \(self.authorization)",
			"Content-Type": "application/json",
			"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Safari/605.1.15",
			"X-Openai-Assistant-App-Id": "",
			"Connection": "close",
			"Accept-Language": "en-US,en;q=0.9",
			"Referer": "https://chat.openai.com/chat",
		]
	}
	
	func getPayload(prompt: String) -> [String: Any] {
   
		var body = [
			"action": "next",
			"messages": [
				[
					"id": "\(UUID().uuidString)",
					"role": "user",
					"content": ["content_type": "text", "parts": [prompt]],
				]
			],
			"parent_message_id": "
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值