首页
学习
活动
专区
圈层
工具
发布

为什么我不再只比较 API 的倍率

为什么我不再只比较API的倍率这是一次个人选型复盘。以前看到价格页上的低倍率,我会下意识认为这条渠道更划算。实际跑过几类任务后,我发现倍率只能说明计费公式中的一个变量,不能直接代表最终费用。...倍率之外,还有四个问题看到一个倍率后,我会继续核对:常规输入和输出的基础价格分别是多少;缓存输入是否单独计价;当前任务的输出量大概有多大;这个渠道是否支持我要用的模型和请求能力。...同样的倍率,放在短问答和长代码生成上,实际账单可能完全不同。一个任务的输入很大但缓存命中率高,另一个任务输入不大却输出很长,也不能只靠倍率判断谁更便宜。...如果只看价格页,无法知道自己的请求是否会命中缓存,也无法知道输出长度会不会放大成本。价格页适合缩小候选范围,调用记录才适合做最终判断。...我的做法是按任务类型分别测试,而不是给所有场景排一个总榜。本文是个人使用过程中的方法总结。

11100
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    我为什么开始记录每一次 AI 调用的费用

    我为什么开始记录每一次AI调用的费用这是一次个人项目中的使用复盘。刚开始给项目接入模型时,我只关注请求能不能成功、回答质量够不够好。调用次数多起来之后,才发现“能用”和“知道钱花在哪里”是两件事。...我后来开始保留每次请求的模型、输入、缓存输入、输出、首字时间、总耗时和最终费用。...如果只看“输入接近79万Token”,我很容易把费用全部归因于输入。但拆开后可以看到,未缓存输入只有1,665Token,输出长度也明显影响了完整耗时。...页面快照没有展示完整周期时,我不会把它当成长期表现,只把它当作下一步排查的入口。我现在的最小记录习惯不一定要把所有内容都存进业务数据库,但至少要让一次请求能够被追溯。...对我来说,模型、渠道、Token、缓存、耗时、错误和费用已经足够支撑大部分初步复盘。这篇文章是个人使用记录,图片数据对应2026年10月2日的样本。

    9110

    一个 Agent 是怎么干活的:37 分钟,它只问了我一次

    雪球是国内交易者最扎堆的地方,按理说用户最对口。这活它跑了37分57秒,中间只回头问我一次,确认了个方向性的小问题,我回了个"行",它就自己干到底,最后甩给我一句:✅已私信@雪球视频申请视频发布权限。...模型本身是无状态的,是Agent这层替它记着"我们走到哪了"。第四层,自主迭代加风险门控默认模式下它可以直接动手(WorkBuddy管这叫Craft模式),但危险操作有拦截。...04什么设计理念,造就了这个设计/理念为什么是"模型想、Agent做"这种拆法,而不是让一个巨无霸模型直接操控一切?我琢磨下来,背后是几个想法。其一,AI从"给答案"升级到"替你把整件事干完"。...这也是为什么它能临时去处理"雪球私信"这种我事先没教过的场景,相关能力是被临时组合起来的。其四,以"真实世界里可验证的结果"为终点。...支付逻辑也在变,从软件席位到Token、结果计费,Agent产业第一次有了和成果挂钩的定价货币,这对供给侧是洗牌。

    28210

    #WorkBuddy# 错误只犯一次:我的经验回写规则源习惯养成法

    #WorkBuddy# 错误只犯一次:我的"经验回写规则源"习惯养成法场景我带着 AI 助手做日常批量运营,协作密度极高,一天下来要经历上百轮工具调用。最开始的模式很原始:犯错→当场改→继续干。...结果发现同一个坑隔三差五换个面目再摔一次——不是 AI 记性差,是教训只存在于那次对话里,对话结束就蒸发了。人也是一样:你觉得"这次印象够深",两周后细节全忘。...我后来把"错误回写"做成强制动作,同类错误基本绝迹。过程我的回写体系分三层,各有分工、永不混装:第一层:当日工作日志(append-only)。...append-only 是底线:日志不改历史,规则只增不删,保证任何时刻可回溯;复读机制比记录更重要:版本戳核对 + 开工先读,让规则源"活"着。附上我的回写操作命令,可直接复制::: 1....写下来、提到规则层、开工复读——让每一次踩坑都变成永久免疫。

    9210

    MySQL实战第十九讲-为什么我只查一行的语句,也执行这么慢?

    语句,如果指定表 t 的话,代表的是只关闭表 t;如果没有指定具体的表名,则表示关闭 MySQL 里所有打开的表。...现在,我们一起来复现一下这种情况,复现步骤如下 图6 所示: 在 session A 中,我故意每行都调用一次 sleep(1),这样这个语句默认要执行 10 万秒,在这期间表 t 一直是被 session...但是接下来,我们再看一个只扫描一行,但是执行很慢的语句。...但大同小异,你可以按照我在文章中介绍的定位方法,来定位并解决问题。 最后,我给你留一个问题吧。...由于 id 上有索引,所以可以直接定位到 id=1 这一行,因此读锁也是只加在了这一行上。

    1.7K30

    一次家庭作业意外搞定40年前的数学猜想,牛津小哥:我只研究了几个礼拜

    晓查 萧箫 发自 凹非寺 量子位 | 公众号 QbitAI 只是完成一次普通家庭作业,就把困扰了数学家们几十年的猜想搞出了新花样?! 没错,这是来自牛津大学的Thomas Bloom的亲身经历。...在一次阅读小组的论文分享上,他被要求解读一篇2003年发表在《数学年刊》上的经典论文。 这篇论文证明了一个与“最古老数学问题”埃及分数有关的猜想。...然而,这版2003年的证明还有很多待解决的疑惑: Thomas Bloom在解读论文的过程中,也发现这版证明对子集的要求有点高,很多特殊情况下没办法成立。...就连数论领域著名学者、蒙特利尔大学教授Andrew Granvill都感叹这种做法的不可思议: 此前我只是觉得,这是一个不可能被解决的问题,任何头脑正常的人都没法做到。...古埃及的文字里,一只眼睛下面放一个数字就代表了一个单位分数。 从1到100万都有相应的图形。 虽然它和我们现在的数学相去甚远,但其实所有分数都可以写成单位分数之和的形式。

    94940

    SSH 工具里的快捷命令,为什么我宁可多点一次,也不敢直接执行?

    少敲几十个字符当然省事,我更关心Xterminal能否在命令真正发到SSH终端前,保留一次看清目标和完整命令的机会。这也是选择SSH工具时一个容易被忽略的标准。...它保存的是过去执行过的整行文本,适合找回刚才那条命令,却不知道哪一段应该变化、为什么变化。用方向键翻出旧命令再改,本质上仍是在一段成品里寻找变量。...它们不是产品能自动证明的安全结论,只是用户在点击前能看到的证据。我宁可多点一次,指的就是把默认动作设成“粘贴”或在参数窗口看完预览,而不是看到熟悉的命令名称就直接执行。...它们一旦成为方便回填的普通文本,就可能跟着截图、导出或屏幕共享离开原来的边界。认证仍应走已有的凭据管理方式,快捷入口只保存无敏感信息的命令骨架。...这也是我选择SSH工具时会看的取舍:它是否只追求更快执行,还是给用户留下清楚的目标、参数和预览。功能相同的情况下,我会优先选择能把确认放在动作之前的那一个。

    13310

    中转站余额为什么掉得快?我拆了一次 AI 编程任务的真实消耗

    中转站余额为什么掉得快?我拆了一次AI编程任务的真实消耗最近很多人开始高频使用ClaudeCode、Codex、Cursor、OpenCode这类AI编程Agent。...如果想知道钱到底花在哪里,就得把一次AI编程任务拆开看。所以我最近开始用一个更笨但更有效的方法:把一次Agent任务的每一轮请求拆开看。先看一张图。这里我用到的工具是ccglass。...这也是为什么同样是“修一个bug”,有时很便宜,有时很贵。...展开代码语言:TXTAI代码解释更好的写法是:只检查src/auth目录下session相关逻辑,先分析问题,不要修改代码。...所以,与其只盯着余额下降,不如拆开看一次任务:哪一轮最贵;哪些上下文最重;哪些工具结果被反复带入;cache有没有命中;plan阶段是否值得;模型倍率是否匹配任务价值。

    56210

    Java,你告诉我 fail-fast 是什么鬼?

    02、for each 中集合的 remove 操作 很长一段时间里,我都不明白为什么不能在 for each 循环里进行元素的 remove。今天我们就来借机来体验一把。...是通过迭代器 Iterator 配合 while 循环实现的。...在 for each 循环中,集合遍历其实是通过迭代器 Iterator 配合 while 循环实现的,但是元素的 remove 却直接使用的集合类自身的方法。...04、怎么避开 fail-fast 保护机制呢 通过上面的分析,相信大家都明白为什么不能在 for each 循环里进行元素的 remove 了。 那怎么避开 fail-fast 保护机制呢?...这样的迭代器被称为 fail-fast 迭代器,因为尽早的失败比未来出现不确定的风险更好。 既然是针对多线程,为什么我们之前的分析都是基于单线程的呢?

    85710

    Java,你告诉我 fail-fast 是什么鬼?

    02、for each 中集合的 remove 操作 很长一段时间里,我都不明白为什么不能在 for each 循环里进行元素的 remove。今天我们就来借机来体验一把。...是通过迭代器 Iterator 配合 while 循环实现的。...在 for each 循环中,集合遍历其实是通过迭代器 Iterator 配合 while 循环实现的,但是元素的 remove 却直接使用的集合类自身的方法。...04、怎么避开 fail-fast 保护机制呢 通过上面的分析,相信大家都明白为什么不能在 for each 循环里进行元素的 remove 了。 那怎么避开 fail-fast 保护机制呢?...这样的迭代器被称为 fail-fast 迭代器,因为尽早的失败比未来出现不确定的风险更好。 既然是针对多线程,为什么我们之前的分析都是基于单线程的呢?

    78720

    MySQL深入学习第二十一篇-为什么我只改一行的语句,锁这么多?

    根据优化 1, 主键 id 上的等值条件,退化成行锁,只加了 id=10 这一行的行锁。 2....session A 是一个范围查询,按照原则 1 的话,应该是索引 id 上只加 (10,15]这个 next-key lock,并且因为 id 是唯一键,所以循环判断到 id=15 这一行就应该停止了...如下 图11 所示为案例八的操作序列: ? 现在,我们按时间顺序来分析一下为什么是这样的结果。...经过这篇文章的介绍,你再看一下上一篇文章最后的思考题,再来尝试分析一次。...我把题目重新描述和简化一下:还是我们在文章开头初始化的表 t,里面有 6 条记录,图 12 的语句序列中,为什么 session B 的 insert 操作,会被锁住呢?

    1.4K20

    CSS 预处理器中的循环

    我很难在实际工作中找到 while 循环——大多数例子使用 for 或者 for-each 处理的更好。所以 Stylus 只提供了后者的语法。...如果每一次循环提取下一个列表项,我们将手动创建 for-each 循环: See the Pen Less ForEach List by Miriam Suzanne (@mirisuzanne) on...我们可以创建一个迭代数的参数(@i),使用 when (@i > 0) 条件结束循环,每次迭代减一,这样看上去像是递减的 for 循环。...最后,我们只设计了 9 个独特的图标,使用循环生成 1296 个不同的头像,所以大部分用户不会看到重复的头像。...我并不想遍历整个集合或者特定数量的迭代——我想在找到需要的元素时就停止循环。我通常在抽象的工具包中使用,而在日常编写样式表时并不需要。 我使用 Sass 创建了一个帮助我储存及控制颜色的工具包。

    5.3K60

    Java中常见数据结构List之ArrayList

    一、ArrayList 1, for-each原理: 0、 在编译的时候编译器会自动将对for这个关键字的使用转化为对目标的迭代器的使用,这就是foreach循环的原理 1、ArrayList之所以能使用...之前我自己写的ArrayList用foreach循环直接报空指针异常是因为我自己写的ArrayList并没有实现Iterable接口 2、任何一个集合,无论是JDK提供的还是自己写的,只要想使用foreach...ArrayList的缺点: 1、删除元素的时候,涉及到一次元素复制,如果要复制的元素很多,那么就会比较耗费性能 2、插入元素的时候,涉及到一次元素复制,如果要复制的元素很多,那么就会比较耗费性能...4,细节: 为什么ArrayList的elementData是用transient修饰的?...这是为什么?

    1K120

    for-each或迭代器中调用List的remove方法会抛出ConcurrentModificationException的原因

    for-each循环遍历的实质是迭代器,使用迭代器的remove方法前必须调用一下next()方法,并且调用一次next()方法后是不允许多次调用remove方法的,为什么呢?...是这个list集合修改的次数,每一次add或者remove都会增加这个变量 然后迭代器每次去next或者去remove的时候检查checkForComodification();发现expectedModCount...那么我们再次看到迭代的remove方法 关于lastRet,我们后面再讲,来看看,上一次remove()之后,lastRet变成了-1,然后没有it.next();继续执行remove(),首先判断if...所以刚刚的代码是错的。 为什么要it.next()?难道next()方法又改了lastRet吗?它确确实实更改了。  ...综上 1.在for-each循环和迭代器中只可以做删除remove操作,不能做添加add操作。

    78620

    深入理解 Java 循环结构:while、do while、for 和 for-each 循环

    Do/While 循环 do/while 循环是 while 循环的变体。此循环将在检查条件是否为真之前执行一次代码块,然后只要条件为真,它就会重复执行循环。...语句2定义循环条件:i 必须小于 5。 语句3在每次循环迭代中将 i 的值增加 1。...内部循环将在外部循环的每次迭代中执行三次。 总结: for 循环是一种在特定次数内重复执行代码块的有效方式。 您可以使用嵌套循环创建更复杂的循环结构。...For-Each 循环 除了传统的 for 循环,Java 还提供了一种更简洁的 for-each 循环,专门用于遍历数组和集合中的元素。...总结: for-each 循环是一种方便的语法,用于遍历数组和集合中的元素。如果您只需要遍历数组中的元素,而不需要修改它们的值,那么 for-each 循环是最佳选择。

    3.1K00

    loadrunner 脚本优化-参数化之Parameter List参数取值

    Each occurrence:每次取值更新 Once:只更新一次 1 Sequential+Each iteration取值 ? ?...取值 甲|乙|丙|丁|戊 迭代次数6:NewParam取值 甲|乙|丙|丁|戊|甲 注意:Update on value on Each iteration时,只有开始了新的一次迭代,也就是说回放日志中出现了...{ lr_eval_string("{NewParam}"); return 0; } 无管迭代多少次,或者for循环,NewParam取值都是甲 4 Random+Each iteration...Random+Each iteration:每当一次新的Starting iteration开始,重新从参数列表中取一次随机值。 ? ?...Continue in a cyclic manner 当参数取值超出参数表记录时,使用循环扫描的方式 3)Continue with last value 当参数取值超出参数表记录时,使用参数表中的最后一个值

    1.2K20

    【性能工具】LoadRunner参数化取值详解

    :每次迭代更新取值 · Each occurrence:每次取值更新 · Once:只更新一次   下面我们将通过如下的一段脚本来分别解析各个组合设置的效果,脚本如下: Action() { int...5次参数,然后循环结束后再读取一次参数的值。...设置Sequential是为了保证顺序读取方式,而Each iteration是基于Run—Logic的设置的,就是说每次循环一次后,读取新的值。...如果设置循环次数超过数据的行数,此时再回放之后的结果就是,超过第八,从第九次开始就又从temp1开始读取,完成循环迭代的读取过程。...的迭代循环取值的,而Each occurrence是基于每一次取新值的,当然在通常情况下,这两者其实是有共性的,如果一个脚本中只有一个参数,且只读取一次参数的话,设置这两种方式的结果是相同的,可以将脚本缩减如下

    1.2K50
    领券