注册并分享邀请链接,可获得视频播放与邀请奖励。

搜索结果 REIRIE
REIRIE 贴吧
一个关键词就是一个贴吧,路径全站唯一。
创建贴吧
用户
未找到
包含 REIRIE 的推特
Anthropic 发布模型硬件标准 MHS(相当于物理版 MCP),让 AI 直接操控实体硬件。在零预训下,Claude 成功操控机械臂分类积木,量子激光校准成功率达 99.3%,甚至将脑成像实验从数周缩至 1 天!虽然目前缺乏物理直觉、遇到光遮挡等故障易卡死,但已与 AWS、树莓派等合作,后续将正式开源。 这下 AI 不光能写代码,连实验室的砖都能替我搬了! 不过遇到故障就原地空转这事,怎么看都有点萌笨。 等正式开源之后,手里的旧树莓派感觉又能拿出来折腾了。我觉得最简单的办法就是今后所有的MHS设备里面要么自带说明书的txt协议一链接就可以让大模型读了后明白怎么操作,要么就是通过型号上网retrieve这些信息,然后把一些重要指标告知大模型,大模型能通过声光振动感应去感知控制效果,我觉得还是挺promising的!
显示更多
CMP 170HX 今天又有一个比较实在的进展。 8G版解锁64G之后,已经有人单卡把 Qwen3.8-27B 跑到 200K 级真实长上下文了。 vLLM 0.27.1,175W,不超频,1K 大概84 tok/s,64K 还有75 tok/s,200K 还能跑57 tok/s,而且做了160K左右的 needle retrieval,不只是显存能分配出来,是真的在跑长上下文。 温度也还不错,持续负载核心大概66度,显存71度,功耗173W左右。这个和之前170tune测出来的175W甜点位基本对上了。 但我还是那句话,别一看到256K、262K就高潮。 现在公开证据能确认的是200K级真实跑通,不是262K连续跑几天,更不是24到72小时 serving 0 Xid。 还有一点,这个案例用的版本并没有包含最新的 WPR2 修复,所以它证明的是长上下文能力,不代表满显存稳定性问题已经彻底解决。 目前我的判断还是没变。 8G版越来越像真正能拿去部署的64G AI卡了。 10G版的80G,继续当彩票看。没有多人独立复现,没有全显存唯一pattern,没有多CUDA context,没有24到72小时0错误,我就不加一分钱估值。
显示更多
🔥X 平台杠开源了整个平台的算法权重,这次连“你的每个动作值多少分”都公开了。 X 直接放出了主要生产权重、可见性过滤规则、账号与内容标签系统、SimClusters,以及真正用于训练和 Serving 的 Phoenix 生产代码。 先猜你会对每条帖子做什么,再按一张“行为价目表”算分,然后经过限流、去重、圈外折扣、新作者扶持,最后决定你看到什么。 工作原理: 1、先找一批“候选帖子”,现在主要有三个入口: • Thunder:你关注的人刚发的内容 • Phoenix Retrieval:根据你的历史行为和内容语义,从全网找 AI 认为你可能感兴趣的帖子 • SimClusters:根据“哪些人经常喜欢同一类东西”形成兴趣簇,再从这些圈子里捞内容 2、然后 Phoenix 对每条帖子预测一串概率: 点赞 / 回复 / 转发 / 引用 / 分享 / 私信分享 / 复制链接 / 点击 / 看视频 / 关注作者…… 负反馈也一起预测: 不感兴趣 / 静音 / 拉黑 / 举报 / 没有停留。 而且它看的信息比“你过去点过什么赞”多得多。 新版生产模型里还有国家、语言、位置、当地时间、年龄段、性别、已安装 App、帖子年龄等上下文。 3、真正炸裂的地方来了: X 这次把主要生产默认权重公开了。 正向: • 复制链接分享:+20 • 回复:+5 • 引用:+5 • 私信分享:+5 • 关注作者:+4 • 普通分享:+2 • 转发:+1 • 点赞:+0.5 • 点击帖子:+0.4 负向更加夸张: • 举报:−234 • 静音作者:−58.8 • 不感兴趣:−43.2 • 拉黑作者:−31.2 还有一个非常有意思的隐藏项: 如果你和作者互相关注,而且对方发的是原创帖,“你会回复它”的权重额外 +15。 基础回复权重是 5。 也就是说,这类帖子对应的回复预测权重可以直接来到 20。 当然,这些数字不能简单理解成: “1 次复制链接 = 40 个赞”。 系统计算的是: 某个行为发生的概率 × 对应权重。 而且 X 自己在代码里专门解释,这些权重同时考虑了行为价值和这种行为在全网有多稀有。 4、打完分还没结束。 圈外内容,也就是你没有关注的账号,默认分数还要乘 0.75。 同一个作者连续出现,也会被强行衰减。 按目前公开的默认参数计算: 同一批候选里,同一个作者的第二条大约只剩 62.5%,第三条约 43.75%,继续出现会越来越接近 25% 的下限。 所以疯狂连续刷帖,并不能无限霸占推荐流。 更有意思的是,小账号真的有代码级“新人保护”。 当前默认参数里: 作者粉丝不超过 1000,帖子浏览低于 1000,满足条件的原创帖,有机会被系统主动往大约第 16 位附近的目标分数抬。 另外,超过 48 小时的帖子,在打分之前就会被过滤。 5、这次对创作者最重要的一个变化,是“限流”终于开始变得可解释了。 X 把 Visibility Filtering 整条链路开出来了。 Spam、恶意链接、NSFW、辱骂、Do Not Amplify 等标签,都可能让一条帖子在“推荐给非关注者”时直接被 DROP。 这就解释了过去一种很常见的现象: 你的粉丝依然可以看到你。 陌生人的 For You 推荐流里,你却几乎消失了。 X 还配套推出了 Under the Hood,可以查看自己账号和帖子身上影响可见性的标签统计。 6、另外还有一个旧版解读需要更新。 Phoenix 内部依然采用 Candidate Isolation。 模型给某条候选帖打基础分时,它看不到同一批里的其他候选帖,所以 Phoenix 这一层的分数不受 Batch 里其他帖子的影响。 但之后还会继续经过: 作者多样性衰减、圈外 0.75 折扣、新作者扶持,以及 DPP 多样性重排。 所以“每条帖子独立打分”依然成立于 Phoenix 这一层。 最终出现在第几位,依然会受到整个推荐管线影响。 几个最值得记住的结论: 第一,复制链接分享的默认权重非常高。 X 明显很在意一条内容有没有强到让人愿意“带出信息流”。 第二,回复远比普通点赞值钱。 互相关注关系里的原创内容,回复预测还会得到巨额加权。 第三,连续刷屏会被作者多样性机制主动压制。 第四,小账号确实存在明确写进代码里的冷启动机会。 第五,负反馈非常贵。 举报、静音、不感兴趣带来的负权重,远高于一次普通点赞提供的正权重。 第六,这次透明度已经高了一个级别,但距离 100% 仍有空间。 真实生产数据和 checkpoint 没有开放,部分 Grox prompts 和 Botmaker 规则依然保留。 对于创作者来说,新的优先级已经非常清晰: 让内容值得被回复、私信分享、复制链接带走; 建立真实的双向关系; 减少连续刷屏; 尽量避免触发“不感兴趣”、静音、举报和各种安全标签。 X 的算法越来越像一个实时预测“你下一步会做什么”的 AI 编辑部。
显示更多
很多 AWS 用户认为降低 S3 成本就是选择更便宜的 Storage Class,但真正困难的是:你知道自己的数据多久被访问一次吗? 一个常见误区是马上创建复杂的数据分析系统。 更合理的方法: 1. 使用 S3 Storage Class Analysis 观察真实访问模式 2. 对确定的冷数据使用 Lifecycle Policy 3. 对访问模式未知的数据使用 Intelligent-Tiering 不要为了节省几十美元/月,创建一个维护成本更高的系统。 场景1:业务文件、用户上传文件 图片 | 视频 | 文档 建议: 0-30天: S3 Standard 30-90天: S3 Intelligent-Tiering 90天以后: Standard-IA 场景2:日志 CloudTrail | Application logs | ELB logs 通常: 0-30天: Standard 30-90天: Standard-IA 90天-1年: Glacier Instant Retrieval 1年以上: Glacier Deep Archive 场景3:备份 数据库备份: 7-30天: Standard-IA 30-180天: Glacier Flexible Retrieval 180天以上: Deep Archive 欢迎留言讨论 #aws# #AmazonS3# #数据库#
显示更多
MSR Memora:一个解耦"存什么"和"怎么取"的 agent 记忆系统 问题: 现有 agent 记忆系统在抽象和具体之间无法兼得。RAG/Mem0 保留细节但碎片化;摘要压缩高效但丢失约束和数字。知识图谱需要预定本体论,不跨域。 核心洞察: 记忆内容可以保持丰富(时间线、多轮讨论),但检索走一条独立的轻量结构层。 架构: 每条记忆两个部分。Primary abstraction——6-8 词的短语(what this memory is about),嵌入做相似搜索。Memory value——完整内容,永远不直接通过内容检索。Cue anchors——从 value 里提取的短标签,提供替代检索路径,不需要本体论。 例子:"Dave 和 Sarah 同意原型 4/1、试点 5/2、MVP 5/30"。Primary abstraction = "Updated Project Orion timeline agreed by Dave and Sarah"。Cue anchors = "Dave Project Orion update"、"Project Orion prototype schedule"等。后续查询 Dave 的贡献、原型进度、试点时间,都能通过不同 cue 到达同一条记忆。 检索: 不是一次性 top-k。Policy-guided retriever 迭代精化查询、通过 cue anchors 扩展、决定何时停止。可以蒸馏到小模型。 结果: LoCoMo 86.3%,LongMemEval 87.4%,SOTA。比 RAG、Mem0、Zep、LangMem 全高。多跳推理上差距最大。token 消耗减少 98%(vs 完整上下文)。存储条目数约 Mem0 的一半(344 vs 651)。 代码: | ICML 2026 #Agent记忆# #MSR# #LLM#
显示更多
盛大集团创始人陈天桥近年来在 AI 领域(尤其是“AI长期记忆”和“脑科学与 AI 交叉”方向)进行了深度布局。 他主张通过模拟人类大脑的记忆与认知机制,解决大语言模型(LLM)的“遗忘”和上下文受限问题,使 AI Agents 具备连贯、可进化且个性化的长期记忆。 旗舰开源项目:EverMemOS(智能记忆操作系统) EverMemOS 是由陈天桥旗下的 EverMind 团队推出的一款旗舰级开源、企业级智能记忆系统,被定位为未来 AI Agents 的“数据与记忆基础设施”。 1. 类脑级记忆生命周期(Engram-Inspired) EverMemOS 的设计灵感来源于人类大脑的记忆编码、巩固与提取机制,包含三个核心阶段: 情境痕迹形成(Episodic Trace Formation):将实时的对话流转化为 MemCells。MemCells 是记忆的原子单元,用于捕获情境线索、事实以及有时效性的预测信号。 语义整合(Semantic Consolidation):将分散的 MemCells 提炼并组织成更高维度的、具有主题性的语义结构 —— MemScenes。在这个过程中,系统会持续自动演化并更新用户画像(User Profile)。 重构式回忆(Reconstructive Recollection):在 AI 需要决策时,通过 MemScene 引导的 Agent 检索机制重构上下文,帮助下游模型完成长周期的连贯推理。 2. 五层技术架构 EverMemOS 将长期记忆的读写流程分层管理: 代理层(Agentic Layer):处理主动的记忆过程,如记忆提取、向量化、检索和重排序。 记忆层(Memory Layer):管理核心存储和情境记忆,专注于 MemCells 的提取与生存周期管理。 检索层(Retrieval Layer):负责多模态检索和对检索结果进行重排序,包括 BM25 + 向量检索的混合搜索以及 RRF(倒数排序融合)等。 业务层(Business Layer):处理上层的业务逻辑与数据操作。 基础设施层(Infrastructure Layer):兼容 MongoDB、Elasticsearch、Milvus、Redis 等主流数据库与缓存组件。 3. 性能与生态集成 Token 优化:充当智能注意力过滤器,在部分场景中可将上下文窗口的 Token 消耗降低多达 70%,同时在 LoCoMo 等长期记忆基准测试中达到了 SOTA 性能。 开源生态与插件:MCP(Model Context Protocol)支持:提供了 evermemos-mcp 插件,支持将 AI 编码助手(如 Claude Code、Cursor、Cline 等)接入 EverMemOS 记忆库。 Agent 框架集成:支持 OpenClaw 插件,使智能体能够自动捕获对话、调取历史记忆;同时支持 Live2D 虚拟角色记忆交互等应用。 GitHub 地址:
显示更多
0
16
90
28
转发到社区
魔法! DeepSeekV4 上下文内存压缩到1/10! 大家都知道 DeepSeekV4 是支持1M上下文的, 而且经过了极度优化, 如果要真的用到1M上下文, 显存占用只需要10G左右, (对比之下 DeepSeek-V3.2 大概需要84G显存). 然后我刚看到了FlashMemory这个论文, 直接能把显存占用压到 1.3GB! 甚至输出效果不降反升! 哥们你骗兄弟可以, 骗自己就没意思了, 真的吗? 压缩后反而性能上升? 我赶紧看了论文细节: 咱们先复习一下传统做法: 模型每吐出一个字,都要把之前的几十万字重新看一遍(这就是全局注意力). FlashMemory 的做法是: 预测未来需要什么, 它内置了一个神经内存索引器(Neural Memory Indexer, 其实就是个小模型了),能够主动预判接下来生成内容时需要用到历史文本里的哪些片段. 然后预先准备好这些片段, 接下来只要做到命中率超高, 那么这个提升就绝对有效. 即它的假设是, KVCache里面的东西并不是生成每个字的时候全都需要的, 只需要按需提前加载即可. 很像做作业的时候, 把参考资料摊满桌子, 然后优化了一下就是把参考资料需要用到的部分直接拍照, 用的时候看照片就行了. 那么听上去很简单, 但实际的难点在于, 训练一个专用的索引器小模型, 需要把 DeepSeek-V4模型加载到显存里一起炼. 相当耗费算力. 于是这篇论文第二个亮点来了, 它搞了个解耦训练. 他们把这个索引器当成一个标准的"双编码器(Dual-encoder,类似做搜索推荐的模型)"来单独训练. 在这个过程中,根本不需要把庞大的 DeepSeek-V4 基座模型加载到显存中. 这让训练成本断崖式下降,且兼容标准的检索(Retrieval)训练框架. (简单来讲就是它是通用方法训练的, 通过query预测需要检索哪些长句子. 所以其实是个通用模型) 听上去靠谱, 那也只是显存占用少了, 怎么就性能还提高了呢? 答案是注意力降噪. 因为每次只提取和当前生成最相关的记忆块(Chunks)放入显存,模型在运算时就看不见那些无关的冗余信息了.天然地起到了一种"去噪"作用,这也是为什么显存占用少了,模型准确率反而略微提升的原因.官方测试在长文本评测集(如 LongBench-v2 等)上的准确率平均最终提升了 0.6%. (其实还有数据如何逐出显存和如何预测数据实现预加载, 这部分也很棒, 很有启发性. 建议看原论文, 篇幅原因写不下了) 论文地址: 项目地址: #FlashMemory# #DeepSeekV4# #FlashMemoryDeepseekV4#
显示更多
0
17
224
19
转发到社区
决定代码复杂度的东西不在代码里,在写代码的人的脑子里。LLM 碰不到它。 这是 软件工程师 Pol Alvarez Vecino 读完 Peter Naur 1985 年的论文后得出的结论。 为什么 LLM 没法让你的代码更简单 本文最初发表于 Medium( tl;dr:Peter Naur 的《Programming as Theory building》指出,真正的程序——他称之为 Theory,大写的 T——存在于工程师的脑子里。代码和文档只是下游的(因而不完整的)产物。我对 LLM 最大的抱怨之一,就是它写出来的代码有多啰嗦、复杂度是怎样到处蔓延的。我一直抱着一丝信念:也许我们可以用 LoC 或者独立代码路径数量之类的指标来约束它们。然而,读完 Naur 之后我意识到,我们想降低的那个复杂度是 Theory 的复杂度,不是代码的复杂度,而这方面没有任何可用的度量,因为它非常主观。 我最近读了 Peter Naur 那篇精彩的论文《Programming as Theory building》( LLM 能做什么、不能做什么的看法,也改变了我对如何给它们写提示词、当前 agent 系统的主要局限,以及结对编程为何如此有效的看法。 今天我只聚焦它和代码复杂度的关系。 如果你还没读过这篇论文,我真的建议你读一读。说实话,我写这篇文章的主要目的,就是让一些人去读原论文。它值得花这个功夫。这也是练习(或学习!)在 Solveit 里做精读的绝佳机会,因为在 Solveit 里这要容易得多:你可以在阅读过程中随时提问,钻进任何你感兴趣的兔子洞,或者直接让 Solveit 帮你把语言讲清楚。关于精读的更多信息见这篇博文( fork 我的对话记录快速上手( 话说回来,如果你还是决定不读,这里是论文的 tl;dr: 程序是构建和维护它的人所持有的 Theory:一种理解——程序如何与现实世界的问题相关联,哪些约束和权衡塑造了它,它为什么能工作,以及哪些改动符合它的设计。代码和文档是这套 Theory 的下游产物,永远无法完整地承载它。 工程师通过经验发展出这种理解:与用户交谈、观察故障、学习领域知识、观察系统在真实世界中的表现。这种理解指导着对相关性、相似性、简洁性和良好设计的判断。 LLM 不太擅长持续学习,不擅长和用户交谈,也不擅长在真实世界里体验事物。但这和复杂度有什么关系呢? 我想我们都同意:LLM 总体上倾向于让代码库的复杂度上升,如果没人管的话。原因有很多:它们没意识到某个方法已经存在,于是又写了一遍;它们写过度防御的代码,比如为不可能发生的边界情况做防护;或者过早地过度优化。顺便说一句,大多数前沿实验室从你消耗的 token 里赚大钱,所以它们多少有动机去推广 token 最大化。总而言之,LLM 很少遵循 KISS 原则。这个问题在你不看输出、纯 vibe-coding 的时候最严重。但即使你会审查代码,要想让程序保持简洁,也需要主动付出努力去尽量削减复杂度。 在我天真的日子里(大约两周前),我曾以为我们早晚能爬出这个复杂度的大坑。前沿实验室只需要在 RL 训练里加一些复杂度惩罚就行。他们可以用总 LoC 作为最小化的指标,但我们都同意,有时候一行代码比两三行更复杂。另一个选项是圈复杂度(cyclomatic complexity),它衡量独立代码路径的总数。读完 Peter Naur 之后我意识到,这些东西无法真正解决问题(也许能稍微缓解一点)。我们来看看为什么。 为什么代码复杂度是错的指标 在下面这个(我编的)例子里,我们想支持调用 OpenAI 和 Anthropic。假设所有的消息准备和重试逻辑完全一样,只有请求体参数略有不同,于是我们有两个不同的方法 call_openai 和 call_anthropic。 在第一个朴素版本里,我们有两个不同的类,带重复的样板代码(即 prepare 和 with_retries)。 分开 —— 指标会发现重复 class OpenAIClient: def complete(self, prompt): msgs = prepare(prompt) # 公共样板代码 y = call_openai(msgs) # 唯一不同的一行 return with_retries(y) # 公共样板代码 class AnthropicClient: def complete(self, prompt): msgs = prepare(prompt) y = call_anthropic(msgs) return with_retries(y) 一个直接的 refactor 是创建单个类,做到 DRY。按很多指标看这都是更好的实现:行数更少、Halstead 容量更好(V=N×log2(n),N 为程序长度,n 为词汇量)、可维护性指数(Maintainability Index)也更好。 合并版 —— 按指标看确实更好:DRY,行数更少 class LLMClient: def __init__(self, provider): self.provider = provider def complete(self, prompt): msgs = prepare(prompt) y = call_openai(msgs) if self.provider == "openai" else call_anthropic(msgs) return with_retries(y) 一般来说,第二个版本(或者类似减少 LoC 和重复的版本)复杂度更低。但是,如果我告诉你,下个月我们很可能就停止支持 Anthropic 了呢?在那种情况下,我更倾向于让它们保持分开,这样到时候我只要删掉包含 AnthropicClient 的那个文件就行。 当然,这种简单的例子很容易解决,尤其是现在 LLM 可以帮你写代码。但如果你的目标不是 2 个供应商,而是像 LiteLLM 那样支持 165+ 个供应商呢?那种情况下,直接用 LiteLLM 就行。但那样你就把 120 多万行 Python 代码放到了你和最终供应商之间。值得吗? 设计良好的 API 是抽象复杂度的绝佳方式。你有清晰的契约,不需要理解背后发生了什么。即使 LiteLLM 是一个庞大的包,它也可能不计入你的 Theory 总复杂度。LLM 推理端点早期的日子就是这样:「文本进,文本出」。然而,当契约不再可靠时,这一切就会崩塌。原因可能是它有 bug,可能是 API 背后藏着大量你拿不到的状态,也可能仅仅是你不确定某个新供应商特性是否被支持。 每当你被迫窥视 API 抽象层背后的深渊时,那份复杂度就成了你的问题。这个问题正变得越来越普遍。像 OpenAI 和 Anthropic 这样的供应商,越来越多地把数据藏在服务端,比如加密的压缩数据或推理 token(更多讨论见 如果你在快速推进、只用基础功能、想尝试很多供应商,那么 LiteLLM 或类似的库可能值得用。反过来,如果你看重控制力、调试和对技术栈的理解,那可能就不值得。不存在「正确的」复杂度(虽然我非常偏好第二种选择)。 进入 Theory 决定走哪条路的信息不在代码里。这些信息属于 Naur 所说的程序的 Theory 的一部分。迄今为止,LLM 几乎接触不到这些信息,因为它们活在人的脑子里。它们可以从 IM、邮件或其他书面文档里得到一些线索,但那些永远只是局部的(最好的情况下)。 其中一些信息可以作为上下文提供给 LLM,比如业务优先级、预期的产品变化、运维约束,以及早期决策背后的原因。这样做也许能改善它的选择,但这些仍然只是 Theory 的产物。它们无法完整地传递团队发展出这套 Theory 所依赖的经验和判断。 这些都很好,但如果我全身心投入 vibe-coding 和 token 最大化、完全不在乎代码呢?那样的话,这篇博客后面的内容说服不了你。如果你处于两者之间,我来描述一个我们在 亲身经历的真实情况,关于 Solveit 的计费系统。 剧透警告:在 最初的计费系统 Solveit 是一个平台,你可以在里面用 AI 在一个类 notebook 的环境里工作。环境是持久化的,所以我们对 LLM 用量、CPU、磁盘、内存和带宽收费。 最初的计划是向用户收月度订阅费(比如 5 美元)。这笔月度订阅费变成当月可以消耗的积分(credits),如果全部用完,下个月之前就得充值。我们先在一个更小的项目里测试了这套方法来验证它。 这套方法后来证明比我们想要的更复杂。第一,积分 + 订阅的机制会把人(比如我自己)搞晕。第二,它让代码在多个层面上更复杂。你得处理「先消耗月度订阅积分、再消耗普通积分」的所有逻辑,以及剩下的积分怎么办。在 Stripe 这一侧,它有两个不同的代码路径:手动充值和订阅服务。 对不熟悉的人来说,Stripe 订阅是一个全托管服务。Stripe 管理整个生命周期(扣款周期、发票、重试全在他们那边)。 你大致只需要这样创建订阅: stripe.Subscription.create(customer=cust_id, items=[{"price": "price_5usd_monthly"}]) 然后监听他们的 webhook,在订阅状态变化或付款到达时更新你的数据库(还有很多其他事件可以选择)。 直接收款则需要你启动一个 checkout session,让用户跳转到 Stripe 的域名填卡。这需要你提供一个 customer ID。那应该在什么时候创建 Stripe customer?用户注册时?他们尝试付款时?还是别的时机?全都是合理选项。 stripe.checkout.Session.create(mode="payment", customer=cust_id, line_items=[{"price": "price_5usd", "quantity": 1}], success_url="") 到目前为止还好吧?如果你对 Stripe 或支付没有太多经验,很可能你已经感到吃力,没法把这一切全装进脑子里。也许你设法把它简化成了: • 订阅 → 交给 Stripe 订阅服务管理 • 充值 → Stripe checkout 一个不明显的问题是:使用 Stripe 托管服务意味着你有重复的数据。一半数据在 Stripe 的后端,而你必须保证本地数据库和它同步。另一个问题是,调试的时候,你既要查 Stripe 的服务,又要查自己的数据库。比如,一笔付款没到账,是 Stripe 没发 webhook(「他们的错」),还是我们没把它存进数据库(「我们的错」)? Stripe 订阅服务很棒、很容易上手,但它是为支持海量用例而设计的。这意味着,即使设计得很好(它确实很好),这个 API 抽象最终也相当复杂。在这种情况下,你在用「卷起袖子自己写代码的复杂度」交换「学习 Stripe API 的复杂度」。 LiteLLM 和 Stripe 在不同规模上展示了同一个权衡:只要契约成立,外部抽象能极大地简化你的 Theory;但每当你需要调试、修改或超出契约去推理时,它隐藏的复杂度就变成你的了。 AAI 的做法 在 经过很多天的探索和讨论,我们最终定下了一个简单得多的系统。 首先,我们只做积分(credits),按用量收费。这是一个超级简单的模型(和 Theory!):充值积分,用多少付多少。 订阅一去掉,我们就可以删掉一大块用来保持同步的代码。剩下的付款路径只有两条:手动充值和自动充值。要做自动充值,你需要能保存客户的信用卡,以便随时扣款。而 Stripe checkout 不会保存信用卡,你只是让 Stripe 在他们的 UI 里处理这次付款。 长话短说,我们最终发现最简单的办法是:用户一注册就保存他们的信用卡。卡一旦在档,用户可以用它手动充值,也可以设置成自动充值。因为全部是我们自己处理的,同步问题几乎为零。我们只监听支付成功事件(没有订阅了!)。 结果就是,我们支付系统的 Theory 可以用一句话概括: 客户注册时添加信用卡,之后我们对该卡扣款——要么手动(充值),要么在余额不足时自动扣。 手动充值和自动充值现在走同一条支付路径。我们整个支付技术栈——拆在 Solveit 和 faststripe 之间——大约 300 行代码。 结果是非常低的复杂度,但这是数小时的探索、尝试和讨论换来的。我这里的解释充其量只是触及皮毛。 印度登场 那么上线那天发生了什么?一切顺利吗?没有。上线后我们发现,印度信用卡不支持你想什么时候扣就什么时候扣的 off-session 扣款。手动充值属于 on-session,仍然可以工作,因为用户会在我们的 UI 里看到一个类似 3DS 的验证流程;但自动充值不行。 在寻找解决方案时,我们发现 Stripe 托管订阅在印度确实能工作。为什么?因为 Stripe 替你绕开了所有这些复杂度。他们提前一天创建并持有 off-session 的支付意图(payment intent),这样银行就能在实际扣款前向用户发送预扣款通知或认证请求。 我们迁移出托管订阅时,就失去了这个特性。我问了一个前沿 LLM——我记得是 GPT-5.5——我们该怎么处理这个问题。你猜它给出的方案是什么? 用回 Stripe 订阅来处理 这个 LLM 提议的正是我们刚刚迁移出来的方案。读到这里,你会怎么说?你的意见是什么?我们应该迁回去吗? LLM 列出了两个选项:要么同时支持两套系统(随时可以开工,你一句话就行!),要么完全迁回旧的系统。我们做了什么?什么都没做。我们非常看重 Theory 复杂度,于是我们决定:让印度用户手动充值就好了(抱歉了各位!),换来一个更简单、更健壮的平台。 如果你不同意我们的选择,反思一下为什么不同意。真的,现在就停下来想一想。 这个问题没有正确答案,而这篇博客的目的之一,就是帮你看清你的答案来自哪里。你的论据是什么?更具体地说,它们是从哪里来的? 有很多场景下 Stripe 托管服务是更优的选择。举几个例子: • 公司收入最重要,手动充值的额外摩擦可能会让我们损失一些印度销售额,那我们应该迁回去(或者同时支持两套) • 销售团队用 Stripe Dashboard 的 UI,所有支付信息都放在我们自己的数据库里并不理想,因为他们没法在那里管理 我的观点是:你的代码的复杂度,真的取决于一大堆和代码无关的因素,而那些信息不在代码里。 隐藏的优势 那么为什么不干脆让 LLM 全权处理这些事呢?在我看来,最妙的答案是:我们的工作方式揭示了一个可能的商业机会。印度不支持 debit mandate(借记授权)的方式和世界其他地方不一样。Stripe 试图解决这个问题,但远远不是一个完整的解决方案。 在理解和简化流程与 Theory 的过程中,我们学到了产品之外有价值的东西。在我看来,这类洞察是可以转化为竞争优势的。 努力去理解,本质上就是一个简化 Theory 的过程。如果你放任 LLM 在复杂度上为所欲为,你可以很快产出大量代码。选择简化路线更长、更费劲,但长远来看我认为它是值得的,而且你可能会在路上发现隐藏的宝石。 原文: #LLM# #编程# #代码复杂度#
显示更多