vercel-llm-api
无需API Key即可调用GPT-3.5等大模型的开源Python库
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
无需API Key即可调用GPT-3.5等大模型的开源Python库
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
2023年,一位化名 ading2210 的开发者做了一件很多程序员想做却不敢做的事——逆向工程了 Vercel AI Playground 的 API,写出了一个纯 Python 的 API 封装库。这个库不需要任何 API Key,不需要登录账号,直接通过 Vercel 的公开 Playground 端点,就能免费调用 GPT-3.5 Turbo、Claude Instant 等大模型。
这个项目解决了一个真实的痛点:对于只是想快速测试不同 LLM 效果的个人开发者和小团队来说,OpenAI API 的 5 美元充值门槛、Hugging Face 的排队等待、以及各类付费 API 的账单警告,都是不必要的摩擦。vercel-llm-api 用一种 hack 的方式绕过了这些障碍。
这个项目最有意思的部分不是它的功能,而是它的实现原理。Vercel AI Playground 并非一个开放的公共 API——它是 Vercel 为自家 AI SDK 提供的一个测试前端,默认假设调用者是浏览器而非程序。ading2210 的工作就是欺骗 Vercel 服务器,让它以为请求来自一个正常的 Chrome 浏览器。
整个流程大致分为三步:
项目使用 curl_cffi 库(基于 curl 的 TLS 指纹库)来模拟 Chrome 107 浏览器的 TLS 指纹。HTTP 请求头中写入完整的 User-Agent,并设置 Sec-Fetch-* 系列安全头,让 Vercel 的反爬机制无法通过浏览器指纹识别出这不是真正的浏览器。
Vercel 的服务器端有一个动态 Token 机制:每次请求前,客户端需要先从 /openai.jpeg 获取一段 base64 编码的数据,其中包含两段 JavaScript 代码。客户端用 quickjs(一个纯 Python 的 JavaScript 引擎)来执行这段代码,得到一个动态 token,再附加到后续请求头中。
值得注意的是,代码中注入了 String.prototype.fontcolor polyfill 来绕过 JavaScript 严格模式检查,这是典型的反逆向工程手法。
初始化时,客户端会并发请求 Vercel Playground 首页,从 HTML 中用正则提取出 Next.js 动态 JS 文件路径,再并发下载这些 JS bundle,最后从 bundle 中用正则匹配出所有可用模型的 JSON 配置。
依赖只有两个:quickjs(JS 执行引擎)和 curl_cffi(浏览器指纹模拟)。代码量控制在 ~200 行,零测试文件,但功能覆盖了核心场景:模型列表获取、文本生成、对话生成、流式输出。
| 提供商 | 模型 | 说明 |
|---|---|---|
| OpenAI | gpt-3.5-turbo, text-davinci-003 等 | 部分模型被锁至 Pro 层级 |
| Anthropic | claude-instant-v1 | 大多数被锁至 hobby 层级 |
| Cohere | command-medium/xlarge-nightly | 可用 |
| HuggingFace | bloom, bloomz, flan-t5-xxl, Santacoder 等 | 开源模型,可直接使用 |
| Replicate | alpaca-7b, stablelm 等 | 开源模型,可直接使用 |
安装后,只需要三行代码就能调用任意可用模型:
import vercel_ai
client = vercel_ai.Client()
for chunk in client.chat("openai:gpt-3.5-turbo", messages):
print(chunk, end="", flush=True)
整个库的设计风格非常「极客」:没有文档网站、没有类型注解,但对于目标是「快速调一下模型」的人来说,这恰恰是最不碍事的设计。
vercel-llm-api 是一个非常聪明的 hack,用不到 200 行 Python 代码逆向了一个商业 AI 平台的 API。它的价值不在于生产级稳定性,而在于提供了一个零成本、快速验证 LLM 效果的沙盒环境。对于 AI 爱好者来说,它是一个极好的学习逆向工程和 TLS 指纹绕过的实战案例;对于开发者来说,它是快速原型验证阶段的备选工具,而非生产级解决方案。