”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 快速工程(针对懒惰的程序员):准确获取您想要的代码(甚至更多,从 ChatGPT 中获取)

快速工程(针对懒惰的程序员):准确获取您想要的代码(甚至更多,从 ChatGPT 中获取)

发布于2024-11-08
浏览:215

Prompt Engineering (For Lazy Programmers): Getting Exactly the Code You Want (and Even More, Out of ChatGPT)

比尔盖茨已经说了这一切......做一个懒惰的程序员!.

作为一名程序员,没有什么比立即运行的代码更好的了——没有错误,没有无休止的调试。通过遵循某些提示技术,您不仅可以让 ChatGPT 编写代码,还可以编写优化的、功能齐全且有文档记录的代码,包括边缘案例、测试,甚至性能优化。

但首先...

什么是即时工程?

人工智能,特别是 ChatGPT,已成为内容创建、编码辅助和回答复杂问题的强大工具。然而,许多人并没有充分发挥其潜力。神奇之处在于您如何表达您的请求——我们称之为即时工程。在本文中,我们将探索可以让您的 ChatGPT 体验更加富有成效的技术,重点介绍一些可以使您作为软件程序员的提示从普通变为出色的技巧。

为什么及时工程很重要?

ChatGPT 经过大量数据训练,但其响应取决于您给出的提示的质量。措辞不当或含糊不清的提示可能会导致不相关或笼统的答案。相反,结构良好的提示可以产生深思熟虑、准确且富有创意的回应。

本指南将帮助懒惰的程序员(像我自己?)使用提示工程从 ChatGPT 获得高质量、优化的、甚至更多功能的代码。这些将专门让 ChatGPT 承担繁重的工作——自动生成代码、改进代码,甚至提出优化和测试建议。下面,我还提供了一些示例,比较了正常提示与优化提示以及它们生成的结果。

那么让我们开始吧!.

触发自动优化以获得更好的代码

要求 ChatGPT 通过嵌入触发器来自动优化其响应,以发现效率低下、提出优化建议或添加功能。

基本提示:“编写一个Python函数来反转字符串。”

def reverse_string(s):
    return s[::-1]

# Example usage:
print(reverse_string("hello"))  # Output: "olleh"

优化提示:“编写一个Python函数来反转字符串。如果输入太大或效率低下,建议更好的方法来高效处理大字符串。”

def reverse_string(s):
    return s[::-1]

# Trigger: Refining for large strings
def reverse_large_string(s):
    # Handle large strings in chunks for efficiency
    chunk_size = 100000  # Process in 100k chunks
    return ''.join(s[i:i chunk_size][::-1] for i in range(0, len(s), chunk_size))

# Example usage:
large_string = "a" * 1000000  # 1 million characters
print(reverse_large_string(large_string))
  • 基本功能很简单,适用于小输入。

  • 经过优化,引入了一种高效的基于块的解决方案,用于反转大字符串而不消耗太多内存。

多步骤项目的情境记忆

当您需要多步骤项目的代码时,ChatGPT 可以记住之前的步骤。这对于您在另一层之上构建一层的更复杂的工作流程来说是理想的选择。

基本提示:“编写一个Python函数来创建用户配置文件。”

def create_user_profile(name, age, email):
    return {"name": name, "age": age, "email": email}

# Example usage:
user_profile = create_user_profile("Alice", 30, "[email protected]")
print(user_profile)

优化提示:“编写一个Python函数来创建用户配置文件。现在,扩展它以存储用户首选项,并将其与数据库连接以保存配置文件。”

def create_user_profile(name, age, email, preferences):
    return {"name": name, "age": age, "email": email, "preferences": preferences}

# Extend with a database connection
import sqlite3

def save_user_profile(profile):
    conn = sqlite3.connect('users.db')
    cursor = conn.cursor()
    cursor.execute('''CREATE TABLE IF NOT EXISTS users
                      (name TEXT, age INTEGER, email TEXT, preferences TEXT)''')
    cursor.execute('''INSERT INTO users (name, age, email, preferences)
                      VALUES (?, ?, ?, ?)''', 
                   (profile['name'], profile['age'], profile['email'], str(profile['preferences'])))
    conn.commit()
    conn.close()

# Example usage:
user_profile = create_user_profile("Alice", 30, "[email protected]", {"theme": "dark"})
save_user_profile(user_profile)

  • 基本提示中的第一个功能创建一个简单的用户配置文件。

  • 第二个提示创建一个连接数据库的用户配置文件管理器,具有保存数据的扩展功能。

请求调试模式以获得无错误代码

