深蓝词库转换 LLM 词频生成配置界面:WinForm 与 Avalonia 双端 Endpoint / API Key / Model 配置实现解析
桌面应用CLI开发工具【免费下载链接】imewlconverter”深蓝词库转换“ 一款开源免费的输入法词库转换程序项目地址https://gitcode.com/gh_mirrors/im/imewlconverter点击查看免费下载导读深蓝词库转换IME WL Converter在将词频生成从搜索引擎结果数估算切换到 LLM API 之后需要在 WindowsWinForm与 macOSAvalonia两套图形界面中提供大语言模型的连接参数配置能力。本文基于仓库中 llm-configuration-ui/spec.md 需求规格结合 LlmConfig.cs、WordRankGenerateForm 与 WordRankGenerateWindow.axaml 的源码实现完整讲解三个核心配置项API 地址、API Key、模型名称在双端的控件设计、API Key 掩码显示机制以及配置从界面到词频生成的底层调用链。读完本文你将掌握该功能的界面规范、字段默认值与校验逻辑、配置生效原理并可直接对照源码复现或扩展这套 LLM 配置界面。一、需求背景为什么词频生成需要一个 LLM 配置界面在引入 LLM 之前该项目通过百度和谷歌的搜索结果数来估算词频。根据 design.md 的记录这类方案存在两个致命问题搜索引擎页面结构多变解析逻辑经常失效容易触发反爬虫机制导致词频功能不稳定。为此项目决定引入 OpenAI 兼容协议的 LLM API 作为词频生成来源并同步移除BaiduWordRankGenerater与GoogleWordRankGenerater详见 word-rank-management/spec.md。而 LLM 服务是高度个性化的不同用户使用不同的服务商OpenAI、DeepSeek、本地 Ollama / LM Studio 等其 API 地址、密钥和模型各不相同。这就催生了本 spec 的核心诉求——必须在图形界面中提供 LLM 连接参数的配置能力否则用户无法将自家模型接入词频生成流程。本 spec 定义了两条刚性需求LLM 参数配置界面GUIWinForm 与 Avalonia (Mac) 界面都必须提供 Endpoint、API Key、Model Name 三类输入控件API Key 屏蔽显示任何时候显示 API Key 都必须以掩码星号隐藏真实内容防止泄露。二、LLM 配置模型Endpoint、API Key、Model 三要素界面上的三个输入框最终都会落进核心配置类 LlmConfig.cs。该类的字段与默认值定义如下配置项属性名默认值含义API 地址ApiEndpointhttps://api.openai.com/v1/chat/completionsOpenAI 兼容的 Chat Completion 接口地址API KeyApiKey空字符串服务商签发的密钥请求时以Bearer方式携带模型名称Modelgpt-3.5-turbo调用时使用的模型标识在 UI 层面LlmConfig中三个属性的默认值直接对应了界面上输入框的初始文本WinForm 端通过 WordRankGenerateForm.cs 在点击确定时以输入框内容构造LlmConfigAvalonia 端则在 WordRankGenerateWindow.axaml 中把默认地址https://api.openai.com/v1/chat/completions和默认模型gpt-3.5-turbo直接写在控件的Text属性里而 API Key 默认留空由用户填写。2.1 API 地址的宽容设计GetFullApiEndpoint值得注意的一个细节用户填写的 Endpoint 不一定是完整路径。LlmWordRankGenerator.cs 中的GetFullApiEndpoint()方法会对用户输入做归一化处理若以/v1/chat/completions结尾则原样使用若以/v1结尾则自动补上/chat/completions其余情况统一追加/v1/chat/completions。这意味着用户既可以粘贴完整的接口 URL也可以只填服务商域名根地址如https://custom-api.example.com系统会自动补齐路径。这一逻辑在 LlmWordRankGeneraterTest.cs 中有五组测试用例覆盖。三、WinForm 端配置界面实现3.1 界面控件布局WinForm 端由WordRankGenerateForm承载 LLM 配置。从设计器代码 WordRankGenerateForm.Designer.cs 可以还原出完整的控件结构单选按钮rbtnLlm文本LLM生成(推荐)作为 LLM 模式的开关选中后才启用下方三个输入框txtLlmEndpointAPI 地址输入框txtLlmKeyAPI Key 输入框关键属性为PasswordChar *txtLlmModel模型名称输入框另有rbtnDefault默认词频、rbtnCalc按字频计算两个并列模式以及cbxForceUseNewRank强制使用新词频复选框。界面在WordRankGenerateForm窗体标题词频生成设置ClientSize为 430×280中居中展示。3.2 保存配置的交互逻辑根据 spec 的场景描述当用户在 WinForm 窗口中输入了有效的 Endpoint、Key 和 Model 并点击保存那么系统必须持久化这些设置以便下次使用。对应实现位于 WordRankGenerateForm.cs 的btnOK_Click事件private void btnOK_Click(object sender, EventArgs e) { if (rbtnDefault.Checked) { wordRankGenerator new DefaultWordRankGenerator { DefaultRank (int)numRank.Value }; } else if (rbtnLlm.Checked) { wordRankGenerator new LlmWordRankGenerator(new LlmConfig { ApiEndpoint txtLlmEndpoint.Text, ApiKey txtLlmKey.Text, Model txtLlmModel.Text }); } DialogResult DialogResult.OK; }这里有两个值得注意的实现细节模式互斥三种生成方式默认词频 / LLM 生成 / 按字频计算通过 RadioButton 互斥代码按选中分支构造不同的IWordRankGenerator实现。选择LLM 生成时输入框内容被封装成LlmConfig并传入LlmWordRankGenerator。持久化的落地方式从源码看wordRankGenerator是WordRankGenerateForm的static字段第 27 行即配置在进程生命周期内被保留下次打开词频生成窗口时仍能通过SelectedWordRankGenerator取回上次的选择。spec 中的持久化以便下次使用在代码层面由静态字段承担同时窗体Load事件会恢复上一次的默认/LLM 选择状态第 55-63 行。3.3 输入框的联动启用仅选中LLM 生成时三个输入框才可编辑防止用户误在其它模式下填写无效配置。这一逻辑在UpdateLlmControls()第 70-76 行中实现并在窗体加载与rbtnLlm_CheckedChanged事件中调用private void UpdateLlmControls() { var enabled rbtnLlm.Checked; txtLlmEndpoint.Enabled enabled; txtLlmKey.Enabled enabled; txtLlmModel.Enabled enabled; }四、Avalonia (Mac) 端配置界面实现4.1 XAML 界面结构Mac 端使用 Avalonia UI对应窗口为 WordRankGenerateWindow.axaml。其 LLM 配置面板500×400 的词频生成设置窗口与 WinForm 端保持一致的三个输入项控件类型默认值 / 关键属性txtLlmEndpointTextBoxTexthttps://api.openai.com/v1/chat/completionstxtLlmKeyTextBoxPasswordChar*txtLlmModelTextBoxTextgpt-3.5-turboXAML 中还展示了与 WinForm 端等价的模式选择区rbtnDefault默认词频附带NumericUpDown默认词频值范围 1999999、rbtnLlmLLM 生成、rbtnCalc计算词频以及cbxForceUseNewRank强制使用新词频。与 WinForm 端用 C# 代码控制控件启停不同Avalonia 端使用 XAML 绑定实现联动——LLM 面板的StackPanel通过IsVisible{Binding #rbtnLlm.IsChecked}直接与单选按钮的勾选状态绑定第 28 行选中即展开、取消即隐藏交互更简洁。4.2 确定按钮的配置应用逻辑根据 spec 场景当用户在 Mac 版词频生成窗口中输入了有效的 Endpoint、Key 和 Model 并点击确定那么系统必须应用这些设置并生成词频。对应实现位于 WordRankGenerateWindow.axaml.cs 的BtnOK_Clickprivate void BtnOK_Click(object? sender, RoutedEventArgs e) { if (rbtnDefault.IsChecked true) { SelectedMode default; DefaultRank (int)(numRank.Value ?? 1); } else if (rbtnLlm.IsChecked true) { SelectedMode llm; } else if (rbtnCalc.IsChecked true) { SelectedMode calc; } ForceOverride cbxForceUseNewRank.IsChecked ?? false; Close(true); }窗口通过SelectedModedefault/llm/calc、DefaultRank、ForceOverride三个公开属性向外暴露用户选择。主窗口 ViewModel 的ShowRankGenerate()方法见 MainWindowViewModel.cs以模态对话框方式打开该窗口并在返回true后读取window.SelectedMode更新状态栏提示词频生成模式已设置为: …从而让设置进入后续的词频生成流程。五、API Key 屏蔽显示防泄露的关键实现spec 第二条需求明确当用户打开配置窗口查看已保存的设置那么API Key 文本框必须以密码字符显示内容。这条需求在两个平台都有直接对应的源码实现WinForm 端WordRankGenerateForm.Designer.cs 中txtLlmKey.PasswordChar *所有输入内容以星号呈现Avalonia 端WordRankGenerateWindow.axaml 中PasswordChar*效果一致。PasswordCharWinForms与PasswordCharAvalonia属性只影响显示层——界面回显时以掩码字符替代真实内容避免旁人窥屏泄露密钥而控件内部持有的Text属性仍是用户输入的真实值在点击确定时会被完整读入LlmConfig.ApiKey并用于请求鉴权。也就是说查看已保存的设置时 Key 始终以星号显示但程序内部可正常取用这正是该需求防泄露而不影响功能的设计意图。六、配置如何生效从界面到词频生成的完整调用链界面上填写的三个参数最终如何驱动词频生成整个链路可以概括为四步界面构造配置对象WinForm 的btnOK_Click或 Avalonia 的BtnOK_Click收集输入框内容构造LlmConfig或记录SelectedMode llm选择生成器实现LlmConfig被包装进LlmWordRankGenerator它实现IWordRankGenerator接口见 IWordRankGenerator.cs。该接口在本次重构中新增了批量方法GenerateRanksAsync(IReadOnlyListWordEntry, CancellationToken)专门服务 LLM 这类请求成本高、适合批量的生成器构造请求GenerateRanksAsync将词条按BatchSize 50切分为多个批次LlmWordRankGenerator.cs每个批次经ProcessBatchAsync填充内置 Prompt 并调用BuildRequestBodyJson生成请求体Config.ApiEndpoint经GetFullApiEndpoint()归一化后作为请求 URLConfig.ApiKey以Authorization: Bearer key请求头发送Config.Model写入请求体model字段解析并回填词频响应经ParseRanks双重解析先尝试System.Text.Json解析 JSON 对象失败则回退到词: 数字正则匹配将数字映射回对应词语并更新WordEntry.Rank。其中内置的系统级 Prompt 与请求模板都定义在生成器源码中第 18-25 行系统提示要求 LLM 扮演语言专家、为每个词给出 11000000 之间的整数评分用户提示模板要求仅返回 JSON 格式Key 是词语Value 是评分数字请求体模板固定temperature: 0.3并声明response_format为json_object以降低解析难度。值得补充的边界行为GenerateRanksAsync开头会检查Config.ApiKey若为空字符串则直接原样返回词条不调用任何 API此外当词条Rank 0或ForceUse为真时才纳入待评分队列——这正好对应界面上强制使用新词频覆盖原有词频复选框的语义。七、源码验证测试如何锁定配置与解析行为仓库中的单元测试为上述行为提供了可复现的验证依据集中在 LlmWordRankGeneraterTest.csTestGetFullApiEndpoint覆盖五种 Endpoint 输入完整路径、/v1、/v1/、裸域名、带斜杠域名验证GetFullApiEndpoint()的补齐逻辑TestParseRank/TestParseRanksJson验证标准 OpenAI 响应结构中choices[0].message.content内嵌 JSON 对象如{苹果: 850000, 香蕉: 700000}的解析TestParseRankRegex/TestParseRanksRegex验证 LLM 返回非纯 JSON带说明文字或换行的词: 数字行时正则回退解析仍能正确提取词频。这些测试从侧面确认了一个对配置界面有直接影响的结论只要用户在界面填写的 Endpoint / Key / Model 能被构造为合法的LlmConfig后续的批量请求、鉴权与结果解析都是自洽且可测试的。八、配置项速查与使用建议综合 spec 与源码双端 LLM 配置界面的完整参数速查如下界面字段属性映射WinForm 控件Avalonia 控件默认值说明API 地址LlmConfig.ApiEndpointtxtLlmEndpointtxtLlmEndpointhttps://api.openai.com/v1/chat/completions支持域名根地址系统自动补齐/v1/chat/completionsAPI KeyLlmConfig.ApiKeytxtLlmKeyPasswordChar*txtLlmKeyPasswordChar*空仅显示层掩码程序内部取真实值为空时跳过 LLM 调用模型名称LlmConfig.ModeltxtLlmModeltxtLlmModelgpt-3.5-turbo可填 OpenAI / DeepSeek 或本地 Ollama / LM Studio 提供的模型名实操建议接入 OpenAI 兼容服务将 Endpoint 填为服务商提供的 Chat Completion 地址不填完整路径亦可Key 填入密钥Model 填该服务商支持的模型名如deepseek-chat、qwen2.5等三者缺一不可验证配置勾选LLM 生成后输入框变为可编辑保存后在词频生成流程中观察返回词频若返回词频仍为 0可检查 Key 是否为空、Endpoint 能否访问本地模型若使用本地 Ollama / LM StudioEndpoint 通常形如http://localhost:11434/v1系统同样会自动补齐路径。如需进一步了解批量请求、Prompt 模板与响应解析的底层细节可继续阅读 LlmWordRankGenerator.cs 及批量词频生成规格 llm-word-rank-generation/spec.md。赞分享桌面应用CLI开发工具【免费下载链接】imewlconverter”深蓝词库转换“ 一款开源免费的输入法词库转换程序项目地址https://gitcode.com/gh_mirrors/im/imewlconverter点击查看免费下载相关推荐基于 Anthropic-Cybersecurity-Skills 的 REST API 批量赋值Mass Assignment漏洞挖掘实战指南基于 Anthropic Cybersecurity Skills 的 REST API 批量赋值Mass Assignment漏洞挖掘实战指南 本指南以桌面应用CLI开发工具深蓝词库转换跨平台输入法词库转换工具全面解析深蓝词库转换跨平台输入法词库转换工具全面解析 在跨输入法迁移或多设备同步词库时格式不兼容往往成为用户痛点。深蓝词库转换作为一款开源免费工具能够实现20余种桌面应用CLI开发工具深蓝词库转换 macOS 版完全使用指南Avalonia 图形界面下如何高效管理输入法词库深蓝词库转换 macOS 版完全使用指南Avalonia 图形界面下如何高效管理输入法词库 深蓝词库转换 IME WL Converter是一款开源免费的桌面应用CLI开发工具上一篇generative-ai-for-beginners 增强功能路线图从安全修复到代码质量体系的落地实践下一篇MaxViT与ConvNeXt的完美结合maxxvitv2_rmlp_base_rw_384.sw_in12k_ft_in1k技术解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

