將.Net AI外掛整合到自己的程式中

Flamesky發表於2024-08-19

將 AI 功能新增到 .NET 開發是一種令人興奮的全新體驗。在這篇博文中,我們將探討 Prompty 以及如何使用它來將大型語言模型(如 GPT-4o)整合到您的開發流程和 .NET 應用程式中。

Prompty 簡介

作為 AI 愛好者和 .NET 開發人員,我們一直在尋找能夠簡化工作流程並提高生產力的工具。Prompty 就是這樣一個強大的工具,它是一個 Visual Studio Code 擴充套件,旨在促進將 GPT-4o 等大型語言模型 (LLM) 整合到您的應用程式中。Prompty 提供了一個直觀的介面,可以直接從您的開發環境與 LLM 進行互動,從而比以往任何時候都更容易將 AI 功能新增到您的專案中。

Prompty 由 Microsoft 開發,可在 Visual Studio Code 市場上免費獲得。無論您是構建聊天機器人、建立內容生成器,還是嘗試其他 AI 驅動的應用程式,Prompty 都可以顯著簡化您的開發過程。

開發人員在 Visual Studio Code 中使用 prompty 的典型流程的說明

什麼是提示

讓我們看一下如何使用 Prompty 的示例流程。此過程通常涉及幾個關鍵步驟:

  1. 安裝:首先從 Visual Studio Code Marketplace 安裝 Prompty 擴充套件。

  2. 設定:安裝後,透過提供您的 API 金鑰並設定必要的引數以連線到您選擇的 LLM(例如 GPT-4o)來配置擴充套件。

  3. 整合: Prompty 與您的開發工作流程無縫整合。首先建立一個新檔案或開啟一個要使用 LLM 的現有檔案。Prompty 提供命令和程式碼片段,可輕鬆插入提示和處理響應。

  4. 開發:直接在程式碼庫中編寫提示以與 LLM 互動。Prompty 支援多種提示格式,並提供語法高亮顯示功能,使您的提示具有可讀性和可維護性。

    您可以使用該擴充套件來生成程式碼片段、建立文件,甚至透過詢問 LLM 特定問題來除錯您的應用程式。準備好提示後,您可以使用該擴充套件來生成程式碼片段、建立文件,甚至透過詢問 LLM 特定問題來除錯您的應用程式。

  5. 測試:測試您的提示並根據需要進行調整,以從 LLM 獲得所需的響應。Prompty 允許您快速迭代,最佳化您的提示以提高 AI 響應的準確性和相關性。

使用 WebAPI 應用程式的真實示例

讓我們看一個在 .NET WebAPI 應用程式中使用 Prompty 的實際示例。

步驟 1:設定 WebAPI 專案

首先,使用 .NET CLI 建立一個名為 的新 WebAPI 專案:PromptyWebAPI

dotnet new webapi -n PromptyWebAPI
cd PromptyWebAPI

新增以下依賴項:

dotnet add package Microsoft.SemanticKernel --version 1.15.1
dotnet add package Microsoft.SemanticKernel.Prompty --version 1.15.1-alpha
dotnet add package Microsoft.Extensions.Configuration.UserSecrets --version 8.0.0

直接從 Visual Studio Code 或使用以下命令執行專案:

dotnet run

我們將看到標準的天氣預報 API 端點。

在瀏覽器中執行的 WebAPI 專案

注意:WebAPI 專案使用使用者金鑰訪問 GPT-4o Azure OpenAI 模型。使用以下命令設定使用者金鑰:

dotnet user-secrets init
dotnet user-secrets set "AZURE_OPENAI_MODEL" "< model >"
dotnet user-secrets set "AZURE_OPENAI_ENDPOINT" "< endpoint >"
dotnet user-secrets set "AZURE_OPENAI_APIKEY" "< api key >"

第 2 步:為預測建立更具描述性摘要的提示

天氣預報返回一個虛構的預報,包括日期、溫度(C 和 F)和摘要。我們的目標是建立一個提示,可以生成更詳細的摘要。

讓我們將一個新的提示檔案新增到資料夾的根目錄。這就像 和 一樣簡單。將建立的檔案重新命名為 。PromptyWebAPIright-clickNew Promptyweatherforecastdesc.prompty

我們的解決方案應如下所示:

解決方案資源管理器檢視,顯示新增到解決方案的提示檔案

現在是時候完成我們提示檔案的各個部分了。每個部分都有與 LLM 使用相關的特定資訊。例如,模型部分將定義要使用的模型,樣本部分將為預期輸出提供樣本,最後我們有要使用的提示。

在以下示例中,提示定義了一個系統訊息,在 Context 中,我們提供了天氣的引數。

將提示檔案的內容替換為以下內容。

---
name: generate_weather_detailed_description
description: A prompt that generated a detaled description for a weather forecast
authors:
  - Bruno Capuano
model:
  api: chat
  configuration:
    type: azure_openai
    azure_endpoint: ${env:AZURE_OPENAI_ENDPOINT}
    azure_deployment: ${env:AZURE_OPENAI_MODEL}
  parameters:
    max_tokens: 3000
sample:
  today: > 
    2024-07-16

  date: > 
    2024-07-17

  forecastTemperatureC: >
    25°C
---

# System:
You are an AI assistant who generated detailed weather forecast descriptions. The detailed description is a paragraph long.
You use the full description of the date, including the weekday.
You also give a reference to the forecast compared to the current date today.
As the assistant, you generate descriptions using a funny style and even add some personal flair with appropriate emojis.

# Context
Use the following context to generated a detailed weather forecast descriptions 
- Today: {{today}}
- Date: {{date}}
- TemperatureC: {{forecastTemperatureC}}

一旦我們的提示符準備好了,我們就可以按 F5 測試提示符。一旦我們執行了prompty,我們應該在輸出視窗中看到結果:

