많은 사람들이 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[답변 생성]
- 질문이 먼저 통합되고 이해됩니다.
- RAG 시스템이 사용 가능한 지식을 검색합니다(선택 사항).
- 검색된 결과에 따라 사용할 도구를 결정합니다(선택 사항).
- 도구가 구체적인 정보를 수집합니다.
- 모든 정보가 결합되어 답변이 생성됩니다.
컨텍스트가 모든 것입니다
AI 시스템을 사용하여 질문에 답변할 때 컨텍스트가 핵심입니다.
GPT-4나 Claude 3.5 Sonnet과 같은 대규모 언어 모델(LLM)은 방대한 양의 공개 데이터로 학습됩니다. 그러나 도메인 특화 질문에 답변하는 데 이상적이지 않은 두 가지 주의 사항이 있습니다:
- LLM은 공개 데이터로 학습됩니다.
- 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은 비최적의 선택을 할 수 있습니다. 우리는 옵션의 수를 … 너무 많지 않게 유지하려 노력했지만, 필요에 따라 검색을 위해 커스텀 도구를 사용하는 것이 더 나을 수 있습니다.
기대했던 결과를 얻지 못할 때 어떻게 해야 하나요?
컨텍스트가 모든 것이므로, 먼저 확인해야 할 사항은 다음과 같습니다.
- RAG 시스템이 도구를 가이드할 관련 콘텐츠를 찾았는가?
- LLM이 해당 가이드라인에 따라 올바른 도구를 사용했는가?
- 도구가 예상한 결과를 찾았는가?
예를 들어, 다음과 같은 실패 사례를 살펴봅시다:
이것은 RAG 가이드와 도구 사용 모두에서 발생한 전형적인 실패 사례입니다.
LLM은 다음과 같이 검색했습니다:
bug critical urgent broken order:latest status:open status:public
이 검색의 키워드 구성은 매우 불완전하여 단 하나의 결과만 반환했으며, 의미론적 검색은 누군가 큰 소리로 외칠 때마다 이를 긴급하다고 판단하기 때문에 결과를 찾는 데 큰 어려움을 겪었습니다.
아마 더 나은 결과를 얻을 수 있는 검색어는 다음과 같을 것입니다:
지난 2주 동안 보고된, op_likes 순으로 정렬된 모든 오픈 버그를 찾으십시오. 그러나 이 특정 정보의 하위 집합은 현재 검색 기능으로는 사용할 수 없으며, 이를 위해서는 커스텀 도구가 필요합니다.
여기에는 큰 변동성과 뉘앙스가 존재하므로, 해야 할 첫 번째 일은 사용자들이 봇과 가진 기존 상호작용을 모니터링하고 가능한 한 많은 실패 사례를 수집하는 것입니다.
실패한 사례를 어떻게 처리해야 하나요?
실패한 상호작용이 발생하면 몇 가지 선택지가 있습니다:
- 시스템 프롬프트를 개선하여 봇에게 더 잘 힌트를 줄 수 있습니다.
- 포럼에 정보를 문서화하여 봇에게 더 나은 검색 결과를 제공할 수 있습니다 - 문서화 카테고리를 우선순위로 설정하여 더 쉽게 찾을 수 있도록 할 수 있습니다.
- 더 많은 컨텍스트가 포함된 문서를 업로드할 수 있습니다. 우리는 문서를 조각(fragments)으로 나누고, 통합된 질문과 가장 가까운 조각을 공급하여 봇의 답변을 뒷받침합니다.
- 페르소나가 주로 검색에 초점을 맞추고 있다면, 검색 도구 사용을 강제할 수 있습니다.
- 필요에 더 잘 부응하기 위해 커스텀 도구를 개발할 수 있습니다.
- LLM에 공급하는 컨텍스트의 양을 늘릴 수 있습니다(더 많은 검색 결과 등).
AI는 모호할 수 있으며, 하나의 문제를 해결하면 다른 문제가 생길 수 있습니다
“완벽한” AI 질문 답변 봇을 만드는 것은 여정임을 명심하십시오. 모니터링된 피드백 루프를 만들고 정기적으로 성능을 평가하면 시간이 지남에 따라 이를 개선할 수 있습니다.
기술이 어떻게 구축되었는지에도 유의하십시오. 질문을 답변하기 위해 10,000개의 게시글 컨텍스트에 접근해야 한다면, 현재 컨텍스트 윈도우로는 게시글 전체 목록을 컨텍스트로 입력하는 것이 비현실적일 수 있습니다.
더 나은 결과를 얻는 것은 반복적인 과정임을 이해하는 것이 핵심입니다.