3 条 pnpm 命令跑通 DeepChat:多模型 AI Agent 客户端部署最短路径

3 条 pnpm 命令跑通 DeepChat:多模型 AI Agent 客户端部署最短路径

3 条 pnpm 命令跑通 DeepChat:多模型 AI Agent 客户端部署最短路径 【免费下载链接】deepchat 🐬DeepChat - A smart assistant that connects powerful AI to your personal world 项目地址: https://gitcode.com/GitHub_Trending/dee/deepchat …

2026/9/24 14:27:51 阅读更多 →
TVM Relay 类型系统完全指南:从静态类型、形状依赖类型到类型关系与 ADT

TVM Relay 类型系统完全指南:从静态类型、形状依赖类型到类型关系与 ADT

编译器深度学习模型优化 【免费下载链接】tvm Open deep learning compiler stack for cpu, gpu and specialized accelerators 项目地址: https://gitcode.com/gh_mirrors/tvm7/tvm 点击查看 免费下载 Relay 是 Apache TVM 中负责表达深度学习模型的计算图 IR&…

2026/9/24 14:26:50 阅读更多 →
PaddleNLP BigBird 建模模块深度解析:块稀疏注意力架构与全部任务头源码指南

PaddleNLP BigBird 建模模块深度解析:块稀疏注意力架构与全部任务头源码指南

