>  기사  >  백엔드 개발  >  신속한 엔지니어링(게으른 프로그래머용): 정확히 원하는 코드 얻기(그리고 ChatGPT에서 더 나아가)

신속한 엔지니어링(게으른 프로그래머용): 정확히 원하는 코드 얻기(그리고 ChatGPT에서 더 나아가)

Linda Hamilton
Linda Hamilton원래의
2024-10-31 12:03:02431검색

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 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, "alice@example.com")
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, "alice@example.com", {"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

프롬프트는 더욱 최적화된 버전을 제공하여 제곱근까지의 홀수만 확인하므로 성능이 크게 향상됩니다.

다기능 출력에 계층화된 프롬프트 사용

단일 프롬프트에 다양한 기능을 쌓아 ChatGPT에 여러 관련 작업을 한 번에 처리하도록 요청할 수 있습니다.

기본 프롬프트: "임의의 비밀번호를 생성하는 Python 함수를 작성하세요."

import math

def square_root(n):
    if n < 0:
        return "Error: Cannot calculate square root of a negative number"
    return math.sqrt(n)

# Debugged version handles errors properly.
# Example usage:
print(square_root(16))   # Output: 4.0
print(square_root(-16))  # Output: "Error: Cannot calculate square root of a negative number"

최적화된 버전: "임의의 비밀번호를 생성하는 Python 함수를 작성하세요. 비밀번호는 12자 이상, 대문자, 소문자, 숫자, 특수 문자를 포함해야 합니다. 또한 다음 기준을 충족해야 합니다. 비밀번호가 강력한지 확인하는 검증 기능입니다."

def is_prime(n):
    if n <= 1:
        return False
    if n == 2:
        return True
    if n % 2 == 0:
        return False
    # Only check odd numbers up to the square root of n for efficiency
    for i in range(3, int(n**0.5) + 1, 2):
        if n % i == 0:
            return False
    return True

# Review:
# - Optimised the loop to check divisibility only up to the square root of n.
# - Reduced checks for even numbers to improve performance for large inputs.

# Example usage:
print(is_prime(5))  # Output: True
print(is_prime(4))  # Output: False
  • 기본 프롬프트는 임의의 비밀번호를 생성합니다.

  • 최적화는 복잡한 비밀번호 생성기를 제공하며 비밀번호 강도를 확인하는 확인 기능을 포함합니다.

테스트 중심 개발: 완전한 테스트 스위트 생성

ChatGPT에 전체 테스트 모음과 함께 코드를 한 번에 작성하도록 요청하면 최소한의 노력으로 코드를 프로덕션에 사용할 수 있습니다. (꼭 도움을 요청해야 한다면 많이 요청해주세요 ?).

기본 프롬프트: "문자열이 회문인지 확인하는 Python 함수를 작성하세요."

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

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

추가 정보: "문자열이 회문인지 확인하는 Python 함수를 작성하세요. 또한 빈 문자열 및 공백과 같은 예외적인 경우가 있는 pytest를 사용하여 전체 테스트 모음을 작성하세요."

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))
  • 기본 버전에서는 회문을 확인하지만 극단적인 경우는 누락됩니다.

  • 숨겨진 트릭은 공백과 구두점을 무시하여 기능을 개선할 뿐만 아니라 pytest를 사용하여 포괄적인 테스트 스위트를 제공합니다.

이러한 기술을 익히면 작업을 줄이면서 ChatGPT에서 오류가 없는 고성능 코드를 추출할 수 있습니다. 자동 구체화, 메모리 트리거, 오류 처리 및 완전한 테스트 모음을 통해 코딩을 더 똑똑하고 어렵지 않게 수행할 수 있습니다.

위 내용은 신속한 엔지니어링(게으른 프로그래머용): 정확히 원하는 코드 얻기(그리고 ChatGPT에서 더 나아가)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.