发布时间:2026/7/19 9:41:47
第2系列_第5期_.NET AI对话的流式响应与性能优化 .NET AI对话的流式响应与性能优化:StreamingChatMessage 深度实践系列:.NET C# Semantic Kernel 集成深度解析 ⑤/6难度:⭐⭐⭐(进阶源码,需.NET基础)源码仓库:github.com/zongge0812/zonggeAgent适用环境:.NET 9.0 + WPF一、引言流式响应是 AI 桌面应用中决定用户体验的关键因素。用户点击"发送"后,是等 5 秒一次性看到完整回复,还是 AI 逐字逐句显示在屏幕上?❌ 非流式:用户等待 → 等待 → 等待 → 一次性显示全部回复 ✅ 流式: 用户看到 AI 正在"打字" → 逐字显示 → 即时反馈zonggeAgent 的流式实现覆盖了4 个核心能力:┌──────────────────────────────────────────────────────────────┐ │ ① IAsyncEnumerable 流式处理 ← SK 原生流式 API │ │ ② Token 用量追踪 ← 从 Metadata["Usage"] 提取 │ │ ③ 智能分块与打字机效果 ← StreamingOptimizationService │ │ ④ 性能监控与日志 ← PerformanceMonitor │ └──────────────────────────────────────────────────────────────┘二、IAsyncEnumerable 流式处理2.1 流式调用入口IAIProviderService接口定义了两种流式方法:// 使用默认 ExecutionSettingsIAsyncEnumerableChatMessageSendMessageStreamAsync(stringuserMessage,ChatHistorychatHistory,AIProviderConfigconfig,CancellationTokencancellationToken=default);// 使用自定义 ExecutionSettingsIAsyncEnumerableChatMessageSendMessageStreamAsync(stringuserMessage,ChatHistorychatHistory,AIProviderConfigconfig,PromptExecutionSettings?executionSettings,CancellationTokencancellationToken=default);两个重载的设计意图很清晰——默认方法委托到自定义方法:publicasyncIAsyncEnumerableChatMessageSendMessageStreamAsync(stringuserMessage,ChatHistorychatHistory,AIProviderConfigconfig,CancellationTokencancellationToken=default){varexecutionSettings=CreateExecutionSettings(config);awaitforeach(varmessageinSendMessageStreamAsync(userMessage,chatHistory,config,executionSettings,cancellationToken)){yieldreturnmessage;}}2.2 流式核心实现publicasyncIAsyncEnumerableChatMessageSendMessageStreamAsync(stringuserMessage,ChatHistorychatHistory,AIProviderConfigconfig,PromptExecutionSettings?executionSettings,CancellationTokencancellationToken=default){varstartTime=DateTime.Now;_performanceMonitor.RecordRequestStart(ProviderType,DisplayName);_performanceMonitor.RecordStreamingStart(ProviderType);try{// ① 构建 ChatService 和 KernelvarchatService=awaitCreateChatServiceAsync(config);varkernel=CreateKernel(chatService);// ② 热加载插件PluginLoader.RegisterPlugin(kernel);// ③ 应用模式过滤kernel=ApplyChatModeFilter(kernel,chatService);// ④ 准备执行设置varpromptSetting=executionSettings??CreateExecutionSettings(config);// ⑤ 添加用户消息到对话历史chatHistory.Add(newChatMessageContent(AuthorRole.User,userMessage));// ⑥ 开始流式接收varfullContent=newStringBuilder();_streamingUsage=null;// 重置Token追踪awaitforeach(varmessageinchatService.Get

相关新闻

2026/7/19 9:41:47

健康管理:藏在日常里的养生智慧

什么是真正的健康管理?很多人提到健康管理,第一反应是"吃保健品""办健身年卡",甚至觉得这是生病之后才需要考虑的事。其实世界卫生组织早已明确,健康不仅是没有疾病或虚弱状态,而是身体、心理和社…

2026/7/19 9:41:47

Windows批处理中echo命令的全面指南与实用技巧

1. 初识echo命令:批处理中的基础输出工具 在Windows批处理脚本的世界里,echo命令就像是一个忠实的信息传递员。每当我需要让脚本与用户对话,或者在调试时查看变量值,echo总是第一个跳入脑海的工具。这个看似简单的命令&#xff0c…

2026/7/19 9:41:47

Apple Watch新版Siri AI测试:多场景完胜旧版,有望带来巨大改变!

【Siri测试背景】“这是我在网上找到的信息”这句话终于可以被淘汰了。测试者在Apple Watch上用现实中的几个问题分别测试了苹果Siri语音助手的旧版本和新版本,打算看看它们的表现如何。最终,测试者表示会选择新版本。随着本周WatchOS 27公开测试版的推出…

2026/7/19 15:27:12

Web Application Basics

Web Application Basics URL Scheme:often https User(rare) Host/Domain:website address typosquatting:mimic a website to trick people into giving up sensitive info. Port:usually 80-http,443-https Path:file path Query String:have ?—Modify-able Fragment—M…

2026/7/19 15:27:12

文件读写全套易错笔记

一、语法类错误(错误代码修正代码) 错误1:fopen不做空指针判断 错误代码 FILE* fp fopen("test.txt","r"); fputc(a,fp); // 打开失败fpNULL,直接崩溃问题:文件打开失败不会捕获,后续…

2026/7/19 15:27:12

vla学习笔记(2) lerobot配置gazebo

一、写gazebo.launch.py 直接复制下列文件,并且修改对应的文件名称import os from launch import LaunchDescription from launch.actions import ExecuteProcess, RegisterEventHandler, TimerAction from launch_ros.actions import Node from launch_ros.substit…

2026/7/19 15:27:12

概念、概要、详细设计编写心法

一文讲清概念设计、概要设计、详细设计:别再把三种文档写混了设计文档不是越细越好,而是要在正确阶段回答正确问题:概念设计统一业务语言,概要设计搭系统骨架,详细设计画代码施工图。很多研发同学写设计文档时&#xf…

2026/7/19 0:00:15

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/19 0:00:15

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/18 16:50:29

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…