데이터 과학 결과를 향한 우리 대화의 기반 마련
이 글은 시리즈의 세 번째 편입니다. 첫 두 게시물에서는 Milvus를 사용하는 챗봇의 기본 벡터 데이터베이스 전용 구현과 챗봇의 LlamaIndex 구현을 소개합니다. 이번 편에서도 LlamaIndex를 계속 사용하지만, 결과를 “근거 기반”으로 만들기 위한 무언가를 추가할 것입니다. TruEra에는 근거성에 대한 훌륭한 해설과 그들의 RAG 평가 블로그 중 하나에 짧은 설명이 있습니다.
이 글에서는 LlamaIndex를 통해 Towards Data Science를 위한 RAG 결과에 근거를 부여하는 방법을 세 섹션으로 다룹니다:
RAG 결과 근거화를 위한 설정
Towards Data Science 챗봇의 매개변수 정의
인용을 통해 결과에 근거 부여
RAG 결과 근거화를 위한 설정
모든 앱과 마찬가지로 첫 번째 단계는 필수 조건을 설정하는 것입니다. 이 예제에서는 네 가지 서로 다른 라이브러리를 설치하는 것부터 시작합니다. llama-index, python-dotenv, pymilvus, openai가 필요합니다. 이 네 가지 라이브러리는 각각 검색과 함께 LLM을 오케스트레이션하고, 환경 변수를 관리하며, 벡터 데이터베이스로 작업하고, OpenAI로 작업하는 데 도움이 됩니다.
! pip install llama-index python-dotenv openai pymilvus
다음 코드 블록은 OpenAI와 Zilliz(관리형 Milvus 벡터 데이터베이스)를 설정합니다. load_dotenv 함수를 사용하여 일반적으로 '.env' 파일에 저장된 환경 변수를 가져옵니다. 그런 다음 os를 사용해 필요한 변수 이름을 전달하여 값을 가져옵니다. OpenAI는 우리의 LLM이고, Zilliz는 우리의 벡터 데이터베이스입니다. 이 예제에서는 여러 앱 버전에서 데이터를 유지하기 위해 Zilliz와 클라우드에 저장된 컬렉션을 사용합니다.
import os
from dotenv import load_dotenv
import openai
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
zilliz_uri = os.getenv("ZILLIZ_URI")
zilliz_token = os.getenv("ZILLIZ_TOKEN")
Towards Data Science 챗봇을 위한 매개변수 정의
다음으로 RAG 챗봇의 매개변수를 정의합니다. 임베딩 모델, Milvus 벡터 데이터베이스, LlamaIndex 데이터 전달 추상화라는 세 가지 항목을 설정해야 합니다. 먼저 임베딩 모델을 설정합니다. 이 예제에서는 데이터를 스크레이핑하고 임베딩하기 위해 이전 블로그에서 사용했던 임베딩 모델인 HuggingFace MiniLM L12 모델을 사용합니다. HuggingFaceEmbedding 모듈을 사용해 LlamaIndex를 통해 이 데이터를 로드할 수 있습니다.
from llama_index.embeddings import HuggingFaceEmbedding
embed_model = HuggingFaceEmbedding(model_name="sentence-transformers/all-MiniLM-L12-v2")
둘째, 벡터 데이터베이스를 설정합니다. Zilliz Cloud는 Milvus의 완전 관리형 및 최적화 버전이므로 MilvusVectorStore 모듈을 사용해 연결할 수 있습니다. Zilliz Cloud에서 호스팅되는 Milvus 인스턴스에 연결하기 위해 URI, 토큰, 컬렉션 이름, 유사도 메트릭, 텍스트 키를 제공합니다.
Zilliz URI와 토큰은 앞서 환경 변수에서 가져왔습니다. 컬렉션 이름, 유사도 메트릭, 텍스트 키는 이 블로그 시리즈의 첫 번째 부분에서 상속되며, 그곳에서 수집 중 컬렉션을 생성했습니다.
from llama_index.vector_stores import MilvusVectorStore
vdb = MilvusVectorStore(
uri = zilliz_uri,
token = zilliz_token,
collection_name = "tds_articles",
similarity_metric = "L2",
text_key="paragraph"
)
마지막으로, LlamaIndex 데이터 추상화를 준비합니다. 우리에게 필요한 두 가지 네이티브는 사전 정의된 일부 서비스를 전달하는 서비스 컨텍스트와, 벡터 스토어에서 LlamaIndex “인덱스”를 생성하는 벡터 스토어 인덱스입니다. 이 경우 서비스 컨텍스트를 사용해 임베드 모델을 전달합니다. 그런 다음 기존 Milvus 벡터 데이터베이스와 생성된 서비스 컨텍스트를 전달하여 벡터 인덱스를 생성합니다.
from llama_index import VectorStoreIndex, ServiceContext
service_context = ServiceContext.from_defaults(embed_model=embed_model)
vector_index = VectorStoreIndex.from_vector_store(vector_store=vdb, service_context=service_context)
LlamaIndex에서 인용을 통해 결과를 그라운딩하기
인용 및 출처 표시는 RAG에 중요한 추가 요소입니다. 이를 통해 문서 코퍼스에서 답변이 어디에서 오는지 알 수 있고, RAG 결과가 얼마나 잘 그라운딩되어 있는지 평가할 수 있습니다.
LlamaIndex는 CitationQueryEngine 모듈을 통해 인용을 쉽게 구현할 수 있는 방법을 제공합니다. 이 모듈은 시작하기가 매우 쉽습니다. from_args를 사용하고 벡터 인덱스를 전달하면 인용 쿼리 엔진을 인스턴스화할 수 있습니다. 앞서 벡터 인덱스에서 텍스트 필드를 정의했으므로 아무것도 추가할 필요가 없습니다.
from llama_index.query_engine import CitationQueryEngine
query_engine = CitationQueryEngine.from_args(
vector_index
)
쿼리 엔진이 준비되면 쿼리만 보내면 됩니다. 이 예제에서는 “What is a large language model?”이라고 물었습니다. 이는 Towards Data Science에서 얻을 수 있을 것으로 예상되는 답변입니다. 출력이 보기 좋게 표시되도록 pprint도 추가했습니다.
res = query_engine.query("What is a large language model?")
from pprint import pprint
pprint(res)
아래 이미지는 응답이 어떻게 보일 수 있는지에 대한 예시를 보여줍니다. 여기에는 답변이 있으며 텍스트 안에서 출처를 인용합니다. 이를 통해 답변이 그라운딩되어 있으며 어디에서 왔는지 알 수 있습니다.
인용 및 출처 표시를 통해 RAG 결과를 그라운딩하는 요약
이 튜토리얼은 RAG를 통해 챗봇을 만드는 것에 관한 시리즈의 세 번째 글입니다. 이 모든 튜토리얼에서는 Towards Data Science의 동일한 데이터를 사용합니다. 이 튜토리얼에서는 결과가 그라운딩되도록 하기 위해 인용 및 출처 표시를 사용합니다.
인용 및 출처 표시는 RAG가 전통적으로 가지고 있던 두 가지 문제를 해결합니다. 첫째, 데이터를 어디에서 가져오는지 알 수 있게 해줍니다. 둘째, 데이터에 따라 응답이 얼마나 “참”인지 확인할 수 있게 해줍니다. 이 개념은 “그라운디드니스”라고도 불립니다.
이 RAG 튜토리얼을 구축하기 위해 LlamaIndex와 Zilliz Cloud를 사용했습니다. LlamaIndex를 사용하면 인용이 벡터 스토어에 존재하는 한 이를 가져오는 엔진을 쉽게 시작할 수 있습니다. Zilliz Cloud를 사용하면 여러 프로젝트에서 데이터를 쉽게 유지할 수 있습니다.
Chat Towards Data Science 시리즈 전체를 다시 읽으려면 링크는 다음과 같습니다:
계속 읽기

Introducing Zilliz MCP Server: Natural Language Access to Your Vector Database
Developers can easily manage and query vector databases with natural language via Zilliz MCP Server in AI-native environments.

Demystifying the Milvus Sizing Tool
Explore how to use the Sizing Tool to select the optimal configuration for your Milvus deployment.

Legal Document Analysis: Harnessing Zilliz Cloud's Semantic Search and RAG for Legal Insights
Enhance legal document analysis with Zilliz Cloud’s Semantic Search and RAG. Improve accuracy, efficiency, and scalability for contracts, case law, and compliance.