您可以要求 ChatGPT 就像在调试模式下运行一样,在提供最终输出之前检查并纠正代码中的潜在问题。

简单提示示例:“编写一个Python函数来计算数字的平方根。”

import math

def square_root(n):
    return math.sqrt(n)

# Example usage:
print(square_root(16))  # Output: 4.0

技巧:“编写一个 Python 函数来计算数字的平方根。激活调试模式以检查负输入等错误,并在必要时重写该函数。”

import math

def square_root(n):
    if n 



  • 基本函数对于有效输入工作正常,但对于负数会崩溃。

  • 优化的提示可确保对负输入进行错误处理,返回自定义消息而不是破坏代码。

角色扮演:充当代码审查员

您可以要求 ChatGPT 扮演高级代码审查员的角色,为您的代码提供反馈并建议最佳实践。

示例提示:“充当高级开发人员并检查我的 Python 函数,该函数检查数字是否为素数。提出改进性能和可读性的建议。”

def is_prime(n):
    if n 



提示提供了更优化的版本,仅检查奇数到平方根,这极大地提高了性能。

使用分层提示实现多功能输出

您可以在单个提示中堆叠多层功能,要求 ChatGPT 一次性处理多个相关任务。

基本提示:“编写Python函数生成随机密码。”

import random
import string

def generate_password(length):
    return ''.join(random.choices(string.ascii_letters   string.digits, k=length))

# Example usage:
print(generate_password(10))  # Output: Random 10-character password

优化版本:》编写一个Python函数,生成随机密码。密码必须满足以下条件:至少12个字符,包含大写、小写、数字和特殊字符。另外,编写用于检查密码是否强的验证函数。"

import random
import string
import re

def generate_password(length):
    characters = string.ascii_letters   string.digits   string.punctuation
    password = ''.join(random.choices(characters, k=length))
    return password

def validate_password(password):
    # Check length
    if len(password) 



  • 基本提示生成随机密码。

  • 优化后提供了一个复杂的密码生成器,并包括检查密码强度的验证功能。

测试驱动开发:生成完整的测试套件

您可以要求 ChatGPT 一次性编写代码以及完整的测试套件,确保您的代码以最小的努力做好生产准备。 (如果你必须寻求帮助,一定要提出很多要求吗?)。

基本提示:“编写一个Python函数来检查字符串是否为回文。”

def is_palindrome(s):
    return s == s[::-1]

# Example usage:
print(is_palindrome("madam"))  # Output: True
print(is_palindrome("hello"))  # Output: False

获取更多信息:“编写一个 Python 函数来检查字符串是否为回文。另外,使用 pytest 编写一个完整的测试套件,并使用 pytest 以及空字符串和空格等边缘情况。”

def is_palindrome(s):
    s = ''.join(c.lower() for c in s if c.isalnum())  # Remove non-alphanumeric characters
    return s == s[::-1]

# Test suite
def test_is_palindrome():
    assert is_palindrome("madam") == True
    assert is_palindrome("hello") == False
    assert is_palindrome("A man, a plan, a canal, Panama") == True
    assert is_palindrome("") == True  # Edge case: empty string
    assert is_palindrome(" ") == True  # Edge case: only spaces

# Example usage:
print(is_palindrome("A man, a plan, a canal, Panama"))  # Output: True
  • 基本版本检查回文,但会忽略边缘情况。

  • 隐藏的技巧不仅通过忽略空格和标点符号来细化函数,而且还使用 pytest 提供了全面的测试套件。

通过掌握这些技术,您可以从 ChatGPT 中提取高性能、无错误且可用于生产的代码,同时减少工作量。通过自动优化、内存触发器、错误处理和完整的测试套件,您将更智能地编写代码,而不是更困难。