直接在輸出視窗中使用結果進行快速測試

現在是開始完善我們的提示的時刻!

提示:右鍵單擊提示檔案,也允許使用語義核心生成 C# 程式碼以使用當前檔案。

從提示檔案生成語義核心程式碼

注意:在此之前,我們需要提供必要的資訊,以便 Prompty 使用 LLM。按照擴充套件配置執行此操作。最簡單的方法是建立一個包含 LLM 資訊的 .env 檔案。

步驟 3:使用 prompty 更新終端節點以獲取預測摘要

現在我們可以直接在我們的專案中使用語義核心來使用這個提示符。讓我們編輯該檔案並應用以下更改:program.cs

  • 將必要的 usings 新增到檔案頂部。
  • 建立語義核心以生成預測摘要。
  • 在預測結果中新增新的預測摘要。

    為了生成詳細的摘要,Semantic Kernel 將使用提示檔案和天氣資訊。

using Microsoft.SemanticKernel;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

// Azure OpenAI keys
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
var deploymentName = config["AZURE_OPENAI_MODEL"];
var endpoint = config["AZURE_OPENAI_ENDPOINT"];
var apiKey = config["AZURE_OPENAI_APIKEY"];

// Create a chat completion service
builder.Services.AddKernel();
builder.Services.AddAzureOpenAIChatCompletion(deploymentName, endpoint, apiKey);

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.MapGet("/weatherforecast", async (HttpContext context, Kernel kernel) =>
{
    var forecast = new List<WeatherForecast>();
    for (int i = 0; i < 3; i++)
    {
        var forecastDate = DateOnly.FromDateTime(DateTime.Now.AddDays(i));
        var forecastTemperature = Random.Shared.Next(-20, 55);

        var weatherFunc = kernel.CreateFunctionFromPromptyFile("weatherforecastdesc.prompty");
        var forecastSummary = await weatherFunc.InvokeAsync<string>(kernel, new()
        {
            { "today", $"{DateOnly.FromDateTime(DateTime.Now)}" },
            { "date", $"{forecastDate}" },
            { "forecastTemperatureC", $"{forecastTemperature}" }
        });

        forecast.Add(new WeatherForecast(forecastDate, forecastTemperature, forecastSummary));
    }
    return forecast;
})
.WithName("GetWeatherForecast")
.WithOpenApi();

app.Run();

record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary)
{
    public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}

當我們再次測試端點時,輸出應包含更詳細的摘要。以下示例包括當前日期 (7 月 16 日) 和另外 2 天:/weatherforecast

注意:這些是隨機生成的溫度。我不確定一天內溫度從 -4C/25F 變化到 45C/112F。

[
  {
    "date": "2024-07-16",
    "temperatureC": -4,
    "summary": "🌬️❄️ Happy Tuesday, July 16th, 2024, folks! Guess what? Today’s weather forecast is brought to you by the Frozen Frappuccino Club, because it’s a chilly one! With a temperature of -4°C, it’s colder than a snowman’s nose out there! 🥶 So, get ready to channel your inner penguin and waddle through the frosty air. Remember to layer up with your snuggiest sweaters and warmest scarves, or you might just turn into an icicle! Compared to good old yesterday, well... there’s not much change, because yesterday was just as brrrrr-tastic. Stay warm, my friends, and maybe keep a hot chocolate handy for emergencies! ☕⛄",
    "temperatureF": 25
  },
  {
    "date": "2024-07-17",
    "temperatureC": 45,
    "summary": "🌞🔥 Well, buckle up, buttercup, because *Wednesday, July 17, 2024*, is coming in hot! If you thought today was toasty, wait until you get a load of tomorrow. With a sizzling temperature of 45°C, it's like Mother Nature cranked the thermostat up to \"sauna mode.\" 🌡️ Don't even think about wearing dark colors or stepping outside without some serious SPF and hydration on standby! Maybe it's a good day to try frying an egg on the sidewalk for breakfast—just kidding, or am I? 🥵 Anyway, stay cool, find a shady spot, and keep your ice cream close; you're gonna need it! 🍦",
    "temperatureF": 112
  },
  {
    "date": "2024-07-18",
    "temperatureC": 35,
    "summary": "Ladies and gentlemen, fasten your seatbelts and hold onto your hats—it’s going to be a sizzling ride! 🕶️🌞 On Thursday, July 18, 2024, just two days from today, Mother Nature cranks up the heat like she’s trying to turn the entire planet into a giant summer barbecue. 🌡️🔥 With the temperature shooting up to a toasty 35°C, it’s the perfect day to channel your inner popsicle in front of the A/C. Water fights, ice cream sundaes, and epic pool floats are all highly recommended survival strategies. And remember, folks, sunscreen is your best friend—don't be caught out there lookin’ like a lobster in a sauna! 🦞☀️ So get ready to sweat but with style, as we dive headfirst into the fantastic scorching adventure that Thursday promises to be! 😎🍧🌴",
    "temperatureF": 94
  }
]

總結

Prompty 為 .NET 開發人員提供了一種將 AI 功能整合到其應用程式中的有效方法。透過使用此 Visual Studio Code 擴充套件,開發人員可以毫不費力地將 GPT-4o 和其他大型語言模型合併到他們的工作流程中。

Prompty and Semantic Kernel 以 AI 為重點,簡化了生成程式碼片段、建立文件和除錯應用程式的過程。

要了解有關 Prompty 的更多資訊並探索其功能,請訪問 Prompty 主頁,檢視 Prompty Visual Studio Code 擴充套件,深入瞭解 GitHub 上的 Prompty 原始碼,或觀看 Build 會話使用 Prompty 和 AI Studio 進行實用的端到端 AI 開發 |BRK114.

相關文章