단위 3 / 12

기술 자료에서 답변 생성(RAG 소개)

이득:

  • 지식 기반 생성(RAG)의 논리와 환각을 줄이는 이유 이해
  • 제공된 소스 문서만을 기반으로 모델이 인용으로 응답하도록 하는 기능
  • 소스에 없는 질문을 문제를 꾸미지 않고 안전하게 전달하여 관리하는 능력

언어 모델은 많은 것을 "알지만" 오늘 회사의 반품 정책, 현재 가격표 또는 어제 변경된 배송 계약은 알지 못합니다. 더 나쁜 것은, 그가 모를 때, 그는 종종 그것을 꾸며내고 극도로 자신감 있는 어조로 글을 쓴다. 이는 고객 서비스의 치명적인 결함입니다. 모델에서는 "환불은 30일 이내에 이루어집니다"라고 되어 있지만 정책은 14일일 수 있습니다. 이러한 격차를 줄이는 접근법을 RAG(Retrieval-Augmented Generation), 즉 "검색-증강 생산(Retrieval-Augmented Production)"이라고 합니다.

아이디어는 간단합니다. 모델은 기억이 아닌 그 순간 앞에 배치된 올바른 소스 문서를 통해 질문에 답합니다. 먼저, 질문과 관련된 올바른 문서 조각이 "검색"이고, 그런 다음 모델은 해당 조각만을 기반으로 답변을 "생성"합니다. 이 단원에서는 RAG의 논리를 이해하고 모델이 제공한 검증된 소스에만 고정되도록 모델을 제어하는 ​​방법을 배웁니다.

참고: 이 단원에서는 RAG의 작동 논리와 프롬프트 측면을 가르칩니다. 기업 규모의 자동 문서 검색 시스템(벡터 데이터베이스 등)에는 기술적인 설치가 필요합니다. 여기서 규율은 해당 시스템이 올바르게 대응하는 기초입니다.

RAG가 환각을 줄이는 이유는 무엇입니까?

환각은 모델이 마치 실제인 것처럼 비현실적인 정보를 생성하는 경우입니다. 모델은 차이가 있을 때 "가능한" 것처럼 보이는 반응을 생성하도록 프로그래밍되어 있습니다. 그것이 사실인지 아닌지는 알 수 없습니다. RAG는 ​​이러한 격차를 해소합니다. 모델에 질문과 함께 실제 관련 텍스트를 제공하고 "여기서만 대답하세요"라고 말합니다. 이렇게 하면 모델이 적합할 필요가 없습니다.

세 가지 구성요소가 있습니다.

  • 기술 자료: FAQ, 정책 문서, 제품 설명서, 가격표 등 신뢰할 수 있는 텍스트입니다.
  • 검색(Retrieval): 질문에 대한 답변이 포함된 문서 조각을 찾아 모델에 제공합니다.
  • 한정판: 모델은 제공된 부품만을 기준으로 견적을 제시합니다.

단계별: 출처에 대한 충실한 응답

  1. 소스를 준비하세요. 응답의 기반이 되는 텍스트(정책, FAQ)를 명확하고 최신 형식으로 찾으세요.
  2. 프롬프트에 소스를 삽입하세요. <source>와 같은 태그에 텍스트를 넣으세요.
  3. 충성도 규칙을 작성하세요. "출처에서 나온 정보만 사용하고, 출처에서 벗어나지 마세요."
  4. 인용을 필수로 하세요. 그/그녀에게 대답이 어느 섹션을 기반으로 하는지 표시하게 하십시오.
  5. 비자원 행동을 식별합니다. 답변이 출처에 없으면 "나는 이 정보를 가지고 있지 않습니다"라고 말하고 전달하게 하세요.
  6. 확인하다. 답변의 기반이 되는 원본 문장과 비교하여 답변을 확인하세요.

복사 가능한 프롬프트

기본 소스를 기반으로 한 응답 프롬프트:

역할: 귀하는 고객 지원 보조원입니다. 아래 <source> 블록의 정보를 바탕으로만 질문에 답하세요. 출처에 없는 내용은 추가하지 마시고, 일반적인 지식을 바탕으로 추측하거나 답변하지 마세요. 답변 끝에 의존하는 섹션을 "[출처: ...]" 형식으로 추가하세요. 답변이 출처에 없는 경우 다음과 같이 작성하세요. "이 주제에 대한 확실한 정보가 없습니다. 정확한 답변을 제공할 수 있는 담당자에게 연결해 드리겠습니다."<source>{{policy_or_faq_text }}</source>질문: {{ customer_question }}

다중 소스의 경우 해당 문서가 기반으로 하는 문서를 표시하는 프롬프트:

