# OpenAI를 활용한 프롬프트 엔지니어링 실습

<figure><img src="https://3572862491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUON3CGxVeoUR2YdtAhxl%2Fuploads%2FviTO3hJWHtMEGxDORTKF%2Fimage.png?alt=media&#x26;token=660d1f40-632b-43ad-8e17-a60d55ac46fd" alt=""><figcaption></figcaption></figure>

## Program-Aided Language Models(PAL)

* LLM이 잘 못하는 **수학적 연산이나 복잡한 논리**를 처리하기 위하여 **프로그래밍 언어(Python)를 사용**하여 모델의 출력을 제어하거나 확장하는 기법
* **자연어로 이루어진 문제를 코드로 변환**하여 **실행한 결과**를 사용자에게 **응답한다.**

### PAL 실습

1. 스크립트 준비

<figure><img src="https://3572862491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUON3CGxVeoUR2YdtAhxl%2Fuploads%2FDIGCE7jJ6SqOp5k6XxDF%2Fimage.png?alt=media&#x26;token=5fe85afc-6361-45c6-946c-295e56e036ce" alt=""><figcaption></figcaption></figure>

2. API키를 추가하여 OPEN AI 객체 생성

<figure><img src="https://3572862491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUON3CGxVeoUR2YdtAhxl%2Fuploads%2FqnPOiSwr1D8gKQmxzc0o%2Fimage.png?alt=media&#x26;token=2cad1d04-0ac6-4e3d-ba73-4559829e6132" alt=""><figcaption></figcaption></figure>

3. 유저 질문 추가 및 함수로 변환

```python
def generate_python_code(prompt):
  response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
      {
        "role": "system",
        "content": [
          {
            "type": "text",
            "text": "당신은 Python 프로그래밍을 잘하는 AI입니다. 주어진 문제를 해결하는 간단한 Python 코드를 생성하세요."
          },          
        ]
      },
      {"role":"user","content":prompt} # 사용자 질문
    ],
    response_format={
      "type": "text"
    },
    temperature=0.7,
    max_completion_tokens=4096,
    stop=["stop"],
    top_p=1,
    frequency_penalty=0,
    presence_penalty=0
  )
  return response.choices[0].message.content
```

4. python 코드 추출 함수 추가

````python
import re

def extract_code(text):
    """응답에서 Python 코드 부분만 추출"""
    code_block = re.search(r"```python(.*?)```", text, re.DOTALL)
    return code_block.group(1).strip() if code_block else None
````

5. python함수 실행 후 결과값 반환 함수 추가

```python
def execute_python_code(code):
    """생성된 Python 코드를 실행하고 결과를 반환"""
    local_vars = {}
    try:
        exec(code, {}, local_vars)
        return local_vars.get("result")  # 'result' 변수를 코드에서 반환하도록 설정
    except Exception as e:
        return f"코드 실행 중 오류 발생: {str(e)}"

```

5. 메서드 실행

```python
if __name__ == "__main__":
    # 예제 입력 (사용자가 질문하는 부분)
    user_question = "윤년을 구하는 함수를 만들어줘"

    # GPT를 사용하여 Python 코드 생성
    generated_code = generate_python_code(user_question)
    print("생성된 Python 코드:", generated_code)

    # 코드 부분만 추출
    extracted_code = extract_code(generated_code)
    if extracted_code:
        print("실행할 Python 코드:", extracted_code)
        
        # 코드 실행 후 결과 출력
        result = execute_python_code(extracted_code)
        print("실행 결과:", result)
    else:
        print("코드 추출 실패")
```

6. 응답결과&#x20;

<figure><img src="https://3572862491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUON3CGxVeoUR2YdtAhxl%2Fuploads%2FjypDHs5iIpaNOBdIqxu1%2Fimage.png?alt=media&#x26;token=6f71ae7f-83af-40c8-9373-0910b67c64ff" alt=""><figcaption></figcaption></figure>
