ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

用 TypeSafe 构建可编程 AI 判断:System One 模型、Choice/Noul/Score 原语与 jevgrep 检索实践

2026/9/30 2:22:26 拓冰建站 浏览量
用 TypeSafe 构建可编程 AI 判断:System One 模型、Choice/Noul/Score 原语与 jevgrep 检索实践 【免费下载链接】jevgrepFind code by asking what it does. A CLI for coding agents that uses Jev to discover relevant files and source context.项目地址https://gitcode.com/gh_mirrors/je/jevgrep点击查看免费下载TypeSafe 提出了一种把 AI 能力原语化的编程模型让 System One 模型其旗舰模型 Jev对自然语言和应用状态返回类型化判断与概率而不是生成文本从而让代码掌控工作流、模型只提供可编程的常识。本文以仓库中的 typesafe-ai 技能文档 为骨架系统讲解 TypeSafe 的编程模型、三类判断原语Choice / Noul / Score、问题与状态设计原则、组合与验证方法并结合本仓库中真实使用 Jev 的检索工具 jevgrep 的源码说明这套方法论在工程中如何落地。读完本文你将掌握如何从应用行为反推所需判断、如何用三种原语表达选一个 / 是否成立 / 程度如何、如何设计 state 与 criteria、如何在并行组合中正确解读概率与置信度以及如何像 jevgrep 一样把 Jev 的判断接入真实的检索管线。核心编程模型AI 智能以原语形态进入代码TypeSafe 的核心主张是把小单位的 AI 智能当作编程原语来使用——一次调用返回一个快速、聚焦的判断代码把这些判断组合成更大的能力。这与传统让 LLM 生成一段文本或解释的用法有本质区别System One 模型返回的是类型化答案与概率而非自然语言段落或推理说明Jev是 TypeSafe 旗舰的、也是第一个 System One 模型它理解自然语言返回类型化答案和概率代码拥有工作流判断的顺序、组合、重试、回退都由代码决定模型只在普通代码需要语义理解的地方提供可编程常识。这套定位决定了 TypeSafe 的典型应用形态路由、排序、抽取、校验、交互式体验等本质都是把一次 LLM 的 prompt-and-parse 步骤变成一个结构化的决策。在本仓库中Jev 正是被这样使用的jevgrep 的核心诉求是用自然语言问仓库问题返回相关文件与源码片段而相关性判断完全交给 Jev。在 providers.ts 中可以看到 Jev 通过四个渠道接入Vercel AI Gateway模型typesafe-ai/jev、TypeSafe 官方端点模型jev-1.13.0、OpenRouter模型typesafe/jev-1.13、OpenCode Zen模型jev-1.13。每次求值返回的是Recordstring, number这样的概率表见 types.ts 中的Evaluator.evaluate签名代码直接消费这些数值做阈值判断而不是解析自然语言。以实时文档为第一事实来源技能使用的三条准则技能文档反复强调实时 TypeSafe 文档是事实来源读取文档本身就是任务的一部分。技能文件只给出方向概念、提示词指导、API 契约、SDK 用法、模型与限制、可运行示例都在文档中。实践上有三条准则从文档索引出发做定向阅读先读文档索引页发现相关页面与 cookbook做定向读取而不是把整个站点加载进来。利用 Markdown 交付机制Mintlify 通过在页面路径后追加.md返回 Markdown例如把无扩展名页面链接转为.md按需获取便于 Agent 阅读的纯文本版本。集成前必读、新流程必看 cookbook写集成代码之前先读当前 API 或 SDK 页面与问题设计指南对于全新工作流还要看最接近的 cookbook——它往往展示出比通用分类器更好的分解方式。技能同时给出了兜底策略索引不可用就用直接链接或站点导航Markdown 抓取失败就访问普通页面实时访问完全不可用则改用本地文档或已安装 SDK 的类型定义明确说明这一限制并避免臆造依赖版本号的细节。下表是技能给出的任务 → 起始资料速查任务起始资料方向理解编程模型System One 概念页、构建指南探索可以构建什么用例地图再按索引找相关 cookbook准备输入与问题状态State概念、原语总览再读所选原语的页面决定如何处理不确定性置信度Confidence文档编写 API 代码HTTP API、Python SDK 或 JavaScript SDK更新旧集成迁移指南与当前 SDK 参考对应到本仓库jevgrep 的 CLI 包说明 与 jevgrep 技能文件 扮演了类似角色它们定义了jg的安装、认证、调用与输出语义是 Agent 使用 Jev 检索能力的操作契约。从用户行为反推判断六类可组合的形态技能给出的第一设计原则是从用户想要的行为出发倒推它需要的判断。用户希望应用展示 / 选择 / 改变 / 交接什么需要哪些判断已知规则、计算、精确查找与执行留在代码里只在语义理解有帮助的地方引入 TypeSafe并保留用户既有的技术栈与范围。在此基础上技能列出了六类可组合的形态它们不是固定配方而是起点路由并填充已知参数Route and fill known arguments请求可以选择一个 handler 及其类型化参数。提前提出对分支有用的问题只消费相关答案。可参考函数调用function calling与投机式扇出speculative fan-out两个模式。选择而非生成Select instead of generate在代码中找出候选值或源码区间用一次判断选出目标值再复制或规范化它。代码也可以把源码拼装成格式化文档或阅读指南。对应预解析值抽取与结构恢复autoformat。检索并判定证据Find and judge evidence先取回候选再对比它们与查询的相关性选出有用上下文。对应重排序reranking与分层分类hierarchical classification。把判断沉淀为可复用数据Turn judgments into reusable data一次性对多个维度打分让代码或用户控件改变权重、阈值、排序与视图有了标注结果这些信号还能变成经典 ML 特征。对应组合打分与特征发现。校验并升级Verify and escalate针对具体声明或字段对照证据核验把不确定或失败的情况交给人或推理模型。对应引文核查与抽取级联extraction cascades。响应变化中的状态Respond to changing state代码保留目标与观察让新鲜的判断指导下一个有界步骤。保持推断状态与观察到的事实分离在把结果套用到已变化的情境前先检查新鲜度。对于开放式请求技能建议只给出最贴合用户目标的少数方向并推荐一个起点对于具体请求直接选择相关模式开始构建不必把头脑风暴当作必经步骤。jevgrep 的检索管线retrieve.ts几乎可以逐条对应这些形态它取回候选并判定证据对目录、文件、声明打分、选择而非生成在源码中定位并抽出区间而非生成答案、路由并填充参数按目录层级逐层决定是否进入子目录。最有代表性的一处技能要求保持推断状态与观察到的事实分离应用结果前检查新鲜度而 retrieve.ts 中每个候选在每次求值前都要通过unchanged()用内容哈希contentHash重新校验源文件源已变化就作废该候选正是新鲜度检查的工程实现。设计判断Choice / Noul / Score 三种原语技能给出了三张核心原语表按答案的含义选择需求原语关键区别从定义好的集合中选一个Choice选出一个选项其概率分布用于比较竞争选项某个条件是否成立Noul是的概率没有单独的置信度多个可能同时成立时每个标签用一个 Noul沿某个描述维度的程度Score在有序等级上的概率加权位置做分级排序时对每个项目用可比较的 Score围绕这三个原语技能给出了一套问题设计规范这些规范直接决定判断质量给足相关的 state问题要有足够的上下文——源文本、身份、关系、策略、当前事实。上下文有多个部分时优先用命名的 JSON 字段用反引号路径如ticket.messages[0].text引用嵌套状态。instructions 与 criteria 分工把要判断什么放进 instructions把答案有哪些可能定义进 criteria。question ID 只给代码问题 ID 用于代码索引不会发送给模型问题的完整含义必须写进问题本身。每个问题只问一个狭窄、连贯的判断拆分独立有用的维度但不要破坏被判断的关系。有界动作选择或上下文解释是合法的原子不意味着只抽取字面事实或一句话限制。表达方式按需选择简单问题用字符串当定义、对比、排除或示例有助于澄清 instructions 或 criteria 时使用结构化对象或数组。Score 的等级必须描述具体情境、能独立成立。保证答案可用什么都不匹配时要有 no-match 结果当是否存在本身独立有用时用单独的 presence 判断对从源码取值的选择要检查候选覆盖——模型无法选择一个被遗漏的值。本仓库完美印证了question ID 只给代码这一设计在 retrieve.ts 中一批导航项NavigationItem被打包进一个求值请求返回的分数表以q${index}作为键scores[q${index}]代码用这些键把概率映射回对应项目——模型侧看到的是结构化的判断请求q0/q1这类索引只存在于代码侧。组合与验证并行提问、概率语义与策略显式化技能对如何把多个判断组合起来有明确指导对同一份 state 上相互独立的问题一起提问包括有用的投机性问题speculative questions。它们并行运行、互相看不到对方的答案每个投机前提都要显式陈述代码只消费适用的答案。只有当需要前一个答案才能取证据、构造新 state 或确定下一组选项时才值得发起第二次请求。额外的问题同样消耗 token要实测请求预算、成本与端到端延迟而不是想当然。用概率和置信度引导行为阈值要在用户数据与后果上评估Choice/Score 的置信度总结的是分布集中度不是整个工作流正确性或行动许可。Noul 接近 0.5 意味着 yes 与 no 概率相近而不是中等强度多个可接受选项也会摊薄概率所以低置信度不一定意味着无害偏好选择无效对未使用的分支要忽略不确定性。策略保持显式、原始判断保持可复用加权分数适合互相补偿的偏好而任一严重违规即拒绝需要独立条件。证据与问题含义不变时改权重或显示过滤无需重跑推理。类型化输出保证的是接口契约不是事实System One 模型经过校准训练但要在目标领域验证其表现。测试有代表性的用例与最终应用行为失败时检查精确的 state、问题、候选、答案、组合方式与观察结果区分证据缺失 / 模型错误 / 代码错误 / 服务故障。cookbook 中的阈值与演示结果是供评估的示例不是放之四海皆准的规则更不是模型的永久限制。Web 应用中的 API 凭据必须保存在服务端。jevgrep 的管线是这套组合哲学的完整示范retrieve.ts发现阶段用 32 个并发 workerstageWorkers 32与 CLI 文档中默认 32 并发上限一致并行地对目录/文件打分分数按批提交单批最多 128 项或 JSON 不超过 38,000 字节目录与文件以probability 0.5为接纳阈值——这正是阈值要在用户数据上评估的实例化。批次失败时还会对半拆分重试retrieve.ts区分可恢复的提供方错误与真正失败。技能要求独立问题并行、互相看不到答案对应求值器每次调用返回独立概率表而证据缺失 / 模型错误 / 代码错误 / 服务故障的四分法对应 retrieve.ts 中对 issue 的分类记录authentication、request-limit、cancelled、interrupted等与最终incomplete状态的上报。仓库实践jevgrep 如何把 Jev 判断接入检索管线提供方与凭据Jev 通过四个提供方接入providers.ts提供方baseURL模型Vercel AI Gatewayhttps://ai-gateway.vercel.sh/typesafe/v1typesafe-ai/jevTypeSafehttps://api.typesafe.ai/v1jev-1.13.0OpenRouterhttps://openrouter.ai/api/v1typesafe/jev-1.13OpenCode Zenhttps://opencode.ai/zen/v1jev-1.13凭据管理在 auth.ts 中实现与技能凭据保存在服务端的原则一致jg auth交互式选择提供方并输入密钥jg auth --provider NAME --stdin支持从管道读取密钥用于自动化。密钥写入$XDG_CONFIG_HOME/jevgrep/credentials.json缺省~/.config/jevgrep/credentials.json目录权限0700、文件权限0600并通过临时文件 rename原子写入密钥校验要求非空、无空白、不超过 8 KiBauth.ts。CLI 参数与退出码技能文档指向阅读当前 API 文档对 jevgrep 来说操作契约就是 args.ts 与 CLI 包说明jg question [root]根目录默认当前目录jg auth [--provider NAME --stdin]选择提供方并保存密钥jg doctor用合成输入验证 Jev 访问与连通性jg skill [--agent NAME] [--global] [--yes]把 jevgrep 技能 安装进 Agent 所在项目jg cache clear与--no-cache本地求值缓存控制搜索选项--max-source-bytes N0 表示不限默认值定义于 render.ts、--hidden、--no-ignore、--include-dependencies、--include-sensitive各旗标只放宽对应的排除类别Git 元数据与 jevgrep 自身存储始终排除、--concurrency N慢网络推荐 1–4默认 32退出码0完成、1失败、2不完整、130中断所有输出走 stdout不生成报告文件。检索管线中的判断调用retrieve.ts 是代码拥有工作流的完整实现判断全部由 Jev 提供发现discover从根目录逐层列出条目目录预阅最多 64 项或 4096 字节文件预阅取开头 16,384 字节超过 100,000 条目录项触发resource_limit。大文件按 12,000 字节切块splitSource每个切块作为独立候选。导航打分对一批候选提交navigationRequestprobability 0.5的目录继续深入、文件进入候选表其余目录被剪枝pruned。若在候选中发现.context结尾的声明类class会以它为锚点anchor对剪枝目录做一次关系重审。文件评估与选择selectFile定位有用源码单元与周边上下文fileAssessmentRequest并行产出角色标签如test与优先级标签阈值同为 0.5。证据复选与测试体选择已选片段作为证据供第二轮选择参考被标记为测试的文件再走selectTestBodies把测试体也纳入呈现。局部调用上下文与仓库上下文localCallContext补充调用者线索callLeadsrepositoryContext汇总指令文件与 pytest 文件供后续编码阶段使用。整个管线对每次求值都做内容哈希新鲜度校验最终产出 types.ts 定义的RetrievalResultstatuscomplete / incomplete / interrupted、文件证据列表path、score、roles、leads、selected、excerpts、sourceOmitted 等、issue 清单与请求/缓存命中/检视文件计数。输出契约证据而非答案技能强调类型化输出保证接口不保证事实jevgrep 的输出同样如此。按 jevgrep 技能文件 的约定摘要与排序文件列表在前随后是逐字源码摘录与详细位置没有摘录的路径是额外阅读线索摘录可能是部分的需要借助文件与行号继续阅读相关性标签是估计值不保证完整性完整上下文以End context.结束。仓库 README 也明确输出是给 Agent 的证据不是生成的答案也不保证找到了所有相关文件——检索不完整或出错时把缺失的上下文视为未知jg doctor负责排查提供方配置。这与技能用判断引导行为、把 cookbook 结果当示例评估的态度一脉相承Jev 提供校准过的判断与概率工作流、阈值、回退与验证全部由 jevgrep 的代码显式承担。从技能到工程落地检查清单综合技能文档与仓库实现把 TypeSafe 集成进真实应用时可以按以下清单自查形态从用户行为倒推判断能留在代码里的规则、计算、精确查找不要外包给模型。原语按答案含义选择 Choice / Noul / Score每个问题狭窄、连贯、含义完整自足。state命名 JSON 字段、反引号路径引用嵌套状态问题要能独立回答。覆盖率包含 no-match 结果选择类任务检查候选覆盖模型选不到未提供的值。组合同一 state 上的独立问题并行提问投机性前提显式声明第二次请求只在必要时发起。概率语义Noul 0.5 是是/否概率相当而非中等强度低置信度不自动否决无害偏好未用分支忽略不确定性。策略显式表达策略加权 vs 一票否决证据与问题不变时调权重/过滤不重跑推理。验证代表性用例 失败四分类证据缺失 / 模型错误 / 代码错误 / 服务故障阈值在用户数据上校准凭据只存服务端。jevgrep 用 Jev 判断目录、文件与声明的相关性把自然语言问仓库变成可组合、可校验的检索管线正是这套方法论在真实工程中的一次完整落地。想进一步深入检索、解析、缓存与失败处理的设计细节可以继续阅读本仓库的 架构文档、实现记录 与 基准评估说明。赞分享【免费下载链接】jevgrepFind code by asking what it does. A CLI for coding agents that uses Jev to discover relevant files and source context.项目地址https://gitcode.com/gh_mirrors/je/jevgrep点击查看免费下载相关推荐一文看懂 Kev 的 3 种题型noul 判断、choice 选择、score 评分如何协同工作一文看懂 Kev 的 3 种题型noul 判断、choice 选择、score 评分如何协同工作 Kev 是一个基于 Qwen3.5 构建、可以自行训练和运行人工智能大模型微调模型推理服务模型评测本地部署LoRA玩转Laya的3种决策原语choice、score、noul完整使用指南玩转Laya的3种决策原语choice、score、noul完整使用指南 Laya 是一个多语言、非自回归的 System 1 决策引擎 把问题定义成 3人工智能NLP强化学习Laya-MLX Python API参考手册choice、score、noul三类问题类型一次讲清Laya MLX Python API参考手册choice、score、noul三类问题类型一次讲清 Laya MLX 是一个运行在 Apple Silico人工智能大模型本地部署推理引擎上一篇Noto字体彻底告别豆腐块的终极多语言字体解决方案下一篇重新定义网盘下载从客户端思维到浏览器思维的范式转换创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考