当前位置: 首页 > news >正文

【项目记录】QLLMChat(模型代码 输出+渲染)

这是什么

Ollama本地模型
本地大模型对话客户端
WPF代码 生成+预览
自定义System提示词

https://github.com/quxingbai/QLLMChat

示例

测试下来Coder模型更好用一些
image

使用

目前支持直接输出WPF UI 也可以切换到代码查看
image
前提是模型输出的内容是正确的。
它们训练可能使用了大量的Html,然后让它输出WPF控件的时候就很容易搞混某些属性,圆角 或者默认显示的问题本之类的。

它的原理就是通过提示词 让模型必须输出那些指定的格式
就像这样 它每次输出需要渲染的Xaml代码都会被 QLLMRender 包裹,然后Type指定代码类型
image

image

比如说到一些难实现的功能,它就有很大概率失败...
image
因为代码是这么写的....
image
就因为提示词里的这一句。所以说目前的难点在于提示词的作用
image

所以很多时候都需要一些模板

具体实现上

由于模型输出都是Markdown,所以引用了 Markdig.Wpf.MarkdownViewer 的Markdown渲染。
但是由于需要渲染WPF 或者其他的什么东西,所以就得重写某一部分功能。
这里的重写后的主体代码是Copilot写的 很好用,稍微有些细节 渲染失败后怎么办,渲染出来的东西如何放置稍微改一下就跑起来了。

   private string HandleMarkdownChanged(string markdown){CancelPendingInject();if (markdown is null)markdown = string.Empty;// 匹配所有完整的 <QLLMRender ...>...</QLLMRender> 块var matches = Regex.Matches(markdown, @"<QLLMRender\b([^>]*)>(.*?)</QLLMRender>", RegexOptions.IgnoreCase | RegexOptions.Singleline);var renderItems = new List<(string Id, RenderItem Item)>();var sanitizedBuilder = markdown;int indexShift = 0; // not strictly needed since we do Replace with Regex laterint idCounter = 0;foreach (Match match in matches)
...

配置

在APP的Startup里进行了依赖注入,实现几个关键接口就能替换目前的数据源

        protected override void OnStartup(StartupEventArgs e){var service = new ServiceCollection();//这里是数据库的注入,可以根据需要替换成其他数据库实现//比如目前除了Json还有一个内存数据库MemoryDatabase,后续也可以添加其他数据库实现service.AddSingleton<IChatDataBase, JsonDatabase>(p =>{return new JsonDatabase("./chatdata.json");});//这里是聊天模型的注入,可以根据需要替换成其他聊天模型实现,实现了IMultiChatTypes接口的聊天模型会在界面上显示不同的模型,// public class OllamaChat : IChatModel, IMultiChatTypesservice.AddSingleton<IChatModel, OllamaChat>();service.AddSingleton<IDispatcherProvider, AppDispatcher>();service.AddTransient<MainWindowViewModel>();service.AddTransient<MainChatPageViewModel>();service.AddTransient<MainWindow>();ServiceProvider serviceProvider = service.BuildServiceProvider();var window = serviceProvider.GetRequiredService<MainWindow>();window.Show();base.OnStartup(e);}
http://www.jsqmd.com/news/655444/

相关文章:

  • MediaPipe Holistic实战:用这个镜像快速搭建你的第一个动作分析应用
  • SDC设计约束进阶:工作条件与功耗约束的实战解析
  • 前端渲染模式对比
  • Cursor Pro完全激活终极指南:如何免费解锁AI编程高级功能
  • BetterNCM-Installer:网易云音乐PC版插件管理终极指南
  • 总结国内做的好的共享实验室,支招如何选择性价比高的服务 - myqiye
  • 2026性价比高的PE管制造商推荐,看看服务好的优质厂商有哪些 - 工业品牌热点
  • 别再死记硬背公式了!用Python+NumPy手把手带你理解B样条曲线的局部支撑性
  • SITS2026独家:AI简历生成器性能压测报告(10万+并发请求/秒),当模型幻觉遇上岗位JD歧义,这4个防御性提示链设计救了命
  • 【Grey Hack】渗透利器:一键式本地权限提升脚本解析
  • HDPE管生产企业交货快的推荐,看看哪家性价比更高 - 工业品网
  • Chrome二维码插件终极指南:浏览器内快速生成与安全解析的完整教程
  • MicMute:Windows麦克风静音控制的终极解决方案
  • 聊聊日本企业重组知名律师,哪家口碑出众 - 工业推荐榜
  • 支招涉日纠纷争议代理律师选择,哪家性价比更高些? - mypinpai
  • 从二维影像到三维世界:OpenDroneMap开源无人机测绘实战指南
  • 别再纠结硬件还是软件了!手把手教你用STM32的GPIO模拟I2C驱动AHT20温湿度传感器
  • 从USB-TTL到RS232转换器:手把手教你玩转电脑与单片机的‘对话’
  • ESP-SR语音识别框架实战:嵌入式设备智能语音交互解决方案
  • 每日极客日报 · 2026年04月17日
  • 剖析安徽能做飘窗拆除一条龙服务的公司,靠谱吗 - myqiye
  • C#借助InTheHand.Net.Bluetooth实现蓝牙设备发现与数据接收实战
  • 快餐配送公司排名大揭秘,看看哪些是用户口碑认可的专业公司 - 工业设备
  • 从TJA1043到AUTOSAR:深入理解CanTrcv如何管理CAN收发器的休眠与唤醒
  • 突破车牌识别瓶颈:CCPD数据集如何解决真实世界中的复杂场景挑战
  • Llama Factory快速部署指南:小白也能玩转大模型训练
  • 如何在Windows 7上运行最新版Blender:终极兼容性解决方案
  • 免费开源视频监控系统ZoneMinder:三步打造专业级智能安防方案
  • 免费音频转换器终极指南:5分钟掌握fre:ac无损格式转换
  • 顺序执行与并行执行:Harness 编排策略