
桌面应用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),仅供参考