1. 项目缘起:为什么我们需要一个聚合的AI工具库
如果你和我一样,是个重度AI工具使用者,每天要在ChatGPT、Claude、Gemini之间来回切换,同时还得操心API Key的余额、Token的消耗,以及在不同设备上保持体验一致,那你一定懂我的痛点。桌面端还好说,浏览器开几个标签页就行,但到了手机上,尤其是想用Siri或者快捷指令快速调用AI时,麻烦就来了。每个模型都有自己的App、自己的API接口格式、自己的计费方式,更别提那些时不时冒出来的免费API源,用起来既惊喜又忐忑——惊喜的是免费,忐忑的是不知道什么时候会失效。
这个项目的初衷,就是把我自己折腾了许久的解决方案打包分享出来。它不是一个商业产品,而是一个“数字游民”的生存工具箱。核心功能很简单:聚合多个主流AI模型的API调用,并封装成一个iPhone快捷指令,让你在手机上也能像在电脑上一样,方便、免费(或低成本)地使用ChatGPT、Claude、Gemini等模型,并且能实时计算每次对话消耗的Tokens,做到心中有数。
听起来是不是有点像“AI版瑞士军刀”?没错,它的价值就在于整合与便捷。市面上虽然有无数独立的AI App,但它们往往绑定单一服务商,功能臃肿,且高级功能需要订阅。而通过API+快捷指令的方式,我们把选择权和控制权拿回了自己手里。你可以自由切换后端模型,用最合适的工具处理不同任务;可以接入那些社区分享的、有时效性的免费API端点,降低成本;最重要的是,通过快捷指令,你能实现一些原生App做不到的自动化场景,比如收到邮件后自动总结、看到长文章一键提取要点、甚至结合地理位置信息生成行程建议。
2. 核心组件拆解:API、Key、快捷指令与Token计算
这个项目看似简单,背后其实由几个关键的技术模块支撑。理解它们,你才能玩得转,甚至自己动手定制。
2.1 API与Key:模型的通行证与收费站
首先得搞清楚API和Key是什么。你可以把AI模型(如GPT-4)想象成一个超级大脑,它住在遥远的服务器上。API(应用程序编程接口)就是通往这个大脑的“标准电话线路”。它规定了你怎么呼叫它(发送什么格式的请求)、说什么话(输入文本的结构)、以及它怎么回你(返回数据的格式)。OpenAI有OpenAI的API标准,Anthropic(Claude)有Anthropic的,彼此不通用。
而API Key,就是这条电话线路的“密码”和“计费卡”。每次你通过API发送请求,服务器都要验证你的Key,确认你有权限使用,并且从这张卡上扣除相应的费用。费用通常基于你消耗的Tokens来计算。
这里就引出了我们项目的一个核心“骚操作”:使用免费或共享的API端点。除了官方渠道,网络上经常有研究机构、开源项目或个人搭建的API代理服务,它们可能因为各种原因(如学术研究、流量测试、公益分享)提供限时免费的访问权限。这些端点的地址(URL)和Key往往是公开或半公开的。我们的项目就需要维护这样一个可更新的列表,作为后端的备选资源池。
注意:使用这类免费资源必须遵守几个原则:1.尊重服务条款:很多免费API明确禁止商用或高频请求。2.风险自担:稳定性、响应速度和数据隐私无法保证,不建议处理敏感信息。3.心怀感激:这是社区共享的精神,如果服务稳定,可以考虑捐赠支持维护者。
2.2 iPhone快捷指令:移动端的自动化中枢
为什么是iPhone快捷指令?因为它几乎是iOS系统上最强大、最通用的自动化工具,而且能与系统深度集成。你可以通过它调用Web API、处理文本、调用Siri、与其它App交互。
在这个项目中,快捷指令扮演了“总控台”的角色。它的工作流程一般如下:
- 触发:你可以通过点击图标、呼叫Siri、分享菜单等多种方式启动它。
- 输入:获取你输入的文本、或从相册选择的图片(用于GPT-4V等视觉模型)。
- 配置与选择:弹出菜单让你选择本次要使用的AI模型(如GPT-3.5, GPT-4, Claude等)。
- 网络请求:根据你的选择,组合对应的API端点URL、API Key、以及符合该API规范的请求体(包括你的输入文本、模型参数等)。
- 发送与接收:向选定的API端点发送HTTP POST请求,并等待返回结果。
- 解析与展示:从返回的JSON数据中提取出AI回复的文本内容。
- Token计算与记录:从API响应头或响应体中提取本次对话消耗的Tokens数量,并可能将其记录到备忘录或某个文件中,方便你追踪使用量。
- 输出:将AI的回复内容显示在通知中心、拷贝到剪贴板,或者直接朗读出来。
通过快捷指令,我们就把一个需要打开特定App、复制粘贴、查看余额的复杂过程,简化成了“对Siri说句话”或者“点一下”的简单操作。
2.3 Token计算:成本控制的仪表盘
Token是AI模型理解文本的基本单位。对于英文,大约1个Token对应0.75个单词;对于中文,一个字大概对应1-2个Token。每次对话,输入的文本(Prompt)和AI输出的文本(Completion)都会产生Token消耗。
计算Token至关重要,尤其是使用付费API或额度有限的免费API时。它能让你:
- 预算管理:清楚知道一段对话花了多少钱,避免账单爆炸。
- 优化提示:意识到你的问题是否过于冗长,从而学习编写更精炼、高效的提示词(Prompt Engineering)。
- 规避限制:每个模型都有上下文长度限制(如GPT-4 Turbo是128K Tokens),实时计算可以帮助你避免在长对话中超出限制,导致历史信息丢失。
大多数官方API在响应中都会返回usage字段,明确给出了本次请求消耗的prompt_tokens,completion_tokens和total_tokens。我们的快捷指令需要解析这个字段,并将其清晰地展示给你。对于少数不返回用量信息的免费API,我们可以使用一些开源的近似计算库(如OpenAI官方的tiktoken库的算法)在本地进行估算,虽然不100%精确,但具有重要参考价值。
3. 实战构建:从零搭建你的AI快捷指令
理论说完了,我们动手做一个。这里我会以构建一个支持GPT-3.5和Claude的简易版快捷指令为例,手把手带你走一遍流程。你需要准备一部iPhone,并确保“快捷指令”App已更新到最新版本。
3.1 第一步:API资源准备
这是最核心也最动态的一步。你需要去寻找可用的API端点和Key。
寻找免费API源:可以在GitHub、一些技术论坛或社群中搜索“Free OpenAI API”、“Claude API reverse proxy”等关键词。请务必谨慎甄别,优先选择Star数多、近期有更新的开源项目。一个常见的模式是,开发者会提供一个统一的网关地址,然后通过请求头中的
Authorization: Bearer sk-xxx或x-api-key字段来指定不同的后端模型。- 示例格式:
- 端点URL:
https://api.openai-proxy.org/v1/chat/completions - 请求头:
Authorization: Bearer sk-your-free-key-here - 请求体:标准的OpenAI API格式。
- 端点URL:
- 示例格式:
获取(临时)API Key:这些免费服务通常会提供一个公开的Key,或者需要你在其网站简单注册获取。记住,这些Key很可能有速率限制、每日限额或有效期。
整理你的资源库:建议你在备忘录里建立一个表格,记录不同模型的端点、Key、限制和上次测试可用日期。
| 模型 | API端点 (URL) | API Key | 状态 | 限制说明 | 最后测试 |
|---|---|---|---|---|---|
| GPT-3.5 | https://api.xxx.com/v1/chat/completions | sk-abc123... | 可用 | 100次/天,2024年底前有效 | 2024-10-27 |
| Claude | https://claude-proxy.xxx.com/v1/messages | sk-ant-xxx... | 可用 | 不稳定,偶尔超时 | 2024-10-26 |
| Gemini | https://gemini-api.xxx.com/v1beta/models/gemini-pro:generateContent | AIza... | 失效 | Key已撤销 | 2024-10-25 |
3.2 第二步:在快捷指令中创建网络请求
打开“快捷指令”App,点击右上角“+”创建新快捷指令。
- 添加快捷指令名称:比如“AI助手(多模型)”。
- 添加“文本”操作:第一个操作,输入你的提示词,比如“请用中文解释量子计算”。或者更常用的,添加一个“要求输入”操作,弹框让你临时输入问题。
- 添加“选择菜单”操作:这是实现模型切换的关键。在菜单选项中,列出你支持的模型,如“GPT-3.5 Turbo”、“Claude 3 Haiku”。菜单的每个选择会输出一个对应的值。
- 添加“如果”条件操作:我们需要根据菜单的选择,为不同的模型配置不同的API参数。将“如果”的条件来源设置为上一步“菜单”的输出。
- 如果“菜单”是“GPT-3.5 Turbo”:
- 添加“文本”操作,填入GPT-3.5的API端点URL。
- 添加“文本”操作,填入对应的API Key。
- 添加“文本”操作,构建JSON请求体。这是最关键的一步。OpenAI的Chat API格式如下:
你需要用“文本”操作拼接这个JSON,其中“你输入的提示词”部分,用变量插入第一步中你输入的文本。{ "model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "你输入的提示词"}], "temperature": 0.7 }
- 否则,如果“菜单”是“Claude 3 Haiku”:
- 添加“文本”操作,填入Claude的API端点URL(注意,格式与OpenAI不同)。
- 添加“文本”操作,填入Claude的API Key。
- 添加“文本”操作,构建Anthropic格式的请求体。Claude的消息格式是:
{ "model": "claude-3-haiku-20240307", "max_tokens": 1024, "messages": [{"role": "user", "content": "你输入的提示词"}] }
- 如果“菜单”是“GPT-3.5 Turbo”:
- 添加“获取URL内容”操作:这是执行网络请求的核心。
- URL:填入上一步“如果”分支中设置的URL变量。
- 方法:选择“POST”。
- 请求头:添加以下两个关键头:
Content-Type:application/jsonAuthorization:Bearer 你的API Key变量(对于Claude,可能是x-api-key: 你的Key变量)
- 请求体:选择“文件”,然后选择上一步构建的JSON文本变量。
- 添加“从输入中获取词典值”操作:对上一步网络请求的“URL内容”结果进行操作。API返回的是JSON文本,我们需要解析它。
- 获取:
choices下的0下的message下的content(针对OpenAI格式)。 - 对于Claude,路径可能是
content下的0下的text。 - 这个操作的结果就是AI返回的纯文本回复。
- 获取:
- 添加“显示结果”操作:将解析出的文本内容显示出来。
至此,一个最基础的多模型AI调用快捷指令就完成了。你可以运行测试一下。
3.3 第三步:集成Token计算功能
要让我们的工具更专业,必须加入Token计算。这需要根据API的响应来调整。
- 修改“从输入中获取词典值”操作:在获取回复文本的同时,我们还需要获取
usage字段。对于OpenAI格式,可以并行地再添加一个“从输入中获取词典值”操作,获取usage下的total_tokens值。 - 添加“数字”操作:将获取到的
total_tokens值转换为数字。 - 组合最终输出:使用“文本”操作,将AI回复和Token消耗信息组合起来。例如:
【AI回复】: {{AI回复文本}} --- 【本次消耗Tokens】:{{total_tokens}} - (进阶)记录历史:如果你想记录每次的使用情况,可以添加“追加到备忘录”操作,将模型名称、时间、Tokens数追加到某个指定的备忘录中,这样就形成了一个简单的使用日志。
3.4 第四步:添加视觉模型支持(GPT-4V)
如果你想支持像GPT-4V这样的视觉模型,流程会复杂一些,因为需要处理图片。
- 修改输入方式:将最初的“文本输入”改为“选择照片”+“要求输入”。先让你选择照片,再输入关于这张照片的提问。
- 编码图片:快捷指令无法直接发送图片文件,需要将图片转换为Base64编码。添加“对输入进行Base64编码”操作,对选择的照片进行处理。
- 构建复杂的请求体:支持视觉的OpenAI API请求体格式不同,
content字段是一个数组,可以包含文本和图片对象。你需要构建如下的JSON:
这需要在“文本”操作中通过变量拼接精心构建,是快捷指令编辑中最考验耐心的一环。{ "model": "gpt-4-vision-preview", "messages": [{ "role": "user", "content": [ {"type": "text", "text": "你输入的提示词"}, { "type": "image_url", "image_url": { "url": "data:image/jpeg;base64,{{Base64编码的图片字符串}}" } } ] }], "max_tokens": 300 }
4. 避坑指南与实战经验分享
看起来步骤清晰,但实际搭建和使用的过程中,坑一点都不会少。下面是我踩过的一些坑和总结的经验。
4.1 免费API的稳定性与失效处理
免费午餐不会永远有。你收集的API和Key,很可能在一周甚至几个小时后失效。
- 症状:快捷指令运行时,长时间无响应,最后报错“未能完成操作”、“无法连接到服务器”或直接返回类似
{"error": {"message": "Invalid API Key"}}的JSON。 - 排查:
- 首先,检查网络连接。尝试用浏览器访问同一个API端点(可能需要借助一些测试工具如Postman的网页版)。
- 如果网络正常,大概率是Key失效或额度用尽。去你获取该资源的原页面查看公告。
- 更换备用Key或备用端点。这就是为什么我们需要一个资源列表。
- 经验:
- 永远要有B计划:在你的快捷指令“选择菜单”里,至少为每个主流模型配置两个不同的API源。
- 设置失效提醒:可以在快捷指令开头添加一个注释,写上该配置的最后更新日期。或者更高级一点,用“获取URL内容”先调用一个简单的健康检查接口(如果有的话)。
- 尊重并感恩:遇到好用的免费服务,如果提供者有捐赠渠道,在经济允许的情况下支持一下,能让这些服务活得更久。
4.2 快捷指令的复杂性与调试
快捷指令的图形化编辑界面对于复杂逻辑来说,有时会显得笨拙和难以调试。
- 变量管理混乱:当“如果”分支很多时,变量名容易混淆。务必使用有意义的变量名,如“GPT-API-URL”、“Claude-Request-Body”。
- JSON格式错误:这是最常见的错误。一个多余的逗号、少一个引号,都会导致API返回400错误。调试技巧:在“获取URL内容”操作之前,先添加一个“显示通知”或“快速查看”操作,把你构建好的JSON文本显示出来,复制到在线的JSON校验工具(如JSONLint)里检查格式。确保变量插入的位置没有破坏JSON结构。
- 超时问题:AI生成可能需要十几秒甚至更久。在“获取URL内容”操作中,将“超时”设置为30秒或更长,避免因网络延迟或模型思考时间长而误判为失败。
- 错误处理缺失:默认流程一旦出错,快捷指令就静默失败了。可以添加“如果‘获取URL内容’的‘结果’有错误”的条件分支,在分支里用“显示通知”把错误信息展示出来,比如“Claude API请求失败,请检查网络或Key”。
4.3 Token计算不准与上下文管理
- 非官方API的Token计算:很多反向代理或免费网关为了节省成本,可能不会返回准确的
usage字段,或者根本不返回。此时我们的计算会失效或为0。- 解决方案:对于不返回用量的API,可以暂时不显示Token信息,或者标注“用量信息未提供”。如果非要估算,可以考虑在快捷指令外,用Python脚本(在电脑上)基于
tiktoken库预先计算输入Token数,但这超出了快捷指令的能力范围。
- 解决方案:对于不返回用量的API,可以暂时不显示Token信息,或者标注“用量信息未提供”。如果非要估算,可以考虑在快捷指令外,用Python脚本(在电脑上)基于
- 长上下文遗忘:我们构建的是单次问答指令,不具备多轮对话记忆。每次调用都是独立的。
- 进阶思路:要实现简单的对话记忆,可以借助iPhone的“文件”App。每次对话后,不仅输出回复,还将本次的“用户消息”和“AI回复”以特定格式追加到一个文本文件中。下次提问时,先读取这个文件,将历史对话作为上下文一起发送给API。但这会迅速消耗Token,且需要非常精细的文件操作和上下文截断逻辑(当Token快超限时,删除最早的历史记录),实现起来非常复杂,会极大降低快捷指令的稳定性和运行速度。因此,对于移动端快捷指令,我建议将其定位为“单次任务处理工具”,而非“长对话伴侣”。复杂的多轮对话,还是交给官方App更合适。
4.4 安全与隐私警示
这是最重要的一条。
- API Key就是密码:你使用的API Key,无论是免费的还是付费的,都不要分享给任何人,也不要明文写在公开的快捷指令分享链接中。
- 慎用免费代理:你的所有对话内容(Prompt)都会经过第三方代理服务器。请绝对不要通过这些免费API处理个人隐私信息、公司商业秘密、密码或其他敏感数据。
- 快捷指令的权限:你创建的快捷指令会请求网络和可能访问你的相册(如果支持视觉)。只从可信来源(如你自己创建或熟知的分享)添加快捷指令。
5. 超越基础:进阶玩法和优化思路
如果你已经成功搭建了基础版,并且稳定运行了一段时间,那么可以看看下面这些进阶玩法,让你的AI工具箱更加强大。
5.1 创建专属的“AI指令集”
不要只做一个“万能问答”指令。根据场景,创建多个细分指令,效率更高:
- “翻译官”指令:固定使用GPT-3.5,预设Prompt为“请将以下内容翻译成英文/日文/...”,你只需要输入文本即可。
- “文案润色”指令:固定使用Claude(因其在文本创作上表现优异),预设Prompt为“请润色以下文案,使其更专业、更有吸引力:”。
- “代码解释”指令:固定使用GPT-4或Claude,预设Prompt为“请解释以下代码的功能:”。
- “图片分析”指令:固定使用GPT-4V,专门用于处理图片提问。
将这些指令添加到主屏幕,或者通过“背面轻点”、“辅助触控”等手势触发,真正实现一键调用。
5.2 与iOS系统深度集成
快捷指令的强大之处在于自动化。
- 朗读最新文章:创建一个“阅读摘要”指令,与“获取网页内容”结合,先抓取文章正文,再调用AI总结,最后用“朗读文本”输出。早上通勤时让Siri执行这个指令,听新闻摘要。
- 自动回复消息:收到特定联系人(比如老板)的短信或邮件时,自动将内容转发给AI生成草稿回复(注意隐私!此操作需极其谨慎,且最好手动确认后再发送)。
- 图片信息提取:在相册中选中一张包含文字的截图或照片,通过分享菜单运行你的视觉AI指令,直接提取其中的文字信息或进行总结。
5.3 引入自建后端进行管理
当免费API变得不可靠,而你又有一定的技术能力时,终极解决方案是自建一个轻量级的后端服务。
你可以在家里的树莓派、旧电脑,或者便宜的云服务器上,部署一个简单的Python Flask或Node.js服务。这个服务的作用是:
- 统一接口:对外只提供一个简单的API接口(比如
/ask)。 - 密钥管理:在后端配置你的付费API Key(如OpenAI官方、Anthropic官方等)。这样Key就不会暴露在手机端的快捷指令里。
- 模型路由:接收手机发来的请求(包含模型选择和问题),在后端转换成对应官方API的格式并调用。
- 用量统计与缓存:在后端数据库里记录每次请求的Token消耗,生成可视化报表。甚至可以缓存一些常见问题的答案,节省Token。
然后,你的iPhone快捷指令就只需要和这个你自己的后端通信即可。这样做的最大好处是安全、稳定、可管理。你可以随时在后端更换API供应商、调整模型,而无需修改手机上的每一个快捷指令。当然,这需要你拥有服务器和基本的运维知识。
从四处寻找不稳定的免费API,到整合成一个便捷的移动工具,再到为了稳定和安全考虑自建服务,这个过程本身就是一个非常棒的学习路径。它涉及了API调用、网络协议、数据格式、移动端自动化,甚至简单的服务端开发。这个“AI瑞士军刀”项目,最终带给你的可能远不止一个方便的工具,更是一套应对数字世界复杂性的方法论和动手能力。