人工智能大模型预训练微调LoRARLHF强化学习分布式训练 【免费下载链接】PaddleNLP Easy-to-use and powerful LLM and SLM library with awesome model zoo. 项目地址: https://gitcode.com/gh_mirrors/pa/PaddleNLP 点击查看 免费下载 BigBird 是一类基于块稀疏注…

2026/9/24 14:26:50 阅读更多 →

最新新闻

RT-Thread RA6M3-HMI-Board BSP 实战指南:RA6M3 人机交互开发板的快速上手与外设进阶配置

RT-Thread RA6M3-HMI-Board BSP 实战指南:RA6M3 人机交互开发板的快速上手与外设进阶配置

操作系统嵌入式物联网嵌入式OSRTOS 【免费下载链接】rt-thread RT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/ 项目地址: https://gitcode.com/gh_mirrors/rt/rt-thread 点击查看 免费下载 本篇指南…

2026/9/25 16:56:21 阅读更多 →
react-native-code-push 完全指南:为 React Native 应用接入 CodePush 动态更新

react-native-code-push 完全指南:为 React Native 应用接入 CodePush 动态更新

移动开发 【免费下载链接】react-native-code-push React Native module for CodePush 项目地址: https://gitcode.com/gh_mirrors/re/react-native-code-push 点击查看 免费下载 本指南以仓库根目录 README.md 为主体脉络,系统讲解 react-native-code-…