版本声明 本文转载于:https://dev.to/jamesbright/prompt-engineering-for-lazy-programmers-getting-exactly-the-code-you-want-and-even-more-out-of-chatgpt-3plf?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • Java中如何使用观察者模式实现自定义事件?
    Java中如何使用观察者模式实现自定义事件?
    在Java 中创建自定义事件的自定义事件在许多编程场景中都是无关紧要的,使组件能够基于特定的触发器相互通信。本文旨在解决以下内容:问题语句我们如何在Java中实现自定义事件以促进基于特定事件的对象之间的交互,定义了管理订阅者的类界面。以下代码片段演示了如何使用观察者模式创建自定义事件: args)...
    编程 发布于2025-04-30
  • 您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    在javascript console 中显示颜色是可以使用chrome的控制台显示彩色文本,例如红色的redors,for for for for错误消息?回答是的,可以使用CSS将颜色添加到Chrome和Firefox中的控制台显示的消息(版本31或更高版本)中。要实现这一目标,请使用以下模...
    编程 发布于2025-04-30
  • 如何实时捕获和流媒体以进行聊天机器人命令执行?
    如何实时捕获和流媒体以进行聊天机器人命令执行?
    在开发能够执行命令的chatbots的领域中,实时从命令执行实时捕获Stdout,一个常见的需求是能够检索和显示标准输出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    编程 发布于2025-04-30
  • 在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在JTable中维护jtable单元格渲染后,在JTable中,在JTable中实现自定义单元格渲染和编辑功能可以增强用户体验。但是,至关重要的是要确保即使在编辑操作后也保留所需的格式。在设置用于格式化“价格”列的“价格”列,用户遇到的数字格式丢失的“价格”列的“价格”之后,问题在设置自定义单元格...
    编程 发布于2025-04-30
  • 在C#中如何高效重复字符串字符用于缩进?
    在C#中如何高效重复字符串字符用于缩进?
    在基于项目的深度下固定字符串时,重复一个字符串以进行凹痕,很方便有效地有一种有效的方法来返回字符串重复指定的次数的字符串。使用指定的次数。 constructor 这将返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.Wr...
    编程 发布于2025-04-30
  • 哪种在JavaScript中声明多个变量的方法更可维护?
    哪种在JavaScript中声明多个变量的方法更可维护?
    在JavaScript中声明多个变量:探索两个方法在JavaScript中,开发人员经常遇到需要声明多个变量的需要。对此的两种常见方法是:在单独的行上声明每个变量: 当涉及性能时,这两种方法本质上都是等效的。但是,可维护性可能会有所不同。 第一个方法被认为更易于维护。每个声明都是其自己的语句,使其...
    编程 发布于2025-04-30
  • 解决MySQL插入Emoji时出现的\\"字符串值错误\\"异常
    解决MySQL插入Emoji时出现的\\"字符串值错误\\"异常
    Resolving Incorrect String Value Exception When Inserting EmojiWhen attempting to insert a string containing emoji characters into a MySQL database us...
    编程 发布于2025-04-30
  • 如何使用PHP将斑点(图像)正确插入MySQL?
    如何使用PHP将斑点(图像)正确插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call ...
    编程 发布于2025-04-30
  • Java的Map.Entry和SimpleEntry如何简化键值对管理?
    Java的Map.Entry和SimpleEntry如何简化键值对管理?
    A Comprehensive Collection for Value Pairs: Introducing Java's Map.Entry and SimpleEntryIn Java, when defining a collection where each element com...
    编程 发布于2025-04-30
  • 为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    网格超过身体,用100%grid-template-columns 为什么在grid-template-colms中具有100%的显示器,当位置设置为设置的位置时,grid-template-colly修复了?问题: 考虑以下CSS和html: class =“ snippet-code”> g...
    编程 发布于2025-04-30
  • 如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    为有效的slug生成首先,该函数用指定的分隔符替换所有非字母或数字字符。此步骤可确保slug遵守URL惯例。随后,它采用ICONV函数将文本简化为us-ascii兼容格式,从而允许更广泛的字符集合兼容性。接下来,该函数使用正则表达式删除了不需要的字符,例如特殊字符和空格。此步骤可确保slug仅包含...
    编程 发布于2025-04-30
  • Java为何无法创建泛型数组?
    Java为何无法创建泛型数组?
    通用阵列创建错误 arrayList [2]; JAVA报告了“通用数组创建”错误。为什么不允许这样做?答案:Create an Auxiliary Class:public static ArrayList<myObject>[] a = new ArrayList<myO...
    编程 发布于2025-04-30
  • 如何使用FormData()处理多个文件上传?
    如何使用FormData()处理多个文件上传?
    )处理多个文件输入时,通常需要处理多个文件上传时,通常是必要的。 The fd.append("fileToUpload[]", files[x]); method can be used for this purpose, allowing you to send multi...
    编程 发布于2025-04-30
  • 如何在其容器中为DIV创建平滑的左右CSS动画?
    如何在其容器中为DIV创建平滑的左右CSS动画?
    通用CSS动画,用于左右运动 ,我们将探索创建一个通用的CSS动画,以向左和右移动DIV,从而到达其容器的边缘。该动画可以应用于具有绝对定位的任何div,无论其未知长度如何。问题:使用左直接导致瞬时消失 更加流畅的解决方案:混合转换和左 [并实现平稳的,线性的运动,我们介绍了线性的转换。这...
    编程 发布于2025-04-30

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3