用百倍成本的开源模型在检索任务上击败 GPT-5.6 Sol

"大多数团队最好的训练数据就静静躺在他们的数据库里。问题在于,把原始数据变成可用的东西很难,而让智能体能够大规模、低成本地读取、搜索和修改数据,又需要深厚的基础设施。把 Castform 对接 Neon,刚好绕开了这两道坎。"——Ying Hang Seah,Castform 联合创始人
一个"好的智能体"需要在两个方面表现出色:
- 上下文:能否提供找到正确数据的工具?
- 模型:模型能否决定该搜索什么?
Neon(Lakebase Postgres)及其全新的 Search 扩展解决了前者;Castform 解决了后者。
智能体搜索的演进
大约在 2022 年,整个行业都押注在向量检索上。每家数据库厂商都集成了相关功能,pgvector 也成为 Neon 下载量最高的扩展。工程师们为了给 LLM 提供上下文,手工搭建 RAG 管道,本质上就是某种形式的向量相似度搜索。
到了 2025 年前后,智能体开始获得更多关注。开发者们着手构建多跳搜索工作流,把大问题拆解成一个个小问题。检索的重心也从一次性搜索系统转向了智能体驱动的检索:模型不再只发一次查询,而是在循环中反复规划、多次搜索。每多一轮迭代,就多一次对前沿模型的调用,每次用户请求的整体成本和延迟也随之攀升。

具体来说,一个典型的多轮搜索请求,使用 gpt-5.6-sol 端到端耗时超过 10 秒、花费约 $0.03,慢得令人难以接受,贵得让人望而却步。
与此同时,小型开源权重模型要便宜 100 倍。但开箱即用时,它们的能力仍落后于闭源 API 模型。强化学习后训练有助于弥补这一差距。在搜索等特定任务上,后训练过的开源模型可以追平甚至超越前沿模型,同时每次请求的成本低了好几个数量级。 这正是我们打造 Castform 的原因:让开发者无需深入了解机器学习与 GPU 内部机制,就能进行强化学习后训练。我们的目标是让后训练像提示工程一样平易近人。Castform 如何使用 Neon?
Castform 的流水线通过 Lakebase Search 在 Neon 上运行:
| 阶段 | Neon + Lakebase Search |
|---|---|
| 语料存储 | 原始文档存储在 Neon 上的 Postgres 中 |
| 合成数据生成 | Castform 训练流水线使用 lakebase_text 和 lakebase_vector 来写入训练任务 |
| 强化学习训练 | 每次 rollout 的搜索工具调用都使用 Neon 上的 Lakebase Search |
| 生产推理 | 最终模型在推理时使用相同的搜索工具调用 |
你最优质的训练数据已经存在
要有效地进行强化学习后训练,你需要三样东西:一个任务(例如回答用户的问题)、智能体运行的环境(例如针对你语料的搜索工具),以及一个奖励函数(例如回答是否正确)。
三者齐备后,强化学习后训练就是一个不断试错的循环:模型借助工具尝试完成任务,奖励函数对尝试打分,反馈信号引导模型逐步爬升,直到达到最优表现。
然而,大多数公司并没有一套干净的、可直接用于后训练的任务和奖励函数数据集。
但企业确实拥有大量专有数据:
- 内部文档
- 产品记录
- 支持文章
- 客户交互记录
- 内部 wiki
- 运营数据库
这些数据里蕴含着智能体所需的知识,但要把它们转化为有效的训练数据集,通常需要大量的数据工程和人工标注工作。
这导致很多团队出于以下两个原因之一放弃后训练:
- "我们没有训练数据。"
- "微调太难了,而且我们也没有相关基础设施。"
Castform 同时解决了这两个问题。它能将已有的语料库转化为训练任务,然后管理强化学习(RL)循环,教会开源模型如何有效利用这些数据。
使用 Castform
借助 Castform,你可以把公司的知识库变成一个模型:
- 文档(来自你的数据):通过 Navan 预订的火车票将由 GitLab 差旅卡支付。火车出行必须选择标准舱,并提前 14 天预订。
- 标准答案(从你的数据中推断):火车出行必须选择标准舱,并提前 14 天预订。
- 问题(合成生成):在 Navan 预订火车时,预订时机的规定是什么,应该选择什么舱位?
基于生成的问题-答案数据集,Castform 让你只需指定智能体可调用的工具以及奖励函数,就能搭建起完整的训练流程。
奖励函数定义了你想让模型擅长做什么。在我们的场景中,希望它能检索到正确的文本块、引用恰当的来源,并给出准确的最终答案。
def run_tool(tool, tool_args):
"""单个工具:对 Lakebase 进行混合检索。"""
if tool == "search":
query = tool_args["query"]
bm25 = neon.lakebase_text(query, k)
vector = neon.lakebase_vector(query, k)
return rrf_merge(bm25, vector, k)
def reward(trace, ground_truth):
"""根据标准答案对轨迹进行打分。"""
answer = parse_trace(trace)
retrieval = ... # 是否检索到了正确的来源
citation = ... # 是否引用了正确的文本块
correctness = ... # 最终答案是否正确
return retrieval + citation + correctness完整的代码示例请参见此处。
可观测性:观察模型的学习过程
Castform 能让你完整掌握 RL 训练的全过程。你可以用它观察每一步奖励曲线的攀升,更重要的是能下钻到具体的任务或 prompt,亲眼看模型在每一轮中的实际表现,从而排查工具异常或奖励作弊等问题。
想了解更多监控训练过程的方法,可以阅读这篇 Castform 博客文章,也可以查看我们提供的 示例训练运行。

为什么 Neon「开箱即用」
训练过程中,智能体会反复调用 Lakebase Search 来获取足够上下文以回答问题。在数千路并发 rollout 中,每一次往往又会发起数十次调用,这会形成极其突发性的负载。

Neon 的弹性算力能够轻松承接这些高峰,Castform 不必全天候为最大容量预留资源:需求飙升时训练能拿到低延迟的检索能力,空闲时段算力又会自动回收。
随着智能体从单纯检索迈向直接修改数据,这套基础设施的价值会更突出。训练有状态智能体需要既能低成本创建又能快速重置的隔离环境,避免某个 rollout 的操作污染到其他 rollout 或线上生产环境。
Neon 的分支功能可以为每一次 rollout 提供一份独立的数据库状态,而时间旅行查询则让我们能够回放并检视智能体当时所处的状态。再加上自动扩缩容和 scale-to-zero,就能在不必长期维护成千上万套运行环境的前提下,规模化地训练成千上万次有状态智能体 rollout。
Castform 让任何开发者都能轻松对开源模型进行后训练,从而以更低的成本、更快的速度获得超越前沿水平的效果。立即前往 castform.com,训练你的第一个模型。