[응용#7] ChatGPT API로 자연어 리포트 자동 생성하기

한줄 요약:
이전에 만든 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 SDK
  • pandas: 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. 자주 하는 오류 & 해결

증상원인해결
AuthenticationErrorAPI 키 누락/오타.env 로드 확인, 환경변수 대소문자 점검
401/403권한·키 문제키 유효성·조직 권한 확인
429 (Rate limit)요청 과다지수 백오프/배치 묶음
모델 오류모델명 변경/미지원Models 문서에서 사용 가능 모델 재확인

7. 체크리스트

  • .envOPENAI_API_KEY 저장
  • report.csv 준비(응용#5 결과)
  • 프롬프트에 출력 형식 명확히 명시
  • 모델명 최신화(문서 확인)
  • final_report.md 생성 확인

8. 요약 한 줄

크롤링 → LLM 요약 → 블로그/메일까지 원클릭!
Responses API로 정돈된 자연어 리포트를 자동 생산하자 ✅


이전 강좌 👈 [응용#6] 스케줄러로 매일 자동 리포트 메일 발송
다음 강좌 👉 [응용#8] 워드프레스 자동 포스팅: REST API로 글/메타/이미지 업로드

댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.