From 3653d23ee1baccb9037a2da9eb64840d0b283108 Mon Sep 17 00:00:00 2001 From: bicijinlian Date: Mon, 28 Jul 2025 23:45:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OllamaStudy.UseExtensionsAI/Startup.cs | 17 +++- OllamaStudy.UseExtensionsAI/UseOpenAITest.cs | 90 +++++++++++++------- OllamaStudy.UseSemanticKernel/UnitTest1.cs | 11 --- 3 files changed, 72 insertions(+), 46 deletions(-) delete mode 100644 OllamaStudy.UseSemanticKernel/UnitTest1.cs diff --git a/OllamaStudy.UseExtensionsAI/Startup.cs b/OllamaStudy.UseExtensionsAI/Startup.cs index 19df95f..9e5d4c6 100644 --- a/OllamaStudy.UseExtensionsAI/Startup.cs +++ b/OllamaStudy.UseExtensionsAI/Startup.cs @@ -10,9 +10,10 @@ using Microsoft.Extensions.Hosting; using OllamaSharp; -using OllamaStudy.Core; - using OpenAI; +using OpenAI.Chat; + +using OllamaStudy.Core; namespace OllamaStudy.UseExtensionsAI { @@ -90,11 +91,21 @@ namespace OllamaStudy.UseExtensionsAI var openAIClientOptions = new OpenAIClientOptions() { - Endpoint = new Uri("http://localhost:11434/v1") + Endpoint = new Uri(new Uri(options.OllamaServerUrl),"v1") }; return new OpenAIClient(new ApiKeyCredential("nokey"),openAIClientOptions); + }) + .AddScoped(provider => + { + var options = provider.GetRequiredService>().CurrentValue; + + var openAIClientOptions = new OpenAIClientOptions() + { + Endpoint = new Uri(new Uri(options.OllamaServerUrl),"v1") + }; + return new ChatClient(options.Model,new ApiKeyCredential("nokey"),openAIClientOptions); }); } #endregion diff --git a/OllamaStudy.UseExtensionsAI/UseOpenAITest.cs b/OllamaStudy.UseExtensionsAI/UseOpenAITest.cs index 76ef483..4a07650 100644 --- a/OllamaStudy.UseExtensionsAI/UseOpenAITest.cs +++ b/OllamaStudy.UseExtensionsAI/UseOpenAITest.cs @@ -5,39 +5,65 @@ using Xunit.Abstractions; using OpenAI; using OpenAI.Chat; -namespace OllamaStudy.UseExtensionsAI +namespace OllamaStudy.UseExtensionsAI; + +/// +/// Ollama兼容OpenAI接口,可以直接使用OpenAI的SDK调用 +/// +public class UseOpenAITest { - public class UseOpenAITest + private ITestOutputHelper _output; + private IOptionsMonitor _ollamaOptionsMonitor; + private OpenAIClient _defaultOpenAIClient; + private ChatClient _chatClient; + + public UseOpenAITest(ITestOutputHelper outputHelper, OpenAIClient defaultOpenAIClient, IOptionsMonitor ollamaOptionsMonitor) { - private ITestOutputHelper _output; - - public UseOpenAITest(ITestOutputHelper outputHelper) - { - _output = outputHelper; - } - - [Fact] - public void OpenAI_Test() - { - ChatClient openAIClient = new ChatClient - ( - model: ModelSelecter.ModelWithTool, - credential: new ApiKeyCredential("localhost"), - options: new OpenAIClientOptions() - { - Endpoint = new Uri("http://localhost:11434/v1"), - - } - ); - - var mesages = new List() - { - ChatMessage.CreateUserMessage(new ChatMessageContent("你好")), - }; - - ClientResult result = openAIClient.CompleteChat(mesages); - - _output.WriteLine(result.Value.Content[0].Text); - } + _output = outputHelper; + _defaultOpenAIClient = defaultOpenAIClient; + _ollamaOptionsMonitor = ollamaOptionsMonitor; + _chatClient = _defaultOpenAIClient.GetChatClient(_ollamaOptionsMonitor.CurrentValue.Model); + } + + /// + /// 从OpenAIClient获取各种业务Client + /// + [Fact] + public void GetClients_Test() + { + Assert.NotNull(_defaultOpenAIClient); + + //音频客户端 + var audioClient = _defaultOpenAIClient.GetAudioClient(_ollamaOptionsMonitor.CurrentValue.Model); + Assert.NotNull(audioClient); + + //聊天客户端 + var chatClient = _defaultOpenAIClient.GetChatClient(_ollamaOptionsMonitor.CurrentValue.Model); + Assert.NotNull(chatClient); + + //自动补全客户端 + var completionClient = _defaultOpenAIClient; + Assert.NotNull(completionClient); + + //模型客户端 + var modelClient = _defaultOpenAIClient.GetOpenAIModelClient(); + Assert.NotNull(modelClient); } + + #region 模型 + + /// + /// 列出模型 测试 + /// + [Fact] + public void List_Models_Test() + { + var modelClient = _defaultOpenAIClient.GetOpenAIModelClient(); + + OpenAI.Models.OpenAIModelCollection openAIModelCollection = modelClient.GetModels().Value; + + _output.WriteLine($"Ollama服务中,共有{openAIModelCollection.Count()}个模型,包括[{string.Join(",",openAIModelCollection)}]"); + } + #endregion + } diff --git a/OllamaStudy.UseSemanticKernel/UnitTest1.cs b/OllamaStudy.UseSemanticKernel/UnitTest1.cs deleted file mode 100644 index e093b19..0000000 --- a/OllamaStudy.UseSemanticKernel/UnitTest1.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace OllamaStudy.UseSemanticKernel -{ - public class UnitTest1 - { - [Fact] - public void Test1() - { - - } - } -}