왜 내 AI 포럼 도우미가 질문에 답하는 데 어려움을 겪나요?

많은 사람들이 AI에 대해 가지고 있는 오해 중 하나는 다음과 같은 기대를 품고 있다는 점입니다:

graph TD
    Question -->|"비싼 AI 마법"| Answer
    Answer["완벽한 답변"]

플래그십 모델에 $$$를 들이고도 여전히 기대에 미치지 못하는 결과를 얻는 것은 매우 좌절감을 줄 수 있습니다.

이 글에서는 기대치를 조정하고, 더 나은 답변을 얻는 데 도움이 되는 Discourse AI의 다양한 기능에 대해 이야기해 보고자 합니다.

Discourse AI의 실제 작동 방식

현실은 더 복잡한 구조를 가지고 있습니다. 질문을 할 때 다음 과정이 진행됩니다:

graph TD
    Question --> Consolidation[질문 통합]
    Consolidation --> RAG[RAG 시스템]
    RAG --> ToolSelection[도구 선택]
    ToolSelection --> Search[검색]
    ToolSelection --> Categories[카테고리]
    ToolSelection --> Tags[태그]
    Search --> Context[컨텍스트 수집]
    Categories --> Context
    Tags --> Context
    Context --> Answer[답변 생성]
  1. 질문이 먼저 통합되고 이해됩니다.
  2. RAG 시스템이 사용 가능한 지식을 검색합니다(선택 사항).
  3. 검색된 결과에 따라 사용할 도구를 결정합니다(선택 사항).
  4. 도구가 구체적인 정보를 수집합니다.
  5. 모든 정보가 결합되어 답변이 생성됩니다.

컨텍스트가 모든 것입니다

AI 시스템을 사용하여 질문에 답변할 때 컨텍스트가 핵심입니다.

GPT-4나 Claude 3.5 Sonnet과 같은 대규모 언어 모델(LLM)은 방대한 양의 공개 데이터로 학습됩니다. 그러나 도메인 특화 질문에 답변하는 데 이상적이지 않은 두 가지 주의 사항이 있습니다:

  1. LLM은 공개 데이터로 학습됩니다.
  2. LLM에는 학습 데이터의 시점(cut-off date)이 있어, 몇 달 전의 공개 데이터조차 데이터셋에 포함되지 않을 가능성이 높습니다.

폐쇄형 포럼의 경우, 데이터셋에 해당 내용이 전혀 없으므로 컨텍스트의 중요성은 더욱 커집니다.

컨텍스트란 LLM이 질문에 답변하기 전에 제공하여 올바른 답변을 유도하는 데 도움을 주는 정보입니다.

컨텍스트는 어떻게 얻을까요?

컨텍스트를 제공하는 방법은 몇 가지가 있습니다:

  • RAG(검색 증강 생성)를 이용한 자동화 - 페르소나에 문서를 업로드하면, 답변하기 전에 해당 문서에서 답변을 검색할 수 있습니다. 먼저 질문을 통합한 뒤, 의미론적 검색(semantic search)을 사용하여 콘텐츠를 검색합니다. 이는 사용할 도구를 선택하는 데 도움을 줍니다.
  • 도구를 이용한 자동화 - LLM은 RAG의 가이드라인에 따라 추가 정보를 찾기 위해 도구(검색이나 토픽 읽기 등)를 사용할 수 있습니다.
  • 수동 입력 - 대량의 텍스트를 붙여넣은 뒤 LLM에게 해당 내용에 대해 질문할 수 있습니다.

도구 기반 컨텍스트

Discourse 포럼 헬퍼(Forum Helper)는 검색, 토픽 및 게시글 읽기, 카테고리나 태그 목록 표시를 위한 도구를 사용합니다.

포럼 헬퍼에게 질문을 하면, 모델은 먼저 RAG를 사용하여 어떤 정보가 관련 있을지 파악한 후, 더 나은 답변을 얻기 위해 어떤 도구를 사용할지 결정합니다.

이 예시에서 포럼 헬퍼에게 제가 무엇을 하고 있었는지 물었고, 봇은 지난 한 주 동안 Sam이 게시한 콘텐츠를 검색하기로 결정하여 21개의 결과를 얻었습니다.

이 검색을 통해 모델이 어떤 새로운 컨텍스트를 얻었는지 이해하려면 AI bot debugging allowed groups 설정을 활성화할 수 있습니다.

이렇게 하면 모든 게시글 하단에 디버깅 버튼이 추가되며, 이 버튼을 클릭하면 LLM에 공급된 정확한 컨텍스트를 확인할 수 있습니다.

Discourse 검색 도구는 옵션이 매우 풍부합니다:

