Jev 很酷,但就像任何基础模型一样,它需要根据您的决策标准进行校准。jev-align:一个开源的命令行工具,可以使用 GEPA 快速教 Jev 什么是好什么是坏。
Sutro团队造了一个叫jev-align的命令行工具,专门让你用标注数据的方式把TypeSafe的Jev AI函数调到跟你脑子的判断一模一样!
别再死磕提示词了,Jev自己会告诉你哪里犯迷糊!
jev-align通过主动学习和GEPA优化框架,让开发者只需标注少量高不确定性样本,就能持续对齐Jev AI函数的输出与人类判断,覆盖二分类、多标签、评分等多种任务类型,支持TypeSafe和Vercel等多后端部署。
你花三小时改提示词不如标十条数据
绝大多数开发者遇到Jev AI函数答错的时候,第一反应是打开代码编辑器,把传给语言模型的那段指令翻来覆去地改,加几个示例,换几个形容词,调一调语序,然后重新跑一遍看分数有没有涨。这种操作叫提示词工程,整个行业都在教开发者怎么把提示词写得更精确、更详细、更像人类说话的语气,仿佛只要措辞够巧妙,语言模型就能读懂你心里真正想要的那个标准。
jev-align走了一条完全相反的路。Sutro团队的核心假设是:你花在改提示词上的三个小时,绝大部分都浪费在了猜测语言模型到底想听什么话上面,而语言模型真正需要的东西其实藏在你自己的脑子里,只是你从来没有用一种结构化的方式把脑子里的判断倒出来。jev-align的做法是让你停止猜谜,直接打开终端,对着Jev最拿不准的十几条数据按下方向键和回车键,告诉Jev哪条该判真、哪条该判假!
具体的操作流程极其朴素。你在终端里输入jeva optimize posts.csv --question "这条帖子跟航空有关吗" --column title --column text,jev-align就会读取你的数据文件,调用Jev对每一行跑一遍预测,然后挑出Jev最犹豫的那些行,一条一条地展示在你的屏幕上。你用方向键选True或False,按回车确认,偶尔还可以打几个字解释你为什么这么判,五到二十条标完一轮就结束了。
跟Stanford大学开发的DSPy框架比起来,jev-align的差异在这个环节就已经拉开了。DSPy的运行方式是自动跑一个优化循环,用指标分数驱动提示词的变异和选择,开发者大多站在旁边看分数涨落。jev-align把开发者拽进了循环的最核心位置:Jev最困惑的那一刻,必须由你亲手给出答案!
Jev最困惑的地方才是金矿
要理解jev-align为什么只挑Jev最犹豫的数据让你标,得先搞清楚语言模型做判断的时候内部到底在发生什么。当Jev读到"波音737交付联合航空"这句话并回答"跟航空有关吗"的时候,Jev内部给出的概率可能是百分之九十五,几乎毫不犹豫。但当Jev读到"飞行员的女儿开了一个YouTube频道"的时候,Jev内部的概率可能只有百分之五十二,barely过半,Jev自己都不确定该往哪边倒。
jev-align每一轮优化的第一步,就是扫描你整个数据集里最多一千行数据,把每一行的预测概率都拉出来排个序,然后专挑那些概率最接近百分之五十的行。这种技术叫不确定性采样,属于主动学习这个大类下面的一个具体策略。主动学习的核心思想是:让学习者优先学最不会的题,而不是把已经会的题反复做一百遍!
传统的做法是随机抽五百行数据,全部人工标一遍,然后拿去微调或者重新写提示词。这种做法浪费了大量人力在Jev本来就能答对的简单题上面。jev-align把逻辑翻了过来:Jev已经百分之九十九确定的行,你标了也白标,Jev从中学不到任何新东西;Jev百分之五十对五十的行,你标一条就能让Jev的决策边界发生显著移动。十分钟的精准标注,效果碾压三小时的随机苦力!
不确定性采样还混合了一小批随机抽取的审计样本,目的是防止Jev只在某一种类型的难题上进步,却在其他类型的简单题上悄悄退步。这种设计让jev-align的优化过程既有深度又有广度,不会因为过度聚焦难题而丢失基本盘。
分数再高也不能自动通过
但是jev-align的设计者做了一个让整个自动化优化行业皱眉的决定。
你标完一批不确定样本之后,GEPA反射引擎会消化你的标注和你写的解释,然后生成一个新版本的Jev AI函数定义。jev-align会在终端里展示三样东西:新的评估分数、Jev确定性的变化幅度、以及新旧定义之间的逐行差异对比。然后jev-align就停在那里等你操作,不管分数涨了多少,jev-align都不会自动把新定义写进去!
你可以按回车接受新定义,也可以按键拒绝,还可以回退到之前任何一个你批准过的版本,甚至可以暂停整个流程、过几天再回来接着干。这个设计跟整个行业的趋势完全拧着来:所有人都在追求全自动优化,恨不得把人类从循环里彻底踢出去,让算法自己迭代自己。jev-align偏偏说人类判断就是整个流程里最值钱的那个环节,所以人类判断必须留在循环的最关键位置上!
GEPA反射引擎和Jev评估引擎是两个完全独立的组件。Jev负责跑数据、给预测,可以走TypeSafe的API,也可以走Vercel AI Gateway或者Cloudflare Workers AI。GEPA负责读你的标注、反思Jev的定义哪里写偏了、然后提出修改建议,GEPA可以调用OpenAI的GPT-4o,也可以调用Anthropic的Claude,甚至可以调用你本地vLLM上跑的Qwen3-8B。两个引擎各用各的模型,各花各的钱,互不干扰。
从生产数据里捞出下一轮考题
jev-align的优化循环并不会在你把Jev AI函数部署到应用里之后就停下来。Sutro团队在Python SDK里提供了一个叫AIFunction.load的接口,你加载已保存的Jev AI函数时把capture参数设成True,Jev AI函数就会在每次生产环境调用的时候悄悄把输入数据和预测结果存到本地文件里。
几周之后你重新打开终端,输入jeva functions,选中那个正在跑着的Jev AI函数,恢复优化会话。新一轮的不确定样本不再来自你当初准备的那张测试表格,而是来自真实用户扔过来的千奇百怪的真实数据。Jev在实验室里表现完美的分类逻辑,到了生产环境里可能会被一条措辞古怪的用户评论打得措手不及,而这些措手不及的瞬间正是jev-align最渴望捕获的训练信号!
DSPy和类似的提示词优化框架通常在一个固定的验证集上跑完优化就收工了,验证集不变,优化就停了。jev-align把优化变成了一个永不停歇的循环:部署Jev AI函数到生产环境,捕获真实数据,标注不确定样本,用GEPA反思并更新定义,重新部署。Jev AI函数会随着时间推移越来越锋利,因为训练信号来自最混乱、最不可预测的源头——真实用户!
你的判断力才是最后的编译器
jev-align的整个架构建立在一个经常被忽略的区分之上:评估数据的模型和改写定义的模型根本不需要同一个。你可以用Cloudflare上几分钱一次的廉价模型跑一千行数据的评估,然后只在有新鲜标注需要消化的时候才调用昂贵的GPT-4o做GEPA反思。评估成本和优化成本被彻底解耦了,jev-align让高频廉价的直觉判断和低频昂贵的深度推理各归其位!
这种双引擎架构意味着你的每一次标注都会经过两层过滤才最终变成Jev AI函数的新定义。第一层是你自己的判断力,决定哪条数据该判真、哪条该判假;第二层是GEPA反射模型的理解力,决定怎么把你的判断翻译成Jev能执行的函数定义。两层之间还隔着你自己的眼睛,因为GEPA提出的每一个定义修改都必须经过你审阅差异对比之后才能生效。
然而jev-align的文档里有一个细节至今没有给出明确答案。GEPA反射引擎的指标调用预算默认设成了三百次,对于只有两个类别的二分类任务,三百次预算绰绰有余;但对于有十五个类别的多标签任务,三百次预算够不够用,Sutro团队没有提供任何基准测试数据,GPT-4o和Qwen3-8B在同一批标注数据上产出的定义差异对比也完全空白,这个成本和质量之间的权衡目前只能留给每一个jev-align用户自己去摸索!