아래에 번호가 매겨진 여러 리소스가 있습니다. 질문에 답할 때 [소스 2]와 같이 사용한 소스 번호를 명시하세요. 둘 이상의 출처가 모순되는 경우 명확하게 말하고 어느 것이 더 최신인지 물어봐야 한다고 명시하세요.<sources>1) {{ source_1 }}2) {{ source_2 }}3) {{ source_3 }}</sources>질문: {{ customer_question }}

소스가 아닌 질문을 안전하게 관리하는 프롬프트:

질문에 대한 답변이 출처에서 부분적으로 발견된 경우: 출처에서 다룬 부분에만 답변하고 나머지 부분에 대해서는 "이 세부정보는 출처에 없습니다"라고 말합니다. 절대 추측으로 부족한 부분을 채우지 마세요.

응답을 클라이언트 언어로 번역하지만 소스에 충실한 프롬프트:

소스의 공식/기술적 표현을 고객이 이해할 수 있는 평이한 언어로 번역하되, 의미와 수치(요일, 금액, 요율)를 변경하지 마세요. 예를 들어, "14일"을 "약 2주"로 반올림합니다. 전체 가치를 유지하십시오.

약한 프롬프트 / 강한 프롬프트

약한 프롬프트

강력한 프롬프트

"반품 정책에 대해 알려주세요."

소스 포함 + "여기에만 답장" + 견적 요청

모델의 기억에 따른 답변(틀렸을 수도 있음)

현재 문서에서 답변

소스에 없으면 직접 만들어요

그는 "나는 이 정보를 가지고 있지 않습니다"라고 말하고 그것을 전달합니다.

숫자를 반올림하고 왜곡할 수 있음

요일/금액/요율을 정확하게 유지합니다.

차이점은 강력한 프롬프트가 모델에 앵커(소스 텍스트)와 금지(소스에서 벗어나기)를 제공한다는 것입니다. 모델은 더 이상 기억에서 말하는 것이 아니라 눈앞에 있는 현실에서 말합니다.

미니 케이스 3개

사례 1 - 기존 정책 함정. 한 매장의 봇은 신용 없이 운영되는 동안 "30일 이내에 반품이 허용됩니다"라고 말했습니다. 하지만 회사는 그 기간을 14일로 단축했다. 업데이트된 정책 텍스트가 RAG 설치 소스에 추가되면 이제 봇은 "역일 기준 14일 [출처: 반품 정책, 기사 2]"라고 응답합니다. 허위 약속으로 인한 환불 분쟁이 초기화되었습니다.

사례 2 — 모순 포착. 고객이 배송비에 대해 문의했습니다. 이전 가격 목록과 새 가격 목록 모두 소스로 시스템에 입력되었습니다. 다중 소스 프롬프트 덕분에 모델은 "두 소스의 가격이 다릅니다(49TL과 59TL). 현재 가격을 확인해야 합니다"라고 말하며 인간에게 문제를 전달했습니다. 고객에게 잘못된 금액을 알려주는 대신, 불확실한 부분을 솔직하게 전달했다.

사례 3 - 부분적인 대응 규율. “해외로 제품을 배송하고, 관세는 누가 내나요?” 해당 소식통은 질문에 배송이 이루어졌다고만 밝혔을 뿐 세금을 누가 납부했는지는 언급되지 않았다. 모델은 "네, 배송은 해외에서 이루어집니다. [출처: Cargo FAQ] 그런데 이 문서에는 관세를 누가 납부하는지 명시되어 있지 않아, 이를 명확히 하기 위해 담당자에게 연결해 드립니다"라고 말했습니다. 반은 진실이고 반은 날조된 답변 대신 솔직하고 자신감 있는 결과물을 만들어 냈습니다.

팁: 지식 기반의 최신 단일 소스 버전을 유지하세요. 동일한 정보(예: 반품 기간)를 세 개의 문서에 다르게 기재하는 것은 RAG의 가장 큰 적입니다. 모델은 보는 대상에 따라 다르게 반응합니다. 먼저 문서의 중복을 제거한 다음 자동화하세요.

확인: 소스가 존재한다고 해서 긴장을 풀지 마십시오.

RAG는 환각을 크게 감소시키지만 재설정하지는 않습니다. 모델은 때때로 소스를 잘못 해석하거나 두 문장을 혼동하거나 소스에 없는 "결론"을 도출할 수 있습니다. 그렇기 때문에 인용 요구 사항이 중요합니다. 답변의 근거가 되는 섹션을 열고 실제로 그렇게 나와 있는지 확인하세요. 특히 숫자(일, 금액, 요율) 및 조건(예외, 조건)이 포함된 응답에서는 이 제어가 협상 불가능합니다.