2026/9/25 16:56:21 阅读更多 →
Flecs 层级系统(Hierarchies)完全指南:ChildOf 与 Parent 两种存储、递归遍历与查询优化

Flecs 层级系统(Hierarchies)完全指南:ChildOf 与 Parent 两种存储、递归遍历与查询优化

游戏开发 【免费下载链接】flecs A fast entity component system (ECS) for C & C 项目地址: https://gitcode.com/gh_mirrors/fl/flecs 点击查看 免费下载 层级结构是 Flecs 这个 C/C ECS(Entity Component System)引擎中最常用的组织…

2026/9/25 16:56:21 阅读更多 →
VoltAgent Working Memory 实战指南:跨会话持久化 Agent 上下文的三格式配置与源码解析

VoltAgent Working Memory 实战指南:跨会话持久化 Agent 上下文的三格式配置与源码解析

人工智能AI AgentAgent 框架后端多智能体RAG工具调用Agent 记忆 【免费下载链接】voltagent AI Agent Engineering Platform built on an Open Source TypeScript AI Agent Framework 项目地址: https://gitcode.com/gh_mirrors/vo/voltagent 点击查看 免费下载 Wo…

2026/9/25 16:56:20 阅读更多 →
实战案例:Agent Sprite Forge 打造 Unity WebGL 生存类小游戏全流程

实战案例:Agent Sprite Forge 打造 Unity WebGL 生存类小游戏全流程

实战案例:Agent Sprite Forge 打造 Unity WebGL 生存类小游戏全流程 【免费下载链接】agent-sprite-forge Agent Skill for generating 2D sprite sheets and map, transparent PNG frames, and animated GIFs from prompts. 项目地址: https://gitcode.com/gh_mi…

2026/9/25 16:55:20 阅读更多 →
Minitron剪枝工作流:Model Optimizer把LLM参数量砍掉40%的全流程

Minitron剪枝工作流:Model Optimizer把LLM参数量砍掉40%的全流程

Minitron剪枝工作流:Model Optimizer把LLM参数量砍掉40%的全流程 【免费下载链接】Model-Optimizer A unified library of SOTA model optimization techniques like quantization, distillation, pruning, neural architecture search, speculative decoding, etc.…

2026/9/25 16:55:20 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →