使用 .NET 开发 AI 应用(4):提示模板

目录

示例应用

提示模板

结论


 

文末附全部源代码

(1):踏上旅程

(2):引入 Semantic Kernel 框架

(3): 创建第一个 AI 应用

在上一章中,我们已经探索了如何构建一个用户友好的Web界面,使用户能够轻松地提出问题并获得AI的即时回答。

现在,我们将进一步深入,探讨如何运用AI技术来增强用户体验和应用程序的交互性。在特定功能的AI应用中,我们期望用户无需输入冗长的提示,而只需提供关键信息即可。

示例应用

以“产品起名神器”这一AI应用为例,用户仅需输入他们的产品信息,如下所示:

using (var blocks = gr.Blocks())
{
    gr.Markdown("# 产品起名神器");

    Textbox input, output;
    using (gr.Row())
    {
        input = gr.Textbox(label: "产品");
        output = gr.Textbox(label: "名称");
    }
    var btn = gr.Button("提交");
    await btn.Click(fn: async (input) => gr.Output(await AskAi(input, kernel)), inputs: new[] { input }, outputs: new[] { output });

    return blocks;
}

我们优化了AskAi函数,通过插值字符串来构建提交给AI的最终提示:

static async Task<string> AskAi(Input input, Kernel kernel)
{
    var product = Textbox.Payload(input.Data[0]);

    var prompt = $"为一家生产{product}的公司起一个好名字?并且只返回最好的一个。";
    var result = await kernel.InvokePromptAsync(prompt);
    return result.ToString();
}

图片

如上所述,我们的示例应用中,大多数提示内容是固定的,仅用户输入的部分会发生变化。为了使提示与应用程序解耦,我们引入了提示模板功能。

提示模板

通过使用SK的模板语言,我们可以添加标记,这些标记将自动替换为输入参数。要在提示中包含变量值,我们使用{{$variableName}}语法。

例如,使用提示模板后的AskAi函数可以这样实现:

static async Task<string> AskAi(Input input, Kernel kernel)
{
    var product = Textbox.Payload(input.Data[0]);

    var prompt = "为一家生产{{ $product }}的公司起一个好名字?并且只返回最好的一个。";
    var result = await kernel.InvokePromptAsync(prompt, new (){ { "product", product } });
    return result.ToString();
}

这样,提示内容可以完全独立于应用程序代码,甚至可以在多个应用程序之间共享。

结论

提示模板不仅提高了开发效率,也使得应用程序的维护和更新变得更加容易。

通过精心设计的提示模板,开发者能够构建更加灵活和可扩展的开发应用程序,从而使得用户与AI的互动更加自然和直观。


Gradio.NET(https://github.com/feiyun0112/Gradio.Net/)的目标是成为用于开发 Web 应用的 .NET 开发者的首选框架。它的设计理念是让开发变得更加简单,让每个人都能够参与到Web应用的创造中来。

添加微信GradioDotNet,通过加入技术讨论群,开发者们可以分享经验,解决问题,并共同推动.NET的发展。

图片


完整源代码:

using Gradio.Net;
using Microsoft.SemanticKernel;

string endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT");
string deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_GPT_NAME");
string apiKey = Environment.GetEnvironmentVariable("AZURE_OPENAI_API_KEY");

var kernel = Kernel.CreateBuilder()
    .AddAzureOpenAIChatCompletion(
        deploymentName: deploymentName,
        endpoint: endpoint,
        apiKey: apiKey)
    .Build();

App.Launch(await CreateBlocks(kernel));

static async Task<Blocks> CreateBlocks(Kernel kernel)
{
    using (var blocks = gr.Blocks())
    {
        gr.Markdown("# 产品起名神器");

        Textbox input, output;
        using (gr.Row())
        {
            input = gr.Textbox(label: "产品");
            output = gr.Textbox(label: "名称");
        }
        var btn = gr.Button("提交");
        await btn.Click(fn: async (input) => gr.Output(await AskAi(input, kernel)), inputs: new[] { input }, outputs: new[] { output });

        return blocks;
    }
}
static async Task<string> AskAi(Input input, Kernel kernel)
{
    var product = Textbox.Payload(input.Data[0]);

    var prompt = "为一家生产{{ $product }}的公司起一个好名字?并且只返回最好的一个。";
    var result = await kernel.InvokePromptAsync(prompt, new() { { "product", product } });
    return result.ToString();
}

引入地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值