이는 축복이자 저주입니다. 옵션이 너무 많으면 LLM은 비최적의 선택을 할 수 있습니다. 우리는 옵션의 수를 … 너무 많지 않게 유지하려 노력했지만, 필요에 따라 검색을 위해 커스텀 도구를 사용하는 것이 더 나을 수 있습니다.

기대했던 결과를 얻지 못할 때 어떻게 해야 하나요?

컨텍스트가 모든 것이므로, 먼저 확인해야 할 사항은 다음과 같습니다.

  1. RAG 시스템이 도구를 가이드할 관련 콘텐츠를 찾았는가?
  2. LLM이 해당 가이드라인에 따라 올바른 도구를 사용했는가?
  3. 도구가 예상한 결과를 찾았는가?

예를 들어, 다음과 같은 실패 사례를 살펴봅시다:

이것은 RAG 가이드와 도구 사용 모두에서 발생한 전형적인 실패 사례입니다.

LLM은 다음과 같이 검색했습니다:

bug critical urgent broken order:latest status:open status:public

이 검색의 키워드 구성은 매우 불완전하여 단 하나의 결과만 반환했으며, 의미론적 검색은 누군가 큰 소리로 외칠 때마다 이를 긴급하다고 판단하기 때문에 결과를 찾는 데 큰 어려움을 겪었습니다.

아마 더 나은 결과를 얻을 수 있는 검색어는 다음과 같을 것입니다:

지난 2주 동안 보고된, op_likes 순으로 정렬된 모든 오픈 버그를 찾으십시오. 그러나 이 특정 정보의 하위 집합은 현재 검색 기능으로는 사용할 수 없으며, 이를 위해서는 커스텀 도구가 필요합니다.

여기에는 큰 변동성과 뉘앙스가 존재하므로, 해야 할 첫 번째 일은 사용자들이 봇과 가진 기존 상호작용을 모니터링하고 가능한 한 많은 실패 사례를 수집하는 것입니다.

실패한 사례를 어떻게 처리해야 하나요?

실패한 상호작용이 발생하면 몇 가지 선택지가 있습니다:

  1. 시스템 프롬프트를 개선하여 봇에게 더 잘 힌트를 줄 수 있습니다.
  2. 포럼에 정보를 문서화하여 봇에게 더 나은 검색 결과를 제공할 수 있습니다 - 문서화 카테고리를 우선순위로 설정하여 더 쉽게 찾을 수 있도록 할 수 있습니다.
  3. 더 많은 컨텍스트가 포함된 문서를 업로드할 수 있습니다. 우리는 문서를 조각(fragments)으로 나누고, 통합된 질문과 가장 가까운 조각을 공급하여 봇의 답변을 뒷받침합니다.
  4. 페르소나가 주로 검색에 초점을 맞추고 있다면, 검색 도구 사용을 강제할 수 있습니다.
  5. 필요에 더 잘 부응하기 위해 커스텀 도구를 개발할 수 있습니다.
  6. LLM에 공급하는 컨텍스트의 양을 늘릴 수 있습니다(더 많은 검색 결과 등).

AI는 모호할 수 있으며, 하나의 문제를 해결하면 다른 문제가 생길 수 있습니다

“완벽한” AI 질문 답변 봇을 만드는 것은 여정임을 명심하십시오. 모니터링된 피드백 루프를 만들고 정기적으로 성능을 평가하면 시간이 지남에 따라 이를 개선할 수 있습니다.

기술이 어떻게 구축되었는지에도 유의하십시오. 질문을 답변하기 위해 10,000개의 게시글 컨텍스트에 접근해야 한다면, 현재 컨텍스트 윈도우로는 게시글 전체 목록을 컨텍스트로 입력하는 것이 비현실적일 수 있습니다.

더 나은 결과를 얻는 것은 반복적인 과정임을 이해하는 것이 핵심입니다.

This is an excellent write-up, Sam, especially for people without a dev background! :heart:

It should definitely be added to AI bot - Agents first post.

Thanks Sam!

That’s very insightful.
I’ve always thought of RAG documents as something that works alongside tools (usually search and read). I.e. use tools to get answers on the forum and rag to add additional knowledge e.g. blog posts, external docs, etc.
And then from all select the most relevant.

And I’d used the prompt to guide the persona how to use that context, but haven’t thought of that:

Would that be done by providing some explanations about the forum structure, and example Q&A-s in the docs?

Could you provide a little more detail about how the question is consolidated?

An example would be:

  1. AI consolidates a very long conversation to: “Tony would like to understand how question consolidation works and how examples are provided”
  2. RAG is performed on the text “Tony would like to understand how question consolidation works and how examples are provided” looking for fragments that are similar (for example it could be “question consolidation works by XYZ”)
  3. Then the chunks that are close to the question asked are added into the conversation as pre-existing context