본문 바로가기
AI Study/AI Agent

[AI Agent] OpenAI API 사용 방법 및 기초 코드

by 하람 Haram 2025. 9. 25.
728x90

먼저 Openai의 API를 가져오는 것은 다른 블로그들 많으니 생략

그리고 이 API는 유출되면 골치아파지니 꼭

.env를 이용해서 관리하도록 하자

pip install python-dotenv

다운로드 받은 다음  .env 파일을 최상위 폴더에 두고

.gitignore에 추가해 준다

 

.env는 다음과 같이 필요한 것들을 자유롭게 적으면 된다 (" "필요 x)

base_url= http://10.0.0.0
api_key= ABCDEFG

 

 

1. 기본 개념 정리

제일 먼저 당연하게도 openai  패키지를 다운받아야 한다

python -m pip install --upgrade pip
pip install --upgrade --quiet openai
pip install python-dotenv

 

그리고 아래의 기본 코드를 살펴보자

import os
from dotenv import load_dotenv
load_dotenv()
base_url = os.getenv('base_url') # .env에 적은 변수랑 같으면 됨
api_key = os.getenv('api_key') # .env에 적은 변수랑 같으면 됨

from openai import OpenAI


load_dotenv() #환경 불렁오는 곳

# 서버를 이용한 모델 사용할 경우 base_url을 지정, OpenAI는 생략
client = OpenAI(
    base_url=base_url,  # vLLM 서버 주소 (OpenAI 사용시 생략)
    api_key=api_key                          # vLLM은 인증이 필요 없으므로 아무 값이나 입력
)

#Chat completion : 언어모델이 사용자가 입력한 텍스트에 대화형식으로 응답을 생성
response = client.chat.completions.create(
    model="/model",  #"gpt-4o"
    messages=[
        {"role": "system", "content": "너는 백설공주 이야기 속의 거울이야. 그 이야기 속의 마법 거울의 캐릭터에 부합하게 답변해줘."}, #system prompt 설정
        {"role": "user", "content": "세상에서 누가 제일 아름답니?"},
    ],
    max_tokens=256, #기본 256, 최대 2048
    temperature=0.7,
)


print(response)

print('----------------------------------------')	# ⑤
print(response.choices[0].message.content)

 

Openai는 서버 비용이 들어서, 아예 서버에 vLLM 올려놓고 사용중이여서 URL을 적어 주었다

 

제일 중요한 부분은

client.chat.completions.create 부분이다

 

client.chat.completions.create 

시스템(System) 역할

시스템 역할은 ChatGPT의 행동 지침을 설정하는 데 사용됩니다.

즉,  시스템 프롬포트 역할을 할 때 사용한다 (System Prompt)

{"role": "system", "content": "너는 백설공주 이야기 속의 거울이야. 그 이야기 속의 마법 거울의 캐릭터에 부합하게 답변해줘."}, #system prompt 설정

 

즉, role을 부여하는 것

ChatGPT에 특정 상황이나 컨텍스트를 제시할 때 활용

 

영어로 할 때는, "Act as a ___" 등으로 사용

 

보조자(Assistant) 역할

보조자 역할은 주로 대화의 연속성을 유지하고 이전 대화 내용을 바탕으로 응답을 생성하는 데 사용

- 즉 Few Shot 러닝에서 프롬포트 학습하는 부분이라 생각하면 됨

- 일반적으로는 대화 내용들 List에 저장

이 역할은 질문을 하기보다는, 이전의 대화를 참조하여 새로운 프롬프트에 대한 응답을 생성할 때 중요

- 그래서 주로 멀티 턴에서 사용한다

아래 코드 예시참고

사용자(User) 역할

사용자 역할은 일반적으로 ChatGPT에게 질문을 하는 경우에 사용

- 즉 사용자 프롬포트라고 생각하면 된다

사용자로부터의 입력은 대화의 흐름을 이어가고, 이전 대화 내용을 참조하여 응답을 생성하는 데 기준점이 된다.

 

max_tokens

 생성될 text의 최대 길이 : 기본 256 / 최대 2048

 

temperature

텍스트의 다양성과 창의성을 조절

기본 값 : 0.7 / 일반적으로 0.5 ~ 1.0  사용

낮은 temperature  : 일관성있고 예측 가능한 결과 제공

높은 temperature : 창의적이고 다양한 결과 제공

 

 

Multi Turn (멀티턴) 

위에서 언급한 assistant 기능을 이용해서 사용자의 대화를 저장하여

다음과 같이 멀티턴을 구현 할 수 있다

 

Multi-turn : 이전 대화를 기억하고 적절하게 반응하는 것

def get_ai_response(messages):

    response = client.chat.completions.create(
        model="/model",  #"gpt-4o"
        temperature=0.9,  # 응답 생성에 사용할 temperature 설정
        max_tokens=256, #기본 256, 최대 2048
        messages=messages,  # 대화 기록을 입력으로 전달
    )
    return response.choices[0].message.content  # 생성된 응답의 내용 반환

messages = [
    {"role": "system", "content": "너는 사용자를 도와주는 상담사야."},  # 초기 시스템 메시지
]

while True:
    user_input = input("사용자: ")  # 사용자 입력 받기

    if user_input == "exit":  # ② 사용자가 대화를 종료하려는지 확인인
        break
    
    messages.append({"role": "user", "content": user_input})  # 사용자 메시지를 대화 기록에 추가 
    ai_response = get_ai_response(messages)  # 대화 기록을 기반으로 AI 응답 가져오기
    messages.append({"role": "assistant", "content": ai_response})  # AI 응답 대화 기록에 추가하기

    print("AI: " + ai_response)  # AI 응답 출력

 

728x90