From 9215ae3f1ff6787a99bf658aa71fea8f19501716 Mon Sep 17 00:00:00 2001 From: bicijinlian Date: Tue, 29 Jul 2025 21:36:06 +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 --- .../{GloabolUsing.cs => GlobalUsing.cs} | 0 .../{GloabolUsing.cs => GlobalUsing.cs} | 0 .../{GloabolUsing.cs => GlobalUsing.cs} | 0 .../{GloabolUsing.cs => GlobalUsing.cs} | 2 - OllamaStudy.UseExtensionsAI/OpenAIAPITest.cs | 155 ++++++++++++++++++ OllamaStudy.UseExtensionsAI/OpenAISdkTest.cs | 106 ++++++++++-- OllamaStudy.UseExtensionsAI/Startup.cs | 17 +- .../{GloabolUsing.cs => GlobalUsing.cs} | 0 .../{GloabolUsing.cs => GlobalUsing.cs} | 0 .../{GloabolUsing.cs => GlobalUsing.cs} | 0 .../{GloabolUsing.cs => GlobalUsing.cs} | 0 11 files changed, 245 insertions(+), 35 deletions(-) rename OllamaStudy.CApp/{GloabolUsing.cs => GlobalUsing.cs} (100%) rename OllamaStudy.Core/{GloabolUsing.cs => GlobalUsing.cs} (100%) rename OllamaStudy.CoreTest/{GloabolUsing.cs => GlobalUsing.cs} (100%) rename OllamaStudy.UseExtensionsAI/{GloabolUsing.cs => GlobalUsing.cs} (99%) create mode 100644 OllamaStudy.UseExtensionsAI/OpenAIAPITest.cs rename OllamaStudy.UseHttpClient/{GloabolUsing.cs => GlobalUsing.cs} (100%) rename OllamaStudy.UseHttpClientTest/{GloabolUsing.cs => GlobalUsing.cs} (100%) rename OllamaStudy.UseOllamaSharp/{GloabolUsing.cs => GlobalUsing.cs} (100%) rename OllamaStudy.UseSemanticKernel/{GloabolUsing.cs => GlobalUsing.cs} (100%) diff --git a/OllamaStudy.CApp/GloabolUsing.cs b/OllamaStudy.CApp/GlobalUsing.cs similarity index 100% rename from OllamaStudy.CApp/GloabolUsing.cs rename to OllamaStudy.CApp/GlobalUsing.cs diff --git a/OllamaStudy.Core/GloabolUsing.cs b/OllamaStudy.Core/GlobalUsing.cs similarity index 100% rename from OllamaStudy.Core/GloabolUsing.cs rename to OllamaStudy.Core/GlobalUsing.cs diff --git a/OllamaStudy.CoreTest/GloabolUsing.cs b/OllamaStudy.CoreTest/GlobalUsing.cs similarity index 100% rename from OllamaStudy.CoreTest/GloabolUsing.cs rename to OllamaStudy.CoreTest/GlobalUsing.cs diff --git a/OllamaStudy.UseExtensionsAI/GloabolUsing.cs b/OllamaStudy.UseExtensionsAI/GlobalUsing.cs similarity index 99% rename from OllamaStudy.UseExtensionsAI/GloabolUsing.cs rename to OllamaStudy.UseExtensionsAI/GlobalUsing.cs index 8bc0834..cbfd693 100644 --- a/OllamaStudy.UseExtensionsAI/GloabolUsing.cs +++ b/OllamaStudy.UseExtensionsAI/GlobalUsing.cs @@ -64,5 +64,3 @@ global using Xunit.Abstractions; global using Xunit.DependencyInjection; global using OllamaStudy.Core; - - diff --git a/OllamaStudy.UseExtensionsAI/OpenAIAPITest.cs b/OllamaStudy.UseExtensionsAI/OpenAIAPITest.cs new file mode 100644 index 0000000..523bf6f --- /dev/null +++ b/OllamaStudy.UseExtensionsAI/OpenAIAPITest.cs @@ -0,0 +1,155 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OllamaStudy.UseExtensionsAI +{ + /// + /// OpenAI的API 测试 + /// Ollama兼容OpenAI接口,可以直接使用OpenAI的SDK调用 + /// + public class OpenAIAPITest + { + private ITestOutputHelper _output; + private IOptionsMonitor _ollamaOptionsMonitor; + private OpenAIClient _defaultOpenAIClient; + private ChatClient _chatClient; + + public OpenAIAPITest(ITestOutputHelper outputHelper, OpenAIClient defaultOpenAIClient, IOptionsMonitor ollamaOptionsMonitor) + { + _output = outputHelper; + _defaultOpenAIClient = defaultOpenAIClient; + _ollamaOptionsMonitor = ollamaOptionsMonitor; + _chatClient = _defaultOpenAIClient.GetChatClient(_ollamaOptionsMonitor.CurrentValue.Model); + } + + #region 各种业务Client + /// + /// 从OpenAIClient获取各种业务 Client + /// + [Fact] + public void GetClients_Test() + { + #pragma warning disable OPENAI001 + Assert.NotNull(_defaultOpenAIClient); + + //音频客户端 + var audioClient = _defaultOpenAIClient.GetAudioClient(_ollamaOptionsMonitor.CurrentValue.Model); + Assert.NotNull(audioClient); + + //聊天客户端 + var chatClient = _defaultOpenAIClient.GetChatClient(_ollamaOptionsMonitor.CurrentValue.Model); + Assert.NotNull(chatClient); + + //嵌入客户端 + var embeddingClient = _defaultOpenAIClient.GetEmbeddingClient(_ollamaOptionsMonitor.CurrentValue.Model); + Assert.NotNull(embeddingClient); + + //图像客户端 + var imageClient = _defaultOpenAIClient.GetImageClient(_ollamaOptionsMonitor.CurrentValue.Model); + Assert.NotNull(imageClient); + + //微调客户端 + var moderationClient = _defaultOpenAIClient.GetModerationClient(_ollamaOptionsMonitor.CurrentValue.Model); + Assert.NotNull(moderationClient); + + //文件客户端 + var openAIFileClient = _defaultOpenAIClient.GetOpenAIFileClient(); + Assert.NotNull(openAIFileClient); + + //模型客户端 + var modelClient = _defaultOpenAIClient.GetOpenAIModelClient(); + Assert.NotNull(modelClient); + + //助手客户端(仅评估) + var assistantClient = _defaultOpenAIClient.GetAssistantClient(); + Assert.NotNull(assistantClient); + + //批量客户端(仅评估) + var batchClient = _defaultOpenAIClient.GetBatchClient(); + Assert.NotNull(batchClient); + + //评估客户端(仅评估) + var evaluationClient = _defaultOpenAIClient.GetEvaluationClient(); + Assert.NotNull(evaluationClient); + + //微调客户端(仅评估) + var FineTuningClient = _defaultOpenAIClient.GetFineTuningClient(); + Assert.NotNull(FineTuningClient); + + //响应客户端(仅评估) + var openAIResponseClient = _defaultOpenAIClient.GetOpenAIResponseClient(_ollamaOptionsMonitor.CurrentValue.Model); + Assert.NotNull(openAIResponseClient); + + //实时客户端(仅评估) +#pragma warning disable OPENAI002 + var realtimeClient = _defaultOpenAIClient.GetRealtimeClient(); + Assert.NotNull(realtimeClient); +#pragma warning restore OPENAI002 + + //向量存储客户端(仅评估) + var vectorStoreClient = _defaultOpenAIClient.GetVectorStoreClient(); + Assert.NotNull(vectorStoreClient); + +#pragma warning restore OPENAI001 + } + #endregion + + #region 音频 + #endregion + + #region 聊天 + #endregion + + #region 自动补全 + #endregion + + #region 嵌入 + #endregion + + #region 微调 + #endregion + + #region 文件 + #endregion + + #region 图像 + #endregion + + #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 + + #region 审查 + #endregion + + #region 助手测试版 + #endregion + + #region 线程数 + #endregion + + #region 留言 + #endregion + + #region 运行 + #endregion + + #region 已弃用-音频 + #endregion + } +} diff --git a/OllamaStudy.UseExtensionsAI/OpenAISdkTest.cs b/OllamaStudy.UseExtensionsAI/OpenAISdkTest.cs index a6809d6..d46b248 100644 --- a/OllamaStudy.UseExtensionsAI/OpenAISdkTest.cs +++ b/OllamaStudy.UseExtensionsAI/OpenAISdkTest.cs @@ -8,22 +8,22 @@ public class OpenAISdkTest private ITestOutputHelper _output; private IOptionsMonitor _ollamaOptionsMonitor; private OpenAIClient _defaultOpenAIClient; - private ChatClient _chatClient; public OpenAISdkTest(ITestOutputHelper outputHelper, OpenAIClient defaultOpenAIClient, IOptionsMonitor ollamaOptionsMonitor) { _output = outputHelper; _defaultOpenAIClient = defaultOpenAIClient; _ollamaOptionsMonitor = ollamaOptionsMonitor; - _chatClient = _defaultOpenAIClient.GetChatClient(_ollamaOptionsMonitor.CurrentValue.Model); } + #region 使用客户端库 /// /// 从OpenAIClient获取各种业务Client /// [Fact] public void GetClients_Test() - { + { +#pragma warning disable OPENAI001 Assert.NotNull(_defaultOpenAIClient); //音频客户端 @@ -34,29 +34,101 @@ public class OpenAISdkTest var chatClient = _defaultOpenAIClient.GetChatClient(_ollamaOptionsMonitor.CurrentValue.Model); Assert.NotNull(chatClient); - //自动补全客户端 - var completionClient = _defaultOpenAIClient; - Assert.NotNull(completionClient); + //嵌入客户端 + var embeddingClient = _defaultOpenAIClient.GetEmbeddingClient(_ollamaOptionsMonitor.CurrentValue.Model); + Assert.NotNull(embeddingClient); + + //图像客户端 + var imageClient = _defaultOpenAIClient.GetImageClient(_ollamaOptionsMonitor.CurrentValue.Model); + Assert.NotNull(imageClient); + + //微调客户端 + var moderationClient = _defaultOpenAIClient.GetModerationClient(_ollamaOptionsMonitor.CurrentValue.Model); + Assert.NotNull(moderationClient); + + //文件客户端 + var openAIFileClient = _defaultOpenAIClient.GetOpenAIFileClient(); + Assert.NotNull(openAIFileClient); //模型客户端 var modelClient = _defaultOpenAIClient.GetOpenAIModelClient(); Assert.NotNull(modelClient); - } - #region 模型 + //助手客户端(仅评估) + var assistantClient = _defaultOpenAIClient.GetAssistantClient(); + Assert.NotNull(assistantClient); - /// - /// 列出模型 测试 - /// - [Fact] - public void List_Models_Test() - { - var modelClient = _defaultOpenAIClient.GetOpenAIModelClient(); + //批量客户端(仅评估) + var batchClient = _defaultOpenAIClient.GetBatchClient(); + Assert.NotNull(batchClient); + + //评估客户端(仅评估) + var evaluationClient = _defaultOpenAIClient.GetEvaluationClient(); + Assert.NotNull(evaluationClient); - OpenAI.Models.OpenAIModelCollection openAIModelCollection = modelClient.GetModels().Value; + //微调客户端(仅评估) + var FineTuningClient = _defaultOpenAIClient.GetFineTuningClient(); + Assert.NotNull(FineTuningClient); - _output.WriteLine($"Ollama服务中,共有{openAIModelCollection.Count()}个模型,包括[{string.Join(",",openAIModelCollection)}]"); + //响应客户端(仅评估) + var openAIResponseClient = _defaultOpenAIClient.GetOpenAIResponseClient(_ollamaOptionsMonitor.CurrentValue.Model); + Assert.NotNull(openAIResponseClient); + + //实时客户端(仅评估) +#pragma warning disable OPENAI002 + var realtimeClient = _defaultOpenAIClient.GetRealtimeClient(); + Assert.NotNull(realtimeClient); +#pragma warning restore OPENAI002 + + //向量存储客户端(仅评估) + var vectorStoreClient = _defaultOpenAIClient.GetVectorStoreClient(); + Assert.NotNull(vectorStoreClient); + +#pragma warning restore OPENAI001 } + + + #endregion + + #region 如何使用依赖注入 + #endregion + + #region 如何将聊天完成与流式处理一起使用 + #endregion + + #region 如何将聊天完成与工具和函数调用一起使用 #endregion + #region 如何将聊天完成与结构化输出一起使用 + #endregion + + #region 如何将聊天完成与音频一起使用 + #endregion + + #region 如何将响应与流式处理和推理结合使用 + #endregion + + #region 如何将响应与文件搜索一起使用 + #endregion + + #region 如何将响应与网络搜索结合使用 + #endregion + + #region 如何生成文本嵌入 + #endregion + + #region 如何生成图像 + #endregion + + #region 如何转录音频 + #endregion + + #region 如何将助手与检索增强生成 (RAG) 结合使用。 + #endregion + + #region 如何将助手与流媒体和视觉结合使用 + #endregion + + #region 高级方案 + #endregion } diff --git a/OllamaStudy.UseExtensionsAI/Startup.cs b/OllamaStudy.UseExtensionsAI/Startup.cs index 9e5d4c6..e632b80 100644 --- a/OllamaStudy.UseExtensionsAI/Startup.cs +++ b/OllamaStudy.UseExtensionsAI/Startup.cs @@ -1,19 +1,4 @@ -using System; -using System.ClientModel; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Text; -using System.Threading.Tasks; - -using Microsoft.Extensions.Hosting; - -using OllamaSharp; - -using OpenAI; -using OpenAI.Chat; - -using OllamaStudy.Core; +using Microsoft.Extensions.Hosting; namespace OllamaStudy.UseExtensionsAI { diff --git a/OllamaStudy.UseHttpClient/GloabolUsing.cs b/OllamaStudy.UseHttpClient/GlobalUsing.cs similarity index 100% rename from OllamaStudy.UseHttpClient/GloabolUsing.cs rename to OllamaStudy.UseHttpClient/GlobalUsing.cs diff --git a/OllamaStudy.UseHttpClientTest/GloabolUsing.cs b/OllamaStudy.UseHttpClientTest/GlobalUsing.cs similarity index 100% rename from OllamaStudy.UseHttpClientTest/GloabolUsing.cs rename to OllamaStudy.UseHttpClientTest/GlobalUsing.cs diff --git a/OllamaStudy.UseOllamaSharp/GloabolUsing.cs b/OllamaStudy.UseOllamaSharp/GlobalUsing.cs similarity index 100% rename from OllamaStudy.UseOllamaSharp/GloabolUsing.cs rename to OllamaStudy.UseOllamaSharp/GlobalUsing.cs diff --git a/OllamaStudy.UseSemanticKernel/GloabolUsing.cs b/OllamaStudy.UseSemanticKernel/GlobalUsing.cs similarity index 100% rename from OllamaStudy.UseSemanticKernel/GloabolUsing.cs rename to OllamaStudy.UseSemanticKernel/GlobalUsing.cs