十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

NewLife.Cube AI对话助手揭秘:SSE流式输出、工具循环与智能填表的代码实现原理

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),仅供参考
返回列表