首页 > web前端 > js教程 > 有效的快速工程技术

有效的快速工程技术

Susan Sarandon
发布: 2025-01-06 16:35:39
原创
866 人浏览过

echniques for Effective Prompt Engineering

皇家赌场(2006)中,詹姆斯·邦德详细说明了他的维斯珀马提尼的精确成分:3 杯戈登、1 杯伏特加、半杯基纳利莱,与一片柠檬皮薄片一起在冰上摇匀。

通过详细说明成分,邦德确保了优质的饮料。同样,在与大型语言模型 (LLM) 交互时,提示的特异性和清晰度决定了输出的质量。

这个过程被称为快速工程,对于从人工智能系统获得准确且相关的响应至关重要。

什么是即时工程?

及时工程涉及制定精确的说明以优化 LLM 响应。输入提示越详细和具体,输出就越符合您的需求。

示例:
如果你问法学硕士“总结即时工程”,答案可能会很模糊。但是,通过像这样指定请求:

提示: “给出一个 100 字的提示工程摘要,针对非技术用户。”

法学硕士现在被指导给出简洁的、针对特定受众的答案。

输出:

“即时工程正在为 ChatGPT 等人工智能系统制定有效的指令,以获得最佳结果。它涉及具体、提供上下文和分解复杂的问题。通过指定格式、提供示例或设置边界,即时工程可确保与人工智能助手。”

这种要求特定输出的方法演示了如何“设计”提示以获得所需的精确结果。

良好的 LLM 提示的组成部分

1 上下文:上下文为法学硕士提供了额外的信息,帮助其更全面地理解您的请求。通过嵌入相关上下文,人工智能可以生成更准确和定制的响应。

示例:
假设您正在处理一个 C# 项目并想要修改类定义。这里的上下文可以是代码片段。

根据上下文提示:
“给出这个 C# 代码:

公共类用户{公共int用户Id{获取;放; } 公共字符串名称 { get;放; } 公共字符串电子邮件 { 获取;放; } 公共字符串电话号码 { 获取;放; } }

修改类,使 UserId 和 Name 为只读,并在构造函数中设置它们。”

输出:

public class User
{
    public int UserId { get; }
    public string Name { get; }
    public string Email { get; set; }
    public string PhoneNumber { get; set; }

    public User(int userId, string name)
    {
        UserId = userId;
        Name = name;
    }
}
登录后复制
登录后复制
登录后复制

这个例子说明了提供相关背景来指导法学硕士生成正确答案的重要性。

  1. 用户问题:问题是提示的主要部分。它应该是单一目的、具体且简洁的。

示例:
如果您想用 C# 创建具有某些字段的用户类,请明确指定所需的字段和行为。

模糊问题:

“创建用户类。”

具体问题:

“创建一个包含以下字段的 C# 用户类:UserId、Name、PhoneNumber。将 UserId 设为只读并添加构造函数来设置这些字段。”

输出:

public class User
{
    public int UserId { get; }
    public string Name { get; }
    public string Email { get; set; }
    public string PhoneNumber { get; set; }

    public User(int userId, string name)
    {
        UserId = userId;
        Name = name;
    }
}
登录后复制
登录后复制
登录后复制
  1. 输出指导:您可以通过提供所需格式的示例来指导模型的输出。

示例:
如果您需要为 User 类生成虚拟数据,请提供数据应是什么样子的示例。

举例提示:
“使用以下字段生成 User 类的 5 个实例:UserId、Name、Email、PhoneNumber。使用以下格式作为示例:

var user1 = new User(1, "John Doe", "john.doe@example.com", "555-555-5555");

以下是一些示例:

var user2 = new User(2, "Jane Doe", "jane.doe@example.com", "555-555-5556");

现在生成 5 个实例。”

输出:

public class User
{
    public int UserId { get; }
    public string Name { get; set; }
    public string PhoneNumber { get; set; }

    public User(int userId, string name, string phoneNumber)
    {
        UserId = userId;
        Name = name;
        PhoneNumber = phoneNumber;
    }
}
登录后复制
登录后复制

有效快速工程的技术

  1. 零样本提示:LLM 根据其训练数据生成响应,无需明确的示例。这对于根据既定模式生成通用解决方案或答案非常有效。

