
Semantic Kernel 如何按用户输入把请求路由到 Ollama、LMStudio 与 OpenAI【免费下载链接】semantic-kernelIntegrate cutting-edge LLM technology quickly and easily into your apps项目地址: https://gitcode.com/GitHub_Trending/se/semantic-kernel当你同时接入了多个大模型服务本地跑的 Ollama 或 LMStudio以及云端 OpenAI就需要一个机制决定这一条用户输入交给哪个服务。Semantic Kernel 的 AI Model Router 示例给出了完整的做法用不同的 Connector 为每个服务注册一个命名 Chat Completion 服务再根据用户输入中的关键词选定服务 ID把该 ID 放进PromptExecutionSettings.ServiceId让 Kernel 把这次调用定向到对应服务。示例的前提是 .NET 10对 LMStudio 和 Ollama示例直接复用 OpenAI Connector因为两者兼容 OpenAI API。示例用了哪些 Semantic Kernel 机制README 中声明了示例用到的两个特性对应到代码里是Chat Completion Service通过 OpenAI Connector 实现 生成响应LMStudio 和 Ollama 都走这个 ConnectorOllama 则有独立的 OllamaChatCompletionService。Filters注册一个IPromptRenderFilterSelectedServiceFilter.cs在提示词渲染时把本次实际选中的服务 ID 打印到控制台。这一步既是日志也是后面验证路由是否生效的依据。按三个提供方配置示例示例用 .NET Secret Manager 管理密钥避免把凭据提交进仓库。只需配置你实际要用的服务示例会按配置自动启停对应 Connector。以下三个就是标题场景所需的最小配置# OpenAIAPI Key 必填模型 ID 不设置时默认 gpt-4o dotnet user-secrets set OpenAI:ApiKey .. api key .. dotnet user-secrets set OpenAI:ChatModelId .. chat completion model .. # LMStudio端点不设置时示例默认值为 http://localhost:1234 dotnet user-secrets set LMStudio:Endpoint .. endpoint .. # Ollama模型 ID 必填端点不设置时代码内默认 http://localhost:11434 dotnet user-secrets set Ollama:ModelId .. model id .. dotnet user-secrets set Ollama:Endpoint .. endpoint ..命令中的.. api key ..、.. model id ..、.. endpoint ..是文档给出的占位写法替换成你自己的值。README 的完整配置清单里还有AzureOpenAI、AzureAIInference、Onnx等可选项Program.cs 对每一组配置都是设置了才注册不配置就不影响本次任务。配置生效后Program.cs 的注册逻辑是LMStudio:Endpoint非空时用AddOpenAIChatCompletion注册服务 ID 为lmstudiomodelId固定传N/A——LMStudio 的模型是在它的界面列表里预先选好的不走这里apiKey传null。Ollama:ModelId非空时用AddOllamaChatCompletion注册服务 ID 为ollama端点缺省时回落到http://localhost:11434。OpenAI:ApiKey非空时用AddOpenAIChatCompletion注册服务 ID 为openaimodelId缺省为gpt-4o。同时注册过滤器services.AddSingletonIPromptRenderFilter(new SelectedServiceFilter());运行示例并验证路由结果在示例目录下构建并运行dotnet build dotnet run在 IDE 中直接按F5也可以README 两种都说明了。启动时控制台会先打印 AI Services Added 随后逐行列出实际注册成功的服务例如• LMStudio - Use lmstudio in the prompt. • Ollama - Use ollama in the prompt. • OpenAI Added - Use openai in the prompt.哪些行出现取决于你配置了哪些服务。如果某个服务没出现在列表里说明对应的 user-secrets 配置没被读到回到上一步检查键名。进入交互循环后输入里带上服务 ID 关键词请求就会被路由到对应服务。每次调用前SelectedServiceFilter会先打印选中的服务 ID文档示例输出User ollama, what is Jupiter? Keep it simple. Selected service id: ollama Assistant Jupiter is a giant planet in our solar system known for being the largest and most massive...判断标准就两条黄色行Selected service id: ...是否等于你指定的服务响应是否流式打印在Assistant 之后。README 还附了一整段 Ollama / LMStudio / OpenAI 三种说法下 Jupiter 问题的示例对话注意那是文档示例文本不同模型版本返回的内容不会一致。输入一行空消息即退出程序。路由规则与示例的边界路由逻辑在 CustomRouter.cs规则要按文档理解不要外推按serviceIds列表顺序遍历用大小写不敏感的包含匹配IndexOfCurrentCultureIgnoreCase输入中出现哪个服务 ID 就用哪个。匹配不到任何关键词时回落到列表里的第一个服务。serviceIds的顺序就是 Program.cs 中注册代码块的先后顺序所以默认落到哪个服务取决于你的配置顺序。README 和代码注释都明确这个关键词匹配只是演示用途真实场景文档建议换用更复杂的路由机制例如用另一个本地模型根据用户输入或其他条件决定用哪个服务。由于是包含匹配服务 ID 之间不能互相包含否则先匹配到的会抢先命中示例的 IDlmstudio、ollama、openai互不包含是安全的。另外两点适用条件LMStudio 要求模型已在其界面中预选所以注册时modelId是N/AOllama 要求对应端点默认http://localhost:11434上已经拉取并运行着Ollama:ModelId指定的模型。示例工程的 AIModelRouter.csproj 目标框架为net10.0并直接引用了Connectors.Ollama等连接器项目。继续延伸如果想在路由中增加更多服务README 指出可以改用任意其他 Connector 组合或任何 OpenAI 兼容 API 的模型提供方——照 Program.cs 里配置非空才注册 服务 ID 加入serviceIds的模式补一段即可。若需要替换关键词匹配参考对象就是 CustomRouter.GetService 这一处。【免费下载链接】semantic-kernelIntegrate cutting-edge LLM technology quickly and easily into your apps项目地址: https://gitcode.com/GitHub_Trending/se/semantic-kernel创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考