五个实验室,五套思维:用小模型构建多模型金融剧
Five labs, five minds: building a multi-model finance drama on small models
第二场 Build Small Hackathon 中,Thousand Token Wood v2 重构为一款玩家作为庇护者(Patron)操纵市场的游戏,每个 agent 运行在不同实验室的小模型上(gpt-oss-20b、MiniCPM3-4B、Nemotron-Mini-4B 及微调 Qwen 0.5B)。异质性通过服务层(vLLM 0.22.1)管理,JSON 解析修复层使添加模型仅需一个配置项。信息不对称通过隐藏标记防火墙实现,测试扫描所有 prompt 确保零泄露。有界记忆使用分桶摘要避免 prompt 膨胀。一次代表性运行中,微调 0.5B 模型 100% 有效报价,内幕提示优势产生正盈亏,热度阈值触发地方法官调查,一次追加保证金和贷款违约导致生物被放逐。
](https://huggingface.co/AdmiralTaco)
第二场 Build Small Hackathon 实地报告:当一个涌现经济中的每个 agent 运行在不同实验室的小模型上,而玩家成为幕后操盘的金融家时,会发生什么。
Thousand Token Wood 的第一个版本是一个天气之神沙盒:五个林地生物在一个微调后的 0.5B 模型上交易商品,你通过冲击扰动世界,观察泡沫与崩盘的涌现。它是一个不错的玩具,但更像一个你观看而非参与的东西。
v2 将其重构为一款你可以操作的游戏。你是 Wood 的庇护者(Patron),一个影子金融家:你放贷收息,低语真假难辨的提示,做空市场,行贿,撮合联盟,同时一名地方法官(magistrate)正追查你,因为你交易了不该知道的信息。生物们会记住你如何对待它们,并暗中谋划反击。而最大的变化在引擎盖下:每个生物现在都用不同实验室的小模型来思考。以下是工程报告。
异质性(Heterogeneity)是产品,而非约束
运行一个 agent 议会的直观方式是用一个模型、多个 prompt。v2 运行了四个:gpt-oss-20b(OpenAI)、MiniCPM3-4B(OpenBMB)、Nemotron-Mini-4B(NVIDIA)以及我自己微调的 Qwen 0.5B。其目的并非为了标新立异。当参与者真正存在差异时,市场才变得有趣;四个实验室的模型,基于不同数据、采用不同后训练方式,其差异在小模型领域已相当显著。猫头鹰囤积的方式与狐狸投机的方式截然不同。这个议会是一场鲜活的辩论,而非一段脚本。
将四个不同的模型部署在同一个平台上,揭示了真正的教训:摩擦几乎完全出现在服务层(serving layer),而非模型层。
- 当前的 vLLM(0.22.1)在加载时会 JIT 编译内核,需要 CUDA toolkit(
nvcc)存在。一个精简的基础镜像并未附带它,因此所有四个模型都因“找不到 nvcc”而失败,直到我将它们基于 CUDA devel 镜像。这不是 gpt-oss 的怪癖;而是该 vLLM 版本的普遍问题。一个镜像修复就解除了所有障碍。 - gpt-oss-20b 以其原生 MXFP4 量化运行,可适配 24GB L4 且有余量;无需高端 GPU。它还使用一种通道格式,将答案包裹在分析前言中,因此消费者需要提取最终的通道。
- MiniCPM3 需要
trust_remote_code;Nemotron 则干净加载。每个模型都有各自的“脚枪”,但都只需一行配置。
让四个异质模型变得可管理的东西,与让 v1 中单个模型可管理的东西相同:一个宽容的 JSON 解析与修复层,所有模型的输出都流经此处。不同的 tokenizer 和格式化习惯会产生不同的畸形输出;解析器会丢弃无法修复的部分,而模拟永远不会崩溃。构建好这一层后,添加一个模型只需一个配置项,而非一次重构。
信息不对称需要防火墙
v2 的戏剧核心是内幕提示。你可以向一个生物低语一个真实的提示(对牌组将抽到的下一轮市场狂热的真实预测,你的真正优势)或虚假的提示(诱饵)。根据真实提示行动并获利会提高你的热度;超过阈值,地方法官就会展开调查,最终导致罚款、资产冻结或流放。
为了让这成为真正的游戏,提示的真假必须对生物隐藏。它们看到的是谣言文本;它们绝不能看到标记。这是一个安全属性,而非 UI 上的便利,而小模型 agent 使其更加尖锐:模型可能重复的一切,都取决于你放入其 prompt 中的内容。因此,隐藏的标记完全脱离 prompt(存在于玩家的账本上),在构建时从公共事件记录中剥离,而叙述者(narrator)唯一总结的只是公共事件。一个测试会在每一轮扫描每个生物的完整 prompt,查找被禁止的 token。这个测试是整个套件中最重要的一个。当你向 agent 提供秘密信息时,假设它会泄露,除非测试证明它不能。
有界记忆是廉价的戏剧
生物携带持久的关系:对庇护者以及彼此之间的有符号情感倾向,由事件推动(你做空了我的作物,你偿还了贷款,你让我与对手结盟)。一个变得敌对的生物会拒绝你的贷款并给出更差的报价;结盟的生物会停止互相压价,表现得像卡特尔。
陷阱在于 prompt 膨胀。原始历史会无界增长,小模型会淹没其中。解决方案是永远不要把历史放入 prompt:模型看到的是一行分桶摘要(“你对 Oona 感到温暖,对庇护者保持警惕”),只包含最强的几种情感,源自整数情感值。笔记会被保留用于追踪,但有界且从不展示。行为偏差部分是涌现的(摘要引导模型),部分是机械的(一个强烈敌对的生物会确定性地拒绝),因此它是可观察和可测试的,而非一种期望。
实际发生了什么
一次具有代表性的议会运行,启用了完整的 v2 机制:
| 杠杆 | 结果 |
|---|---|
| 议会中的模型 | 4 个实验室,均低于 32B 上限,在 Modal 上服务 |
| 微调 0.5B 的可靠性 | 0% 自购,100% 有效报价(优于其 3B 教师模型) |
| 真相防火墙 | 扫描的所有 prompt 中,提示的隐藏标记泄露为 0 |
| 内幕提示优势 | 真实提示的预先定位产生正盈亏;虚假提示则不会 |
| 热度到调查 | 两次干净的嫌疑胜利越过了地方法官的红线 |
| 毁灭 | 一次追加保证金和一次贷款违约导致一个生物被放逐,一章后回归 |
一次单一种子运行,端到端地演练了庇护者、信息战、关系和杠杆。
使用小模型构建的要点
小模型是可靠的格式生成器,但不可靠的推理器;你通过结构、prompt 和少量微调来弥合差距,而非通过规模。异质议会比同质议会更有趣,一旦服务层稳固,它只花费你配置的成本。给予 agent 的秘密信息是一个防火墙问题,防火墙应属于数据流,并通过测试来证明,而非一条 prompt 指令。而持久记忆是让 agent 感觉鲜活的最廉价方式,只要 prompt 只看到有界的摘要。
小模型,大冒险。整个议会是开放的,其运行轨迹也是。