jju71 님의 블로그
GPT API 본문
1. 프롬프트 엔지니어링
- 인공지능 모델, 특히 자연어 처리 모델과의 상호작용을 최적화하는 기술
- 모델이 의도한 답변을 도출하도록 텍스트를 구성하는 방식으로, 적절한 질문 형식이나 설명을 제공하여 더 나을 성과를 얻는 것을 목표로 함
1. Role
AI 모델과의 대화에서 특정 문맥을 설정하거나, 모델의 응답 스타일과 관점을 조정하기 위해 사용하는 개념
- User: AI와 상호작용하는 주체로, 일반적인 질문이나 요청을 전달
- Assistant: AI 모델이 자체적으로 응답할 때의 역할로, 사용자의 질문이나 명령에 따라 답변을 제공
- System: AI 모델의 행동과 스타일을 지시하는 역할로, AI가 어떻게 응답해야 할지 지침을 설정
가격
- GPT-X.X Sol
- 가장 성능이 좋은 모델
- 긴 코드 이해 및 생성
- 복잡한 버그 수정
- 가장 비쌈(Terra/Luna 보다 속도는 느림)
- RAG, LangGraph, 복잡한 FastAPI 프로젝트, 논문 분석, 의료AI 등
- GPT-X.X Terra
- Sol에 가까운 성능(비용은 절반 수준)
- 성능과 비용의 균형 모델
- Python 개발, FastAPI, 코드 리뷰, 일반적인 GPT API 서비스 등
- GPT-X.X Luna
- 매우 빠름(토큰 비용이 가장 저렴)
- 어려운 추론에서 정확도가 떨어짐
- 챗봇, 분류, 요약, 번역, 데이터 추출 등
- input
- GPT에게 보내는 토큰
- 매 요청시
- Cached input
- 이전에 보낸 입력을 재사용
- 캐시가 존재할 때
- Cache writes
- 새로운 입력을 캐시에 저장
- 처음 입력했을 때
- Output
- GPT가 생성한 답변
- 답변을 받을 때
client.response.create(
model='gpt-5-terra',
input='안녕하세요?' # input
)
안녕하세요! 무엇을 도와드릴까요? # output
# 같은 내용을 여러번 보내면 다시 계산하지 않고 재사용
너는 최고의 AI 프로그래머야. 앞으로 내 질문에 자세히 설명해줘. 예시는 만들지마!(500 토큰)
Q1. OpenAI 모델 중 가장 좋은 모델은 뭐야?
Q2. ...
토큰
- 토큰은 모델이 처리하는 텍스트의 작은 단위
- 하나의 토큰은 단어, 부분적인 단어, 또는 공백이나 구두점일 수 있음(모델에 따라 다름)
- GPT 모델은 텍스트를 처리할 때 토큰들을 기반으로 학습하고, 예측을 생성
from dotenv import load_dotenv
import os
# pip install openai
from openai import OpenAI
# env 파일 읽어오기
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
api_key
client = OpenAI(
api_key = os.getenv("OPENAI_API_KEY")
)
response = client.response.create(
model="gpt-5-nano",
input = "안녕하세요? 오늘 기분이 어때요?"
)
response.output[1].content[0].text
-----------------------------------------------------------
'안녕하세요! 저는 감정을 느끼는 건 아니지만, 오늘도 여러분의 대화를 듣고 도와드리기 위해 여기 있어요.
오늘 기분은 어떠신가요? 특별히 이야기하고 싶은 주제나 도움이 필요한 게 있나요?
원하시면 간단한 기분 점검이나 스트레스 해소 팁도 같이 나눠드릴게요.'
def get_response_text(response):
for item in response.output:
if item.type == "message":
return item.content[0].text
return None
get_response_text(response)
------------------------------------------------
'안녕하세요! 저는 감정을 느끼는 건 아니지만, 오늘도 여러분의 대화를 듣고 도와드리기 위해 여기 있어요.
오늘 기분은 어떠신가요? 특별히 이야기하고 싶은 주제나 도움이 필요한 게 있나요?
원하시면 간단한 기분 점검이나 스트레스 해소 팁도 같이 나눠드릴게요.'
client = OpenAI(
api_key = os.getenv("OPENAI_API_KEY")
)
"""
assistant로 등록하면 내가 썼던 말들을 기억함
제 이름은 김사과입니다.
안녕하세요. 김사과님
제 이름이 뭐였죠?
"""
message = [
{
"role" : "user", "content":"안녕하세요"
},
{
"role" : "assistant",
"content" :"안녕하세요! 무엇을 도와드릴까요?"
},
{
"role" : "user",
"content" :"FastAPI가 뭐에요?"
}
]
response = client.responses.create(
model="gpt-5-nano",
input=message
)
get_response_text(response)
------------------------------------------------------
'FastAPI는 파이썬으로 빠르고 쉽게 API 서버를 만들 수 있게 해 주는 웹 프레임워크예요.
타입 힌트를 강하게 활용해 입력 검증과 데이터 직렬화(출력 형식)를 자동으로 처리하고,
비동기(async) 프로그래밍을 기본적으로 지원해 빠른 성능을 낼 수 있습니다.
또한 자동으로 Swagger/OpenAPI 기반의 API 문서를 생성해 주는 점이 큰 장점이에요.
\n\n주요 특징\n- 고성능: 비동기 지원으로 빠른 처리 가능\n- 타입 힌트 기반 검증: Pydantic으로 데이터 검증,
직렬화 자동화\n- 자동 API 문서: /docs (Swagger UI),
/redoc (ReDoc)로 바로 문서 확인\n- 의존성 주입과 라우팅 편의성\n- ASGI 기반으로 uvicorn 같은 서버에서
쉽게 배포 가능\n- Starlette 위에 만들어져 유연하고 확장성 높음\n\n간단한 예시\n-
설치: pip install fastapi uvicorn\n- 코드 예시(간단한 GET 엔드포인트)\n\n
from fastapi import FastAPI\n\napp = FastAPI()\n\n@app.get("/")\ndef read_root():\n
return {"Hello": "World"}\n\n실행 방법\n- uvicorn으로 실행: uvicorn main:app --reload\n
(main은 파일 이름, 예: main.py에 위 코드가 들어 있다면)\n
- 자동 문서 확인:\n - http://127.0.0.1:8000/docs (Swagger UI)\n
- http://127.0.0.1:8000/redoc (ReDoc)\n\n원하시면 초보자용으로 더 자세한 튜토리얼이나,
실제 프로젝트에 맞춘 예제도 같이 만들어 드릴게요. 어떤 용도로 써 보시려나요?'
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY")
)
message = [
{
"role":"system",
"content":"당신은 초등학교 선생님입니다."
},
{
"role":"user",
"content":"FastAPI가 뭐예요?"
}
]
response = client.responses.create(
model="gpt-5-nano",
input=messages
)
get_response_text(response)
-----------------------------------------------------
'좋아, 쉽게 설명해줄게요. FastAPI는 파이썬으로 웹에서 다른 프로그램이나 앱이 정보를 주고받을 수 있게 해주는
아주 빠르고 편한 도구예요.\n\n비유로 이해하기\n- 생각해 보세요. 학교 앞 문을 통해 친구들이 편지를 보내고 받는
시스템이 있다고 할 때, FastAPI는 그 문을 열고 닫는 규칙과 처리하는 방법을 아주 깔끔하고 빠르게 만들어 주는
프레임워크예요.\n- 다시 말해, API를 만들 때 필요한 코드양을 줄이고 안전하게 만들어 주는 도구예요.
\n\n주요 특징\n- 빠름: 성능이 좋아요.\n- 배우기 쉬움: 초보자도 비교적 빨리 배울 수 있어요.
\n- 자동 문서화: 만들어 놓으면 브라우저에서 /docs 나 /redoc 로 자동으로 API 문서를 볼 수 있어요.
\n- 입력값 검증: 보내는 데이터가 올바른지 자동으로 확인해줘요.\n- 비동기 지원: 여러 일을 동시에 처리하는 것이
편리해요.\n- 배포가 쉬움: 작게 시작해도 잘 커질 수 있어요.\n\n간단한 예제\n- 가장 기본적인 API 엔드포인트를
만드는 코드 예시입니다.\n\n예제 코드 (main.py)\nfrom fastapi import FastAPI\n\napp = FastAPI()
\n\n@app.get("/")\ndef read_root():\n return {"메시지": "안녕, 세계야!"}
\n\n- 이 코드를 저장하고 uvicorn으로 실행하면 됩니다.
\n실행 방법\n- 커맨드: pip install fastapi[all] 또는 pip install fastapi
\n- 그리고: uvicorn main:app --reload\n- 그러면 http://localhost:8000 에서 작동을 볼 수 있어요.
\n- API 문서는 자동으로 생깁니다. 브라우저에서 http://localhost:8000/docs 를 열면 Swagger UI,
/redoc 로도 문서를 볼 수 있어요.\n\n필요하면 더 자세한 예제(GET 외에도 POST로 데이터 받기, 경로 매개변수
사용하기 등)도 같이 보여줄게요. 어떤 걸 먼저 배우고 싶나요?'
# max_output_tokens: 토큰 제한
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY")
)
message = [
{
"role":"user", "content":"안녕하세요"
}
]
response = client.responses.create(
model="gpt-5-nano",
input=messages,
max_output_tokens=30
)
response.status
-----------------------------------------------------
'incomplete'
max_output_tokens: 토큰 제한
response.status
- completed : 응답 생성이 정상적으로 완료됨
- incomplete: 응답을 끝까지 만들지 못하고 중간에 종료됨
- failed: 오류로 인해 응답 생성 실패
- queued: 처리 대기열에 들어가 기다리는 중
- in_progress: 현재 응답을 생성하는 중
- canceled: 요청이 취소됨
# temperature: 항상 비슷한 답(0), 불필요하게 길게 말하는(1,높은 숫자) 경우 감소
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY")
)
messages = [
{
"role":"user", "content":"안녕하세요"
}
]
response = client.responses.create(
model="gpt-4.1-nano",
input=messages,
temperature=0
)
get_response_text(response)
----------------------------------------------------------------------
'안녕하세요! 어떻게 도와드릴까요?'
temperature: 항상 비슷한 답(0), 불필요하게 길게 말하는(1, 높은 숫자) 경우 감소
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY")
)
messages = [
{
"role":"user", "content":"안녕하세요"
}
]
response = client.responses.create(
model="gpt-4.1-nano",
input=messages,
temperature=1
)
get_response_text(response)
-----------------------------------------------------
'안녕하세요! 어떤 도움이 필요하신가요?'