NewLife.Cube AI对话助手揭秘:SSE流式输出、工具循环与智能填表的代码实现原理
NewLife.Cube AI对话助手揭秘SSE流式输出、工具循环与智能填表的代码实现原理【免费下载链接】NewLife.CubeWeb快速开发平台搭建管理后台灵活可扩展内部集成了用户权限管理、模板继承、SSO登录、OAuth服务端、数据导出与分享等多个功能模块在真实项目中经历过单表100亿数据添删改查的考验。项目地址: https://gitcode.com/gh_mirrors/ne/NewLife.CubeNewLife.Cube 是一个 .NET 平台的 Web 快速开发后台管理系统其内置的AI 对话助手支持 SSE 流式输出、大模型工具循环调用与智能填表三大核心能力。本文带你从代码层面揭秘这套 AI 对话助手的实现原理悬浮球提问后消息如何经全局端点/Ai/AiChat流转、SSE 事件流如何逐字推送到浏览器、AI 如何循环调用工具读取页面数据以及帮我填表又是如何安全落地的。 AI 助手能力一览魔方把所有用户交互场景统一收敛到一个全局端点不再为每个页面重复写对话接口能力说明底层实现AI 对话含工具调用右下角悬浮球任意页面可用AiController全局端点/Ai/AiChatSSE 流式智能填表实体页 / 配置页帮我填表get_form_schema/fill_form工具浏览器操作AI 读取/操作你当前页面run_js工具 检查点机制系统健康诊断首页AI 诊断按钮流式输出报告DiagnoseSystemStreamAsync日志摘要 / 安全周报定时作业非流式AILogSummaryJob/AISecurityReportJob所有配置集中在CubeSetting的「AI」分类AISwitch总开关、AIProvider服务商、AIModel模型等管理后台修改后运行期即时生效。详见 Doc/AI-人工智能.md 中的配置项表格——源码位于NewLife.Cube/Setting.cs。 数据流从悬浮球到 SSE 事件流一次提问的完整链路如下右下角悬浮球_AiAssistant.cshtml / AiAssistant.vue → POST /Ai/AiChat携带 area/controller 目标页面 会话消息 _query 查询条件 → AiController 解析目标控制器按能力接口分级注册工具 → NewLife.AI AiChatService 编排会话历史 工具循环 空响应兜底 → SSE 事件流回前端text / 工具调用事件 / run_js 下发前端请求体会携带area、controller、url等目标页面标识见NewLife.Cube/AI/CubeAiChatRequest.cs后端据此知道你正在哪个页面上提问这是智能填表与页面数据感知的前提。⚡ SSE 流式输出的实现细节SSEServer-Sent Events是 AI 助手打字机效果的关键。核心逻辑内聚在NewLife.Cube/AI/AiController.cs的RunSseAsync方法约第 188–245 行要点有四标准 SSE 响应头Content-Type: text/event-stream; charsetutf-8、Cache-Control: no-cache并加X-Accel-Buffering: no关闭 Nginx 缓冲保证逐字即时推送写事件 立即 Flush每个事件先写data: {json}\n\n再FlushAsync刷新到网络前端才能实时看到增量文本规范 JSON 协议camelCase 命名、忽略 null、中文直出不做\uXXXX转义超长 Int64 自动转字符串避免 JS 精度丢失会话隔离会话键按用户ID 页面URL 前端sessionId拼接纵深防御防止跨用户、跨页面串话。对话核心由 NewLife.AI 的AiChatService承担逐事件枚举await foreach后统一经同一个写回调输出——这也让浏览器工具能复用同一条 SSE 通道下发指令。 工具循环AI 如何看懂你的页面大模型本身并不知道你的页面长什么样魔方通过ToolRegistry 工具注册表给它装上一双眼睛。AiController按目标页面的能力接口分级注册工具工具服务提供的工具作用BuiltinToolServiceget_current_time / calculate 等内置基础工具SystemInfoToolServiceget_system_info系统状态、健康诊断数据NetworkToolService网页抓取 / 搜索 / 天气 / 翻译 / IP 定位免费联网能力CubeToolsTEntityget_data_context/get_form_schema/fill_form实体页数据与填表PageDataContextToolServiceget_page_context页面数据上下文两级降级BrowserToolServicerun_js在用户浏览器执行脚本ConfigFormToolServiceget_form_schema/fill_form配置表单页填表所谓工具循环LLM 生成回答的过程中发现需要数据就发起工具调用 → 框架执行工具拿到结果 → 把结果喂回 LLM 继续推理 → 循环直到给出最终答复。整个过程对前端是透明的事件流中只会穿插工具调用事件。所有工具方法均为virtual二次开发者可直接继承重写或在控制器中重写CreateCubeTools返回自定义工具集——这是魔方 AI 扩展性的关键设计。 智能填表原理先读 Schema再安全回填帮我填一张新增用户的表单这类需求由两个工具协作完成核心代码在NewLife.Cube/AI/CubeTools.cs第一步get_form_schema从实体的字段元数据构建 Schema字段名、显示名、类型、枚举值、必填、最大长度编辑模式还会并入当前记录已有值让 AI 基于现状补全而不是凭空生成。第二步fill_formAI 返回字段值字典后端做四重安全过滤后才回填到前端表单自动维护字段拒填CreateTime、UpdateTime、RegisterIP 等审计字段由框架填充AI 不可碰敏感字段拒填AiFormHelper按命名规则识别 ApiKey / Secret / Password / Token / ConnStr 等字段类型强转换CoerceValue按字段类型Int32/Decimal/DateTime/枚举等安全转换转换失败记入 errors 而非抛异常不写数据库回填只是预填前端表单由用户人工确认后再提交——这是重要的安全边界。 浏览器工具 run_js 与检查点机制最有意思的设计是run_jsAI 可以生成一段 JavaScript下发到你自己的浏览器当前页面执行再拿回执行结果继续推理。它借助检查点Checkpoint机制实现请求-响应配对工具调用时生成检查点编号优先复用ToolCallId经 SSE 下发{type:run_js,checkpointId:...,script:...}事件后端调用PageCheckpointService.WaitForChoiceAsync挂起等待最长 30 秒前端执行脚本后POST /Ai/OperationResult回传结果唤醒等待中的工具执行结果回到 LLM对话继续。PageCheckpointServiceNewLife.Cube/AI/PageCheckpointService.cs底层走事件总线单机用进程内总线集群经 Redis/星尘广播——即使回传请求命中另一台服务器也能唤醒等待方天然支持分布式部署。检查点还绑定用户编号跨用户回传直接忽略防止串扰。get_page_context工具复用了同一条管道并做两级降级页面控制器实现了IPageDataContext接口就走服务端权威数据否则自动在浏览器执行标准采集脚本抓取标题、表格、表单字段控制在 8192 字符内任何页面零后端改动即可获得当前页面数据。 权限与安全边界AI 助手不是开后门它被完整地套在魔方的权限体系内端点标注[EntityAuthorize(PermissionFlags.Detail)]无 AI 权限直接拒绝对话目标是实体页时还会校验当前用户对该实体菜单的 Detail 权限越权对话返回 403会话键按用户页面作用域隔离数据查询只暴露安全字段AiDataHelper.FilterSafeFieldsrun_js下发脚本全量审计日志脚本等价于用户自己在 DevTools 执行写操作前 AI 会被提示词要求先向用户说明。相关规则文档见Doc/AI-人工智能.md与Doc/SYS-安全与审计.md。 快速上手与二次开发上手三步系统设置 → 魔方设置打开AISwitch按需选择服务商NewLife / DeepSeek / OpenAI 兼容等与模型 → 刷新页面右下角悬浮球即可对话。二次开发扩展点三个能力接口实现一个接口即获得对应 AI 能力接口实现位置能力IEntityAiContextReadOnlyEntityControllerTEntity实体页数据上下文与定制提示词IFormAiContextConfigControllerTConfig配置表单页填表IPageDataContext任意控制器非实体页服务端数据上下文核心源码路径速查全局端点NewLife.Cube/AI/AiController.cs、AI 抽象层NewLife.Cube/AI/IAIService.cs、实体工具集NewLife.Cube/AI/CubeTools.cs、表单助手NewLife.Cube/AI/AiFormHelper.cs、浏览器工具NewLife.Cube/AI/BrowserToolService.cs、检查点服务NewLife.Cube/AI/PageCheckpointService.cs前端为NewLife.Cube.Vue/web/core/components/ai/AiAssistant.vue与 MVC 的_AiAssistant.cshtml。 小结魔方的 AI 助手用单一全局端点 能力接口分级注册 SSE 统一管道 检查点回传四个设计让 AI 能力像插件一样接入任意页面同时把权限、审计、敏感数据三道安全闸门焊死在工具层——这套模式对任何想在自研后台中集成 AI 助手的团队都有参考价值。【免费下载链接】NewLife.CubeWeb快速开发平台搭建管理后台灵活可扩展内部集成了用户权限管理、模板继承、SSO登录、OAuth服务端、数据导出与分享等多个功能模块在真实项目中经历过单表100亿数据添删改查的考验。项目地址: https://gitcode.com/gh_mirrors/ne/NewLife.Cube创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

