@ contentrain/ 决定
关于移徙和治理管道的小规模决定。 决定是 从闭合集中选择(a) 选择或固定标题(a)上的位置 分数(b) —— 从未生成文本 。 要求有一个链条:
rule → cache → Jev (typesafe.ai) → LLM (Claude Haiku, opt-in) → the rule's tentative answer
定相法则先答. 只有规则未定的事情
a 提供者,每个答案以其形状输入为缓存,支出上限为每
每天租户,一个断路器停止 呼叫一个失败的供应商,和每一个
(c) 将决定纳入审计记录。 任何提供者失败都无法拨打:
裁决回到规则的答案,标记 unreviewed。 。 。 .
pnpm add @contentrain/decide
使用量
import { createDecider, JsonlAuditLog, JsonlDecisionCache, MemoryDailyBudget } from '@contentrain/decide'
const decider = createDecider({
cache: new JsonlDecisionCache('.run/decision-cache.jsonl'),
audit: new JsonlAuditLog('.run/decisions.jsonl'),
budget: new MemoryDailyBudget(500),
})
const decision = await decider.decide('punch_item', {
label: '(aile: post)',
reason: 'en kötü sayfa 43.2 < 80 (5 sayfa ölçüldü)',
})
decision.choice // 'measurement'
decision.score // 2.03 — severity on the kind's 0–3 rubric
decision.confidence // 0–1
decision.source // 'rule' | 'jev' | 'llm' | 'cache'
decision.unreviewed // true when no provider answered
decideMany(kind, inputs) 批次:一种物品共享请求,和 a
类型可将它们进一步分类(punch_item 每个请求最多发送一个网站
25项,如PoC-1所做的那样)。 否则,请求最多持有32件物品并停留
保守估计的~32克令牌下(batch 选项; 类型本身
限制胜出)。 除非 fold: false。 。 。 .
decide(kind, input) 没有决定者使用
默认 1: 内置类型, Jev 当设置符号时, 一个内存缓存 .
杰维
Jev只有在 CONTENTRAIN_JEW_API_TOKEN 设置在环境中.
符号在每次请求时读取,直接进入
Authorization 页眉; 从未被存储在对象上、 记录或放入
错误消息 。 请求到一个固定终点,
https://api.typesafe.ai/v1/systemone ——没有基于URL的选项. 没有
表示链条从规则中解答, 带内决定会回来
unreviewed。 。 。 .
输入形状
每一种都有一个形状器, 形状输入是唯一离开
处理或到达缓存键。 它能维持决定需要的东西 并放弃
剩余 : punch_item 放弃页面链接并翻转 URL、电子邮件地址和
文本中的路径进入占位符; eligibility_band 保留发现数
并自取样本记录。 审计日志保持输入的散列,
绝不是输入.
这个 请求形状 是构成提供者请求的一切的散列:
模式、批量限制、标题、行格式、问题及其
标准requestShapeHash(kind)) (中文(简体) ). 它是每个缓存键的一部分 每一个
审计记录,所以改变的提示 从来没有为旧的答案.
类型
| 仁爱 | 答复 | 规则 | 提供者 |
|---|---|---|---|
punch_item | 类(product_defect • 妇女 source_limit • 妇女 cosmetic • 妇女 measurement+ 严重性 0-3 | 运行报告措辞的暂定类别,它承认;从未确定,因为规则不能规定严重程度 | Jev, 有 PoC-1 的逐字请求( 站点占位符放在一边); 咨询 |
eligibility_band | eligible • 妇女 access_blocked • 妇女 page_only • 妇女 custom_type,或 needs_human | 镜像 Migrate 的 judgeEligibility; 未决定的带外最后 | Jev,只在乐队里 |
field_type | string • 妇女 text • 妇女 markdown • 妇女 richtext • 妇女 relation • 妇女 url • 妇女 select,每个项目仅限于事实包提供的选项 | 明确长度的最后决定(100个字符) string页:1 text),而且许多情况下具有 3 个值(select(b) 暂定其他办法 | Jev,每个选项集一个请求 |
region_name | hero • 妇女 card-grid • 妇女 faq • 妇女 cta • .(18个科) | 从课堂、建筑工和儿童提示中试取; content 当没有匹配时, 0 | 杰维 |
unmapped_element | 天体-基特元件 id, prose,或 site-specific | 当元素名称表示时, 最终( 0. 9)*-carousel → slider, (中文(简体) ), *toggle → faq, (中文(简体) ), *heading → prose; 暂定 site-specific 否则 | Jev,每个建筑商一个请求;在0.5置信度下 = site-specific |
后面三个是Migrate v3的"事实包"所剩的: 关于a的其他一切 工地的结构在他们面前是确定的。 他们的投入来了 这些形状器再次刷: 四舍五入,文本被剪去并被擦除,元素和类名称被缩小为 slug.
这个 eligibility_band 带是两种情况:
以及一个有样本的站点 一个捷夫
0.5以下的回答变成 needs_human将Jev的选作
proposed。 。 。 . needs_human 它只是衍生出来的——它从未提供给Jev.
过 options.rule 用你自己的规则(移民通过判决功能),
或者说 null 跳过规则.
缓存、预算、断层器、审计
| 块 | 内建 | 带上你自己的 |
|---|---|---|
缓存 — 密钥 sha256(kind, schema version, request shape, canonical shaped input) | MemoryDecisionCache, (中文(简体) ), JsonlDecisionCache | 执行 DecisionCache (数据库库属于主机) |
| 预算——每个租户/协调世界时日的提供者决定 | MemoryDailyBudget | 执行 DecisionBudget |
| 断路器——每个提供者,在3个60s的请求失败后打开 | CircuitBreaker | 通过 breakers |
| 审计——每个决定一份记录:投入散列、回答、信心、来源、时间、象征 | JsonlAuditLog (单位:千美元)decisions.jsonl, (中文(简体) ), MemoryAuditLog | 执行 AuditSink |
只有提供者的答案被缓存 。 一条规则的答案并不花费什么 重算,和 退缩不是任何人被审查的答案。 缓存命中和最终规则答案 不使用预算.
预算和断路器覆盖两个供应商。 共享一个每日上限: 请求中的每件东西 实际都花在它身上 所以一件Jev 失败了,海口回答两次。 打开的断开器后面的物件 在Jev外出期间, 只有Haiku的要求才收费。 每个供应商都有自己的断路器,而且 捷夫的公开断路器后面的一个东西 继续去海库.
两个供应商都报告象征性使用. cost 每项决定的份额
其批次的代币,以及 usd 只有在你给供应商定价时:
pricing: { jev: {…}, llm: { inputPerMTok, outputPerMTok } }Jev的供应商
发布无价.
LLM链接:克洛德·海库
Haiku回答Jev没有的问题:Jev关闭,它的断路器打开,暂停,暂停 错误。 它是选入的:除非你用电线,否则任何模型都不会被调用.
import { createAnthropicProvider, createDecider } from '@contentrain/decide'
const decider = createDecider({
llm: createAnthropicProvider(), // claude-haiku-4-5-20251001, temperature 0
pricing: { llm: { inputPerMTok: 1, outputPerMTok: 5 } },
})
密钥读取自 ANTHROPIC_API_KEY 在每次请求时
与Jev的符号相同:从未存储,登录或放入出错消息.
请求只到 https://api.anthropic.com/v1/messages海库得到
和Jev一样的状态和问题 通过一个
强制工具在温度 0 调用, 所以答案是一个结构化的记录, 而不是
解说出流言. A Claude 4.7或以后的型号model 选项)不使用
在Opus和Sonnet 5.5上,也没有强制调用工具
通过结构化产出、同样迅速和等同的JSON查询
计划.
punch_item 发送按字数计量的提示 AO- 9; 其他类型得到一个
从他们的问题中创建的通用提示.
它的答案被缓存在 Jev 的同名密钥下: 一个输入一次回答, by
或提供方,然后从缓存中获取,以及 model 说
一个回答。 模特儿没有自信 所以海口的回答
携带 confidence: 0 ("未测出"). 对于 eligibility_band 这意味着
每个 海库选手去 needs_human,选择保留为 proposed。 。 。 .
一个主机可以连接另一个模型:执行 DecisionProvider 与
name: 'llm' 传为 llm默认为 noopLlmProvider,这是
永远无法使用.
校正
punch_item 是一种建议。 Jev没有以同样的方式回答同样的要求
每次,这些答案都不稳定: 显示在项目旁边
人来确认, 从来没有作为一个门.
pnpm calibration:live 将 PoC-1 套装送去 Jev 三次, 确切地说是
包裹寄出: 22份运行报告中的272个出击物品,其中40个被标记为
手给我 写着 calibration/<date>.json jev模型报告后
请求- 形状散列, 只计数 。 城门就定在捷夫的地上
已经 中位数运行必须达到至少85%的班级协议和严重程度
在至少90%的级别内,至少85%的标签物品必须
在三跑中保持同样的班级.
最新档案, calibration/2026-09-18.json在jev-1.13.0上测量
有请求形状 32da2187d1dc37d5它通过:
- 班级协议:全行40分中34分/35分/33分,中位数85.0%. 没错 门槛.
- 在一个级别内严重性:40分之37/37/37,中位数92.5%.
- 稳定:36/40个标有标签的物品和237/272个所有物品.
请求会发送站点名称、其URL和项目链接的占位符 。 那个 在请求中保留现场身份,费用约为2至3项 严重协议。 测试将运出的请求形状保存到文件形状 hash,并需要文件通过.
pnpm calibration:live --provider haiku 对海库运行相同的设定
(单位:千美元)--provider both 运行两者。 这需要 ANTHROPIC_API_KEY时
同一大门,写着 calibration/haiku/<date>.json 由海口自己请求
形状( e)anthropicRequestShapeHash按清单价格计算的费用。 海库是
倒置,所以它的门结果 被记录为信息 和屏蔽什么.
calibration/haiku/2026-09-19.json (Claude-haiku-4-5-20251001, LLM 请求)
形状 96aa1feb04caef9a,"三跑"0.33美元) 失败 大门:
- 班级协议:37 / 36 / 37分40分,中位数92.5%.
- 在一个级别内的严重程度:33/34/33/40,中位数82.5%。 这是 在90%的门下。 Haiku回答严重性的整体水平,而Jev 回答关卡之间的分数.
- 稳定: 39/40 有标签的物项和259/272的所有物项.
PC-1设定了真实站点的名称,所以它留在了这个寄存器之外.
CONTENTRAIN_DECIDE_POC1_DIR 将脚本和测试指向它.
测试的重放通过完整的决定者录制答案
(单位:千美元)createReplayFetch) (中文(简体) ). 检查代码路径: 塑造、组合、,
分批、阅读和评分。 它不能测量模型.
measurePunchCalibration(labels, decisions) 分数 punch_item 路边
PoC -1确实有.
Contentrain生态系统的一部分
Contentrain是团队和人工智能代理商的一个内容治理生态系统;代理商通过 MCP 服务器。这个包是 开源工具 (单位:千美元)文档) (中文(简体) ). 其他部分: 工作室 团队审查和作用, 迁移 用于将 WordPress 站点移动到 Astro,以及 桥,作为Contentrain商店输出一个站点的免费WordPress插件.
许可证
麻省理工学院