示例:
提示: “在 C# 中使用 xUnit 为 User 类创建单元测试。”

输出:

var user1 = new User(1, "John Smith", "john.smith@example.com", "555-555-5555");
var user2 = new User(2, "Jane Doe", "jane.doe@example.com", "555-555-5556");
var user3 = new User(3, "Mary Johnson", "mary.johnson@example.com", "555-555-5557");
var user4 = new User(4, "David Lee", "david.lee@example.com", "555-555-5558");
var user5 = new User(5, "Linda White", "linda.white@example.com", "555-555-5559");
登录后复制
登录后复制
  1. few-shot Prompting:提供几个示例来指导模型生成所需的输出格式。

示例:
要为 User 类生成数据,您可以使用一些示例数据点来指导输出格式。

用少量示例提示:
“以下是 User 类的一些实例:

var user1 = new User(1, "John Smith", "john.smith@example.com", "555-555-5555");

var user2 = new User(2, "Jane Doe", "jane.doe@example.com", "555-555-5556");

现在按照相同的模式再创建 3 个实例。”

输出:

public class UserTests
{
    [Fact]
    public void UserConstructor_SetsProperties()
    {
        // Arrange
        var user = new User(1, "John Doe", "john.doe@example.com", "555-555-5555");

        // Act & Assert
        Assert.Equal(1, user.UserId);
        Assert.Equal("John Doe", user.Name);
        Assert.Equal("john.doe@example.com", user.Email);
        Assert.Equal("555-555-5555", user.PhoneNumber);
    }
}
登录后复制
登录后复制
  1. 提示链接:根据之前的响应迭代地优化您的查询,从而使模型能够建立在早期交互的基础上。

示例:
从简单的提示开始,逐步修改。

第一个提示:

“用 Python 创建一个基本的 User 类。”

输出:

public class User
{
    public int UserId { get; }
    public string Name { get; }
    public string Email { get; set; }
    public string PhoneNumber { get; set; }

    public User(int userId, string name)
    {
        UserId = userId;
        Name = name;
    }
}
登录后复制
登录后复制
登录后复制

后续提示:

“将此类转换为 C#。”

输出:

public class User
{
    public int UserId { get; }
    public string Name { get; set; }
    public string PhoneNumber { get; set; }

    public User(int userId, string name, string phoneNumber)
    {
        UserId = userId;
        Name = name;
        PhoneNumber = phoneNumber;
    }
}
登录后复制
登录后复制

最后提示:

“将密码属性设为私有,并添加在构造函数中初始化的 DateTime CreatedAt 属性。”

输出:

var user1 = new User(1, "John Smith", "john.smith@example.com", "555-555-5555");
var user2 = new User(2, "Jane Doe", "jane.doe@example.com", "555-555-5556");
var user3 = new User(3, "Mary Johnson", "mary.johnson@example.com", "555-555-5557");
var user4 = new User(4, "David Lee", "david.lee@example.com", "555-555-5558");
var user5 = new User(5, "Linda White", "linda.white@example.com", "555-555-5559");
登录后复制
登录后复制
  1. 思路链提示:提供多步骤说明,帮助LLM一步步解决复杂问题。

示例:
提示:

*“为以下 C# 类创建一组单元测试:

公共类用户{公共int用户Id{获取;放; } 公共字符串名称 { get;放; } 公共字符串电话号码 { 获取;放; } }

一步步思考:

  1. 确定要测试的关键场景。
  2. 使用 xUnit 编写单元测试。
  3. 考虑边缘情况。”*

输出:

public class UserTests
{
    [Fact]
    public void UserConstructor_SetsProperties()
    {
        // Arrange
        var user = new User(1, "John Doe", "john.doe@example.com", "555-555-5555");

        // Act & Assert
        Assert.Equal(1, user.UserId);
        Assert.Equal("John Doe", user.Name);
        Assert.Equal("john.doe@example.com", user.Email);
        Assert.Equal("555-555-5555", user.PhoneNumber);
    }
}
登录后复制
登录后复制

本文最初由 Pieces for Developers 的 Devreal 负责人 Jim 撰写。您可以在本文中找到更多示例和细微差别 https://pieces.app/blog/llm-prompt-engineering

以上是有效的快速工程技术的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板