본문

6. AI 검색을 더 똑똑하게: 문서 정리의 기술

반응형

똑똑한 AI를 만드는 방법

사람의 정답을 답변하기 위한 전략

LLM의 정답을 답변하기 위한 전략

  • 파인튜닝
  • 프롬프트 엔지니어링
  • RAG(검색 증강 생성)


1. 프롬프트 엔지니어링

프롬프트는 AI에게 주는 지시나 질문입니다. 마치 학생에게 문제를 내듯이, 명확하게 질문할수록 좋은 답변을 받을 수 있습니다.

프롬프트:

  1. 단순 질문의 경우
    • 나쁜 예: "커피에 대해 알려줘"
    • 좋은 예: "아라비카 커피와 로부스타 커피의 차이점을 맛, 카페인 함량, 가격 측면에서 설명해줘"
  2. 요약을 요청할 때
    • 나쁜 예: "이 글 요약해줘"
    • 좋은 예: "이 글의 핵심 내용을 3개의 문장으로 요약하고, 각 요점에 번호를 붙여줘"
  3. 분석을 요청할 때
    • 나쁜 예: "이 데이터 분석해줘"
    • 좋은 예: "지난 6개월간의 매출 데이터를 월별로 분석하고, 성장률과 주요 변동 원인을 설명해줘
  4. 비교를 요청할 때
    • 나쁜 예: "이것들 비교해줘"
    • 좋은 예: "전기차와 수소차의 장단점을 환경영향, 충전 시간, 유지비용 측면에서 표로 만들어 비교해줘"

프롬프트 작성 팁:

  1. 구체적인 형식 지정하기
    • 답변 길이: "300자 이내로..."
    • 형식: "표로 작성해줘", "번호를 붙여서..."
    • 예시: "다음과 같은 형식으로 작성해줘..."
  2. 맥락 제공하기
    • 대상: "고등학생이 이해할 수 있는 수준으로..."
    • 목적: "회의 자료로 사용할 거야..."
    • 상황: "전문가가 아닌 일반인에게 설명하듯이..."

페르소나 프롬프트

AI에게 특정 전문가나 역할을 부여하면, 해당 관점에서 더 전문적이고 맥락에 맞는 답변을 받을 수 있습니다.

  1. 전문가 역할 부여
    • 나쁜 예: "주식 투자 방법 알려줘"
    • 좋은 예: "당신은 20년 경력의 투자 전문가입니다. 초보 투자자를 위한 주식 투자 입문 가이드를 5가지 핵심 원칙으로 설명해주세요."
  2. 교육자 역할
    • 나쁜 예: "광합성 설명해줘"
    • 좋은 예: "당신은 중학교 과학 선생님입니다. 학생들이 쉽게 이해할 수 있도록 광합성 과정을 일상생활의 예시를 들어 설명해주세요."
  3. 특정 분야 전문가
    • 나쁜 예: "이 코드 개선해줘"
    • 좋은 예: "당신은 10년 차 Python 개발자입니다. 이 코드를 성능과 가독성 측면에서 검토하고, 개선사항을 구체적인 예시와 함께 제안해주세요."

페르소나 프롬프트 작성 팁:

  1. 전문성 수준 명시하기
    • "당신은 15년 경력의 소아과 의사입니다..."
    • "실리콘밸리에서 일하는 수석 개발자의 관점으로..."
  2. 목표 대상 지정하기
    • "컴퓨터를 처음 사용하는 노인을 대상으로..."
    • "5살 아이에게 설명하듯이..."
  3. 상황 설정하기
    • "당신은 대형 서점의 베스트셀러 담당 MD입니다. 이번 달 추천 도서 목록을..."
    • "유명 레스토랑의 수석 셰프로서, 이 레시피를 가정에서 쉽게 따라할 수 있도록..."

2. RAG

RAG 시스템의 이해

 

기본 개념

RAG(Retrieval-Augmented Generation)는 AI가 답변할 때 참고 자료를 찾아보고 답하는 방식입니다.

마치 학생이 시험 볼 때 교과서를 찾아보면서 답하는 것과 비슷합니다.

장점

  • 최신 정보 반영 용이
  • 신뢰성 높은 답변
  • 답변 출처 추적 가능

 

RAG 시스템의 문서 처리 절차

  1. 원본 문서 입력
    • PDF, Word, 텍스트 등의 문서를 시스템에 업로드
      • 예: 금융 상품 설명서, 연간 보고서, FAQ 문서
    • OCR이나 파싱을 통해 텍스트 추출
    • 메타데이터(작성일, 출처 등) 추출
  2. 문서 분할 (청킹)
    • 긴 문서를 적절한 크기로 나누기
      • 예: 50페이지 문서를 1페이지씩 분할
    • 토큰 수나 문자 수 기반으로 청크 크기 설정
    • 문맥 유지를 위해 일부 내용은 중복(오버랩) 허용
  3. 벡터화 (임베딩)
    • 각 청크를 임베딩 모델로 벡터화(텍스트를 숫자로 변환)
      • 예: "주식투자"라는 단어를 [0.2, 0.8, 0.5, ...]와 같은 숫자 배열로 변환
    • 문맥을 고려한 의미 기반 벡터 생성
      • 임베딩 모델 예: OpenAI 임베딩, BERT, Sentence Transformers
  4. 인덱싱
    • 빠른 검색을 위해 벡터에 인덱스 부여
      • 벡터 데이터베이스에 색인 생성
      • 유사도 검색을 위한 인덱스 구조 생성
      • 예: 도서관의 책 분류 번호처럼 벡터에 고유 번호 부여
    • 메타데이터와 벡터 데이터 연결
  5. 저장소 보관
    • 벡터 데이터베이스에 벡터와 메타데이터 저장
    • 금융 상품 설명서 처리 예시
{
    "vector": [0.2, 0.8, 0.5, ...],  # 임베딩된 벡터값
    "text": "이 적금 상품의 기본금리는 연 3.5%이며, ...",  # 원본 텍스트
    "metadata": {
        "document_id": "savings_product_2024",  # 문서 ID
        "page_number": 3,  # 페이지 번호
        "chunk_id": "chunk_127",  # 청크 ID
        "created_date": "2024-02-19",  # 문서 작성일
        "product_type": "savings",  # 상품 유형
        "last_updated": "2024-02-19"  # 최종 업데이트일
    }
}

 

반응형

공유

댓글