NeMo Guardrails Interaction Loop 实战:用 Colang 主循环优雅处理未知输入与超时提醒
人工智能大模型AI 安全治理模型安全内容安全提示词注入防护RAG【免费下载链接】GuardrailsNeMo Guardrails is an open-source toolkit for easily adding programmable guardrails to LLM-based conversational systems.项目地址https://gitcode.com/gh_mirrors/ne/Guardrails点击查看免费下载本教程基于仓库中的 interaction_loop 示例讲解如何在 NeMo GuardrailsColang 2.x中构建一个可持续对话的交互主循环interaction loop当用户输入无法匹配任何已定义意图时如何由 LLM 兜底生成响应当用户超过 12 秒沉默时机器人如何主动提醒。读完本文你将掌握flow main事件循环的写法、unhandled user intent兜底机制以及user was silent超时监听器的用法并能直接运行示例验证效果。示例目标与运行效果interaction_loop示例模拟了一个名为 Emma 的交互式虚拟助手bot。它演示了三个核心行为未知输入兜底无法匹配到已有用户意图的输入会被主循环中的unhandled user intent分支捕获并由 LLM 生成合适的回复超时主动提醒用户 12 秒内没有发言机器人会主动提醒你可以问我任何问题常见意图应答问候greeting与告别goodbye由规则直接响应不经过 LLM。原文档给出了完整示例会话可直接运行复现$ nemoguardrails chat --configexamples/v2_x/tutorial/interaction_loop/ Starting the chat (Press Ctrl C twice to quit) ... hi Hi there! pause for 12 seconds You can ask me anything! how are you? I am doing well, thank you for asking! How can I assist you today?可以看到输入hi命中了问候意图并返回 Hi there!沉默 12 秒后机器人主动提示而how are you?这类未定义意图则走 LLM 兜底路径生成了自然回复。运行该命令需要先安装nemoguardrails并配置好models中指定的 LLM 凭据见下文config.yml。配置文件解析config.yml示例目录下包含两个文件config.yml 与 main.co。先看配置colang_version: 2.x models: - type: main engine: openai model: gpt-3.5-turbo-instruct instructions: - type: general content: | Below is a conversation between Emma, a helpful interactive avatar assistant (bot), and a user. ... The bot must not repeat itself if the user was silent. sample_conversation: | user action: user said Hello there! user intent: user expressed greeting bot intent: bot express greeting bot action: bot express Hello! How can I assist you today? and bot gesture Smile ...各字段作用如下colang_version: 2.x声明使用 Colang 2.x 语法import core、flow main等与仓库中 colang/v2_x 运行时 对应models指定主模型示例使用 OpenAI 的gpt-3.5-turbo-instruct。运行前需确保环境已配置对应的 API Key可通过环境变量或nemoguardrails configure设置instructionsgeneral指令定义了 bot 的人格与行为准则简洁作答、多用bot gesture动作、用户沉默时不重复自己sample_conversation给 LLM 的少量示例对话覆盖问候、模糊输入、知识问答、感谢、用户沉默 15 秒、指令执行等场景。其中 user was silent 15 → bot ask Are you still there? 的示例直接为运行时沉默检测→主动询问提供了 few-shot 示范。主循环定义main.comain.co 是本次交互逻辑的核心import core import avatars import timing import llm flow main activate automating intent detection activate generating user intent for unhandled user utterance while True when unhandled user intent $response ...Response to what user said. bot say $response or when user was silent 12.0 bot inform about service or when user expressed greeting bot say Hi there! or when user expressed goodbye bot inform That was fun. Goodbye逐行解读import core / avatars / timing / llm引入基础事件、角色动作、定时器与 LLM 交互所需的库。timing提供了user was silent等超时监听流程见后文activate automating intent detection开启自动意图检测/记录来自 llm.co 中flow automating intent detection它会标记并记录用户与 bot 的意图流activate generating user intent for unhandled user utterance激活未知输入的意图生成流程这是unhandled user intent能被触发的关键前置详见下节while True事件循环主循环内以when ... or when ...监听四类事件按顺序匹配优先级依次为未知用户意图LLM 兜底、用户沉默 12 秒、问候、告别。示例还用两个子流程定义了问候/告别意图的触发词以及沉默提醒的具体话术flow user expressed greeting user said hi or user said hello flow user expressed goodbye user said goodbye or user said I am done or user said I have to go flow bot inform about service bot say You can ask me anything! or bot say Just ask me something!注意user was silent 12.0中 12.0 是浮点秒数即原文档所述的12 秒提醒阈值可任意调整如user was silent 30.0。当主循环命中该分支后调用bot inform about service机器人会在 You can ask me anything! 与 Just ask me something! 两条话术中随机选择输出。源码级原理未知输入如何变成unhandled user intent原文档只描述了行为其底层链路可从 llm.co 中还原第 1 步意图自动生成。flow generating user intent for unhandled user utterance会等待_user_said_something_unexpected事件若 bot 正处于说话状态则中止避免打断否则构造user said ...动作并调用GenerateUserIntentAction让 LLM 从最多 20 个示例流中推断用户意图最后通过send FinishFlow(flow_id$intent)把推断出的意图送回运行时。第 2 步意图匹配。该FinishFlow事件到达后运行时先尝试匹配已定义的user expressed greeting等意图流匹配失败时llm.co 中定义的系统级流程flow unhandled user intent - $intent会拦截所有flow_id以user开头的未处理事件flow unhandled user intent - $intent match UnhandledEvent(eventFinishFlow, flow_idregex(^user ), loop_ids{$self.loop_id}) as $event $intent $event.flow_id第 3 步主循环兜底响应。用户在main.co中定义的when unhandled user intent分支随即被触发通过$response ...Response to what user said.调用 LLM 生成回复并bot say输出——这正是示例中how are you?得到自然回答的原因。从源码结构还可以推断该机制与continuation on unhandled user intent、continuation on undefined flow见 llm.co以及 passthrough 模式见 passthrough.co共同构成 Colang 2.x 的交互延续体系前者生成继续对话的新流程后者在纯透传模式下直接调用 LLM 生成回复。源码级原理user was silent 定时器如何工作user was silent并非魔法关键字而是 timing.co 中定义的系统流程loop(user_was_silent) meta(user_actionTrue) flow user was silent $time_s Wait for when user was silent for $time_s seconds. while True start wait $time_s as $timer_ref when $timer_ref.Finished() break or when UtteranceUserAction.Started() or UtteranceUserAction.TranscriptUpdated() send $timer_ref.Stop() match UtteranceUserAction.Finished() or when UtteranceUserAction.Finished() send $timer_ref.Stop()其工作方式是一个重置式倒计时循环启动$time_s秒的计时器底层为TimerBotAction若计时器自然结束$timer_ref.Finished()说明用户持续沉默流程结束、unhandled分支中的when user was silent 12.0得以触发若期间检测到UtteranceUserAction.Started()、TranscriptUpdated()语音场景下转写更新或Finished()立即停止计时器并等待本轮发言结束随后回到while True重新开始 12 秒倒计时。因此12 秒提醒实际是自用户上次发言结束起的 12 秒用户只要持续输入就不会被误打断。同一文件中还提供了user didnt respondbot 沉默期间用户未回应与bot was silent两个衍生监听器可作进一步扩展。常见问题与调优提示模型与 API 配置示例默认走 OpenAIgpt-3.5-turbo-instruct若替换为其他厂商模型需同步调整config.yml的engine/model字段并配置对应凭据否则nemoguardrails chat启动会失败$response ......的省略号语法这是 Colang 2.x 中由 LLM 生成该字符串的标记等价于调用一次生成动作实际回复内容由模型基于instructions与sample_conversation产生分支顺序即优先级主循环中when分支自上而下匹配若想优先处理告别或问候可调整其在while True中的书写顺序扩展沉默策略可参考timing.co中的user didnt respond $time_s流程实现bot 说话期间用户未回应的差异化提醒。总结interaction_loop教程展示了 Colang 2.x 主循环的完整用法以flow mainwhile True事件监听组织对话状态机用activate generating user intent for unhandled user utterance开启 LLM 意图兜底用unhandled user intent分支生成未知输入响应再用user was silent 12.0实现超时主动提醒。配合 config.yml 中的指令与示例对话以及 llm.co、timing.co 的系统级流程即可快速搭建一个既能处理已知意图、又能优雅应对未知输入与冷场的交互式对话助手。赞分享人工智能大模型AI 安全治理模型安全内容安全提示词注入防护RAG【免费下载链接】GuardrailsNeMo Guardrails is an open-source toolkit for easily adding programmable guardrails to LLM-based conversational systems.项目地址https://gitcode.com/gh_mirrors/ne/Guardrails点击查看免费下载相关推荐NeMo Guardrails Colang 2.x Flow 运行时深度解析事件驱动的推理循环与状态机实现NeMo Guardrails Colang 2.x Flow 运行时深度解析事件驱动的推理循环与状态机实现 本指南聚焦 NeMo Guardrails 中人工智能大模型AI 安全治理模型安全内容安全提示词注入防护RAGNeMo Guardrails迁移指南从Colang 1.0到Colang 2.0NeMo Guardrails迁移指南从Colang 1.0到Colang 2.0 概述 Colang 2.0是NeMo Guardrails对话编程语言的重人工智能大模型AI 安全治理模型安全内容安全提示词注入防护RAG在 NeMo Guardrails 中集成 CrowdStrike AIDR基于 Colang 2.x 的输入/输出护栏实战指南在 NeMo Guardrails 中集成 CrowdStrike AIDR基于 Colang 2.x 的输入/输出护栏实战指南 本指南以仓库内 crowds人工智能大模型AI 安全治理模型安全内容安全提示词注入防护RAG上一篇rknn_model_zoo 实战YOLOv5 实例分割模型在 RKNN 平台的转换与部署全流程下一篇Rich 进度条完全指南使用 rich.progress 构建多任务、可定制、文件级进度显示创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

