@ framers/ agentos- ext- grounding- guard
以NLI为基础的基于事实的核查 @framers/agentos从代理产出中提取索赔,并用自然语言推论评分对照提供的来源文件对每项索赔进行核实.
它会做什么
从代理答复中摘录每项事实索赔,对照使用NLI模型的检索上下文(或提供的段落)加以分析,并报告每件索赔涉及的分数。 低于规定限额的索赔被标为无根据索赔.
用来:
- 减少RAG剂中的幻觉
- 在反应船之前执行最低限度索赔政策
- 根据每份申请得分建立幻觉率仪表板
安装
npm install @framers/agentos-ext-grounding-guard
同伴依赖 : @framers/agentos依赖性: chrono-node 2.10.3,其中 whenSaid 阅读日期与.
快速启动
import { AgentOS } from '@framers/agentos';
import { createGroundingGuardrail } from '@framers/agentos-ext-grounding-guard';
const agentos = new AgentOS();
await agentos.initialize({
extensionManifest: {
packs: [
{
factory: () =>
createGroundingGuardrail({
entailmentThreshold: 0.7,
minGroundedClaims: 0.8,
}),
enabled: true,
},
],
},
});
公共 API
ClaimExtractor- 从答复中提取离散的事实索赔GroundingChecker- 通过NLI评分管理每项索赔GroundingGuardrail用于AgentOS合同的护栏线线createGroundingGuardrail(options?)工厂归还ExtensionPackcreateExtensionPack(context)——AgentOS扩展设备使用的可自动发现工厂自动取出
见 src/types.ts 页:1 GroundingGuardOptions。 。 。 . ValueAgreementChecker 而读者有自己的部分, 价值协议,没有编号的索赔列在 一个没有数字的事实,关于一个短语的规则 一个公开来源被搜索, phraseProblem下页 搜索短语· ; verifyQuotes 属于 逐字记录, (中文(简体) ), whenSaid 下级 行名的当天, (中文(简体) ), checkSentence 财务报告和审定财务报表 checkLabel 下级 句子检查,以及 createNliFunction 模式选项 无线。 。 。 .
价值协议
嵌入和NLI分级话题和必然性,而不是1918年是否等于1919年. ValueAgreementChecker 决定:
import { ValueAgreementChecker } from '@framers/agentos-ext-grounding-guard';
const checker = new ValueAgreementChecker();
const source = { text: 'The Treaty of Versailles was a peace treaty signed on 28 June 1919.', group: 'Treaty_of_Versailles' };
const decision = checker.decide({
heardWords: 'The Treaty of Versailles was signed in 1918.',
heardSentence: 'The Treaty of Versailles was signed in 1918.',
proposed: 'differs',
named: [source],
found: [source],
});
// decision.relation === 'differs'; decision.marks[0] marks "1919" in the source's sentence
// decision.pairs: [{ kind: 'year', unit: null, heard: { start: 39, end: 43 }, source: { start: 62, end: 66 } }], "1918" beside "1919"
每项价值索赔都写明(一年,一日,一月,或与单位同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同为一等同一等同为一等同一等同为一等同为一等同一等同为一等同一等同一等同为一等同一等同为一等同一等同一等同一等同为一等同一等同一等同一等同为一等同一等同一等同一等同为一等同一等同一等同一等同一等同等同一等同为一等同一等同一等同 句子相匹配时,每对都是等同的,而双方数的否定是相同的,当一对是等同的,则不同. "差异"在句子中还需要索赔的每个内容词和发言者所讲的名字,因此源句从未单独显示一个名称或措辞的不同;一个单位的字母"100°C"的C,"450澳元"的A和"500澳元"的美元,名称无一字. 取名("Apollo 17")或大写字后一两个字母的罗马数字("一战"),也必须以正写法在来源的句子中站立("一战")nameMarks 因此,关于阿波罗17号的声称从未显示与阿波罗11号的句子相匹配或不同.
decide 返回时 null 当无法显示时:一个范围,一个近似("约1918"),一个正数,一个十年或一个属于一个名称("Apollo 12")的号码从不比较,名称上或下,如果发现另一段与索赔的数值一致,则扣取"差异". 一个来源的两个句子,将索赔的值与不同的值相配,返回 disagree。 。 。 . passages 选择值得分级的句子:最多40个字和600个字符,至少两个字与索赔相同,以及索赔持有的类似价值; top 是前三个.
关于价值的决定带有 pairs,其规则为: kind (单位:千美元)'year', (中文(简体) ), 'date', (中文(简体) ), 'month' 或者说 'number',对的 unit 类('m', (中文(简体) ), 'km', (中文(简体) ), 'pct', (中文(简体) ), 'usd', (中文(简体) ), 'deg' 其余的,像两边一样: 'deg:C' 财务报告和审定财务报表 'deg:F' 用于温度与尺度("100°C","100°C")并 'deg' 因为没有学位, 'cur:A$' "450澳元"和 'usd' “450美元”、“450美元”和“450美元”, 'cur:GBP' “450英镑”; null 一年、一年、一年或一个月的数字,其跨度为 heardSentence (单位:千美元)heard)及其合伙人的跨度在 sentences (单位:千美元)source),所有UTF-16抵消,因此一个来电者写道"1918年听了,1919年在来源"或"8849米听了,8848.86米在来源",来自决定,从不从二读句. 单位保持其价值: 每一条规则给出的价值, heard, (中文(简体) ), source 财务报告和审定财务报表 marks 同样的,用读者发现的单位来覆盖其价值:从它的前面的货币标志,正前方或中间的白色空格,加上一美元的国家字母("500","450","450","450"),或者从它的前面的货币代码("500")来覆盖 %, (中文(简体) ), ‰, (中文(简体) ), °, (中文(简体) ), ℃, (中文(简体) ), ℉ 或表示其后,正后或后为白相间("61%","64%","90°C","450欧元"),分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分出分 这么说 disagree 超过两道长度标记为"6,992公里"和"6,800公里",所听到的"百度"从不与"华氏212度"相配. 关系显示在第一对上: differs,其来源跨度为 marks[0];用于 disagree,其伴侣在两句之间有差异的对子,其来源跨度 marks[0];其余按照所听到的词的顺序排列,所以一个同意的值,在不同的值之前听到的值,从不引出. A 类 matches "珠穆朗玛峰高8849米" 旁边还有"珠穆朗玛峰高8848.86米" number 单位对 'm', (中文(简体) ), heard 17至28 ("8849米")和 source 17至32 ("8,848.86米"). 所听到的文字在所听到的句子中是: exactSpan 找到一个引文,两侧的白色空间倒塌了,每个跨度在句子本身的字符中给出,一个数字与其其中的单位单词之间的白色空间. pairs 在名字的路径上是空的,这个路径是一无是处的,当听到的文字不站在被听到的句子中时.
每个值 values 读取带有其单位等级(unit及其与该单位的抵消(按书面形式)(withUnit)),其本身 start 财务报告和审定财务报表 end 当它没有单位时;决定的跨度就是这些。 数字后的一个货币标志是其单位,只有在没有数字跟随该标志时,该数字才成为该数字之间的白色空间("2019年5美元买入一票"),读取了2019年和"5美元","2019年5欧元买入一票". 2019年和"5欧元". 一个数字后有空白于叶子之间的数字取而代之("2002年欧元硬币取代了法郎",读作"2002年"),一个币牌在一年的位数前就使出钱来("价格从2000欧元上升至3000欧元",读作"两笔"). 在数字之前或数字之后的白色间距上,一个货币编码是其货币,当它是美元、欧元、英镑、日元、CNY、瑞士法郎、CAD、AUD、NZD、HKD、SGD、INR、SEK、NOK、DKK、KRW、BRL、MXN、ZAR和RUB(“500美元”、“450欧元”):美元和欧元是以下类别: $ 财务报告和审定财务报表 €, (中文(简体) ), 'usd' 财务报告和审定财务报表 'eur',任何其他代码都是自己的一类('cur:GBP'),因此"450英镑"与"500英镑"相配,而从未与"500英镑"相配. 数字后的一个代码遵循了后面的标志规则("2019年美元5购买了一张票",读了2019年和"5美元","1999年欧元价格上涨","1999年","1年数字前的代码使得它们成为了金钱"("价格从2000美元上涨到3000美元",读了2个金额). 如"阿波罗"那样,在数字头一个名字之前,在列表外的资本,所以"ISO 9001"的数量从未被比较. 某一数额之前的文字在货币前读取,因此,“至少500美元”、“超过500美元”和“最多500美元”是近似值,在某一幅度的任意一个数字之前的货币都有一个范围(“在400至500美元之间”,“在400至500美元之间”,“400至500美元之间”,“400至500美元之间”):两者都不曾比较. 读者表外的单位读作"无",表外的代码是数字后("500兹罗提"),表所缺的单位字("500公顷"),所以一个听得到的数字没有单位的对数,与其他没有数字的单位的等值.
读取值( E)values, (中文(简体) ), valuesEqual),出闸口checkable,以及 checkableStatement 与 nameWords),句子切开(sentenceSpans),逐字记录(第1行)exactSpan)和句子检查(checkSentence, (中文(简体) ), checkLabel)也是条目 @framers/agentos-ext-grounding-guard/values,它不导入,而是在浏览器中运行。 检查器与波特的阻断器 @framers/agentos/nlp; 通过 { stem } 给构造者使用另一个.
一个没有数字的事实
"乔·拜登是总统"没有数字或日期来比较价值检查. checkableStatement, (中文(简体) ), claimProblem 与 names 并用 names 接受这样的要求,而分级员的引文给出了代码来比较:
import { ValueAgreementChecker } from '@framers/agentos-ext-grounding-guard';
import { checkableStatement, claimProblem } from '@framers/agentos-ext-grounding-guard/values';
checkableStatement('Joe Biden is the president.'); // true: "Biden" names something
checkableStatement('Coffee is great.'); // false
const fields = { focus: 'Joe Biden is the president.', heard: 'Joe Biden is the president', search: 'Joe Biden' };
claimProblem({ ...fields, statement: 'Donald Trump is the president.' }, { names: true }); // 'statement_names'
const checker = new ValueAgreementChecker({ names: true });
const source = {
text: 'Joe Biden is an American politician who served as the 46th president of the United States from 2021 to 2025.',
group: 'Joe_Biden',
};
const decision = checker.decide({
heardWords: 'Joe Biden is the president.',
heardSentence: 'Joe Biden is the president.',
proposed: 'differs',
named: [source],
found: [source],
quote: 'served as the 46th president of the United States from 2021 to 2025',
});
// decision.relation === 'differs'; decision.marks[0] marks the quote in the source's sentence
checkableStatement 句子可以检查,并用数字表示数字,一个月的名字,或者第一个名字之后的词nameWords:起于一府而不是一"一",一月或一止字. 一个句子大写了它的第一个词 不管它是什么,所以"爱因斯坦发展出相对论"没有通过. checkable 将大门保留为数字或日期.
claimProblem(fields, { names: true }) 取出那些完全没有价值的字,以代替它们持有检查者读取的名字和他们自己的字. claimNames 读取名字:第一个名字后面的字,有三个或三个以上的字母,所以"美国","英国","欧盟"和"习近平"不读,"美国总统"被读作"总统". ownWords 读取该主张本身的词:其内容词没有大写("乔·拜登为总统"中的"总统"),或者,当它没有大写词时,在"the"("总统",如语音对文字所写)后就单独站出一个大写词,这个词也是名字. 听到的语句,其唯一价值从未被比拟过("1918年前后签署","第46任总统"),以及一个检查者永远无法决定的说法("伦敦是英国的首都","卡马拉·哈里斯是副总统"),都遭到拒绝 heard_no_value 在搜索任何来源之前。 放弃或交换所听到名称的语句被拒绝使用 statement_names,作为更改数字的语句.
new ValueAgreementChecker({ names: true }) 找到并裁定索赔. passages 保留一个句子,两个词与权利要求相同,并保留第一个词后听到的每一个名字. decide 读取年级 quote,从名句中复制:
| 关系 | 密码问什么 |
|---|---|
| 两者 | 听到的话根本就没有价值 该句保留了第一个词后听到的每一个名字,至少一半的主张内容词,以及和被听到的句子一样多的否定. 引文以"一字为一"为正字,并收有主张自有的一字. |
matches | 引文收录了索赔本身的每句话,没有任何数量或日期,也没有索赔缺少的全名,因此有引文称日期("从2021年到2025年")与目前所说的事实不相匹配,"大型驯化猫品种"与"小型猫品种"不相匹配. |
differs | 引文中标有读者所比较的数值数字或日期,或声称缺少的全名:一行中两个大写字("美国"). 现时的说法是:"有","有","前","服务"或另一种过去的形式将其放入过去,一个有日期的引文同意,过去所说的事实在其名称上从未显示为不同. 没有发现其他任何段落都保留着索赔要求的每个内容字,没有索赔要求没有编号、日期或全名。 代码标出引文. |
A 类 disagree 不论名字是开还是关闭, 都决定一个有价值的债权:"凡尔赛条约是1918年左右签署的" 仍然没有决定。 许多真实的区别和匹配仍然未定:一个单词名("Canberra"代表"赛德尼"),一个在先作后单独给出的地方,一个其形式相去甚远("写作"和"写作")的动词,两个大写词的标题("副总统"),以及"Joe Biden是美国总统"的长名,其引文则不乏其名,而"Joe Biden是总统"和"Joe Biden是美国总统"则显示为不同.
两项结果取决于分级员的建议,因为代码既不读出引文中的全名是否与主张有关,也不读出引文的紧张. A 类 differs 引文认为,这种说法缺乏, 顺便提到: “巴黎是法国的首都。 ”与“法国首都及其最大的城市,艾菲尔铁塔的故乡”相对 differs并引用"美国"的名词 对于一个办公室的主张同样如此 "乔·拜登是总统" 与引用的"乔·拜登是总统"相匹配 当年级生提议 matches (第N24页). 引文的紧张性本身并不能显示目前所说的一种不同的说法(row N24b):只有在引文中还持有读者所比较的数字或日期,或者该说法所缺少的全名时,才显示只存在于过去的事实不同,正如第N1行的引文通过"美国"所做的那样. 价值协议向量将这些结果标出,所以任何结果都是故意改变的. 从0.7.2起,每个决定都说是由哪个分支决定的, basis: 'values' | 'quote': 名字路径的行, 其中有这两个结果, 回来 quote,而一个打电话者显示与任何人的关系,但发言者可以持有 quote 做回决定 A 类 quote 无值:其 pairs 为空.
搜索短语
phraseProblem 持有一个被搜索到呼叫者极限的公共消息源:
import { phraseProblem } from '@framers/agentos-ext-grounding-guard/values';
const phrase = 'when did the city of lisbon first host the web summit conference';
phraseProblem(phrase, { maxWords: 12, maxChars: 120 }); // null: it may be sent
phraseProblem(phrase, { maxWords: 6, maxChars: 80 }); // 'search_too_long'
phraseProblem('Treaty/Versailles', { maxWords: 6, maxChars: 80 }); // 'search_characters'
当一个短语持有 1 时,可以发送到 maxWords 单词,计为 words 计算它们(每个字符,如果是无字的一部分,则将两个字分开,所以“O'Brien”是两个字),最多 maxChars 字符,以及字母、数字、空格和 .,'()-:& 一个人 否则,答案就是它打破的第一条规则,按照这个顺序: search_empty, (中文(简体) ), search_too_long 或者说 search_characters。 。 。 . claimProblem 以6个字和80个字符来形容.
逐字记录
verifyQuotes 将每个引文保留在它命名的来源的逐字记录中:
import { fold, verifyQuotes } from '@framers/agentos-ext-grounding-guard';
const sources = [
'The Treaty of Versailles was a peace treaty signed on 28 June 1919.',
{ content: 'Latency is 1.25 ms, and the treaty’s terms were “harsh”.' },
];
verifyQuotes([{ text: 'signed on 28 June 1919', sourceIndex: 0 }], sources);
// [{ found: true, sourceIndex: 0, start: 44, end: 66 }]
verifyQuotes([{ text: 'signed on 28 Ju', sourceIndex: 0 }], sources)[0].found;
// false: the quote cuts a word
const quote = { text: 'the treaty\'s terms were "harsh"', sourceIndex: 1 };
verifyQuotes([quote], sources)[0].found; // false: the source's quotation marks are typographic
verifyQuotes([quote], sources, { normalize: fold })[0].found; // true
比较是字符和大小写敏感度的字符,在来源的文本与它的白空间崩溃时,没有找到切出一个单词或数字的引文. start 财务报告和审定财务报表 end 被冲入已崩溃的源中,如果找不到引文,则两者均被冲入倒闭源中。 仅在来源中寻找引文 sourceIndex 名称,没有找到列表所没有的索引。 源是一个字符串或带有 content 字符串, 如取回块 . normalize 在比较前先读两边,必须各保留一个字符,所以抵消维持不变; fold 将打印的引号标注在平面形式上.
跨度内的一行
lineWithinSpan(line, span) 检查一条行是否可以使用自己的单词站在所引用的跨度之外:
import { lineWithinSpan } from '@framers/agentos-ext-grounding-guard/values';
const span = 'Q3 revenue was 1.2M, up 18 percent.';
lineWithinSpan('Revenue was 1.2M, up 18 percent.', span); // true
lineWithinSpan('Revenue was not up 18 percent.', span); // false
lineWithinSpan('Revenue was up 18 points.', span); // false
lineWithinSpan('Revenue was $1.2M.', span); // false
该行需要至少一个单词,每个单词必须在相间发生,相较于小写. 内幕必须
按形式和数量匹配。 每个数字必须用同一个符号出现,当行中有一个后缀时
下60个代码点,下同一个词。 行尾的一个数字可能会省略这个词. 使用的数字
NUMBER 财务报告和审定财务报表 numberOf,使用ASCII数字;单词成员仍然适用于其书面数字组.
每个 %‰°+−±$€£¥×÷<>=≤≥≠ 符号和行中所有其他货币标志必须在行间发生。 说话,
数字和符号可以重新排列或重复,但否定计数必须保持不变。 这是词汇
检查,所以它不能确定是谁做了什么;在长度之外显示线条.
行名的当天
whenSaid(text, { reference, timeZone }) 从第一天开始读到一个文本名称
import { whenSaid } from '@framers/agentos-ext-grounding-guard/when';
// Tuesday 3 November 2026, 10:00 in Los Angeles.
const at = { reference: new Date('2026-11-03T18:00:00Z'), timeZone: 'America/Los_Angeles' };
whenSaid('Send the deck by Thursday', at); // { day: '2026-11-05', time: null, words: 'Thursday' }
whenSaid('next Monday', at); // { day: '2026-11-09', time: null, words: 'next Monday' }
whenSaid('in a week', at); // { day: '2026-11-10', time: null, words: 'in a week' }
whenSaid('tomorrow at 3 pm', at); // { day: '2026-11-04', time: '15:00', words: 'tomorrow at 3 pm' }
whenSaid('Friday at 3 pm EST', at); // { day: '2026-11-06', time: '12:00', words: 'Friday at 3 pm EST' }
whenSaid('Friday at 9 am get the deck to Sam', at); // { day: '2026-11-06', time: '09:00', words: 'Friday at 9 am' }
whenSaid('soon', at); // null
whenSaid('tomorrow', { ...at, timeZone: 'Asia/Tokyo' }); // { day: '2026-11-05', ... }: Wednesday 03:00 there
全文如下: 铬-节点 2.10.3 英文读取法 forwardDate: true,从区的墙钟在 reference。 。 。 . day 实值 YYYY-MM-DD 在那个区域. time 实值 HH:MM 在24小时的时钟上,当文字命名时间和 null 否则. words 是指定一天的跨度,没有逗号或括号,切到 WHEN_WORDS_MAX (60个)人物.
- 一个结果名称只当克罗诺在其中读取一天或一个工作日时. 单独时间("下午3时"),单独一个月和没有日期答复的文字
null。 。 。 . - 文本中有几个日期,第一个一天的名字被读取.
- 单是工作日就意味着Chrono的中午 在那个星期天说,那是该日,直到该区的中午,以及其后一周的同一天.
- 使用自己的区("3 pm EST","3 pm GMT+9")表示的时间在呼叫者区给出,其日能随它而改变. 一旦其瞬间过后,如此时间的周一在一周内移动,一个没有一年的日期,在真实的瞬间比较:"星期四下午3:00在洛杉矶的"星期四是12:00.
- 区是用首都书写的缩略语或简称。 chrono在一段时间后将2到4个字母作为一个区,不管它们的情况如何,所以“Get”、“eat”和“art”读作GET (+4)、EAT (+3)和ART (3);
whenSaid所以"星期五早上9点得到甲板"是周五9: 00words"周五早上9点" 取自"区"的单词是"空白"离开原日期的"同分同分","同分同分"和"射程"仍为"范围",因此"Friday 9:00至5:00 EST"保持了"区"(6:00在洛杉矶). 小写区("3 pm est")的读取方式与无区相同. - A 类
reference这不是一个有效的日期,或者运行时间未知的区域,丢出一个RangeError。 。 。 .
chrono-node取一个参考区作为分钟偏移或缩写,它的前行步骤比较了该区的壁钟,读作跑时自有的时钟,与从这个偏移中构建的瞬间. whenSaid 给克罗诺做一个平地 Date,因此UTC的一个服务器和该区的浏览器读取了同一天的同名词. 当运行时间本身的时钟跳过墙上时钟时(它的防日漏洞,在一个运行时间里,它的区间不是呼叫者的区间),空隙的末端就代表了它:在跳出的时间里说的时间还没有过去。 Apia的时钟跳过2011年12月30日, 条目 @framers/agentos-ext-grounding-guard/when 导入 chrono-node 不另作选择,然后在浏览器中运行. whenSaid 也从主条目导出.
句子检查
checkSentence 其所引出之词有一行,如总结之句或答之; checkLabel 持有相同术语的标题或标签:
import { checkLabel, checkSentence } from '@framers/agentos-ext-grounding-guard/values';
const turn = 'Yes, we grow the budget by ten percent next quarter.';
const quotes = [{ quote: 'we grow the budget by ten percent', source: turn }];
checkSentence('We grow the budget by ten percent.', quotes); // null: the line stands on its quote
checkSentence('Cut the budget by 20 percent.', quotes); // 'beyond_quotes': "cut" is not the quote's
checkSentence('We do not grow the budget by ten percent.', quotes); // 'negation_differs'
checkSentence('We will not grow the budget by ten percent.', quotes); // 'qualifier_not_quoted': "will"
checkLabel('Budget', quotes); // null
checkLabel('Acme budget review', quotes); // 'name_not_quoted'
每个引用至少 minQuoteChars 字符长 (未给出时为20个),并位于其出处:其出处顺序和相邻的单词,无论字母大小和间隔,均有出处本身的符号(<, (中文(简体) ), =, (中文(简体) ), % 它们之间的引号、下划线、逗号、停号、括号和破折号可能有所不同。 引文中也保留了对它所站立的句子的每一个否定:"网关支持IPv6"从"团队从未确认网关支持IPv6"被切出 quote_drops_negation。如果引文不止一次,则其第一个保留其引文的站口被读取。 空白行会结束源句;单行断句不会,因为被包裹的文字会断中句.
该行的每句需要内容词,至少 support 其中(未给出时为0.7)是引文中的单词,比较后没有其结尾("-ing"过去5个字符,"-ed"和"-es"过去4个字符,"-s"过去3个字,但不"-s"),或者,在没有空格的剧本中("-s")isUnspacedScript),由相邻的一对字符组成(letterPairs) (中文(简体) ). 名词检查是最后一个顺序:
| 问题 | 线能撑住 |
|---|---|
name_not_quoted | 一个大写字,包含两个或两个以上字符,而不是其中之一 STOPWORDS,或缩写("US","U.K."),没有引文 |
symbol_not_quoted | 比较、 箭头、 货币、 % 或 算术符号, 引文按此顺序缺少; 在一个来源中重叠的引文出出它们共享的符号 |
number_not_quoted | a 数字,用其符号读取完整,没有引文表示:0.5不是5,而-20不是20 |
qualifier_not_quoted | 一个字 QUALIFIERS (指示、比较、方式、数量、顺序、以字写出的数字) QUALIFIER_FAMILIES 他们的家人没有报价, 所以"增加"从来没有站在"减少" |
negation_differs | 否认,计算,不是引文的集合;一个来源重叠的引文,共享他们一次 |
checkSentence 回答第一个发现的问题, a SentenceProblem,或 null 当行起. checkLabel 仅运行名词检查:它不要求分享内容单词,也不要求引用长度,每个引用仍然站在其源头并保持其句子的否定. 一个标签的否定等于它引用的",所以"批准"从不站在"未经批准"上;在它所依赖的引文上保留一个标签,因为否定任何被引用过的任何指责. 没有引文,标签只有在没有名称、符号、编号、限定词或否定时才通过.
支票是符合逻辑的: 一条线可以交换谁能通过它们的东西, 所以用它的引号显示每条线.
无线
createNliFunction() 一对,前提第一,在本地模型上,形状 CitationVerifier是因为 nliFn 选择:
import { CitationVerifier } from '@framers/agentos';
import { createNliFunction } from '@framers/agentos-ext-grounding-guard';
const nli = createNliFunction();
const answer = await nli('A man is eating pizza', 'A man eats something');
// answer.label: 'entailment', 'contradiction' or 'neutral'
// answer.score: that label's score; answer.scores: all three, which sum to 1
const verifier = new CitationVerifier({ embedFn, nliFn: nli }); // embedFn: your batch embedding function
await nli.dispose();
前提是来源,而假说则是主张,模式卡的例子使用的顺序. 配对到模型上作为标注器的文本和文本 pair,标签来自模型自己的 id2label. 使一对通过模型窗口的前提(默认模型512个令牌,一对所计出的特殊令牌)在其端被一对令牌所剪取,因此整个假说留在一对:变压器. js 切出一对在尾部太长的,会放弃索赔。 变压器.js(@huggingface/transformers,可选的依赖性)被导入,在询问第一对时会加载模型:第一负载下载模型的文件,后加载从变压器读取. Js的缓存。 一个失败的负载没有被保存,所以接下来的一对负载再次被保存. dispose 释放模型,并在负载失败后无一放出. GroundingChecker 而护栏通过相同的功能来评分, 源块作为前提.
| 选项 | 默认 | 选择什么 |
|---|---|---|
modelId (单位:千美元)nliModelId 在护栏和 GroundingChecker选项) | Xenova/nli-deberta-v3-small | 型号:一种带有ONNX重量的序列分类型号,变压器.js可以装载. 默认为 ONNX 导出 cross-encoder/nli-deberta-v3-small。 。 。 . |
dtype | q8 | 哪些重量文件负载 : q8 是 8 位的四分数文件(onnx/model_quantized.onnx,用于默认模型的约172 MB), fp32 完全精确的一(onnx/model.onnx,约568 MB). 没有模型存储器 onnx/model_quantized.onnx 需求 dtype: 'fp32'数字 : cross-encoder/nli-deberta-v3-small举起8位重 onnx/model_qint8_*.onnx 财务报告和审定财务报表 onnx/model_quint8_avx2.onnx,没有 dtype 名称. |
quantized (护栏和 GroundingChecker选择,不是 createNliFunction's' (英语) | 折旧:使用 dtype。 。 。 . quantized: false 实值 dtype: 'fp32'。 。 。 . |
实例
test/——权利要求 -- -- 取出和产生定分装置
懒惰装入和可选安装
此软件包是 @framers/agentos-extensions-registry登记册船舶目录元数据; createCuratedManifest() 电话 import.meta.resolve() 每个条目并默默跳过任何未安装的条目. npm install @framers/agentos-ext-grounding-guard 是大门.
NLI模型在激活时不加载. 检查器保留一个 NLI 函数 agentos:grounding:nli-pipeline 键入 SharedServiceRegistry,而变压器.js和模型文件的负载只有在第一次索赔被对照一个来源进行核对时。 索赔提取器首先针对所取取的索赔;只有通过提取到NLI的索赔.
GuardrailOutputPayload 携带 ragSources?: RagRetrievedChunk[] 当响应来自RAG上下文时。 地面护栏使用这些设备作为引出源;没有这些设备,索赔提取器仍然运行,但每起索赔涉及的任何通道都返回主机提供.
串行检查默认进行( E)enableStreamingChecks: 护栏登记簿 config.evaluateStreamingChunks = true,将每个已完成的事实判决作为答复流对照,并在最后检查整个答复的每一项声称。 设定 enableStreamingChecks: false 单检查最后的反应。 它运行于两相调度器的第二阶段. 门槛以下索偿退回 FLAG 默认; 配置 contradictionAction: 'block' 升级到 BLOCK。 。 。 .
关于完整的DI模型和端到端的走过,见 扩展如何保持可选和懒惰 编辑 自动加载指南。 。 。 .
许可证
Apache 2. 0 — 见 repo 根 自由主义。 。 。 .