背景
访问OpenAI会经常受限制,为了流畅使用gpt的能力,最佳方案还是私有化部署。私有化部署涉及两个问题,选择哪个Web客户端和用谁家的API。我尝试过多种私有化方式,本文稍作总结。
选择哪个客户端合适?
你或许从一些公众号或文章中可看到一些方案,里面提出可以使用某某开源方案。如果授人以渔的话,我是通过在OSS Insight平台的chat-gpt-apps里找一下。排名前几的有机会成为我们的候选方案,我们拿出来一一点评一下?
候选人一:chatgpt-web
GitHub: https://github.com/Chanzhaoyu/chatgpt-web
Tip
简介: 广泛使用的一个chatgpt-web方案。
- UI有点类似官方的样子
- 带提示词商店,可以导入或下载一些预置的设定
- 可的方便切换是否带上下文历史的交互(节省token)
- 有一键部署到平台的能力
- 支持设置访问密码
这个方案我用了半年多,感觉还挺不错。
候选人二:ChatGPT-Next-Web
GitHub: https://github.com/Yidadaa/ChatGPT-Next-Web
Tip
简介:也是很多人使用的一个方案。
- UI默认是聊天对话框方式
- 特色的面具能力,可预设Model/Prompt及一些参数
- 支持云端同步能力(Webdav/Upstash)
- 支持设置访问密码
候选人三:Azure AI Studio聊天操场
URL: https://oai.azure.com/portal/63536aea15934697874a51572fa868ff/chat
Tip
简介:这是我在微软云上部署OpenAI服务时才知道的,可能看过这个的不多,功能也较为简单。
- UI简洁大方
- 默认支持云端同步能力
- 权限主要通过Azure本身来控制
总结
我们对比这三个,各有优劣。从我关注的角度,整理一个表格:
功能/项目 | chatgpt-web | ChatGPT-Next-Web | Azure AI Studio聊天操场 |
---|---|---|---|
GitHub/URL | chatgpt-web | ChatGPT-Next-Web | Azure AI Studio聊天操场 |
UI风格 | 类似官方样式 | 对话框方式 | 简洁大方 |
提示词商店 | 支持导入或下载预置的设定 | 更扩展的提示词预设 | 不支持 |
上下文历史 | 支持是/否切换(节省token) | 固定,自动压缩 | 固定(可能未压缩) |
一键部署 | 支持 | 支持 | 支持 |
访问控制 | 简单密码支持 | 简单密码支持 | 更安全的Azure鉴权 |
云端同步 | 不支持 | 部分支持(Webdav/Upstash) | 自带 |
总体评价 | 广泛使用,UI类似官方,有提示词商店等特点 | 功能多样化,包括特色的面具功能和云端同步等 | 功能相对简单,UI简洁大方,但有云端漫游 |
使用建议的话,如果你需要多个模型切换,建议使用ChatGPT-Next-Web。如果只有一个模型,可以使用chatgpt-web。因为如果你想对话漫游,可考虑Azure的方案,但是因为无法预设提示词等,也不支持多模型切换,功能还是简单了些。
在此还想补充一句:高票的候选人一、二应该均是国人的作品,咱们还是相当不错的嘛:)
如何获得API Key?
主要的正式渠道就两个,一是https://openai.com/
官方网站,另一个是作为合作伙伴的微软Azure平台。这里简要描述一下OpenAI API Key的获取方式。
OpenAI
注册一个新账号即送5刀(以前送18刀),有效期三个月。注册稍麻烦,网上有大堆资料,自己手工注册的话,可能要用接码平台,比如我用过这个sms-activate。注册过两个号,我感觉还是麻烦,建议某宝平台购买。
之后在个人资料的User
->API Keys
中创建secret key即可。需要特别说明的是,调用OpenAI的API可能要特别的网络。
Azure OpenAI
现在我们可以以组织名义在微软Azure平台申请,司内有人分享如下步骤,我验证成功,半天内就获得申请批复。
- 创建你自己的Azure云账号。
- 创建订阅,绑定国内visa信用卡。(如果是新号,可以将免费账号升级为即用即付,免费200刀额度不会消失)
- 填Open AI申请表申请开通Open AI服务; 申请gpt-3.5. 申请时邮箱填自己公司邮箱,公司填公司名字,我这里是Tencent。
- 据说要等几个工作日 Open AI服务开通后,实际上我是小半天(5-6h)就获得审批了,通知邮件是发到你留的企业邮箱。
- 3.5批了之后,以前要再填表单申请gpt-4,但是现在不用了,直接获得GPT4的权限,不过我这看只在某些Region才可用,略有疑惑。
通过以上方式获得权限后,你便可以在Microsoft Azure中部署对应的模型。只需要几步,如下给一些关键的建议:
- 创建
Azure OpenAI
,注意选择区域
,有些区域GPT4不可用,可用的区域见这个文档 GPT-4 models。我选择的是Canada East
。你可以通过查看你的模型,看到是否支持gpt4等。 部署
对应的模型,特别要关注这里的部署名字,后面API调用使用时会用到。
部署好模型后,你就可以在Azure提供的[操场]
->[聊天]
中试用了。要查看访问相关的Key,它是藏在这里:
你也可以继续通过聊天页右上角的部署至
,将服务直接在微软云上部署,就可获得上文说的候选人三的使用体验。
还是要再次加粗并提醒一句:GPT4价格挺贵,特别是使用GPT4-32K,请在调用时选择适合自己场景的模型。
当然如果是新号,一个月免费200刀的额度,也够你霍霍一阵啦:)
私有化部署
经过前面两步,已经万事俱备了,私有化部署简单说就是选个Web客户端填上对应的Key。不简单的说,还有一些注意事项,这后面会提及,我们先说说你已经迫不及待要了解的怎么操作:P
基于docker-compose的部署
我们的两个候选人自己的简介(Github README)已经很详细的描述了。基于OpenAI的API访问特殊性,他们都很贴心的带了SOCKS_PROXY
或HTTPS_PROXY
的选项,你只要填上合适的代理地址即可顺畅使用。我这里就不做搬运工了啦~
基于k8s的部署
同样简单,我们可以参考docker-compose进行一些翻译工作即可。给个示例:
|
|
上面尝试使用我们自己部署的Azure OpenAI模型,我们两个候选人本身并不支持Azure OpenAI API,我们可以借助这个开源项目stulzq/azure-openai-proxy达成适配。
在k8s中可以这么配置:
|
|
这两个资源我们可以简单写个kustomization文件,方便一键部署:
|
|
关于服务怎么对外暴露,相信你会我就不多讲啦。至此我们就用上了微软家的OpenAI。
补充注意事项
- 像chatgpt-web提供了网页accessToken模式,但能用API的就不用Token,因为网页版本数据可能会被拿来后续训练,更加不安全。
- 使用Azure OpenAI对国内网络更友好,不需要代理即可。
- 使用proxy时,AZURE_OPENAI_MODEL_MAPPER字段的设置(一个模型名称的映射关系),要严格和在Azure OpenAI中的部署名称一致。
- 注意如果部署在公网,设置上密码校验(环境变量:AUTH_SECRET_KEY或CODE),不然账单起飞可别怪我没提醒。
- 如果需要漫游你的历史记录,
ChatGPT Next Web
是有一定支持的,配合免费申请的upstash
免费版本,感觉也够用。 - Azure OpenAI返回有内容筛选,如果你看似合理的问题被阻止回复(比如报
content_filter
),那么可以去申请修改内容筛选的设定(要额外申请)。
尾声
我个人上述三个版本都部署了,后续会交替再用上一段时间,有其它感受会再刷新此文。目前老实说三者都不完美,我想要的是:
- 多模型切换方便(关于口袋银子),这个仅ChatGPT Next支持。
- 必然要支持预设Prompt,以及快速调用
/
。这个非azure web都支持。 - 可选是否带上下文发送,且可快速切换,这个chatgpt-web还不错。
- 历史记录云端漫游,并且无缝使用,手动同步啥的还是太弱。这点azure web天然获胜。
- 历史记录的标题Summary化。这个azure web还不错。
- 支持插件模式(我也没想好什么形态),但Function call等不利用也是亏了。
也尝试开些脑洞,历史聊天记录的标题可自动标签化和自动整理,我甚至想象了一下炫酷的交互方式。同一个相关主题自动形成树状,整体大量曾经的问答变成一个网状结构,就像Obsidian的关系图谱,在问答之中,就建立起个人的知识框架。我不排斥将问答过程中的信息存储,如何整理和挖掘,对我而言有不错的吸引力:D
EOF