jstips 精讲:JavaScript 多维数组扁平化的五种解法与原理对比

jstips 精讲:JavaScript 多维数组扁平化的五种解法与原理对比

教程 【免费下载链接】jstips This is about useful JS tips! 项目地址: https://gitcode.com/gh_mirrors/js/jstips 点击查看 免费下载 本篇技术指南基于 jstips 开源仓库第 38 期中文文档 多维数组扁平化 展开,系统讲解将二维数组(乃至更深…

2026/10/11 19:04:25 阅读更多 →
docker-selenium 4.32.0 发布记录解读:Chrome 131.0.6778.264 镜像标签体系与版本矩阵

docker-selenium 4.32.0 发布记录解读:Chrome 131.0.6778.264 镜像标签体系与版本矩阵

测试后端云原生容器编排可观测性 【免费下载链接】docker-selenium Provides a simple way to run Selenium Grid with Chrome, Firefox, and Edge using Container Platform, making it easier to perform browser automation at scale 项目地址: https://gitcode.…

2026/10/11 0:02:58 阅读更多 →
HyperFrames视频理解框架实战:帧采样、训练调优与踩坑全解析

HyperFrames视频理解框架实战:帧采样、训练调优与踩坑全解析

视频理解这几年最不缺的就是新框架,但大多数项目追两天就散了。hyperframes这个名字我第一次看到的时候,第一反应是"又一套视频分类代码封装"。后来在短视频质检项目里,需要从几十万条片段中快速判断动作类型,我从TSN、…

