많은 기업들이 RAG(Retrieval-Augmented Generation)를 활용해 업무용 AI 에이전트를 구축하고 있습니다. RAG는 대규모 데이터를 검색하고, 이를 바탕으로 응답을 생성하는 방식으로 LLM의 한계를 보완할 수 있는 기술입니다. 저희도 RAG를 활용해 모든 데이터를 검색하여 업무용 AI 에이전트를 만드는 것을 목표로 했습니다. 그러나 많은 문제가 발생했고 이를 해결하는 과정을 풀어보려고 합니다.
실제로 저희는 소프트웨어 사용량이 수집된 데이터를 RAG 기반으로 정확한 집계를 할 수 있는지 테스트해 보았습니다. 저희가 집계하는 데이터는 이용자 PC에 클라이언트를 설치해 모든 종류의 소프트웨어 사용 이력을 수집합니다. 이로써 사용자 당 일일 약 1천 개에서 3천 개의 데이터가 수집됩니다.
1차 집계에서 카테고라이징 작업을 거친 DB를 .md로 추출하여 학습을 시켰습니다. 이때 Vector Store에 저장한 DB row가 수백만 개에 달합니다. 그런 뒤 다음 질문을 했습니다. "개발팀은 제대로 일하고 있니?" 이 질문의 의도는 소프트웨어 사용량을 분석해서 개발팀이 어떤 종류의 소프트웨어를 사용하고 있고 이를 통계해 제대로 일하고 있는지 파악해서 의견을 달라는 내용입니다. 정말 사람이 사람한테 지시할 수 있는 내용입니다.
결과를 보면 질문의 의도를 정확히 이해하고 소프트웨어 사용량을 수집했습니다. 그러나 소프트웨어 사용 시간이 일 평균 4736분이라는 말도 안 되는 대답을 합니다. 말도 안 되는 수치인데요. 이 결과를 정확하게 조정하기 위해 프롬프트 엔지니어링과 데이터 정규화를 계속 시도했지만 제대로 된 답변을 주지 않았습니다.
이유를 찾아보니 LLM 자체가 언어 모델이지 수치 모델이 아니기 때문에 기본적인 수치 계산 또한 오류를 내뱉는 등 다양한 수식 오류가 발생한다고 했습니다.
숫자가 아닌 상태에서는 정확한 답변을 하는지 테스트해 보았습니다. 사내 규정, 취업 규칙 등 유니크한 정보에 대해서는 정말 제대로 답변을 해줍니다. 물론 거짓말을 하지 않기 위해 프롬프트를 이미 학습한 정보는 아예 대답하지 못하도록 했고 RAG 기반으로만 답변하도록 했습니다. 그런데 여기서도 치명적인 오류가 있었습니다.
바로 데이터의 혼동입니다.
"지금 우리 회사 영업 현황이 어떻게 돼?"라고 질문했더니 CRM, wiki, 회의록을 모두 뒤져 한참 과거의 정보를 복합적으로 잘못 대답했습니다.
그래서 질문을 조금 변경해 특정 정보(최근 회의록)에서만 가져오라고 했더니 그럭저럭 잘 대답했습니다.
그러나 또 다른 문제가 있습니다. 사람이 이렇게 친절하게 질문하지 않기 때문이죠. 실제 회사 생활에서는 엉망으로 질문해도 분석된 대답이 나와야 합니다. 그래서 저희는 이런 에이전트를 만들기 위해 대안을 찾았습니다. 그게 바로 펑션콜링입니다.
펑션콜링은 OpenAI가 2023년 7월에 발표한 기술로 데이터를 기반으로 정교한 정보를 요청하거나 사용자의 요구에 맞도록 AI가 액션을 취할 수 있도록 만든 기술입니다. 이를 적용하기 위해 저희 백엔드 API에 아래와 같은 AI가 이해할 수 있는 API 이름, 설명, 파라미터를 정의하는 작업을 진행했습니다.
functions = [
{
"name": "get_asset_status",
"description": "Retrieve the status of company assets",
"parameters": {
"type": "object",
"properties": {
"asset_id": {
"type": "string",
"description": "The ID of the asset to retrieve status for"
}
},
"required": ["asset_id"]
}
}
]
그 뒤에는 놀라운 결과가 나타났습니다. 머릿속의 의도를 질문해도 찰떡같이 알아듣고 대답하는 AI 에이전트가 만들어졌습니다. 그 결과는 이미지가 아닌 데모 시연으로 보여드릴 수 있습니다. 결과를 보고 싶은 분들은 서비스 도입 문의를 꼭 부탁 드립니다!