'devv.ai 是如何构建高效的 RAG 系统的 🔎 之前答应过要分享一下 devv.ai 底层涉及到的技术,这个系列 thread 会分享我们在这个项目上的具体实践,这是第一篇。 另外我们开了一个专门用于提交反馈和建议的 GitHub Repo,欢迎反馈。 🧵github.com/devv-ai/devv'
RAG의 전체 이름은: Retrieval Augmented Generation(검색 증강 생성)으로, 처음은 2020년 Facebook의 논문에서 유래되었습니다: Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks(맞습니다, 2020년에 이미 이 기술이 있었습니다).
이 논문이 해결하려는 문제는 매우 간단합니다: 언어 모델이 외부 지식을 활용하여 생성하는 방법은 무엇인가요. 일반적으로, 사전 훈련된 모델의 지식은 매개변수에 저장되어 있으며, 이로 인해 모델이 학습 데이터 외의 지식(예: 검색 데이터, 산업 지식)을 알지 못합니다. 이전 방법은 새로운 지식이 생기면 사전 훈련된 모델을 다시 finetune하는 것이었습니다.
이러한 방식에는 몇 가지 문제가 있습니다: 1. 새로운 지식이 생길 때마다 finetune이 필요합니다 2. 모델을 훈련하는 비용이 매우 높습니다. 따라서 이 논문은 RAG 방법을 제안했습니다. pre-train된 모델은 새로운 지식을 이해할 수 있으므로, 모델이 새로운 지식을 이해하도록 하려면 prompt 방식으로 새로운 지식을 전달하면 됩니다.
그래서 가장 작은 RAG 시스템은 3가지 부분으로 구성됩니다: 1. 언어 모델 2. 모델이 필요로 하는 외부 지식 세트(벡터 형태로 저장) 3. 현재 시나리오에서 필요한 외부 지식
langchain, llama-index essentially does this RAG system (including the agent built on top of RAG). Understanding this essence, there is actually no need to add an additional layer of abstraction, just build this system according to your own business situation. For example, in order to maintain high performance, we adopted a Go + Rust architecture that can support high-concurrency RAG requests.
문제를 단순화하고 어떤 종류의 RAG를 구축하든, 이 시스템을 최적화하는 것은 각각 이 3가지 모듈을 최적화하는 것입니다.
1)언어 모델이 왜 2020 년에 발표된 이 논문이 올해까지 화제가 되었을까요? 그 주요 이유 중 하나는 이전의 기본 모델이 능력이 부족했기 때문입니다. 만약 기저 모델이 매우 어리석다면, 풍부한 외부 지식을 제공하더라도 모델은 이러한 지식을 기반으로 추론할 수 없습니다. 논문의 일부 벤치마크에서 효과가 향상되었음을 확인할 수 있지만, 특별히 두드러진 것은 아닙니다.
1.1)GPT-3의 등장으로 RAG가 처음으로 사용 가능해졌으며, RAG + GPT-3를 기반으로 한 최초의 회사들은 매우 높은 평가 및 ARR(연간 반복 수익)를 얻었습니다: - Copy AI - Jasper 이 두 제품은 마케팅 분야의 RAG를 구축한 것으로, 한때 AI 분야의 스타 유니콘으로 떠올랐으나, 현재는 매력이 사라진 후 평가가 크게 하락했습니다.
1.2)2023年以来,出现了大量的开源 & 闭源的基座模型,基本上都能够在上面构建RAG系统最常见的方式就是: - GPT-3.5/4 + RAG(闭源方案) - Llama 2 / Mistral + RAG(开源方案)
2)모델이 필요로 하는 외부 지식 집합 이제 모두가 임베딩 모델에 대해 이해했을 것입니다. 이는 임베딩 데이터의 검색을 포함합니다. 임베딩의 본질은 데이터를 벡터로 변환한 다음 코사인 유사도를 통해 가장 일치하는 두 개 이상의 벡터를 찾는 것입니다. 지식 -> 청크 -> 벡터 사용자 쿼리 -> 벡터
2.1)이 모듈은 두 부분으로 나뉩니다: 1. embedding 모델 2. embedding 벡터를 저장하는 데이터베이스 전자는 주로 OpenAI의 embedding 모델을 사용하며, 후자는 Pinecone, 국내 팀의 Zilliz, 오픈 소스인 Chroma, 관계형 데이터베이스에 구축된 pgvector 등 다양한 선택지가 있습니다.
2.2)이 embedding 데이터베이스 회사들도 이번 AI Hype에서 매우 높은 자금 조달과 평가를 받았습니다. 그러나 첫 번째 원리에 따르면, 모듈 2는 외부 지식 집합을 저장하고 필요할 때 검색하는 것을 목적으로 합니다. 이 단계에서는 반드시 embedding 모델이 필요한 것은 아니며, 일부 시나리오에서는 전통적인 검색 매칭이 더 효과적일 수 있습니다(Elasticsearch).
2.3)devv.ai는 embedding + 전통적인 관계형 데이터베이스 + Elasticsearch 방식을 사용합니다. 각 시나리오에서 많은 최적화를 수행했으며, 지식을 인코딩할 때 더 많은 작업을 수행하면 검색할 때 더 빠르고 정확해질 수 있습니다(작업을 먼저 수행하고 나중에 수행하는 차이).
2.4)我们使用 Rust 构建了整套 knowledge index 包括: - GitHub 代码数据 - 开发文档数据 - 搜索引擎数据
3)현재 시나리오에서 필요한 외부 지식을 더 잘 회상하십시오. 우선적으로 작업을 수행하는 법칙에 따라, 우리는 인코딩할 때 원본 지식 데이터에 대해 많은 처리를 하였습니다: - 코드를 프로그램 분석 - 개발 문서를 논리 수준의 청크로 분할 - 웹 정보 추출 및 페이지 순위 최적화
3.1)위의 작업을 완료하면 retrieve 시에 얻는 데이터가 이미 구조화되어 있어 추가 처리가 필요하지 않으며, 검색 정확도를 향상시킬 수 있습니다.
2022年에 구축된 이 RAG 시스템 기반의 검색 엔진은 매달 수천만의 트래픽을 보유하고 있으며, LangChain은 수십억 달러의 가치를 얻었습니다.
무슨 일반적인 RAG든 전용 RAG든, 이것은 대충 해내기 쉬운 분야이지만 90점을 받기는 어렵습니다. 각 단계에는 최적의 방법이 없으며, 예를 들어 임베딩 청크 크기, 검색 엔진을 연결해야 하는지 여부 등은 실제 비즈니스 시나리오에 따라 여러 번 시도해봐야 합니다. 관련 논문은 많지만, 모든 논문에서 언급된 방법이 유용한 것은 아닙니다.
오늘은 devv.ai의 하이 레벨 기술에 대해 간단히 소개했을 뿐이며, 기술적인 세부 사항에는 깊게 다루지 않았습니다. 목적은 이 분야에 진입하려는 개발자들이 기술을 이해하고 기술에 대한 매력을 느낄 수 있도록 초보자의 관점에서 생각할 수 있도록 하는 것입니다.
다음 단계에서는 매주 LLM 관련 기술 공유 트윗을 게시할 예정이며, 이 thread를 작성하는 동안 devv.ai를 많이 활용하여 관련 자료를 검색했는데 매우 도움이 되었습니다.
만약 뒤에 관련 콘텐츠를 계속 보고 싶다면, 이 트윗을 더 많은 사람에게 전달해주세요. 만약 위 내용에 오류가 있다면, 댓글 영역에서 지적해주세요. 추후 자세한 내용은 github.com/devv-ai/devv 에 요약될 예정이며, 여러분의 star와 지원을 환영합니다(더 중요한 것은 devv.ai 피드백을 제출하는 것입니다!)