본문으로 이동
My AI Console

긴 글을 세 줄 요약하고 키워드 뽑기

회의록, 고객 문의, 뉴스 스크랩처럼 매일 쌓이는 긴 글을 다 읽기는 어렵습니다. 이 글에서는 FlameAI API로 긴 글을 세 문장으로 요약하고 핵심 키워드를 뽑는 작은 프로그램을 만들어 봅니다. 결과를 JSON으로 받기 때문에 엑셀 정리, 검색 태그, 알림 메시지 등 다른 프로그램에 바로 이어 붙일 수 있습니다.

긴 문서가 FlameAI를 거쳐 세 줄 요약과 키워드 태그로 정리되는 그림

이런 곳에 쓸 수 있습니다

  • 회의록 정리: 회의 메모를 넣으면 결정 사항 요약과 #일정 #담당자 같은 태그가 나옵니다.
  • 고객 문의 분류: 문의마다 키워드를 붙여 "환불", "배송", "오류" 같은 유형별로 모아 볼 수 있습니다.
  • 자료 스크랩: 기사나 보고서를 모아 두고 요약만 훑어본 뒤 필요한 글만 정독합니다.
  • 블로그·문서 태그 자동화: 글을 올릴 때 태그와 미리보기 문구를 자동으로 채웁니다.

준비물

  • 연결된 FlameBox와 Cortex 1개. 아직 없다면 첫 API 호출하기를 먼저 따라 해 주세요.
  • 마이페이지 › My API의 API 주소와 Secret Key
  • Python 3와 requests 패키지 (pip install requests)

핵심 아이디어: 형식을 정해서 부탁하기

AI에게 그냥 "요약해 줘"라고 하면 매번 말투와 형식이 달라져서 프로그램이 결과를 읽기 어렵습니다. 그래서 system 메시지로 "이 JSON 형식으로만 답하라"고 정해 두고, 원문은 user 메시지로 보냅니다.

너는 문서 요약 도우미다.
입력된 글을 읽고 아래 JSON 형식으로만 답한다. 다른 말은 쓰지 않는다.
{"summary": "세 문장 이내 요약", "keywords": ["핵심 키워드", "최대 5개"]}

코드

import json, re, uuid, requests

API_BASE   = "https://api-3.flameai.im/Nx7bQ2mZ"   # My API의 API 주소
SECRET_KEY = "fai_xxxxxxxx"                         # My API의 Secret Key
CORTEX_ID  = "my-assistant"                         # 사용할 Cortex ID

SYSTEM_PROMPT = """너는 문서 요약 도우미다.
입력된 글을 읽고 아래 JSON 형식으로만 답한다. 다른 말은 쓰지 않는다.
{"summary": "세 문장 이내 요약", "keywords": ["핵심 키워드", "최대 5개"]}"""

def summarize(text):
    res = requests.post(
        f"{API_BASE}/cortex/{CORTEX_ID}/messages",
        headers={"Authorization": f"Bearer {SECRET_KEY}"},
        json={
            # 문서마다 새 대화로 처리 — 앞 문서 내용이 섞이지 않게
            "conversationId": "summary-" + uuid.uuid4().hex[:8],
            "options": {"cortex_reset": True, "think": 0},
            "messages": [
                {"role": "system", "content": SYSTEM_PROMPT},
                {"role": "user",   "content": text},
            ],
        },
        timeout=300,
    )
    res.raise_for_status()
    blocks = res.json()["message"]["content"]
    answer = "".join(b["text"] for b in blocks if b["type"] == "text")
    found = re.search(r"\{.*\}", answer, re.S)   # 앞뒤에 다른 말이 섞여도 JSON 부분만 꺼냄
    return json.loads(found.group(0))


if __name__ == "__main__":
    memo = """
    10월 2주차 주간회의. 신규 앱 출시일을 11월 3일로 확정했다.
    마케팅 예산은 기존 안보다 20% 줄여 집행하기로 했고, 랜딩 페이지는 김 매니저가 맡는다.
    결제 모듈 테스트가 아직 끝나지 않아 출시 전 주에 재점검이 필요하다는 의견이 나왔다.
    """
    result = summarize(memo)
    print("요약:", result["summary"])
    print("키워드:", ", ".join(result["keywords"]))

코드에서 눈여겨볼 곳

  • cortex_reset: True: FlameBox의 Cortex는 같은 대화의 앞 내용을 기억합니다. 요약처럼 문서 하나하나를 따로 처리하는 일에서는 이전 문서가 섞이면 안 되므로, 요청마다 새 conversationId와 함께 대화를 초기화합니다.
  • think: 0: 모델이 오래 생각하지 않고 바로 답하게 합니다. 요약처럼 정해진 형식의 작업은 대부분 이 설정으로 충분하고 응답도 빨라집니다.
  • JSON만 꺼내기: 모델이 가끔 JSON 앞뒤에 인사말을 붙일 때가 있어서, 정규식으로 { … } 부분만 꺼내 읽습니다.

실행 결과

모델과 설정에 따라 문장은 조금씩 달라지지만, 대략 아래와 같은 형태로 나옵니다.

요약: 신규 앱 출시일이 11월 3일로 확정되었습니다. 마케팅 예산은 20% 줄여 집행하며 랜딩 페이지는 김 매니저가 담당합니다. 결제 모듈은 출시 전 주에 재점검이 필요합니다.
키워드: 출시일정, 마케팅 예산, 랜딩 페이지, 결제 모듈, 재점검
[이미지 자리] 실제 실행 결과
터미널에서 위 코드를 실행해 요약과 키워드가 출력된 화면 (Secret Key는 가려서)

더 잘 쓰는 요령

  • 원하는 대로 형식 바꾸기: "category": "환불|배송|오류|기타 중 하나"처럼 필드를 추가하면 분류까지 한 번에 받을 수 있습니다.
  • 키워드 기준 정해 주기: "사람 이름은 제외", "명사로만"처럼 규칙을 시스템 메시지에 한 줄 더 적으면 결과가 더 고르게 나옵니다.
  • 아주 긴 글은 나눠서: Cortex가 한 번에 읽을 수 있는 길이(컨텍스트 크기)를 넘는 글은 문단 단위로 나눠 요약한 뒤, 요약들을 모아 한 번 더 요약하면 됩니다.
  • 여러 문서를 빠르게: Cortex 하나는 한 번에 요청 하나를 처리합니다. 문서가 많다면 Cortex를 여러 개 만들어 나눠 보내면 동시에 처리할 수 있습니다.

다음 단계

이 함수에 파일 읽기나 메일 수신을 붙이면 "매일 아침 받은 문의를 요약해서 보내 주는 봇"이 됩니다. API의 다른 기능은 API 매뉴얼에서 확인할 수 있습니다.