How to Sort MySQL Data Alphabetically

How to Sort MySQL Data Alphabetically

In today’s post, we’ll explore the methods for sorting data alphabetically in MySQL. Sorting data is a fundamental operation in database management, especially when you want to present information in a user-friendly manner. Whether you’re working with c…

2026/11/10 4:39:06 阅读更多 →
Umi-OCR 使用指南:离线 OCR 如何识别截图、批量图片与扫描版 PDF(附 7 个实用技巧)

Umi-OCR 使用指南:离线 OCR 如何识别截图、批量图片与扫描版 PDF(附 7 个实用技巧)

Umi-OCR 使用指南:离线 OCR 如何识别截图、批量图片与扫描版 PDF(附 7 个实用技巧) 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印…

2026/11/13 13:04:23 阅读更多 →
163MusicLyrics 三分钟上手:网易云、QQ音乐歌词批量下载完整攻略

163MusicLyrics 三分钟上手:网易云、QQ音乐歌词批量下载完整攻略

163MusicLyrics 三分钟上手:网易云、QQ音乐歌词批量下载完整攻略 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 拷歌进车机或U盘时最头疼的就是歌词全缺失&a…

2026/11/11 6:28:53 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/13 5:13:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/13 5:13:25 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/13 5:13:25 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/13 5:13:25 阅读更多 →

日新闻

周新闻

月新闻