成人免费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

2024-01-16 07:46:14

FutureTask接口用法

2021-04-20 13:59:37

云計算
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: h视频免费在线观看 | 亚洲国产精品一区二区www | 亚洲欧美在线一区 | 日日夜夜精品视频 | 久久er99热精品一区二区 | 精品美女久久久 | 国产激情视频在线免费观看 | 中文字幕日韩一区 | 日韩免费一区二区 | 亚洲天堂精品一区 | 毛片在线免费 | 99久久99热这里只有精品 | 亚洲一区免费在线 | 91免费在线看 | 在线高清免费观看视频 | aaa一区| 国产在线97 | 黄色av网站在线观看 | 国产成人精品久久 | 国产精品国产馆在线真实露脸 | 亚洲高清在线 | 日本欧美在线观看视频 | 福利视频网址 | 一区二区福利视频 | 国产丝袜av | 亚洲欧洲精品成人久久奇米网 | 久久久精品久久 | 亚洲国产一区二区视频 | 久久久久国产精品 | 人人爽人人爽人人片av | 国产一区二区三区久久久久久久久 | 国产一区二区三区四区五区加勒比 | 黄色一级片在线播放 | 国产综合区 | 成人在线一区二区 | 亚洲精品日韩一区二区电影 | 岛国视频 | 日韩视频―中文字幕 | 国产成人99久久亚洲综合精品 | www.天天操.com | 最新国产视频 |