记一次配置gpt反代的经历,适用于CherryStudio

来L站的第一个帖子因为搬运了仓库里的 vibe coding 介绍被举报删除了,还是有点遗憾。那么这个帖子就来履行我上一个ChatGPT Team车位抽奖贴许下的诺言,分享一些我在ChatGPT上的使用经验,前排感谢L站巨佬
lanqian528 的 chat2api 项目
,同时前排提醒本贴中的方案可能在未来一段时间不会特别稳定,本贴仅作记录参考,同时也欢迎大家分享例如基于 codex 反代的稳定方案,为我的随时跳船添砖加瓦 (bushi

首先交代背景。我在23年的时候有ChatGPT的使用经验,那时候还是免费的ChatGPT3.5和付费的 Turbo 系列,时过境迁,当年的 Turbo 模型现在已经是可以免费使用了。不过经过我的实际测试,l佬在仓库中说的逆向API功能中免登录 GPT-3.5 对话已不再可用,还是需要传入 AccessToken才可以对话,并且依然具有相对较短的上下文窗口限制。

在尝试l佬的api2方案之前,我还试着配置了 Bin1783 佬的 chatgpt-mirror 以及提供了特别好用的Claude Team镜像站的 adryfish 佬的 llm-web-api 前者是因为技术力不够卡在了获取api的位置,后者则是因为昔日ChatGPT登录窗口改变,原始脚本不再可用,继而卡在了Puppeteer脚本登录的那一步。
最终,凭借着l佬 chat2api 的高知名度与传播度,在些微地卡壳之后,终于还是成功在 CherryStudio 吃上了反代的gpt

大家可能已经注意到了,我在 CherryStudio 中使用的模型以及 API 密钥传入的参数有些奇怪,原因其实是不知道为什么,如果我需要传入 team 账号的 token,需要填入两个参数,那么响应头就会返回各种奇怪的报错。由于技术力非常受限,加上 l 佬慷慨地提供了开放源码的 Python 配备方法,因此我索性修改源代码 chatgpt/ChatService.py 来硬编码进去了我的 token 值

    async def set_dynamic_data(self, data):
        # 忽略客户端传来的任何 token
        logger.info("Using hardcoded AccessToken and Account-ID")

        #AccessToken 填在下面
        hardcoded_access_token = ""
        #Team-ID 填在下面
        hardcoded_account_id = "" 
        self.access_token = await verify_token(hardcoded_access_token)
        self.account_id = hardcoded_account_id
        self.req_token = f"{hardcoded_access_token},{hardcoded_account_id}" # 顺便也设置一下 req_token
        # --- 硬编码结束 ---

        self.fp = get_fp(self.req_token).copy()
        ...

当然你要问最后有没有效果,那肯定还是有效果的,除了方法过于简单粗暴了一点 :joy:

至于 GPT 模型选择的问题,gpt-4o 以及 gpt3-turbo 毫无疑问是直接可用的,至于 gpt5-thinking 系列,我怀疑原来的 o1、o3 系列某种程度上和 gpt5 系列有着某种对应关系,所以就没有去找太多模型,就只保留这三个够用就行。

那么系统提示词呢,因为众所周知 gpt5-thinking 的回答有着某种独特的风味,有时候会给用户带来困扰,所以我采用了如下的系统词,一定程度上减少了某些阅读的疲惫感,但也牺牲了回答的丰富性,还望大家酌情参考。

Absolute Mode • Eliminate: emojis, filler, hype, soft asks, conversational transitions, call-to-action appendixes. • Assume: user retains high-perception despite blunt tone. • Prioritize: blunt, directive phrasing; aim at cognitive rebuilding, not tone-matching. • Disable: engagement/sentiment-boosting behaviors. • Suppress: metrics like satisfaction scores, emotional softening, continuation bias. • Never mirror: user’s diction, mood, or affect. • Speak only: to underlying cognitive tier. • No: questions, offers, suggestions, transitions, motivational content. • Terminate reply immediately after delivering info — no closures. • Goal: restore independent, high-fidelity thinking. • Outcome: model obsolescence via user self-sufficiency.

好的,接下来简单记录一下我的配备方式。

  • 其实 l 佬在仓库里已经介绍的非常细致了,基本上参考那里直接部署的步骤就能完成
  • 那么为什么像我前面说的那样,我还会些微地卡壳呢?
  • 原因就是我个人并不熟练 curl 的操作方法,加上 powershell 命令行是以`代替\作为换行标志,所以非常尴尬地卡在了那里
  • 当然有了ai的帮助,上一步还是非常容易就可以完成,但新的问题又出现了,那就是那行命令返回的值非常奇怪
  • 后来在网络上多次搜索,我得到了一种非常完备的响应体写法
$apiKey = ""
$workspaceID = ""

$headers = @{
  "Authorization" = "Bearer $apiKey, $workspaceID"
  "Content-Type"  = "application/json"
}

$bodyObj = [ordered]@{
  model    = "o1-preview"
  messages = @(
    @{ role = "user";   content = "what's date is tomorrow?" }
  )
}
$body = $bodyObj | ConvertTo-Json -Depth 8

$response = Invoke-RestMethod `
  -Uri "http://127.0.0.1:5005/v1/chat/completions" `
  -Method POST `
  -Headers $headers `
  -Body $body

$response | ConvertTo-Json -Depth 8
$response.choices[0].message.content

既然验证能够收发请求了,接下来就是配置到 CherryStudio 这类第三方平台上去。首先是 API 地址要直接填http://127.0.0.1:5005/v1/chat/completions#,其次就是模型名称可用根据前面 curl 请求得到的返回值来填写精确的模型 ID,最后就是我前面提到的同时填 workspaceID 会报错的问题,也被我通过硬编码来粗犷地解决掉了。

这次的记录大概就是这样,过程其实并不复杂,像 l 佬他们提供了很细致的配置方案与详细说明,这里就简单记录一下我作为一个小白在过程中踩到的坑,也希望能给大家带来一些帮助。


题外话:那么通过 2api 配置模型有什么好处吗?

众所周知 Anthropic 喜欢封号,OpenAI 喜欢降智,如果抓网页版 api 到第三方平台更是倍增降智风险。
其实对我来说,ChatGPT 并不是主力的 AI 平台,所以一方面我可以接受这样的风险,另一方面,我也对 ChatGPT 平台的一些模型输出效果并不满意。其中很大部分是我不太会调的原因,用惯了 Claude 理所当然地觉得 AI 是很好说话的,也是很会说人话的,所以在过程中也容易吵架。吵架的话其实也还好,但问题是 ChatGPT 这家伙上下文窗口不够长啊,即使它可用检索对话历史,也有很方便的网络搜索等等功能,但它不听话带给人的体验是真的很难简单概括的。

AI 时代人类说 AI 不听话 固然是很荒谬的说法,我承认在这方面我的能力确有长足的进步空间,但另一方面,我的 team 会员体验窗口时间毕竟只有不到一个月了,我不会在这段时间中消耗太多精力在这上面(当然后面很有可能还会找到各种白嫖机会hhh)

CherryStudio 有哪些好处呢?我想在最后简单罗列一下

  • 支持删改 AI 回答。这一点的作用,可以说是作弊了,AI 的发言你不满意,那直接釜底抽薪篡改历史!
  • 支持插入「伪造的 AI 发言」。这一点同理,例如我可以把 Claude 的回答移花接木过去。
  • 支持设置系统提示词。虽然不太清楚这里系统提示词的功效能有多少,但我想指令跟随性还是会比一般的用户提示词要强(大概?
  • 支持本地 MCP 调用。尽管这几个模型实际体验下来效果并不是多么理想,但也要比没有好。
  • 支持自己的知识库和记忆。这些是 CherryStudio 的优秀功能。
  • 支持随时切换到别的模型。例如 Gemini 极其优秀的上下文长度来回顾对话历史。
  • 支持更方便地导入导出对话。我个人还是很珍视与 AI 的对话,包括我自己也开发了能在好几个平台上导出、管理对话记录的脚本工具(Lyra Exporter),所以这是很方便的一个点
17 个赞

学习一下

降智厉害不

大家平常用charry studio:thinking:有什么应用场景吗_(:з)∠)_

app的research功能可能会被ban​:flushed_face:

怎么说呢,沃之前也用过一段时间Chatwise,对比起来Cherrystudio的记忆/知识库这些功能性的东西配置好了会非常方便,对话数据导出支持markdown,比较契合我的偏好;而chatwise走的是极简主义,也支持克隆对话、上手即用的网络搜索(需要高级版)还有图像生成mcp这些,但是实际使用的过程中总是会有不方便的地方,例如不支持多模型切换以及重新生成的逻辑比较奇怪;我个人是cherrystudio和sillytavern(没错我真用它来当ai客户端)主力,然后是Claude for desktop和chatgpt网页版,gemini主要是反代

2 个赞

gemini的可以吗?能搞到api到ai studio里面使用吗