2026/10/11 6:15:32 阅读更多 →

最新新闻

Java Lambda不只是语法糖:从字节码到序列化的工程实践

Java Lambda不只是语法糖:从字节码到序列化的工程实践

1. Lambda身后的字节码:语法糖背后的真实身份1.1 先说结论:Lambda不完全是"匿名内部类的简写"很多Java开发者对Lambda最早的认知,就是"可以用Lambda代替匿名内部类,代码更简洁"。这个说法在80%的日常场景下是…

2026/10/14 7:51:44 阅读更多 →
融合虚拟储能的楼宇微网优化调度:Matlab代码实现深度解析

融合虚拟储能的楼宇微网优化调度:Matlab代码实现深度解析

“融合需求侧虚拟储能系统的楼宇微网优化调度”这个项目,听起来像是又一篇把关键词堆在一起的论文标题,但真正把它落到Matlab代码里跑通之后,我才意识到这里面其实藏着一个很值得展开的工程命题。这个项目做的事情,通俗说就是把楼…

2026/10/14 7:51:44 阅读更多 →
Java毕业设计:校园招聘管理系统需求分析、数据库设计与核心代码实战

Java毕业设计:校园招聘管理系统需求分析、数据库设计与核心代码实战

写毕业设计选题目的时候,"校园招聘管理系统"很容易被当成一个平平无奇的CRUD项目。但只要你真的去参加过学校组织的双选会,或者蹲在就业办看过辅导员怎么手动核对企业资质和岗位表,你就会发现:这个场景里的业务复杂度&a…

2026/10/14 7:51:44 阅读更多 →
KUKA机器人通过EtherNet/IP对接OMRON相机:通讯配置与IO映射实战

KUKA机器人通过EtherNet/IP对接OMRON相机:通讯配置与IO映射实战

简介:这份文档面向工业自动化工程师与机器人集成调试人员,聚焦KUKA机器人与OMRON工业相机之间基于EtherNet/IP协议的通讯配置,解决视觉引导场景下设备互联与数据映射的实际问题。内容围绕KRC4 EtherNet IP V2.0以上通讯软件的安装、Wov总线结…

2026/10/14 7:51:44 阅读更多 →
打卡信奥刷题(3628)用C++实现信奥题 P11860 [CCC 2025 Senior] 熔岩路 / Floor is Lava

打卡信奥刷题(3628)用C++实现信奥题 P11860 [CCC 2025 Senior] 熔岩路 / Floor is Lava

P11860 [CCC 2025 Senior] 熔岩路 / Floor is Lava 题目背景 译自 CCC 2025 Senior T4。本题满分为 151515。 题目描述 你被困在一个炽热的地牢中。 地牢由 nnn 个房间组成,房间编号 1∼n1\sim n1∼n。这些房间通过 mmm 条双向隧道相连,第 iii 条双向隧道…

2026/10/14 7:51:44 阅读更多 →
Vulkan多重采样技术:原理与性能优化实践

Vulkan多重采样技术:原理与性能优化实践

1. 多重采样技术背景与核心价值在实时图形渲染领域,锯齿(Aliasing)问题一直是影响视觉质量的关键瓶颈。当高分辨率几何边缘或纹理细节在低分辨率帧缓冲中渲染时,由于采样率不足导致的锯齿现象会显著降低画面品质。传统解决方案如超…

2026/10/14 7:50:43 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →