成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

三分鐘掌握Ollama本地DeepSeek-R1模型及其它模型在.NET應用中的部署與應用

開發 前端
Microsoft.Extensions.AI - Ollama 提供了強大、靈活的 AI 集成方案,使 .NET 開發者能輕松構建智能應用程序。?

Microsoft.Extensions.AI 是一個強大的 .NET AI 集成庫,專注于為開發者提供豐富的功能,以便在 .NET 應用程序中輕松實現 AI 功能的集成。通過該庫,用戶可以方便地擴展和增強應用程序的智能化能力。本指南將深入介紹其主要特性及具體的使用方法,幫助開發者快速上手并充分利用 Ollama 提供的強大工具集。

先決條件

在開始之前,請確保滿足以下條件:

  • 安裝 .NET 8 SDK
  • 安裝 Visual Studio 或 VS Code
  • 安裝 Ollama

Nuget 安裝包

NuGet\Install-Package [Microsoft.Extensions.AI](http://Microsoft.Extensions.AI) -Version 9.3.0-preview.1.25114.11
NuGet\Install-Package Microsoft.Extensions.AI.Ollama -Version 9.3.0-preview.1.25114.11

圖片圖片

快速開始

模型下載

首先,使用 Ollama 下載必要的模型:

ollama pull deepseek-r1:1.5b   # 聊天模型
ollama pull all-minilm:latest  # 嵌入模型

基本示例集合

一、基礎聊天功能

using Microsoft.Extensions.AI;

namespace AppMicrosoftAI
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            var endpoint = "http://localhost:11434/";
            var modelId = "deepseek-r1:1.5b";

            IChatClient client = new OllamaChatClient(endpoint, modelId: modelId);

            var result = await client.GetResponseAsync("What is AI?");

            Console.WriteLine(result.Message);

            Console.ReadLine();
        }
    }
}

圖片圖片

`ChatResponse` 類的說明:

  1. Choices(消息選擇列表):
  • 類型:`IList`
  • 包含聊天響應的消息列表
  • 如果有多個響應選項,它們都會存儲在這個列表中
  • 可以通過 `Message` 屬性直接訪問第一個選項
  1. Message(首選消息):
  • 返回 `Choices` 列表中的第一條消息
  • 如果沒有可用的選項,將拋出 `InvalidOperationException`
  • 使用 `[JsonIgnore]` 特性標記,表示在 JSON 序列化時忽略
  1. ResponseId(響應標識):
  • 類型:`string`
  • 聊天響應的唯一標識符
  1. ChatThreadId(聊天線程標識):
  • 類型:`string`
  • 表示聊天線程的狀態標識符
  • 在某些聊天實現中,可用于保持對話上下文
  • 可以在后續的聊天請求中使用,以繼續對話
  1. ModelId(模型標識):
  • 類型:`string`
  • 標識生成響應的 AI 模型
  1. CreatedAt(創建時間):
  • 類型:`DateTimeOffset`
  • 聊天響應創建的時間戳
  1. FinishReason(完成原因):
  • 類型:`ChatFinishReason`
  • 指示響應生成停止的原因(例如:完成、達到長度限制)
  1. Usage(使用情況):
  • 類型:`UsageDetails`
  • 包含資源使用details(可能是令牌數、處理時間等)
  1. RawRepresentation(原始表示):
  • 類型:`object`
  • 存儲原始的底層響應對象
  • 對調試或訪問特定實現的細節很有用
  • 使用 `[JsonIgnore]` 特性標記
  1. AdditionalProperties(額外屬性):
  • 類型:`AdditionalPropertiesDictionary`
  • 允許存儲未在類中顯式定義的額外屬性

二、 對話歷史管理

using Microsoft.Extensions.AI;

namespace AppMicrosoftAI
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            var endpoint = "http://localhost:11434/";
            var modelId = "deepseek-r1:1.5b";

            IChatClient client = new OllamaChatClient(endpoint, modelId: modelId);

            List<ChatMessage> conversation =
                    [
                        new(ChatRole.System, "You are a helpful AI assistant"),
                        new(ChatRole.User, "What is AI?")
                    ];

            Console.WriteLine(await client.GetResponseAsync(conversation));

            Console.ReadLine();
        }
    }
}

三、流式響應處理

using Microsoft.Extensions.AI;

namespace AppMicrosoftAI
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            var endpoint = "http://localhost:11434/";
            var modelId = "deepseek-r1:1.5b";

            IChatClient client = new OllamaChatClient(endpoint, modelId: modelId);

            await foreach (var update in client.GetStreamingResponseAsync("什么是AI?"))
            {
                Console.Write(update);
            }
            Console.WriteLine();
            Console.ReadKey();
        }
    }

}

圖片圖片

圖片圖片

中間件支持

  • 緩存中間件:提供響應緩存
  • OpenTelemetry:性能監控和追蹤
  • 工具調用中間件:擴展 AI 功能

工具調用

using System.ComponentModel;
using Microsoft.Extensions.AI;

namespace AppMicrosoftAI
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            [Description("Gets the weather")]
            string GetWeather() => Random.Shared.NextDouble() > 0.5 ? "It's sunny" : "It's raining";

            var chatOptions = new ChatOptions
            {
                Tools = [AIFunctionFactory.Create(GetWeather)]
            };

            var endpoint = "http://localhost:11434/";
            var modelId = "qwen2.5:3b";

            IChatClient client = new OllamaChatClient(endpoint, modelId: modelId)
                       .AsBuilder()
                       .UseFunctionInvocation()
                       .Build();

            Console.WriteLine(await client.GetResponseAsync("你需要雨傘嗎?", chatOptions));
            Console.ReadKey();
        }
    }

}

使用提示緩存中間件

using System.ComponentModel;
using Microsoft.Extensions.AI;
using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Options;

namespace AppMicrosoftAI
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            var endpoint = "http://localhost:11434/";
            var modelId = "deepseek-r1:1.5b";

            var options = Options.Create(new MemoryDistributedCacheOptions());
            IDistributedCache cache = new MemoryDistributedCache(options);

            IChatClient client = new OllamaChatClient(endpoint, modelId: modelId)
                        .AsBuilder()
                        .UseDistributedCache(cache)
                        .Build();


            string[] prompts = ["What is AI?", "What is .NET?", "What is AI?"];

            foreach (var prompt in prompts)
            {
                await foreach (var message in client.GetStreamingResponseAsync(prompt))
                {
                    Console.Write(message);
                }

                Console.WriteLine();
            }
            Console.ReadKey();
        }
    }

}

Middleware

using System.ComponentModel;
using System.Diagnostics;
using Microsoft.Extensions.AI;
using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Options;
using OpenTelemetry.Trace;

namespace AppMicrosoftAI
{
    internal class Program
    {
        static async Task Main(string[] args)
        {

            var sourceName = Guid.NewGuid().ToString();
            var activities = new List<Activity>();

            var tracerProvider = OpenTelemetry.Sdk.CreateTracerProviderBuilder()
            .AddInMemoryExporter(activities)
            .AddSource(sourceName)
            .Build();

            [Description("Gets the weather")]
            string GetWeather() => Random.Shared.NextDouble() > 0.5 ? "It's sunny" : "It's raining";

            var chatOptions = new ChatOptions
            {
                Tools = [AIFunctionFactory.Create(GetWeather)]
            };

            var endpoint = "http://localhost:11434/";
            var modelId = "qwen2.5:3b";

            var options = Options.Create(new MemoryDistributedCacheOptions());
            IDistributedCache cache = new MemoryDistributedCache(options);

            IChatClient client = new OllamaChatClient(endpoint, modelId: modelId)
                       .AsBuilder()
                       .UseFunctionInvocation()
                       .UseOpenTelemetry(sourceName: sourceName, configure: o => o.EnableSensitiveData = true)
                       .UseDistributedCache(cache)
                       .Build();

            List<ChatMessage> conversation =
            [
                new(ChatRole.System, "You are a helpful AI assistant"),
                new(ChatRole.User, "需要帶雨傘嗎?")
            ];

            Console.WriteLine(await client.GetResponseAsync("需要帶雨傘嗎?", chatOptions));
            Console.ReadKey();
        }
    }

}

文本嵌入

using System.ComponentModel;
using Microsoft.Extensions.AI;

namespace AppMicrosoftAI
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            var endpoint = "http://localhost:11434/";
            var modelId = "all-minilm:latest";

            IEmbeddingGenerator<string, Embedding<float>> generator = new OllamaEmbeddingGenerator(endpoint, modelId: modelId);

            var embedding = await generator.GenerateEmbeddingVectorAsync("What is AI?");

            Console.WriteLine(string.Join(", ", embedding.ToArray()));

            Console.ReadKey();
        }
    }

}

圖片圖片

最佳實踐

  1. 使用依賴注入管理 AI 客戶端
  2. 實現適當的錯誤處理
  3. 管理對話歷史
  4. 利用中間件增強功能

結論

Microsoft.Extensions.AI - Ollama 提供了強大、靈活的 AI 集成方案,使 .NET 開發者能輕松構建智能應用程序。

責任編輯:武曉燕 來源: 技術老小子
相關推薦

2022-03-26 09:06:40

ActorCSP模型

2024-07-05 09:31:37

2024-04-26 07:48:45

DockerLLama3模型

2025-05-07 00:10:00

2021-12-17 07:47:37

IT風險框架

2025-02-13 08:04:49

spliceCPU數據

2021-10-20 17:44:57

分析模型回歸

2023-11-23 19:26:43

2025-03-03 00:04:00

DeepSeek教程部署

2009-10-29 16:22:10

VB.NET操作MyS

2024-05-16 11:13:16

Helm工具release

2009-11-09 12:55:43

WCF事務

2024-12-18 10:24:59

代理技術JDK動態代理

2023-11-26 00:30:05

2023-01-27 18:42:24

PythonWeb應用

2025-02-12 12:45:06

2024-08-30 08:50:00

2022-02-17 09:24:11

TypeScript編程語言javaScrip

2023-12-27 08:15:47

Java虛擬線程

2024-01-16 07:46:14

FutureTask接口用法
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久视频在线观看 | 狠狠入ady亚洲精品经典电影 | 成人久久久久久久久 | 最新日韩欧美 | 国产小视频在线 | 国产精品亚洲精品久久 | 国产精品久久777777 | 天天操狠狠操 | 99reav | 久久精品国产一区二区三区不卡 | 亚洲第一免费播放区 | 青青草社区 | 国产 日韩 欧美 制服 另类 | 国产一区二区三区亚洲 | 国产精品一区网站 | 欧美色综合天天久久综合精品 | 国产乱性 | 午夜精品久久久久久久99黑人 | 超碰av人人 | 国产综合精品一区二区三区 | 国产精品一区二区三区四区 | 亚洲国产一区二区三区四区 | 亚洲综合视频 | 午夜精品一区二区三区在线视频 | 国产视频二区 | 五月婷亚洲 | 久久久www成人免费无遮挡大片 | 欧美亚洲日本 | 2019天天干夜夜操 | 午夜视频免费在线观看 | 免费观看成人鲁鲁鲁鲁鲁视频 | 久久久免费| 国产福利在线免费观看 | 亚洲瑟瑟 | 伊人免费在线观看高清 | 日韩成人久久 | 亚洲一区二区三区在线 | 午夜精品久久久久久久久久久久 | 日日夜夜精品 | 中文字幕一区二区三区不卡 | 成人3d动漫一区二区三区91 |