한줄 요약:
이전에 만든 report.csv/report.md를 불러와서, 요약·핵심 인사이트·키워드까지 담긴 경영 보고서 스타일 텍스트를 ChatGPT API로 자동 생성!
본 글의 예제는 OpenAI 공식 Python SDK + Responses API 사용 기준이야. 설치·사용법과 모델명은 공식 문서 기준으로 최신화했어.
1. 목표
report.csv(응용#5에서 생성)를 읽어 요약용 프롬프트 구성- Responses API로 자연어 리포트 생성
- 구조화(제목/요약/인사이트/권고) 출력
- 결과를
final_report.md로 저장 → 블로그나 메일에 바로 사용
2. 준비물
1) 패키지 설치
pip install openai pandas python-dotenv
openai: 공식 Python SDKpandas: CSV 읽기python-dotenv: API 키를 안전하게.env에서 불러오기
2) API 키 설정
프로젝트 루트에 .env 파일 생성:
OPENAI_API_KEY=sk-아주긴키...
OpenAI SDK는 환경변수의 API 키를 사용해. 기본 키 설정·라이브러리 가이드는 공식 문서를 참고!
3. 완성 코드 (복붙)
파일명 예시:
llm_report.py
import os
import pandas as pd
from dotenv import load_dotenv
# 1) .env에서 API 키 로드
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
raise RuntimeError("OPENAI_API_KEY가 .env에 없습니다.")
# 2) OpenAI SDK 불러오기 (Responses API)
from openai import OpenAI
client = OpenAI(api_key=api_key)
# 3) CSV 불러오기 (응용#5에서 만든 report.csv)
df = pd.read_csv("report.csv") # columns: url, domain, title, summary, keywords
# 4) 프롬프트 생성 유틸
def build_prompt(df: pd.DataFrame) -> str:
rows = []
for i, r in df.iterrows():
rows.append(
f"- 제목: {str(r.get('title', ''))}\n"
f" 도메인: {str(r.get('domain', ''))}\n"
f" 링크: {str(r.get('url', ''))}\n"
f" 요약: {str(r.get('summary', ''))}\n"
f" 키워드: {str(r.get('keywords', ''))}\n"
)
body = "\n".join(rows)
system = (
"너는 한국어 비즈니스 애널리스트다. 아래 수집 데이터로 "
"경영진 보고용 요약을 작성하라. 최대 600~900 단어, 불릿과 소제목 포함. "
"톤은 간결·분석적. 중복은 제거하고 사실만. 마지막에 실행 가능한 권고 3~5개."
)
user = (
"=== 수집 데이터 시작 ===\n"
f"{body}\n"
"=== 수집 데이터 끝 ===\n\n"
"출력 형식:\n"
"## 오늘의 핵심 요약\n"
"요약 단락 2~3개\n\n"
"## 주요 인사이트\n"
"- 항목 5개 내외\n\n"
"## 위험/이슈\n"
"- 항목 3개 내외\n\n"
"## 실행 권고안\n"
"- 항목 3~5개 (담당/마감일 제안 포함)\n"
)
return system, user
system_msg, user_msg = build_prompt(df)
# 5) 모델 선택과 호출
# 참고: 최신 모델과 엔드포인트는 공식 문서 'Models' 및 'API Reference'를 확인하세요. :contentReference[oaicite:2]{index=2}
# 여기서는 빠르고 효율적인 최신형 소형 추론 모델 예시를 사용.
model_name = "o4-mini" # 예: 합리적 가격/속도 밸런스 모델
# 다른 대안: "gpt-4.1" 계열 등 텍스트 생성에 적합한 범용 모델. :contentReference[oaicite:3]{index=3}
resp = client.responses.create(
model=model_name,
input=[
{"role": "system", "content": system_msg},
{"role": "user", "content": user_msg},
],
)
final_text = resp.output_text # Responses API의 텍스트 본문
# (대화 상태 다루기/메시지 리스트는 'Conversation state' 가이드 참고) :contentReference[oaicite:4]{index=4}
# 6) 파일로 저장
with open("final_report.md", "w", encoding="utf-8") as f:
f.write(final_text)
print("✅ 생성 완료: final_report.md")
위 예시는 Responses API를 사용한 텍스트 생성 기본형이야. 엔드포인트/파라미터는 API 레퍼런스를 참조해 최신 스펙에 맞게 조정해도 좋아
4. 확장 옵션
1) 구조화 출력(Structured Output)
- 모델이 JSON 스키마에 맞춘 구조로 응답하도록 하면,
“요약/인사이트/권고안”을 정확한 필드로 받아서 대시보드에 바로 넣을 수 있어. - 구현 방식은 Responses API의 도구/구조화 출력 가이드를 확인!
2) 함수 호출(툴 호출)로 후처리 자동화
- 생성된 권고안의 마감일을 캘린더에 등록하는 등 함수 호출 연동이 가능.
- JSON Schema 기반 function calling 가이드를 참고.
3) 모델 선택 팁
- 속도·비용 최적이면
o4-mini같은 소형 추론 모델 - 품질 중시면 범용 상위 모델(예:
gpt-4.1라인) 고려 - 최신/권장 모델은 Models 페이지에서 항상 확인!
5. 운영 팁 & 보안
- API 키는 코드에 하드코딩 금지 →
.env/환경변수 사용(위 예시처럼) - 프라이빗 데이터 포함 시 사내 정책·개인정보 준수
- 비용 제어: 배치 단위로 합쳐 요청(프롬프트 압축), 초안은 소형 모델, 최종본만 상위 모델
- 에러/리트라이: 429(요청 과다), 5xx 대비 재시도 백오프 적용
6. 자주 하는 오류 & 해결
| 증상 | 원인 | 해결 |
|---|---|---|
AuthenticationError | API 키 누락/오타 | .env 로드 확인, 환경변수 대소문자 점검 |
| 401/403 | 권한·키 문제 | 키 유효성·조직 권한 확인 |
| 429 (Rate limit) | 요청 과다 | 지수 백오프/배치 묶음 |
| 모델 오류 | 모델명 변경/미지원 | Models 문서에서 사용 가능 모델 재확인 |
7. 체크리스트
.env에OPENAI_API_KEY저장report.csv준비(응용#5 결과)- 프롬프트에 출력 형식 명확히 명시
- 모델명 최신화(문서 확인)
final_report.md생성 확인
8. 요약 한 줄
크롤링 → LLM 요약 → 블로그/메일까지 원클릭!
Responses API로 정돈된 자연어 리포트를 자동 생산하자 ✅
이전 강좌 👈 [응용#6] 스케줄러로 매일 자동 리포트 메일 발송
다음 강좌 👉 [응용#8] 워드프레스 자동 포스팅: REST API로 글/메타/이미지 업로드