주의: 소스 자체가 잘못되었거나 오래된 경우 RAG는 해당 실수를 충실히 반복합니다. "모델이 소스에서 말한다"고 말하는 것은 "모델이 올바르게 말한다"는 의미는 아닙니다. 귀하는 귀하의 출처의 최신성과 정확성에 대한 책임을 집니다.

대응을 위한 기술 자료 준비 유지

RAG의 품질은 소스 텍스트가 어떻게 작성되었는지에 따라 크게 달라집니다. 이 모델은 잘 구조화되고 제목이 지정된 단일 주제 텍스트보다 훨씬 더 정확한 응답을 반환합니다. 실용적인 조언: 길고 중첩된 문단보다는 짧고 제목이 붙은 섹션으로 정책을 작성하십시오. 각 섹션에 하나의 질문("반품 기간은 며칠입니까?", "반품할 수 없는 제품은 무엇입니까?")에 답하게 하십시오. 자주 묻는 질문(FAQ)을 질문과 답변 형식으로 유지하면 모델이 올바른 부분을 더 쉽게 찾을 수 있습니다. 날짜, 금액, 요율 등의 값을 텍스트 내 한 곳에 명확하게 명시합니다. 같은 숫자를 다른 섹션에 다르게 쓰면 모델이 혼란스러워집니다.

또 다른 중요한 습관은 지식 기반을 생생하게 유지하는 것입니다. 정책, 가격, 프로모션은 다양합니다. 소스가 업데이트되지 않으면 모델은 계속해서 이전 사실을 안전하게 반복합니다. 정책이 변경될 때마다 소스를 업데이트하고 모델에 변경된 주제에 대한 몇 가지 테스트 질문을 다시 질문하여 올바른 답변을 제공하는지 확인하세요. 이 작지만 정기적인 유지 관리는 RAG 시스템이 시간이 지남에 따라 "조용히 잘못되는" 것을 방지합니다.

일반적인 실수

  • 출처를 묻지 않고 모델의 암기에 의존하지 않고 "우리의 정책을 설명하라"고 말합니다.
  • "소스에서만 응답" 경계 및 비소스 동작을 정의하지 않습니다.
  • 견적/출처 참조를 요청하지 않고 답변을 확인할 수 없게 둡니다.
  • 지식창고의 여러 문서에 있는 동일한 정보의 충돌하는 버전을 유지합니다.
  • 모델이 숫자 값을 반올림/해석할 수 있도록 허용합니다.
  • 소스 업데이트를 잊어버리면 모델이 이전 정보를 충실히 반복하게 됩니다.

요약하면

  • RAG는 모델이 메모리가 아닌 현재 소스 문서에서 답변을 생성한다는 것을 의미합니다.
  • 환각을 줄이는 가장 실용적인 방법은 출처를 묻고 "여기에만 답변하세요"라고 말하고 인용을 요청하는 것입니다.
  • 답이 소스에 없으면 모델에 적합하지 않아야 합니다. "나한테는 없어요"라고 말하고 넘겨줘야 해요.
  • 모델이 충돌하는 소스를 인식하도록 합니다. 수치를 정확하게 보존하셨습니다.
  • RAG 정확도는 소스의 적시성에 따라 달라집니다. 항상 견적을 확인하세요.

응용과제

귀하의 비즈니스에서 실제 정책 텍스트(반품, 배송 또는 멤버십)를 가져와 위의 기본 RAG 프롬프트에 소스로 삽입하세요. 그런 다음 세 가지 질문을 하십시오. (1) 출처에 답이 명확한 질문, (2) 출처에 답이 전혀 없는 질문, (3) 출처에 답이 불완전하기만 한 질문. 모델이 정확하게 대답하고, "그것이 없습니다"라고 말하고, 부분 답과 누락된 부분을 각각 솔직하게 표시하는지 확인합니다. 프롬프트에서 충성도 및 비자원 규칙을 강화하여 일탈 행위를 수정합니다.

체크리스트

  • [ ] 프롬프트에 응답의 기반이 될 현재 소스를 삽입했습니다.
  • [ ] "출처에서 답변만 하고, 그 이상은 넘어가지 마세요" 규칙을 추가했습니다.
  • [ ] 출처 참고/인용 요구사항을 넣었습니다.
  • [ ] 소스에서 답변을 사용할 수 없는 경우 위임 동작을 정의했습니다.
  • [ ] 수치가 정확하게 보존되도록 요구했습니다.
  • [ ] 답변의 근거가 되는 원본 문장에서 답변을 확인했습니다.