@ framers/ agentos-ext-self-harm- referral (英语)
用于输入和输出的护栏 代理服务器默认情况下,当某人的留言或代理人的回复表示自杀或自残时,警卫会用危机线回答该人的国家,停止转弯,以免话题继续,并报告一个 referral_sent 事件.
npm install @framers/agentos-ext-self-harm-referral @framers/agentos
import { AgentOS } from '@framers/agentos';
import { createExtensionPack } from '@framers/agentos-ext-self-harm-referral';
let referrals = 0;
const agentos = new AgentOS();
await agentos.initialize({
// ...
extensionManifest: {
packs: [
{
factory: () =>
createExtensionPack({
options: {
judgeModel: { provider: 'openai' },
onEvent: () => {
referrals += 1;
},
},
}),
},
],
},
// Holds every streamed delta until the guards have judged the whole reply, so a replaced reply never shows.
requiredGuardrails: [{ id: 'self-harm-referral', stages: ['input', 'output'], timeoutMs: 10_000 }],
});
它会做什么
| 何处 | 警卫回来的是什么 | 当事人收到什么 |
|---|---|---|
个人信息( A)evaluateInput默认值 reply 执行) | BLOCK,理由代码 SELF_HARM_REFERRAL,在两个中转介 reason 财务报告和审定财务报表 replacementText | AgentOS 没有运行模型转动, 并用最后的一块类型来回答 ERROR,其 code 实值 SELF_HARM_REFERRAL 以及他们 message 是推荐 |
代理人的最后答复evaluateOutput, (中文(简体) ), reply 执行) | 同样的 BLOCK | AgentOS发出最后答复,以代替答复 |
一个人的信息在 private 经法官确认 | FLAG,理由代码 SELF_HARM_REFERRAL,与 metadata.privateReply | 主持人独自将推荐给发言者 |
| 匹配的房间消息未经确认或收件人身份证明 | FLAG,理由代码 SELF_HARM_UNCONFIRMED | 没有推荐; 主办方审查项目 |
| 还有什么 | null | 轮回如来 |
每个推荐机构都会呼叫主机 onEvent 如果事件不包含当事人或代理人的话:
{
type: 'referral_sent',
guardrailId: 'self-harm-referral',
stage: 'input', // or 'output'
country: 'GB', // the country whose lines led, or null
locale: 'en-GB', // the locale the country was read from, or null
lineIds: ['gb-samaritans', 'us-988', 'findahelpline'],
method: 'keyword_and_judge', // or 'keyword' when no judge is configured
judgeOutcome: 'confirmed', // 'none' | 'confirmed' | 'unsure' | 'failed'
tableVersion: '2026-11-04',
sessionId: 'session-1',
conversationId: 'conversation-1',
occurredAt: '2026-11-04T12:00:00.000Z',
}
单位 reply 送货,事件说警卫回答 一个转诊。 AgentOS将这个答案发送给了个人:警卫在AgentOS的第一阶段运行(AgentOS)canSanitize尽管它从未消毒过, 在那里 BLOCK 在任何分类器运行前结束评价。 在它之前注册的消毒器 屏蔽了同一消息的回答, 警卫从不运行, 没有事件起火。 两个案件是宿主知道: 一个宿主隐藏 ERROR 块隐藏输入推荐, 并隐藏需要的守护符 timeoutMs 当事件起火时, 法官的最后期限已经封住, 并且没有转诊(“使用回复方式”说明如何避免两者).
判决 metadata 包含相同的字段、会话和对话编号以及包含的时间 event: 'referral_sent' 替换 type 和关键词列表中的版本 phraseListVersion。不使用 onEvent 计数源流的转介, 按原因代码 :
| 阶段 | 田园在哪里 |
|---|---|
| 个人信息 | 最终决定 ERROR 块 processRequest 产量 : code 实值 SELF_HARM_REFERRAL, (中文(简体) ), message 是转介, details.metadata 拿着球场 |
| 经纪人的答复 | 最后响应块 : metadata.guardrail.output[0] 持有 reasonCode (单位:千美元)SELF_HARM_REFERRAL)和下面的字段 metadata来电者 wrapOutputGuardrails 也获得它的 onVerdict 与 reasonCode· ; processRequest 设置自己的 onVerdict,所以一大批 AgentOS 读取块 |
onVerdict 仅在 wrapOutputGuardrails,因此它从不看到输入的推荐:一个通过它计数的宿主错过了每一个. 警卫也负责自己转诊 referralsSent,并且通过主机的日志写出每个引用的一行,包含舞台,国家和方法. 法官的清理也写了一行,有警卫的ID,舞台和法官的信任,因为清理不进行移交,没有留下任何事件. 法官或事件处理器故障日志 errorName: 'unknown' 在两种送出模式中:既可以提供出错名称,又可以其消息重复人物的词. 无一行能持受人言.
房间:私人送货
设定 delivery: 'private' 当主机需要转介到一个会议室留言的发言者时。 A 类 judge 或者说 judgeModel 需要时间。 后卫独自评价输入;配置输出相投出.
一个关键词 与法官所证实的有自信 judgeThreshold 返回时 FLAG 带有理由代码 SELF_HARM_REFERRAL。 。 metadata.privateReply 包含 { recipientId, text, lineIds }。收件人为 context.moderation.sender.id; 当上下文命名为没有发送者时, 写入者就是该呼叫的用户( 作为 AgentOS 的) ModerationContext 定义 sender)),且接收者是 context.userId。主机将文本单独发送给此人,并存档其复议项目;警卫本身不交付。 从来没有广播 私人答复的房间。 这个 referral_sent 事件还携带 delivery: 'private' 财务报告和审定财务报表 recipientId。 。 。 .
不确定的法官(以下为澄清或确认) judgeThreshold),失败的请求或超时发送不推荐。 换句话说,警卫回来了 FLAG 与 SELF_HARM_UNCONFIRMED 财务报告和审定财务报表 metadata.judgeOutcome (单位:千美元)unsure 或者说 failed{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}让宿主面对一个人 已经确认的比赛 无人送还这面旗帜 judgeOutcome: 'confirmed'发件人: kind 实值 agent,无可用标识的发件人(警卫从不返回) context.userId 一旦一个发送者被命名),或者完全没有ID. 法官会同意的 警卫从不屏蔽或持有房间消息,在出人意料的过失上未能打开;主机的其他警卫自行决定消息. 两种送出模式都列出了两个原因代码,在 config.reasonCodes。 。 。 .
守护者在此模式下命名自己的最后期限 : config.timeoutMs 实值 judgeTimeoutMs 加上一秒钟。 A 类 moderateContent() 电话给一个没有自己电话期限的警卫 timeoutMs (默认时间为8秒),并在通过时会掉下一个会跑开的后卫,所以没有自己的最后期限,慢跑裁判会让物品在没有旗帜的情况下通过. 有了它,法官的最后期限总是先结束,而警卫则标出物品. 设定 judgeTimeoutMs 绑住守卫能走多久.
import { moderateContent } from '@framers/agentos';
import { SelfHarmReferralGuardrail } from '@framers/agentos-ext-self-harm-referral';
const guard = new SelfHarmReferralGuardrail({
delivery: 'private',
judgeModel: { provider: 'openai' },
});
const decision = await moderateContent({ text: messageText }, {
guards: [guard],
context: {
userId: 'moderation-account',
sessionId: 'session-1',
moderation: {
surface: 'public_room',
roomId: 'room-1',
sender: { id: 'speaker-1', kind: 'account' },
},
metadata: { country: 'GB' },
},
});
const evaluation = decision.evaluations.find(
(item) => item.metadata?.guardrailId === guard.id,
);
const privateReply = evaluation?.metadata?.privateReply;
// The host delivers privateReply to its recipientId alone, when present.
此示例使用 moderateContent() 并输入发件人上下文 @framers/agentos 0.17.1 或后经. 包的同龄人地板还在 >=0.13.121; 现有的回复执行不需要新的核心 API.
当主机本身的分类器已经确认自我伤害时,使用 createPrivateReferral() 来构建相同的文本,行 id 和事件 没有另一个法官调用:
import { createPrivateReferral } from '@framers/agentos-ext-self-harm-referral';
const referral = createPrivateReferral({ recipientId: 'speaker-1', country: 'GB' });
// Deliver referral.text to referral.recipientId alone and record referral.event.
建造者发现什么也没有,叫不处理者. 它的活动 method: 'classifier', (中文(简体) ), judgeOutcome: 'confirmed', (中文(简体) ), stage: 'input' 财务报告和审定财务报表 delivery: 'private'。 。 PrivateReferralInput 接受 recipientId, (中文(简体) ), country, (中文(简体) ), locale,替换 table, (中文(简体) ), guardrailId, (中文(简体) ), sessionId, (中文(简体) ), conversationId (单位:千美元) now 时钟. 国别决议和回文与后卫相同.
当法官倒下时 私人送货故意不送货 关键词列表可以匹配诸如“我如何在这一关卡中死去”;在该设置中未经证实的危机推荐本身可能有害。 默认 reply 当法官无法辨别出匹配情况时,移交案件继续得到支持。 两种模式都使用相同的只使用英文的列表和涵盖六个国家的推荐表.
如何检测
- 关键词列表 (单位:千美元)
src/phrases.ts第1人称表达式,仅根据答复,第二人称构成代理人,用于在(b)项(b)项(b)项(b)项(a)项(b)项(b)项(b)项(b)项(b)项(b)项(b)项(b)项(c)项(b)项(b)项(b)项(c)项(c)项(c)目(c)项(c)目(c)项(c)项(c)项(c)项(c)目(c)项(c)项(c)项(c)项(d)项(c)项)目(c)项(d)项(d)项(c)项)项(d)项(c)项(d)项(d)项(c)项(d)项(d)项(c)项(d)项(d)项)项(d)项)项(d)项(d)项(d)项(d)项(d)项)项(b)项(b)项(b)项)项(end your life, (中文(简体) ),hurt yourself) (中文(简体) ). 它用人们在其中所说的话来阐述愿望和意图(第1段)I wish I could die, (中文(简体) ),I want to fucking die),结尾-其措辞(I just want to end it),在每时每刻的行为中(I cut my wrists, (中文(简体) ),I keep burning myself),关于方法和金额的问题(a/cn.9/wg.iii/wp.iii/wp.92),第3段how many pills does it take to die),表示(I want to jump off a bridge),以及以下来源中的警示标志(I'm a burden, (中文(简体) ),no reason to live),随着收缩,口语和拼错的人类型. 作为AgentOS的文本匹配normalizePhraseText留出:小写,外观类似西里尔字母和希腊字母被映射为拉丁文,零宽字符并合并去除标记,引出正字形,白空间倒塌. 一个匹配任何条目的文本没有模型调用,所以必须有一个短语在列表中才能到达法官. 清单倾向于匹配默认答复的提供,因为遗漏的转介费可能远远超出不必要的转介费;私人的转介费在生成转介前需要确认. - 样板法官,当主机给出:
judge(任何特工系统)PhraseJudge)或(或)judgeModel(主机供应商和型号,由AgentOS公司建造)createLlmPhraseJudge和标准SELF_HARM_JUDGE_CRITERIA) (中文(简体) ). 它在上下文中读取每个匹配的文本,并明确了比喻性用途(I could kill myself laughing),标题和事实提及. - 默认
reply除非法官有自信地打扫: 法官抛出,解答无用,耗时比judgeTimeoutMs,或以下为清除judgeThreshold转介就绪。 由于没有法官,每个比赛都会送来推荐信.
这个 @framers/agentos-ext-ml-classifiers 包没有自伤标签:其类别是 toxic, (中文(简体) ), injection, (中文(简体) ), nsfw 财务报告和审定财务报表 threat,以及 threat 将暴力威胁与自残指令结合起来 ClassifierCategory 类型, src/types.ts) (中文(简体) ). 这个包是从关键词列表开始的,由法官来代替. 此方法是否满足特定定律或标准对以证据为基础的协议的检验,是一个未解的问题;此方法在此取名,这样一个主机就可以描述了.
内容来自公布的筛选问题和警示标志
- 《哥伦比亚议定书》:希望死亡或入睡而未醒起,自杀的想法,以及准备的事例
took pills, (中文(简体) ),cut yourself, (中文(简体) ),tried to hang yourself, (中文(简体) ),collected pills, (中文(简体) ),gave away valuables, (中文(简体) ),suicide note) (中文(简体) ). 关于天平 解释为什么它的问题使用简单而直接的语言. - NIMH的询问:想死吗,
better off if you were dead想自杀. - PHQ-9, 第9项数字 :
better off dead, (中文(简体) ),hurting yourself in some way。 。 。 . - 来自 纳米比亚 财务报告和审定财务报表 亚足联:想去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去.
- 那种自我伤害 从 NHS 通报 财务报告和审定财务报表 重新思考精神病:切,烧,出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出.
口号,错拼,加速度和被命名的高度和车辆来自人们的打字方式,而不是这些来源,没有来源证实这个列表是筛选仪器.
线条
线路在 src/referral-lines.json,每个页上注明其编号,每天读取 reviewedAt。一个转折国的名称,然后是美国的988行,然后是 查找帮助线 关闭国家紧急电话号码,或者在未知国家时使用“拨打当地紧急电话号码”.
| 国家 | 线条 | 紧急情况 | 来源 |
|---|---|---|---|
| 美国 | 在988lifeline.org上聊天 | 911电话 | 萨马哈,988个问题 |
| 加拿大 | 电话或文本 9-8-8 | 9 - 1 - 1 个 | 988.ca (英语) |
| 联合王国 | 撒马利亚人,116 123 | 999号 | 撒玛利亚人, (中文(简体) ), 国家保健服务 |
| 爱尔兰 | 撒玛利亚人,116 123;文本HelloO至50808 | 112或999号 | HSE 支持, (中文(简体) ), HSE 紧急帮助 |
| 澳大利亚 | 生命线,13 11 14;文本0477 13 11 14 | 1,000个 | 生命线 |
| 新西兰 | 电话或1737文本 | 页:1 | 1737 (英语) |
这个国家是其中第一个命名的:
context.metadata.country,一个ISO 3166-1α-2代码(UK读作GB(三);- 区域
context.metadata.locale,一个BCP 47区,例如频道报告(en-GB从迪斯科德,en_gb; 没有区域的地方, 例如de,或数字,例如es-419,无国名; - 输入区域
languageHint· ; - 这包
country选项,然后是locale选项.
列表中不包含的国家会结束搜索:某人得到988,Find A Helpline和本地紧急判决,因为如果出现后一个条目或包的缺省,就会给他们一个他们没有进入的国家的紧急编号. 无国家名称的值( A)Germany,一个没有区域的地方)读取过去。 一个知道个人的国度 country 在转弯时,因为一个频道的地语是语言设置,可以给一个人所离开的国家取名.
AgentOS 构建 context.metadata 从请求 options.customFlags,所以一个主机设置两个 processRequest数字 :
for await (const chunk of agentos.processRequest({
userId,
sessionId,
textInput,
options: { customFlags: { country: 'GB', locale: 'en-GB' } },
})) {
// ...
}
一个有自己桌子的主持人 table 同样的形状。 要更改一行,请再次读取其源页并更新一行,即其 source 财务报告和审定财务报表 reviewedAt。 。 。 .
选项
以 createExtensionPack({ options }) 或者说 new SelfHarmReferralGuardrail(options)。 。 。 .
| 选项 | 默认 | |
|---|---|---|
id | self-harm-referral | 警卫的身份证,在描述和判决上 |
delivery | reply | private 需要一名法官,只有确认后,才能回转标语的旗帜 |
stages | ['input', 'output'] 内 reply· ; ['input'] 内 private | (b) 拒绝私人交货 output |
judge | 无 | (单位:千美元) PhraseJudge 已建主机 |
judgeModel | 无 | { provider, model, apiKey?, baseUrl? } (a) 法官在东道方的提供者 openai 需要一个模型 |
judgeThreshold | 0.7 | (a) 法官的清算所考虑的信任程度 private,它的确认也 |
judgeTimeoutMs | 6000 | (b) 期满后,将转介人送交法院 reply,和旗子上没有 private在警卫自己的地方 config.timeoutMs 这是加一秒钟 |
country, (中文(简体) ), locale | 无 | 转弯时使用的地方 |
table | 已运出表格 | 相同形状的表格 |
extraPhrases | 无 | 代理服务器 PhraseEntry 两个阶段增加的项目 |
onEvent | 无 | 分别调用 referral_sent 事件; 警卫不等待它, 因此一个处理器扔出, 拒绝或永远不和解 并不阻碍推荐 |
logger | 包上下文的日志 | 守护者写其行; 扔出日志不会停止推荐 |
用好回复方式
- 保持输出. 警卫法官最后答复。 与 AgentOS 流出三角洲(
guardrailOutputMode: 'stream'),答复的文本在最终判决取而代之之前送达当事人. 任何一步都让三角洲等待判决 要求守卫output(AgenderOS在舞台上需要的警卫名字时,从同层0.13.21开始,或设置)guardrailOutputMode: 'hold'。 。 。 . - 显示推荐. 根据一个人的讯息,转诊是作为
ERROR-类型块,所以隐藏错误块或交换信件的主机会隐藏危机行: 显示message何时code实值SELF_HARM_REFERRAL一个评价卫兵本身的东道主发出判决replacementText并且没有表现出一般拒绝. - 先登记一下. 守卫在AgentOS的第一阶段运行,所以它的
BLOCK答案领先于每一个分类者, 不管他们的顺序。 卫生者也在这个阶段运行, 按照注册顺序: 一个登记在这名守卫之前, 警卫的位置是他们的背包位置extensionManifest.packs· ;@framers/agentos-extensions-registry列出这个比其他警卫更早. - 给需要的警卫一个超过法官的期限. 一个需要的警卫,通过它的
timeoutMs没有替换文本的块, 警卫的事件稍后会引发一个无人看见的转介.judgeTimeoutMs默认为6000 ms;上面的例子给出了守卫的1000 ms.
限制
- 关键词列表和推荐文件为英文。 以另一种语言发送的信息,除非使用所列词语,因为法官只读出相应列表的文本.
- 一个没有使用列表短语的表达式通过.
extraPhrases扩大列表. - 有关他人风险的信息(
my friend wants to die除非它使用列表短语,否则通过,因为列表是用第一人称书写的. - 单位
reply在没有法官的情况下交付,名单中故意的超标:每份匹配都发送转介,包括I can't go on Friday, (中文(简体) ),I burned myself on the stove, (中文(简体) ),I want to end it with my boyfriend, (中文(简体) ),I'd rather die than eat there财务报告和审定财务报表how do I die in this level法官会同意的 无法接受设定的主机judge或者说judgeModel。 。 。 . - 法官只读与名单相匹配的内容,因此不能扩大名单;只能看清一个相匹配的内容.
- 该表收有6个国家。 每一个其他国家都得到988,寻找帮助热线以及当地紧急判决.
释放
新版本发表于 架设层/剂-外延 由 GitHub Actions 通过 npm 信任的出版, 并附有出处声明 .
许可证
阿帕奇 - 2.0