# OpenAI API설정

### 1. API KEY 설정

* Playground를 사용하기 위해서는 OpenAI API키가 필요.&#x20;
* OpenAI에서 API KEY 발급을 위해서는 최소 5$의 과금이 필요하며, VISA카드가 요구됨.
* [VISA카드 등록 링크](https://platform.openai.com/settings/organization/billing/overview)
* **Add payment details** 클릭 후 카드 등록
* **credit balance**에 최소금액 5$ 추가
* [API키 발급 페이지로 이동](https://platform.openai.com/api-keys)
* **Create new secret key**클릭
* Name과 프로젝트 설정후 Secret Key 발급. -> 발급한 Secret Key는 안전한 곧 에 저장해둔다.

### 2. Python 설치

* colab으로 진행하다가 변경하기.

{% embed url="<https://www.python.org/>" %}

<figure><img src="https://3572862491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUON3CGxVeoUR2YdtAhxl%2Fuploads%2Fj9AGLMpH8yt9ipobdOAp%2Fimage.png?alt=media&#x26;token=85ff7f91-0bf1-4781-8b95-31a2888f971c" alt=""><figcaption><p>안정화버전으로 설치</p></figcaption></figure>

* 환경변수 추가해야 할 수 있음.

<figure><img src="https://3572862491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUON3CGxVeoUR2YdtAhxl%2Fuploads%2FnLy7GZY81Tq6lppyhwFN%2Fimage.png?alt=media&#x26;token=5a97fcc4-5ba3-41fd-8725-6b7df42507f8" alt=""><figcaption></figcaption></figure>

### 3. 가상환경(Virtual Environment) 생성 및 활성화

{% hint style="info" %}
**가상환경**

파이썬 프로젝트마다 독립적인 패키지 및 라이브러리 환경을 유지할 수 있도록 지원하는 기능.  가상환경에 프로젝트와 관련된 의존성들을 설치하면 다른 파이썬 프로젝트들의 패키지들과 충동을 방지할 수 있다.
{% endhint %}

```
python -m venv pal_env
pal_env\Scripts\activate
```

### 4. 라이브러리 설치

```
pip install openai python-dotenv
```

### 5. VsCode 설정

1. Pyhton 확장 프로그램 설치
   1. Python
2. pal\_env가상환경 연결
   1. Ctrl+Shift+P 누른 후 Python:Select Interpreter검색
   2. pal\_env가상환경 선택

### 6. 환경변수 설정

* .env파일 생성
  * api\_key를 보관할 저장소
* 프로젝트에서 사용할 api키 등록

```
OPENAI_API_KEY="your-api-key"
```

### 7. 테스트스크립트 생성

<figure><img src="https://3572862491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUON3CGxVeoUR2YdtAhxl%2Fuploads%2FKh2p4C8GD6GhvLOV60o5%2Fimage.png?alt=media&#x26;token=27707cbc-ef09-4af3-ba6d-5e3b7f05ea50" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3572862491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUON3CGxVeoUR2YdtAhxl%2Fuploads%2FBys4LeU0qLgSdvMHKude%2Fimage.png?alt=media&#x26;token=3258e513-f33f-41fd-a789-2e9606d8e784" alt=""><figcaption></figcaption></figure>

### 8. 테스트 파일생성 후 붙여넣기

```python
### main.py
from openai import OpenAI
client = OpenAI()

response = client.chat.completions.create(
  model="gpt-4o",
  messages=[
    {
      "role": "system",
      "content": [
        {
          "type": "text",
          "text": "당신은 챗봇입니다. 사용자의 질문에 대해 친절하게 응답해주세요"
        }
      ]
    },
    {
      "role": "assistant",
      "content": [
        {
          "type": "text",
          "text": "오늘의 날씨에 대해서 알려줘"
        }
      ]
    }
  ],
  response_format={
    "type": "text"
  },
  temperature=0.7,
  max_completion_tokens=4096,
  stop=["stop"],
  top_p=1,
  frequency_penalty=0,
  presence_penalty=0
)
```

### 9. API\_KEY 설정

```python
### main.py
import os
from dotenv import load_dotenv
from openai import OpenAI

# .env 파일 로드
load_dotenv()

# 환경 변수에서 API 키 가져오기
api_key = os.getenv("OPENAI_API_KEY")

client = OpenAI(api_key=api_key)

### 아래는 그대로 ###
....



print(response) #응답 전체 출력
print(response.choices[0].message.content) #응답내용 출력

```

10. 실행

* python main.py

11. 출력결과

```
ChatCompletion
(id='chatcmpl-AzCkwdb0lcJ91XqQbby40t8Jup7xU', 
   choices=[
     Choice(
       finish_reason='stop',
       index=0,
       logprobs=None,
       message=ChatCompletionMessage(
        content='죄송하지만, 실시간 날씨 정보를 제공할 수는 없습니다. 하지만 주변의 날씨 앱이나 웹사이트를 통해 현재 날씨를 확인하실 수 있습니다. 도움이 필요하신 다른 사항이 있다면 말씀해 주세요!', 
        refusal=None, 
        role='assistant', 
        audio=None, 
        function_call=None, 
        tool_calls=None))], 
    created=1739150406, 
    model='gpt-4o-2024-08-06', 
    object='chat.completion',
    service_tier='default', 
    system_fingerprint='fp_50cad350e4', 
    usage=CompletionUsage(
      completion_tokens=49, 
      prompt_tokens=39, 
      total_tokens=88, 
      completion_tokens_details=CompletionTokensDetails(
        accepted_prediction_tokens=0, 
        audio_tokens=0, 
        reasoning_tokens=0, 
        rejected_prediction_tokens=0), 
      prompt_tokens_details=PromptTokensDetails(audio_tokens=0, cached_tokens=0)))
```
