AI自由的经济账:个人篇
太长不读版总结(by Notion AI,真香):
本文介绍了个人使用 AI 的投资回报率的评估方法,以及对于追求效率的个人使用 AI 的建议。同时,提出了个人 AI 应用开发的流程建议和控制成本的思路。
说明:本文所提到的 AI 都是指最近应用突然流行起来的生成式 AI 的应用(如 ChatGPT、Copilot)或服务(OpenAI、HuggingFace),不包括其它已经成熟应用的 AI 技术(例如翻译、TTS、OCR、指纹识别等)。
用过 AI 的人都会被其带来的效率提升所折服,比如 Kent Beck。
来源:https://tidyfirst.substack.com/p/90-of-my-skills-are-now-worth-0
Kent Beck,著名软件工程师与作家。他是Smalltalk软件的开发者,设计模式的先驱,测试驱动开发的支持者,也是极限编程的创始者之一。曾为Smalltalk写作了SUnit单元测试架构,之后将这个架构移植到Java,写作了JUnit。(总结自维基百科)
我也一样,生活琐事可以问 ChatGPT,写文章有 Notion AI 帮助,写代码有 Github Copilot 补全,还有令人期待的 Office 365 Copilot。如果觉得这些 AI 的功能不爽,我还有点编程能力,可以自己用 LangChain 造轮子。我似乎快要被 AI 武装到牙齿,未来的生活想想就要笑醒了。
但 AI 自由真的就指日可待了吗?
不当家不知柴米贵
对于出差吃外卖,在家吃现成(感谢家里领导)的我来说, ”肉多少钱一斤,盐多少钱一袋” 这样的菜市行情是基本不会关心,也不想关心的。当然前提是我的工资足够我吃肉喝汤(感谢甲方和东家)。
我想当然地以为使用 AI 应该和吃肉喝汤差不多。我一直在使用免费的 ChatGPT,OpenAI 也提供了免费的 API 调用额度。我还在朋友圈看到过这样的说法:OpenAI 提供的 API 太便宜了,几乎只象征性地收了电费。再加上我的 ChatGPT 没有办法设置 Payment methods,没有信用卡 OpenAI 自然就扣不了费,如果超出了限制 OpenAI 应该不能用而不是继续扣款。(之前工作的公司曾经犯过类似的错误,AWS 绑定了大佬的信用卡,本来只是想“尝试“一下流水线,但构建频率上去之后,信用卡账单爆炸,发现时已经来不及了)
我放心地玩起了 LangChain,奔着 10X 效率而去。刚开始的时候,写写 hello world,改改提示词,确实没有感受,直到开始使用 Chain 做万字长文的总结(见上篇文章)。第一天调试代码(两年没写 python 手生);第二天部署 Streamlit 尝试效果,写完了文章;第三天,哦豁……免费的 API 额度用完了。
怎么能让额度阻止我的 10X 效率之路呢!我得先把这三天的账算一算,看看自己的额度怎么这么快就花完了。
算算这本帐
LangChain 是一个开源框架,只是负责集成 AI(语言模型)与其它工具/服务,本身不会产生额外的费用。费用全部产生来自对 OpenAI 的 API 调用。
OpenAI 如何计费
OpenAI 是按照每次和模型交互(也就是请求)的 token 数量(包括输入和输出)计费的:sum(一次请求的 token 数量/1000 X 模型价格)
不同的API 背后的模型不同,价格也不同,而且差距还蛮大的(10~100 倍)。这里我摘出了两个模型(这几天我使用的就是这两个模型)的价格。
模型 | 说明 | 单价 |
---|---|---|
gpt-3.5-turbo | 对话模型,免费的 ChatGPT 使用的这个模型,LangChain 的 ChatOpenAI 也是这个模型。 | 每一千 token 0.002 美金 |
davinci | LangChain 的 OpenAI 默认使用了这个模型,是单轮循环指令中最强大的,也是最贵的。能力和 gpt-3.5-turbo 相当。 | 每一千 token 0.02 美金 |
关于价格和 Token 的更多信息请查阅:https://openai.com/pricing#language-models
这里一次请求使用的 token 数量是估算费用的关键。
一次请求用多少 Token
OpenAI 说可以将 token 视为用于自然语言处理的单词片段。对于英文文本,1 个 token 约为 4 个字符或 0.75 个单词。作为参考,莎士比亚的著作大约有 900,000 个英文单词或 1.2M 个令牌。
如果是中文的万字长文呢?OpenAI 贴心地提供了 token 计算器(https://platform.openai.com/tokenizer),我们直接把中文粘贴进去试试:
- 从要总结的万字长文中摘取了一段话(token 不到是文字数量的 2.5 倍,我尝试了长短不同的多段中文,比例都差不多,读者们可以自行尝试)
- 总结文字内容的提示词模板(使用英文更节约一些)
- 按提示词模板格式化长文内容组成完整的 prompt(token 数量几乎等于两者之和,并没有什么冗余)
另外,还要注意的是提示词是输入,OpenAI 返回的结果也要算在内。我们按照返回的总结篇幅为原文的十分之一计算。
我拍脑袋估算了一下万字长文使用的 token 数量:
- 万字长文约 25000 token
- 返回的总结应该不到原文的十分之一,算 2500 token。
- 使用 MapReduce 拆成多次请求,按 20 次算(应该足够了),每次提示词 30 token(多给 5 token 冗余),提示词总共耗费 600 token。
总结一篇万字长文使用的 token 估算约为 28100 token(记住这个数字)。
三天的账单分析
来看看我的实际调用情况。
从 OpenAI 给出的 API 使用数据(Usage)可以看出,三天(截图中 5 月 17 日最多,18 日还有 30 次请求)一共进行了 **115 次大语言模型(Language model)的调用请求(request),共计消费 21.15 美金。**OpenAI 提供了每个月 18 美元的额度(下个月满血复活),用完之后就不能调用 API 了(没有绑定信用卡扣不了钱)。
进一步打开看看每次请求使用的 token 数量(截取了 5 月 17 日两次典型的万字长文总结运行情况):
不看不知道,一看吓一跳。LangChain 的 SummarizeChain 总结一篇万字长文平均要使用近 10w token,是之前估算的 4~5 倍!(请求次数确实没有超出我们估算的20次)MapReduce不愧是大规模的并行处理算法。
用 LangChain 的 MapReduce SummarizeChain 总结一篇万字长文需要2美元。(按照 davinci 的价格 0.02/1k token 的费用计算)。
SummarizeChain 用的 token 为什么比估算多?有没有办法减少 token?这些问题等我搞清楚了再告诉大家。
估算使用 AI 的 ROI
我以自己的工作为例,来算一下使用 AI 的 ROI(投资回报率)。
假设我每天写 2 小时代码(产出 50 行),写 1 小时文字(产出 1000 字),只有这两部分工作 AI 可以辅助我(效率应该还行吧)。
成本:把工作转换成文字量,参照基本场景按比例计算费用
我们现在有了一个容易理解、可供参考的费用估算基本场景:用AI总结一篇万字长文需要2美金
这是一个 LangChain 菜鸟有些浪费的实现,还有优化的空间。比如换成更便宜的模型 ada,单价只有 davinci 的十分之一,那么使用 ada 模型总结万字长文只用 0.2 美元。读者有兴趣可以把后文提及的成本数字除以 10,即便投入减少 10 倍,基本也不会影响我们的决策。
我们可以借鉴用户故事的估算方法,以这个场景的复杂度(词语数量)为参照,分析下面这些场景:
- 用AI修订一篇万字长文
- 用AI编写300行代码
- 用AI总结30分钟的会议
- 用AI写一份商业合同….
这些场景复杂度和参照场景相当(都是词语数量相当的文本生成工作),用AI 做一次差不多也是2美金(不由得抓紧了钱包)。更简单或更复杂的工作如果可以转化为一定词语数量的文字工作,按比例进行估算。比如:生成一个单元测试方法的代码,代码约为40行,大约需要500~800个词语,词语数量约为万字长文的十分之一,估算 AI 完成需要约 0.2 美元。读者可以找些自己工作的场景算算,这里就不再举例了。
我每天需要 AI 给我编写 500 行(从中选出最后我需要的,50 行以下吧),差不多需要 4 美金。
我每天需要 AI 帮我生成一万字文章(从中选出最后我需要的,1000 字以下吧),差不多需要 2 美金。
我每天投入 AI 的成本是 6 美金,每月的成本就是 150 美金(有时周末也会自觉码字,算 25 天)。
目前每月 150 美金就能让我 AI 自由。
回报:和计算工作效率的提升比例相同占比的工作收入
我们可以分析一下自己的工作内容(可以刻意观察一天/一周的数据):
有多少比例的工作符合 AI 辅助的场景
利用番茄钟统计一下各种工作时间,按工作时间计算比例
例如:我每天需要写 2 小时代码,1 小时文字,只有这两部分工作 AI 可以辅助我。
AI 辅助场景可以帮我提升多少效率
按照产出占比计算,比如代码生成占比。
例如:按照我的 Streamlit App 的代码编写经验,提升 70%;
或者按照缩短的工作时间计算比例(同样可以用番茄钟技术)
例如:原来的文字工作需要 1 小时,现在只需要 40 分钟,缩短了33%。
编码 2 小时/工作 8 小时 * 70% + 文字 1 小时/工作 8 小时 * 33%
我的工作效率总共提升了约为 21%(抹去了千分位以下的零头),可以换算成工作收入的 21%。
ROI
我每月使用 AI 的成本是 150 美金,回报是 21% 的收入(肯定不止 150 美金)。
我愿意用 150 美金换来 21% 的效率提升,有更多的时间来放空充实自己吗?
我当然愿意,因为实际上根本花不了这么多钱…
给个人效率追求者的建议
以下建议暂不考虑使用开源或自有部署的大模型。
以我的经验,追求个人效率还不用到自己部署/微调语言模型(虽然开源大语言模型正在拉低门槛和成本,目前也还未达到个人能够消费的水平),OpenAI 及其应用提供的能力已经足够强大。如果客观条件限制,不能使用 OpenAI 或是不放心数据交给 OpenAI 的安全、版权以及伦理道德的保障,我会在 AI 自由经济账的企业篇(还在构思)中继续探讨,敬请期待。
2X以下的青铜玩家
如果你是一位知识工作者,有许多工作(超过三分之一)会用到各种语言文字(讲话、文稿、记录、翻译,自然语言、编程语言都算),建议直接购买各种 “Copilot” 副驾应用(不是特指 Github 的 Copilot),没什么好犹豫的。
以下是我购买的应用,个人定价简直是业界良心:
应用 | 月费 | 提供的功能 | 按我的成本算法估算 |
---|---|---|---|
GitHub Copilot | 10 美金(按年订阅只要 100 美金) | 支持各种 IDE 编辑器,随时可以帮你补全代码 | 可以生成 2500 行代码 |
Notion AI(真香) | 10 美金 | 直接支持总结、修订、翻译各种功能,你还可以写自己的提示词 | 可以总结 5 篇万字长文 |
ChatGPT | 20 美金(Plus 才需要) | 免费的就什么都可以生成:菜谱、路书、代码、诗歌, Plus 还有插件链接各种服务 | 懒得算了,肯定做不了那么多 |
还有不少应用需要提供自己的 OpenAI key。放心,2X 玩家的日常应用级使用不会超出限额的。
Chrome 插件 ChatGPT Sidebar(我的额度超出了…),可以在任何页面和 OpenAI 交互。
Bob,一款 macOS 平台的翻译和 OCR 软件,可以使用 Open AI 进行翻译。
如果以上应用都不符合你的场景,你也可以按图索骥,选择适合自己的副驾(个人定价一般不会超过 50 美金),而且都会提供一定的试用额度。你可以利用这些免费额度,按照我前面介绍的方法,评估一下使用这种副驾的 ROI,再决定是否付费。
追求10X的王者玩家
这部分玩家已经不满足文字工作的效率提升了,他们想要进一步的:
- 自动化(比如从各种来源加载数据,消除重复劳动,甚至让 AI 自己做决策)
- 定制化(按照自己的需要微调大语言模型)
- 变现(比如 Caryn Marjorie,她的故事读者们自己百度吧)。
而编程能力就是这部分玩家的「 究极手 」,他们已经进阶到了个人 AI 应用的开发者。
他们需要通过 API 和 OpenAI 打交道并包装成各种应用,这一个 AI 应用开发的过程,会多出一笔 AP开发成本。比如我这三天全部的费用都花在了开发过程中(稍后分析)。
了解 OpenAI API 的价格水平
Open AI 提供的服务是模型能力 API。开发者自然会用类似的计算能力 API 来进行对比,比如最成熟的 AWS lambda。
AWS Lambda 是一项无服务器计算服务,让您无需预置或管理服务器即可运行代码……借助 Lambda,您几乎可以为任何类型的应用程序或后端服务运行代码……我们将根据您函数的请求数量和执行代码所花费的持续时间向您收费。(来自 AWS 官网)
先感受一下 AWS Lambda 的请求单价:
零我不想数了,光看单位(每 GB 每秒)就开心不起来(一篇万字长文才 50KB 不到)。
假如开发过程中使用的是 AWS Lambda 计算服务(1024MB 内存),和 5 月 17 日一天一样用掉 85 次请求,我会花掉多少钱?
- 官方计算器(https://calculator.aws/#/addService/Lambda)给出的结果
- 三方计算器给出的结果作为交叉验证(https://cost-calculator.bref.sh/)
差不多同样的价格,AWS Lambda 可以用一个月, OpenAI(davinci)只能用一天。
从用户的角度来看确实不便宜(毕竟 AWS 都有人嫌贵,下云之后节省了一大笔钱),勉强到了 Simon Wardley 所谓的大宗商品(Utility)演化阶段。但还是不能像水电一样想用就用的程度。
从服务提供商的角度来看,AI 模型使用的芯片(GPU/TPU)比普通计算使用的(x86/ARM)更贵,也更耗电。也许现阶段,OpenAI 的成本已经控制到极致了。
控制 AI 应用开发的投入
仍然以我的投入作为参照:5 月 17 日一天频繁调试 LangChain 用了 85 次请求,大约耗费 20 美金。每月的单人开发的投入约为 500 美金(还是以 25 天计算)。对于个人开发者来说这是一笔不小的投入。如果长文总结功能无法变现,我一定不会像这样持续投入。
那么,成本有没有办法控制呢?
AI 应用显然属于软件开发的范畴,同样可以用软件开发的过程和实践进行改进。我们先看看个人 AI 应用开发过程应该是怎样的。
个人 AI 应用开发过程
我们可以参考经典的软件研发过程,但个人开发会承担多个角色,反而减少了很多传递/转移/翻译知识的沟通过程。
参考 RUP(软件研发过程里阶段算少的),我们可以把个人 AI 应用开发的前两个阶段合为一个,变成分析设计(inception + Elaboration)、编码实现(Construction)、**上线发布(transition)**三个步骤。
为什么要分成这三步?回顾一下我自己开发 Streamlit App 的经历,会发现三个步骤之间有明显的知识转移。
步骤 | 工作回顾 | 知识转移 | 产生的成本 |
---|---|---|---|
第一步:分析设计 | 对总结文章的需求细化/实例化(总结中文博文);发现业务的限制(长文不能放在一起请求里);决定采用分段总结再综合总结的 MapReduce 算法;使用 ChatGPT (免费)来做一下算法的尝试,并写好提示词。 | 把需求转换成提示词 | ChatGPT 免费 |
第二步:编码实现 | 查看 LangChain 文档/教程,了解 Prompt/Model/Chain 等模型,并进行简单的建模,然后使用 Python 编程语言实现总结方法;使用 OpenAI 模型进行调试。 | 把提示词转换成 Python 方法(依赖 LangChain 框架) | 调试时大量调用了 OpenAI 的能力,成本主要在这里。 |
第三步:上线发布 | 查看 Streamlit 文档/教程,了解 Stream UI 的声明式语法;在 Copilot 帮助下写完 App 代码,本地运行服务进行调试;提交代码到 GitHub,在 Streamlit 上配置 key 完成发布。 | 把 Python 方法转换成 Streamlit 声明式 UI | 调试时使用了 OpenAI 的能力,产生了费用,上线后用户不不多,OpenAI 还没来得及扣费 |
控制 AI 投入成本的工程实践思路
我还在上表中分析了各个步骤使用成本:
- 分析设计时使用 ChatGPT 调整提示词并没有产生费用;
- 编码实现和上线发布时,调试使用 OpenAI API 产生的费用占了大头;
- 应用公开发布后,用户使用可能会产生 OpenAI API 费用。
这里有些解决问题的思路:
尽可能多地使用 ChatGPT 验证提示词,减少后期调试提示词。
用 Test Double 代替真实模型,用测试取代大部分调试过程。
既然测试依赖的大模型成本很高,我们就找一种测试替身,而LangChain 也提供了 FakeLlm。结合第一条思路,分析设计阶段在 ChatGPT 中调整好的提示词和回答理论上作为 mock 来测证 Chain 的实现代码。
不要在公开的 AI 应用里使用自己的 key。
像前面的 ChatGPT Sidebar 和 Bob 一样,公开的 AI 应用必须提供用户配置自己的 OpenAI API key 的选项。
区分 AI 应用开发环境和生产环境,使用不同的 key。
这些实践对于软件开发工程师来说是不是很眼熟?
接下来,我将尝试采用这样的研发流程和实践继续优化我的万字长文总结应用,看看是不是真的有效(尤其是第二条思路)到时再和大家分享成果。
另外,团队/企业的 AI 应用有非常不同的上下文(如安全合规、分工协作、工具平台等等),我也正在构思 AI 自由经济账的企业篇,敬请期待。
小结
本文以我的个人经历为基础总结了:
- 如何评估个人使用 AI 的投资回报率;
- 给个人效率追求者的 AI 使用建议;
- 个人 AI 应用开发者的开发过程建议;
- 控制个人 AI 应用开发成本的思路。
本文作者为覃宇,分享需遵循CC BY-SA 4.0许可。