项目背景:

最近在折腾QQ机器人,想接入一个AI,首先想到的是Deepseek系列,但是官方api已经废了,索性转战第三方,在试了试免费的后感觉效果并不好,有一定概率不回复(或者回复太慢了)。后来又用了付费的,嗯,效果确实好了。BUT!不知道哪个入机拿3个号压测我bot,导致我的API余额被刷没了。

然后,我看到了我在VS Code中安装的插件,(此处省略200字,懒得写了)然后就有了下面的程序。

逆向过程:

1.找到Chat网页

emm,很简单,利用强大的搜索引擎,很快就找到了(PS:可以直接在插件中找到浏览器试用)

网页版连接:https://fc.fittentech.com/

2.获取请求方式

登陆后打开F12,选择“网络”,然后随便发送一些东西(比如:你好),这时就会看到如下请求

获取请求参数1

在分析后我们可以发现:

发送请求时需要在URL拼接一个apikey参数,并且需要在请求头中设置authorization的Bearer值(如图)

分析请求参数

请求的内容为json字符串,格式如下

请求body

在”响应“中我们可以看到返回的内容并不是普通的字符串,而是一段经过处理的JSON文本(如图)

分析返回内容

将以上文本交给Deepseek后得知

解密返回内容

至此,原理差不多明白了,接下来验证猜想

3.验证

试用接口测试插件来验证猜想(这里使用VS Code里的Thunder Client)

设置apikey

验证001

设置Auth

验证002

设置Body(请求内容,以”你好“为例)

验证003

然后发送!!!

返回如下:

测试返回

至此原理已经了解,接下来就是手搓代码了。

实现兼容OpenAI的格式:

(我太懒了,直接交给bobo吧)

目录结构

  • .gitignore:用于指定 Git 版本控制中需要忽略的文件和文件夹。
  • LICENSE.mdLICENSE_CN.md:许可证文件,规定了该项目的使用和分发规则。
  • api.py:主要的 Python 代码文件,实现了 Flask 应用的各种功能。
  • build.bat:Windows 批处理脚本,用于构建可执行文件。
  • config.ini:配置文件,存储 Fittentech 的登录信息和 API Key。
  • requirements.txt:列出了项目所需的 Python 依赖包。

主要文件介绍

requirements.txt

该文件列出了项目所需的 Python 依赖包,包括:

  • Flask:用于构建 Web 应用。
  • requests:用于发送 HTTP 请求。
  • chardet:用于检测文件编码。

config.ini

配置文件,包含以下配置项:

  • username:Fittentech 的登录用户名。
  • password:Fittentech 的登录密码。
  • api_key:提供给客户端的 API Key。

api.py

主要的 Python 代码文件,实现了以下功能:

全局变量
  • Ft_username:Fittentech 的用户名。
  • Ft_password:Fittentech 的密码。
  • Ft_access_token:访问令牌。
  • Ft_refresh_token:刷新令牌。
  • Ft_user_id:用户 ID。
  • API_KEY:API Key。
主要函数
  • initaliaze():初始化函数,从config.ini文件中读取配置信息,并调用get_auth_token()函数获取访问令牌。
  • get_auth_token():登录 Fittentech 并获取访问令牌、刷新令牌和用户 ID。
  • refresh_auth_token():刷新 Fittentech 的访问令牌。
  • generate_random_id():生成一个指定长度的随机字符串,用于生成响应的 ID。
  • get_response():调用 Fittentech 的 API 获取响应。
  • parse_response():解析 Fittentech 的 API 返回的响应。
Flask 路由
  • /v1/models:返回模型信息。
  • /v1/chat/completions:聊天接口,接收用户输入,调用 Fittentech 的 API 获取响应,并返回解析后的结果。

build.bat

Windows 批处理脚本,用于构建可执行文件。主要步骤包括:

  • 删除旧的可执行文件api.exe
  • 使用pyinstallerapi.py打包成一个单独的可执行文件。
  • 将生成的可执行文件复制到当前目录。
  • 删除临时生成的distbuild文件夹和api.spec文件。

Github开源地址:传送门