首页 > 编程语言 >将.Net AI插件集成到自己的程序中

将.Net AI插件集成到自己的程序中

时间:2024-08-19 20:19:07浏览次数:16  
标签:提示 插件 AI var LLM 使用 Prompty Net

将 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": "

标签:提示,插件,AI,var,LLM,使用,Prompty,Net
From: https://www.cnblogs.com/flamesky/p/18368032

相关文章

  • 云原生周刊:Kubernetes v1.31 发布
    开源项目推荐KardinalKardinal是一个用于在共享Kubernetes集群中创建超轻量级临时开发环境的框架。AnteonAnteon(以前称为Ddosify)是一个开源的、基于eBPF的Kubernetes监控和性能测试平台。KubetuiKubetui是一个用于监控Kubernetes资源的终端用户界面(TUI)工具。......
  • TCPIP路由技术第一卷第八章OSPF 第三部分-1 NETWORK Type-1
    接口网络类型point-to-point(hdlc,ppp,framerelay点到点子接口)multiaccess多路访问网络,多路访问网络分以下两种broadcast广播的多路访问网络(ethernet,tokenring,andfddi)nonbroadcastmultiaccess(nbma)非广播多路访问网络(framerelay物理接口和多点子接口,andx.25,at......
  • TCPIP路由技术第一卷第八章OSPF 第三部分-1 NETWORK Type-3 FR-Star
    tcp/ip_ospfoverframe-relay2第二部分:部分互联1.三台设备接口同一网段部分全互联,网络类型broadcast,确保hub为dr,在星型拓扑下会出现二层封装问题,encapsulationfailed解决方案,增加pvc映射2.三台设备接口同一网段部分互联:网络类型nbma,确保hub作为dr,在dr上单播指定邻......
  • 如何从零编写一个vite插件 创建 vite 插件通用模板
    初始化mkdirvite-progress&&cdvite-progress&&pnpminit1.2安装typescriptpnpmitypescript@types/node-D1.3配置tsconfig.json{"compilerOptions":{"module":"ESNext","target":"esnext&quo......
  • PointNetCFD-main
    #####Point-clouddeeplearningforpredictionoffluidflowfieldsonirregulargeometries(supervisedlearning)######Authors:AliKashefi([email protected])andDavisRempe([email protected])#Description:ImplementationofPointNetfor*super......
  • AI 创业及变现新思路:零门槛 AI 绘图,定制 ComfyUI Serverless API 应用
    作者:鸥弋、筱姜2023年下半年,ComfyUI以其快速、流畅的图像生成能力,结合多样的自定义节点,迅速在创作者中流行起来。ComfyUI的亮点就是能够批量化生成图像,一键加载大量工作流,让用户可以轻松实现人像生成、背景替换、风格迁移和图像动画化等功能。越来越多的企业及个人开发者希望......
  • Vulnhub靶机:AI-WEB-1.0
    一.网站查询二.扫描当前网站目录 扫出有http://172.16.1.88/robots.txt继续扫这个刚扫出来的,然后得出 我们再访问m3dinfo/info.php和 /se3reTdir777/这俩目录 得到如上图所示三.进行sql注入1.判断是否有sql注入 /有结果,有报错 2.利用burp抓包进行注入......
  • iertutil.dll:Internet Explorer的核心,找不到后的修复指南
    iertutil.dll是一个与InternetExplorer浏览器相关的动态链接库(DLL)文件。这个文件包含了InternetExplorer浏览器运行时所需的一些核心功能和资源,例如处理HTML和JavaScript代码、管理浏览器窗口等。iertutil.dll对于确保InternetExplorer浏览器在Windows操作系统中的正常运......
  • .NET8 Blazor 从入门到精通:(三)类库和表单
    目录Razor类库创建使用使可路由组件可从RCL获取静态资源表单EditForm标准输入组件验证HTML表单Razor类库这里只对RCL创建和使用的做一些简单的概述,详细内容参考官方文档使用Razor类库(RCL)中的ASP.NETCoreRazor组件。创建创建Razor类库跟创建普通类库步骤一......
  • MBR20200FCT-ASEMI智能AI专用MBR20200FCT
    编辑:llMBR20200FCT-ASEMI智能AI专用MBR20200FCT型号:MBR20200FCT品牌:ASEMI封装:TO-220F批号:最新最大平均正向电流(IF):20A最大循环峰值反向电压(VRRM):200V最大正向电压(VF):0.70V~0..90V工作温度:-65°C~175°C反向恢复时间:35ns芯片个数:2芯片尺寸:74mil引脚数量:3正向浪涌电流(IFM......