poe-api
Quora Poe 平台非官方 API 封装,可免费调用 ChatGPT/Claude(已不可维护)
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Quora Poe 平台非官方 API 封装,可免费调用 ChatGPT/Claude(已不可维护)
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
图1:poe-api 项目作者 GitHub 头像
2022年底,一位独立开发者厌倦了每次手动打开网页与 AI 对话,决定写一个程序让自己能在终端里直接调用 Quora 旗下 Poe 平台的模型。Quora 的 Poe 在当时以「免费使用 ChatGPT-3.5 和 Claude-instant」为卖点吸引了大批用户,这位开发者的目标很简单:把网页背后的内部 GraphQL API 反向解析出来,让任何 Python 程序都能像调用本地函数一样调用这些大模型。
这个项目就是 poe-api,由 GitHub 用户 @ading2210 开发,在 GitHub 上迅速积累了超过 2400 颗星,307 个分支,成为彼时最受欢迎的 Poe API 封装库之一。
Quora 从未官方开放 Poe 的 API 供第三方使用。poe-api 的工作方式是从浏览器登录 Poe 后,通过抓包工具(如 Chrome DevTools)分析网页与服务器之间的 GraphQL 请求,提取出关键的身份验证 token 和 Query ID,然后用这些信息「伪装」成正常网页用户向 Quora 后端发送请求。
这种方法天然存在几个根本性问题:一旦 Quora 修改了前端代码或认证机制,API 调用就会立即失效,库必须重新抓取新的 token 和 Query ID——这正是导致 poe-api 最终不可用的根本原因。2023年9月18日,作者 ading2210 提交了最后一次 commit,并留下了那句标志性的 logger.error("This library is unmaintained and will not work."),项目正式宣告终结,距今已近三年。
目前 GitHub 上仍有 5 个 open issue 无人处理,问题的共同特征几乎都是「API 返回 403/401/307」——正是 token 失效的典型表现。
尽管项目已不可用,我们仍可以分析其设计思路,了解一个典型逆向 API 封装库的技术实现:
1. 认证与会话管理
通过 poe.Client(token) 初始化客户端,token 来源是用户登录 Poe 后从浏览器 Cookie 中提取的 p-b 值。项目在 src/poe/hashes.py 中实现了一个自动化脚本,运行后会从 Poe 登录页面抓取最新 JS bundle,解析出 GraphQL Query 的哈希值并写入 src/poe/poe_graphql/queries.json。这就是整个库的核心「密钥」——一旦 Quora 更新了 JS bundle,原有哈希值即告失效。
2. 流式消息发送
支持通过 WebSocket 实现流式响应(streaming),这是 Poe 原生支持的特性,poe-api 通过 websocket-client 库将其暴露给调用方。使用方式简洁:传入 bot 名称(如 capybara 代表 ChatGPT)和消息内容,即可以迭代器方式逐字获取 AI 回复:
import poe
client = poe.Client(token)
for chunk in client.send_message("capybara", "Hello"):
print(chunk["text_new"], end="", flush=True)
3. 自定义 Bot 创建
支持通过 create_bot() 和 edit_bot() 方法动态创建并修改自定义 Bot,底层的 Bot 对象信息通过 GraphQL 查询获取并缓存在 client.bots 字典中。
4. 建议回复回调
提供 suggest_callback 机制,在 AI 完整回复后几秒触发,用于获取 Poe 的「推荐回复」建议。
整个库的核心代码集中在 src/poe/__init__.py(约 26KB),依赖极简:
httpx:现代 HTTP 客户端,处理同步请求和重试逻辑quickjs:JavaScript 运行时,用于执行某些前端加密逻辑websocket:实现长连接流式响应secrets / string:生成随机 nonce 用于认证代码结构为单包(poe)设计,包内含 poe_graphql/ 子目录存放预编译的 GraphQL Query 哈希。整体没有复杂的依赖注入或抽象层,属于典型的「快速原型」风格代码。
poe-api 的不可用性揭示了逆向工程 API 的根本性风险:服务提供方的任何一次前端更新都可能让你的工具瞬间报废。这种脆弱性在 2023 年 9 月变成了现实:Quora 更换了认证机制,poe-api 无法自动适配,所有依赖它的项目被迫寻找替代方案。
讽刺的是,Quora 随后在 2023 年底正式推出了 Poe API,虽然需要付费订阅,但提供了稳定、官方支持的接口。这也侧面印证了那句老话:逆向工程永远只是临时方案。
此外,该项目使用 GPL-3.0 许可证,但其核心依赖 quickjs 为 LGPL 许可,存在一定的许可证兼容性争议。
尽管已不可用,poe-api 在 GitHub 上仍保留着 2476 颗星,说明它在活跃期间确实帮助了大量开发者。其代码组织方式、GraphQL 逆向思路、以及流式响应的实现方式,至今仍有参考价值。对于想要理解「如何逆向解析 Web API」的学习者来说,这个项目的源码仍是一份珍贵的案例。
对于实际使用者,建议转向:
poe-api 的故事是开源生态中一个典型的「昙花一现」案例:它证明了社区快速响应的创造力,也提醒我们——任何依赖平台内部实现的工具,都需要随时做好失效的准备。
图1:poe-api 作者 ading2210 的 GitHub 头像
数据来源:GitHub API 采集,项目最终活跃时间 2023-09-18,当前状态为不可维护(unmaintained)。分析日期:2026-06-10。