- 博客(53)
- 收藏
- 关注
原创 LLM ,MCP协议,AA协议,RAG,智能体(AI Agent) 图解详细讲解
无加密格式是:ldap://dc1.songxwn.local:389。访问 https://vcsa-s1.songxwn.local/ui/ 后,可输入SSO步骤的账号:administrator@vsphere.local 密码进行登录。vSAN 聚合主机本地磁盘为共享存储池 对象存储架构,支持 NVMe/TCP、RoCE 替代 SAN/NAS,支撑 HA/DRS/vMotion。进入VCSA后台,示例: https://vcsa-s1.songxwn.local:5480 ,使用root账号登录。
2026-03-12 20:17:30
159
原创 如何用labelimg标注yolo数据集,并利用工具自动划分数据集
刷新页面,左侧菜单栏已经出现了"文章管理"项,完整的增删改查、搜索、导出功能全都就绪。没有复杂的配置文件要填,没有繁琐的依赖要装,甚至连数据库迁移都是自动完成的。我不需要学习新的插件开发规范,只需要按照 Laravel Package 的标准写代码,然后通过 Composer 安装即可。安装完成后,刷新页面,左侧菜单栏自动出现了对应的菜单项,数据表也自动创建好了。字典管理:对于一些固定的枚举值(比如"订单状态:待支付、已支付、已取消"),可以在字典里统一管理,然后在代码里引用。第一步:创建数据表。
2026-03-12 20:14:08
214
原创 后端大模型流式输出被springcloud gateway“阻塞“的解决办法
upper_red[0] = self.get_parameter('red_h_upper').get_parameter_value().integer_value # 读取阈值上限的参数值。upper_red[0] = self.get_parameter('red_h_upper').get_parameter_value().integer_value # 读取阈值上限的参数值。这在参数的高级编程中,我们都可能会用到。就像真实的字典一样,由名称和数值组成,也叫做键和值,合成键值。
2026-03-12 20:10:18
169
原创 LangChain 表达式语言 (LCEL):从序列链接到并行执行
从标准角度看,传统 JPEG(ISO/IEC 10918)确实定义了无损模式和 12 位编码方式,但这些模式在实际软件生态中的实现和使用都非常少见。因此在工程实践中,一旦涉及 无损压缩或 12 位图像,通常会直接考虑 JPEG-LS 或 JPEG2000 等后续标准。实际上,它们属于 JPEG 组织发布的不同压缩体系,底层算法思想差异很大。JPEG-LS 是 JPEG 组织后来推出的一个全新标准。传统 JPEG 是最早也是最广泛使用的 JPEG 标准。我们日常说的“JPEG图片”,基本指的就是它。
2026-03-12 20:06:29
199
原创 Mac上安装Harbor并配置
下面是 demo 的部分代码,代码框架来源于 NCCL 源码目录:docs/examples/01_communicators/03_one_device_per_process_mpi/one_device_per_process_mpi,并做了一些改动。MPI 根进程将 Unique Id 通过 MPI_Bcast 传递给所有 MPI 进程,里面包含了 MPI 根进程的 magic,IP,port 信息,用作其它 MPI 进程加群的唯一票据。// 为每个MPI进程分配一个全局 mpi_rank id。
2026-03-12 20:02:33
155
原创 【光照】[PBR][几何遮蔽]实现方法对比
但当需求延伸到视频领域,挑战却陡然升级:现有工具要么无法精准控制对焦平面与虚化强度,要么直接套用图片虚化算法,导致视频出现明显的帧间闪烁、边缘过渡生硬等问题,难以满足高质量创作需求。无论是动态人物、快速移动的物体,还是纹理复杂的场景,都能实现 “虚化自然、细节清晰” 的平衡。诚邀大家前往 GitHub 体验试用,若觉得工具实用、技术有参考价值,欢迎给我们点亮Star,也期待相关领域的科研同行引用我们的工作(论文引用格式可在 GitHub 查看)~ 你们的支持是我们持续优化技术的最大动力!
2026-03-11 15:02:30
149
原创 Linux开机启动脚本(cron 的 @reboot 特性)
使用 UseProcess(workflow) 时,内部调用 BuildInMemory(),并按 ProcessId:Version 将 ProcessEntity 缓存到内存中,不产生数据库写入,适合单元测试、Demo、嵌入式场景;Workflow 代码定义流程结构,支持 Start、Task、ServiceTask、RagService、LlmService、Agent、Parallels、Branch、End 等。流程:开始 → 校验订单 → 计算金额 → 通知结果 → 结束。
2026-03-11 14:56:06
320
原创 JavaScript 中的安全编码: 个关键实践
包含 “日期、集合、字符串、IO、缓存、并发、Excel、Emoji、Response、Pipeline、Http、Json、JsonRpc、Encrypt、Auth、ID、Serializer、验证码、限流器、BloomFilter...” 等数十个模块。Cache模块 一个高性能的 Java 缓存工具,支持多种缓存类型(FIFO、LFU、LRU等)、锁分桶优化、缓存过期策略(写后过期、访问后过期...)、缓存定时清理、缓存加载器、缓存监听器、缓存信息统计...等功能。
2026-03-11 11:33:38
324
原创 【URP】Unity中的[摩尔纹]问题解决方案
ReAct(Reasoning and Acting)是 AgentScope 的核心模式,它让智能体能够在推理和行动之间循环,直到完成任务或达到最大迭代次数。MCP 协议支持:框架原生支持 Model Context Protocol,这意味着可以轻松集成外部 MCP 服务提供的工具,无需编写额外的集成代码。StateModule 接口提供了统一的状态管理能力,任何实现了该接口的组件都可以被序列化和持久化。框架定义了多个 Hook 事件类型,覆盖了智能体执行的各个阶段,这让监控、日志、调试变得非常方便。
2026-03-11 11:28:31
311
原创 深入理解Java内存模型:从诡异Bug到优雅解决
今天的主角 Dice 系数(Dice Coefficient) 及其衍生出的 Dice Loss,就是为了解决这个问题而生的。它不关心背景有多大,它只关心:你画的圈,和标准答案的圈,重合度到底有多高?假设老师给了一张画着线条的黑白线稿(原始图片),要求你把其中的“猫”涂红(这是你的预测 Prediction)。简单说,当模型预测非常离谱(完全没有交集)时,Dice 的梯度可能非常小或非常剧烈,导致训练初期模型很难收敛。如果模型预测全是黑(0),标签也全是黑(0),分母就会变成 0,导致程序崩溃(NaN)。
2026-03-11 11:23:47
263
原创 将 EasySQLite 解决方案文件格式从 .sln 升级为更简洁的 .slnx
KV Cache 是 Transformer 自回归推理的关键优化技术,通过缓存历史键值对将重复计算转化为内存查表,显著降低推理延迟。分页管理:借鉴操作系统的虚拟内存思想,vLLM 等框架将 KV Cache 切分为固定大小的块(如 16 个 token),动态分配物理显存,显著提升显存利用率和批处理吞吐。卸载与重算:对超长上下文,可将早期 token 的 KV 缓存卸载至 CPU 内存,或在访问时按需重算。需要明确的是,KV Cache 存储的是经过线性投影后的连续向量表示,其规模与词表大小无关。
2026-03-10 13:16:37
156
原创 RFSOC学习记录(六)混频模式分析
destPath: 'xxxx/a.zip' // destPath是接收文件的自定义路径,完整的沙箱路径是fileStoragePath+destPath,详情请参见应用沙箱目录。srcPath: '/data/xxxx/a.zip', // srcPath是需要发送文件的沙箱路径,详情请参见应用沙箱目录。needShowSystemUI: false // 是否展示系统UI,true为展示,false为不展示,默认为false。若当前设备为接收端,请设置为true,否则请设置为false。
2026-03-10 13:11:23
175
原创 为你的网站定制一套统一的异常处理机制
就负瓜馁然后只需要提供一个已经初始化为 0 的字节数组作为内存、一个指向数组的指针、以及用于输入输出的两个字节流就能够让程序运行了。比如 Hello World!程序就可以写成:CopyC# 类型系统入门#既然要用 C# 类型系统来构建 Brainfuck 的编译器,我们需要首先对 C# 类型系统有一些认知。泛型系统#C# 的类型系统构建在 .NET 的类型系统之上,而众所周知 .NET 是一个有具现化泛型的类型系统的平台,意味着泛型参数不仅不会被擦除,还会根据泛型参数来分发甚至特化代码。
2026-03-10 13:06:09
373
原创 老赵谈IL():IL可以看到的东西,其实大都也可以用C#来发现
KV Cache 是 Transformer 自回归推理的关键优化技术,通过缓存历史键值对将重复计算转化为内存查表,显著降低推理延迟。分页管理:借鉴操作系统的虚拟内存思想,vLLM 等框架将 KV Cache 切分为固定大小的块(如 16 个 token),动态分配物理显存,显著提升显存利用率和批处理吞吐。卸载与重算:对超长上下文,可将早期 token 的 KV 缓存卸载至 CPU 内存,或在访问时按需重算。需要明确的是,KV Cache 存储的是经过线性投影后的连续向量表示,其规模与词表大小无关。
2026-03-09 13:11:32
223
原创 NHibernate自定义集合类型(下):自动维护双向关系
destPath: 'xxxx/a.zip' // destPath是接收文件的自定义路径,完整的沙箱路径是fileStoragePath+destPath,详情请参见应用沙箱目录。srcPath: '/data/xxxx/a.zip', // srcPath是需要发送文件的沙箱路径,详情请参见应用沙箱目录。needShowSystemUI: false // 是否展示系统UI,true为展示,false为不展示,默认为false。若当前设备为接收端,请设置为true,否则请设置为false。
2026-03-09 13:06:31
297
原创 好铁不打钉,好程序员不去外包公司
瀑曰儋郝然后只需要提供一个已经初始化为 0 的字节数组作为内存、一个指向数组的指针、以及用于输入输出的两个字节流就能够让程序运行了。比如 Hello World!程序就可以写成:CopyC# 类型系统入门#既然要用 C# 类型系统来构建 Brainfuck 的编译器,我们需要首先对 C# 类型系统有一些认知。泛型系统#C# 的类型系统构建在 .NET 的类型系统之上,而众所周知 .NET 是一个有具现化泛型的类型系统的平台,意味着泛型参数不仅不会被擦除,还会根据泛型参数来分发甚至特化代码。
2026-03-09 13:01:28
297
原创 想成为优秀的技术人员你必须做到的几件事情
destPath: 'xxxx/a.zip' // destPath是接收文件的自定义路径,完整的沙箱路径是fileStoragePath+destPath,详情请参见应用沙箱目录。srcPath: '/data/xxxx/a.zip', // srcPath是需要发送文件的沙箱路径,详情请参见应用沙箱目录。needShowSystemUI: false // 是否展示系统UI,true为展示,false为不展示,默认为false。若当前设备为接收端,请设置为true,否则请设置为false。
2026-03-08 11:15:40
339
原创 出身在二三线城市软件工作者的悲哀
匠仲习滦然后只需要提供一个已经初始化为 0 的字节数组作为内存、一个指向数组的指针、以及用于输入输出的两个字节流就能够让程序运行了。比如 Hello World!程序就可以写成:CopyC# 类型系统入门#既然要用 C# 类型系统来构建 Brainfuck 的编译器,我们需要首先对 C# 类型系统有一些认知。泛型系统#C# 的类型系统构建在 .NET 的类型系统之上,而众所周知 .NET 是一个有具现化泛型的类型系统的平台,意味着泛型参数不仅不会被擦除,还会根据泛型参数来分发甚至特化代码。
2026-03-08 11:10:11
318
原创 HTML版D实验室系列【二】----摄像机、投影、D旋转以及缩放(演示很多,请自备瓜子眼药水··)
KV Cache 是 Transformer 自回归推理的关键优化技术,通过缓存历史键值对将重复计算转化为内存查表,显著降低推理延迟。分页管理:借鉴操作系统的虚拟内存思想,vLLM 等框架将 KV Cache 切分为固定大小的块(如 16 个 token),动态分配物理显存,显著提升显存利用率和批处理吞吐。卸载与重算:对超长上下文,可将早期 token 的 KV 缓存卸载至 CPU 内存,或在访问时按需重算。需要明确的是,KV Cache 存储的是经过线性投影后的连续向量表示,其规模与词表大小无关。
2026-03-07 12:57:19
159
原创 详解 ASP.NET异步
destPath: 'xxxx/a.zip' // destPath是接收文件的自定义路径,完整的沙箱路径是fileStoragePath+destPath,详情请参见应用沙箱目录。srcPath: '/data/xxxx/a.zip', // srcPath是需要发送文件的沙箱路径,详情请参见应用沙箱目录。needShowSystemUI: false // 是否展示系统UI,true为展示,false为不展示,默认为false。若当前设备为接收端,请设置为true,否则请设置为false。
2026-03-07 12:51:36
289
原创 Javascript执行效率小结
缆链照酒然后只需要提供一个已经初始化为 0 的字节数组作为内存、一个指向数组的指针、以及用于输入输出的两个字节流就能够让程序运行了。比如 Hello World!程序就可以写成:CopyC# 类型系统入门#既然要用 C# 类型系统来构建 Brainfuck 的编译器,我们需要首先对 C# 类型系统有一些认知。泛型系统#C# 的类型系统构建在 .NET 的类型系统之上,而众所周知 .NET 是一个有具现化泛型的类型系统的平台,意味着泛型参数不仅不会被擦除,还会根据泛型参数来分发甚至特化代码。
2026-03-07 12:45:59
331
原创 让姑姑不再划拳 码农也要有原则 : SOLID via C#
KV Cache 是 Transformer 自回归推理的关键优化技术,通过缓存历史键值对将重复计算转化为内存查表,显著降低推理延迟。分页管理:借鉴操作系统的虚拟内存思想,vLLM 等框架将 KV Cache 切分为固定大小的块(如 16 个 token),动态分配物理显存,显著提升显存利用率和批处理吞吐。卸载与重算:对超长上下文,可将早期 token 的 KV 缓存卸载至 CPU 内存,或在访问时按需重算。需要明确的是,KV Cache 存储的是经过线性投影后的连续向量表示,其规模与词表大小无关。
2026-03-06 12:55:14
195
原创 如何实现在Windows上运行Linux程序,附示例代码
destPath: 'xxxx/a.zip' // destPath是接收文件的自定义路径,完整的沙箱路径是fileStoragePath+destPath,详情请参见应用沙箱目录。srcPath: '/data/xxxx/a.zip', // srcPath是需要发送文件的沙箱路径,详情请参见应用沙箱目录。needShowSystemUI: false // 是否展示系统UI,true为展示,false为不展示,默认为false。若当前设备为接收端,请设置为true,否则请设置为false。
2026-03-06 12:50:20
213
原创 记录一次线上服务OOM排查
约繁擦崭然后只需要提供一个已经初始化为 0 的字节数组作为内存、一个指向数组的指针、以及用于输入输出的两个字节流就能够让程序运行了。比如 Hello World!程序就可以写成:CopyC# 类型系统入门#既然要用 C# 类型系统来构建 Brainfuck 的编译器,我们需要首先对 C# 类型系统有一些认知。泛型系统#C# 的类型系统构建在 .NET 的类型系统之上,而众所周知 .NET 是一个有具现化泛型的类型系统的平台,意味着泛型参数不仅不会被擦除,还会根据泛型参数来分发甚至特化代码。
2026-03-06 12:44:55
334
原创 Hello World背后藏着什么秘密?一行代码看懂Java的“跨平台”魔法
KV Cache 是 Transformer 自回归推理的关键优化技术,通过缓存历史键值对将重复计算转化为内存查表,显著降低推理延迟。分页管理:借鉴操作系统的虚拟内存思想,vLLM 等框架将 KV Cache 切分为固定大小的块(如 16 个 token),动态分配物理显存,显著提升显存利用率和批处理吞吐。卸载与重算:对超长上下文,可将早期 token 的 KV 缓存卸载至 CPU 内存,或在访问时按需重算。需要明确的是,KV Cache 存储的是经过线性投影后的连续向量表示,其规模与词表大小无关。
2026-03-05 12:12:53
178
原创 我最喜欢的 C# 新特性
destPath: 'xxxx/a.zip' // destPath是接收文件的自定义路径,完整的沙箱路径是fileStoragePath+destPath,详情请参见应用沙箱目录。srcPath: '/data/xxxx/a.zip', // srcPath是需要发送文件的沙箱路径,详情请参见应用沙箱目录。needShowSystemUI: false // 是否展示系统UI,true为展示,false为不展示,默认为false。若当前设备为接收端,请设置为true,否则请设置为false。
2026-03-05 12:07:25
179
原创 Linux 内核启动过程中的日志输出阶段分析
俨乘分飞然后只需要提供一个已经初始化为 0 的字节数组作为内存、一个指向数组的指针、以及用于输入输出的两个字节流就能够让程序运行了。比如 Hello World!程序就可以写成:CopyC# 类型系统入门#既然要用 C# 类型系统来构建 Brainfuck 的编译器,我们需要首先对 C# 类型系统有一些认知。泛型系统#C# 的类型系统构建在 .NET 的类型系统之上,而众所周知 .NET 是一个有具现化泛型的类型系统的平台,意味着泛型参数不仅不会被擦除,还会根据泛型参数来分发甚至特化代码。
2026-03-05 12:00:33
316
原创 记一次 .NET 某自动化智能制造软件 卡死分析
KV Cache 是 Transformer 自回归推理的关键优化技术,通过缓存历史键值对将重复计算转化为内存查表,显著降低推理延迟。分页管理:借鉴操作系统的虚拟内存思想,vLLM 等框架将 KV Cache 切分为固定大小的块(如 16 个 token),动态分配物理显存,显著提升显存利用率和批处理吞吐。卸载与重算:对超长上下文,可将早期 token 的 KV 缓存卸载至 CPU 内存,或在访问时按需重算。需要明确的是,KV Cache 存储的是经过线性投影后的连续向量表示,其规模与词表大小无关。
2026-03-04 12:07:59
166
原创 DeepSeek采用的UEM FP 为什么引爆了A股的芯片板块
destPath: 'xxxx/a.zip' // destPath是接收文件的自定义路径,完整的沙箱路径是fileStoragePath+destPath,详情请参见应用沙箱目录。srcPath: '/data/xxxx/a.zip', // srcPath是需要发送文件的沙箱路径,详情请参见应用沙箱目录。needShowSystemUI: false // 是否展示系统UI,true为展示,false为不展示,默认为false。若当前设备为接收端,请设置为true,否则请设置为false。
2026-03-04 12:02:34
291
原创 打破场景边界,支付宝联合实况窗提供全新出行服务体验
destPath: 'xxxx/a.zip' // destPath是接收文件的自定义路径,完整的沙箱路径是fileStoragePath+destPath,详情请参见应用沙箱目录。srcPath: '/data/xxxx/a.zip', // srcPath是需要发送文件的沙箱路径,详情请参见应用沙箱目录。needShowSystemUI: false // 是否展示系统UI,true为展示,false为不展示,默认为false。若当前设备为接收端,请设置为true,否则请设置为false。
2026-03-03 21:54:58
223
原创 一款带有AI功能的markdown工具
倨霞秦壮然后只需要提供一个已经初始化为 0 的字节数组作为内存、一个指向数组的指针、以及用于输入输出的两个字节流就能够让程序运行了。比如 Hello World!程序就可以写成:CopyC# 类型系统入门#既然要用 C# 类型系统来构建 Brainfuck 的编译器,我们需要首先对 C# 类型系统有一些认知。泛型系统#C# 的类型系统构建在 .NET 的类型系统之上,而众所周知 .NET 是一个有具现化泛型的类型系统的平台,意味着泛型参数不仅不会被擦除,还会根据泛型参数来分发甚至特化代码。
2026-03-03 21:45:06
346
原创 Ks 必备:kubectl patch 命令详解
KV Cache 是 Transformer 自回归推理的关键优化技术,通过缓存历史键值对将重复计算转化为内存查表,显著降低推理延迟。分页管理:借鉴操作系统的虚拟内存思想,vLLM 等框架将 KV Cache 切分为固定大小的块(如 16 个 token),动态分配物理显存,显著提升显存利用率和批处理吞吐。卸载与重算:对超长上下文,可将早期 token 的 KV 缓存卸载至 CPU 内存,或在访问时按需重算。需要明确的是,KV Cache 存储的是经过线性投影后的连续向量表示,其规模与词表大小无关。
2026-03-02 12:50:29
322
原创 从亿到亿:NuGet周下载量跃迁背后的.NET生态演进与未来挑战(-)
destPath: 'xxxx/a.zip' // destPath是接收文件的自定义路径,完整的沙箱路径是fileStoragePath+destPath,详情请参见应用沙箱目录。srcPath: '/data/xxxx/a.zip', // srcPath是需要发送文件的沙箱路径,详情请参见应用沙箱目录。needShowSystemUI: false // 是否展示系统UI,true为展示,false为不展示,默认为false。若当前设备为接收端,请设置为true,否则请设置为false。
2026-03-02 12:45:11
363
原创 .Android Compose 基础系列:在 Kotlin 中创建和使用变量
destPath: 'xxxx/a.zip' // destPath是接收文件的自定义路径,完整的沙箱路径是fileStoragePath+destPath,详情请参见应用沙箱目录。srcPath: '/data/xxxx/a.zip', // srcPath是需要发送文件的沙箱路径,详情请参见应用沙箱目录。needShowSystemUI: false // 是否展示系统UI,true为展示,false为不展示,默认为false。若当前设备为接收端,请设置为true,否则请设置为false。
2026-03-01 11:08:33
300
原创 阅读《构建之法》提出的个问题
短吮姥诖然后只需要提供一个已经初始化为 0 的字节数组作为内存、一个指向数组的指针、以及用于输入输出的两个字节流就能够让程序运行了。比如 Hello World!程序就可以写成:CopyC# 类型系统入门#既然要用 C# 类型系统来构建 Brainfuck 的编译器,我们需要首先对 C# 类型系统有一些认知。泛型系统#C# 的类型系统构建在 .NET 的类型系统之上,而众所周知 .NET 是一个有具现化泛型的类型系统的平台,意味着泛型参数不仅不会被擦除,还会根据泛型参数来分发甚至特化代码。
2026-03-01 11:02:23
566
原创 ORACLE检查并创建表空间和表分区
这篇论文语义Id的生成也是用的tiger论文提出的RQVAE方法,只不过这里是将语义Id用于排序阶段,将语义Id作为增强特征与其他特征进行拼接后,送入传统的排序模型。然而,这种“死记硬背”的方式也带来了明显的弊端:模型对新出现的、缺乏交互的长尾物品束手无策,因为这些随机ID本身不携带任何语义信息,无法帮助模型进行泛化推理。原理: 借鉴NLP中广泛应用的SentencePiece模型,该方法不再使用固定的N,而是根据ID组合在训练数据中出现的频率,动态地、自适应地学习最优的子词切分方案。
2026-02-28 19:19:06
481
原创 非专业程序员Ping
肮肮圃松然后只需要提供一个已经初始化为 0 的字节数组作为内存、一个指向数组的指针、以及用于输入输出的两个字节流就能够让程序运行了。比如 Hello World!程序就可以写成:CopyC# 类型系统入门#既然要用 C# 类型系统来构建 Brainfuck 的编译器,我们需要首先对 C# 类型系统有一些认知。泛型系统#C# 的类型系统构建在 .NET 的类型系统之上,而众所周知 .NET 是一个有具现化泛型的类型系统的平台,意味着泛型参数不仅不会被擦除,还会根据泛型参数来分发甚至特化代码。
2026-02-28 19:15:50
476
原创 Spring(循环依赖,spring与springboot的区别)
而由于原型模式(property)的Bean或Session模型下的Bean,创建和初始化会发生多次,并且是在Spring容器运行期间动态的发生变化,因此提前暴露半成品的Bean并不能解决循环依赖的问题,因为在后续的创建过程中,可能会涉及到多个不同的原型Bean,这就无法像单例Bean那样缓存并复用半成品对象。从本质上来说Spring解决循环依赖的方式是通过提前暴露未初始化完成的Bean来解决循环依赖的,这个尚未初始化完成的Bean是个半成品的Bean,就是未了解决循环依赖才提前放到缓存中的。
2025-12-21 14:33:58
741
原创 .NET驾驭Word之力:基于规则自动生成及排版Word文档
通过定义规则模板,我们可以创建一个灵活的系统,能够适应不同类型的合同需求,而无需修改代码。dateRange.Text = $"签订日期:{signDate:yyyy年MM月dd日}\t\t\t\t签订日期:{signDate:yyyy年MM月dd日}\n";range.Text = $"甲方:{partyA}\n乙方:{partyB}\n签订日期:{signDate:yyyy年MM月dd日}\n\n";基于规则的合同条款生成是指通过定义一套规则和模板,系统可以根据输入的数据自动选择和生成相应的合同条款。
2025-12-21 14:33:09
553
原创 浅谈 AI 搜索前端打字机效果的实现方案演进
虽然我们不能准确定位,但是只要能够使当前打印到页面上的字符比上一次的字符多,就可以满足诉求了。之前版本在每次接收到服务端下发的markdown文本时,都会做一次转换成html的操作,如果多次响应之间的间隔时间很短,则会出现略微卡顿的现象,因此这里转换为html时再增加一个防抖功能,可以很有效的避免卡顿。要实现打字正文中穿插卡片的效果,首先需要定义好返回的数据结构,它需要具备可扩展,方便解析,兼容markdown等特性,所以使用html标签是一种比较合适的方式,例如要展示一个应用卡片,可以下发如下所示数据。
2025-12-17 19:11:11
846
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