ChatGPT의 지능과 효율성 향상: LangChain과 Milvus의 힘
이 게시물은 원래 TheSequence에 게시되었으며 허가를 받아 여기에 재게시되었습니다.
ChatGPT는 많은 사람들이 API를 활용해 자체 챗봇을 개발하거나 Langchain을 탐색하면서 상당한 인기를 얻었지만, 어려움이 없는 것은 아닙니다.
ChatGPT는 종종 지능이 있는 듯한 착각을 만들어낼 수 있습니다. 사용자는 복잡한 전문 용어를 사용하는 챗봇과 대화하다가, 나중에야 봇이 터무니없는 응답을 생성하거나 존재하지 않는 404 링크를 날조한다는 사실을 깨달을 수 있습니다.
컨텍스트 저장도 또 다른 장애물입니다. ChatGPT는 진행 중인 세션의 기록만 유지하므로, 불과 며칠 전에 학습된 봇도 해당 세션을 전혀 기억하지 못하는 것처럼 행동할 수 있습니다. 이러한 "기억상실"은 데이터를 보존하고 검색할 수 있는 챗봇의 필요성을 강조합니다.
ChatGPT 또는 추론을 위한 더 작은 오픈 소스 모델을 사용할 때 비용과 성능은 중요한 고려 사항입니다. 많은 경우 이는 비용이 많이 들 수 있으며, 여러 대의 A100과 상당한 시간이 필요합니다. 대규모 언어 모델(LLM)을 실시간 애플리케이션에 도입하기 전에 개발 과정에서 성능 병목 현상을 해결해야 합니다.
ChatGPT의 지능을 향상시키는 지점에서 LangChain과 Milvus의 결합이 역할을 합니다. LangChain과 Milvus의 통합을 통해 LLM은 벡터 저장소의 힘을 활용해 지능과 효율성을 높일 수 있습니다. 이 모든 것은 어떻게 작동할까요? LLM 애플리케이션에서 LangChain과 Milvus의 힘을 살펴본 다음, 여러분만의 AI Generated Content (AIGC) 애플리케이션을 구축하고 향상시키는 방법을 알아보겠습니다.
LLM 기반 애플리케이션을 위한 LangChain
LangChain은 언어 모델로 구동되는 애플리케이션을 개발하기 위한 프레임워크입니다. LangChain 프레임워크는 다음 원칙을 중심으로 설계되었습니다:
- 데이터 인식: 언어 모델을 다른 데이터 소스에 연결
- 에이전트형: 언어 모델이 환경과 상호작용하도록 허용
LangChain의 견고한 프레임워크는 Models, Prompts, Memory, Indexes, Chains, Agents, Callbacks와 같은 다양한 모듈로 구성되어 있으며, 이는 모든 LLM 기반 애플리케이션의 구성 요소로 볼 수 있는 핵심 추상화입니다. 각 모듈에 대해 LangChain은 표준적이고 확장 가능한 인터페이스를 제공합니다. LanghChain은 또한 외부 통합과 즉시 사용할 수 있는 엔드투엔드 구현까지 제공합니다.
LLM 래퍼는 LangChain 기능의 핵심으로, OpenAI, Cohere, Hugging Face 등 다양한 LLM 제공업체를 제공합니다. 이는 모든 LLM에 대한 표준 인터페이스를 제공하며, 이들과 함께 작업하기 위한 공통 도구를 포함합니다.
LLM을 위한 벡터 데이터베이스
LangChain은 다양한 요구를 충족하기 위해 인상적인 범위의 Large Language Models (LLMs)를 제공합니다. 하지만 그것이 전부는 아닙니다. LangChain은 Milvus, Faiss 등 다양한 벡터 데이터베이스를 통합하여 시맨틱 검색 기능을 가능하게 함으로써 기본을 넘어섭니다. VectorStore Wrapper를 통해 LangChain은 데이터의 로딩과 검색을 단순화하는 데 필요한 인터페이스를 표준화합니다. 예를 들어, Milvus 클래스를 사용하면 LangChain은 from_text 메서드를 통해 문서를 나타내는 특징 벡터를 저장할 수 있습니다. 그런 다음 similarity_search 메서드는 쿼리 문장의 벡터를 가져와 임베딩 공간에서 쿼리와 가장 가까운 일치 문서를 찾아, 시맨틱 검색을 쉽게 수행할 수 있게 합니다.
이 주제를 더 깊이 살펴보면, chatgpt-retrieval-plugin에서 분명히 알 수 있듯이 벡터 데이터베이스가 LLM 애플리케이션에서 중요한 역할을 한다는 것을 깨닫게 됩니다. 하지만 그 유용성은 여기서 끝나지 않습니다. 벡터 데이터베이스는 수많은 다른 사용 사례를 가지고 있어, LLM 애플리케이션의 필수 구성 요소가 됩니다:
- Vector Databases는 Auto-GPT 및 BabyAGI와 같은 LLM 플랫폼에서 유용한 기능인 컨텍스트 기반 저장을 용이하게 합니다. 이 기능은 컨텍스트 이해와 메모리 보존을 향상시킵니다.
- Vector Databases는 GPTCache와 같은 LLM 플랫폼에 의미론적 캐싱을 제공하여 성능을 최적화하고 비용 절감을 가능하게 합니다.
- Vector Databases는 환각을 해결하는 OSSChat과 같은 문서 지식 기능을 가능하게 합니다.
- 그리고 훨씬 더 많은 기능을 제공합니다.
Milvus와 Auto-GPT에 대해 더 자세히 알고 싶다면 Milvus가 Auto-GPT를 지원하는 방법에 대한 이 글을 읽어볼 수 있습니다. 다음 섹션에서는 LangChain과 Milvus가 환각을 어떻게 해결할 수 있는지 알아봅니다.
LangChain + Milvus가 환각을 해결할 수 있는 이유
인공지능 분야에는 시스템이 현실과 관련 없는 사실을 날조하는 것을 의미하는 "환각"을 자주 생성한다는 말이 있습니다. 어떤 사람들은 ChatGPT를 "매우 설득력 있는 헛소리를 쓸 수 있는 자신감 넘치는 사람"이라고 묘사하기도 하며, 환각 문제는 ChatGPT의 신뢰성을 약화시킵니다.
다음 다이어그램에 설명된 Vector Databases는 환각 문제를 해결합니다. 먼저 공식 문서를 Milvus에 텍스트 벡터로 저장하고, 질문에 대한 응답으로 관련 문서를 검색합니다(다이어그램의 주황색 선). Chatgpt는 올바른 컨텍스트를 기반으로 질문에 답변하여 예상 답변을 생성합니다(다이어그램의 녹색 선).
Langchain, Milvus 및 ChatGPT를 보여주는 다이어그램
위의 예는 Milvus와 ChatGPT를 결합하는 것이 매우 간단하다는 것을 보여줍니다. 데이터를 레이블링하거나, 학습 또는 개발하거나, 미세 조정할 필요가 없습니다. 텍스트 데이터를 벡터 데이터로 변환하여 Milvus에 삽입하기만 하면 됩니다. Langchain-Milvus-ChatGPT 조합은 텍스트 저장소를 만들고, 최종 답변은 문서 라이브러리의 콘텐츠를 참조하여 도출됩니다.
이를 통해 챗봇에 올바른 지식이 제공되어 오류 가능성을 효과적으로 줄일 수 있습니다. 예를 들어, 커뮤니티 관리자로서 커뮤니티 관련 질문에 답변해야 할 때 Milvus의 공식 문서에 있는 모든 문서를 저장할 수 있습니다.
사용자가 "Milvus를 사용하여 챗봇을 구축하는 방법"이라고 질문하면, 챗봇은 공식 문서를 기반으로 질문에 답변하여 애플리케이션 구축 및 관련 문서 추출 예제를 제공한다고 사용자에게 알려줍니다. 이러한 유형의 응답은 신뢰할 수 있습니다. 요컨대, 모든 것을 다시 학습하거나 처리할 필요가 없습니다. 필요한 컨텍스트 지식을 ChatGPT에 제공하기만 하면 됩니다. 요청을 보내면 로봇은 공식 콘텐츠와 관련된 컨텍스트를 제공할 수 있습니다.
ChatGPT를 위한 Milvus와 Langchain의 강력한 기능을 발견하고 흥분되시나요? 그렇다면 애플리케이션 개발을 시작할 준비를 하세요. LangChain과 Milvus의 놀라운 기능을 결합하여 향상된 챗봇을 함께 만들어 봅시다!
LangChain과 Milvus로 나만의 애플리케이션 구축하기
0. 사전 요구 사항
먼저 pip install langchain 명령을 사용하여 LangChain을 설치하세요. Milvus의 경우 두 가지 옵션을 사용할 수 있습니다. 로컬 시스템에 오픈 소스 Milvus를 설치하고 시작하거나, 무료 평가판을 제공하는 Milvus용 클라우드 네이티브 서비스인 Zilliz를 사용해 볼 수 있는 클라우드 옵션을 선택하세요. Zilliz는 쉽고 접근성이 뛰어나며 견고한 서비스이므로, 애플리케이션에 Zilliz Cloud를 사용하는 방법을 자세히 살펴보겠습니다. LangChain을 사용하면 쉽게 사용할 수 있습니다.
1. 지식 베이스용 데이터 로드
먼저 데이터를 표준 형식으로 로드해야 합니다. 텍스트를 로드하는 것 외에도 작은 조각으로 나누어야 합니다. 이는 언어 모델에 가장 작고 가장 관련성 높은 텍스트 조각만 전달하도록 보장하기 위해 필요합니다.
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Milvus
from langchain.document_loaders import TextLoader
loader = TextLoader('state_of_the_union.txt')
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
다음으로, 이제 작은 텍스트 청크가 있으므로 각 텍스트 조각에 대한 임베딩을 생성하고 이를 벡터 저장소에 저장해야 합니다. 임베딩을 생성하는 이유는 임베딩을 사용해 언어 모델에 보낼 가장 관련성 높은 텍스트 조각만 찾을 수 있기 때문입니다. 이는 다음 줄로 수행됩니다. 여기서는 OpenAI의 임베딩과 Zilliz Cloud를 사용합니다.
embeddings = OpenAIEmbeddings()
vector_db = Milvus.from_documents(
docs,
embeddings,
connection_args={
"uri": "YOUR_ZILLIZ_CLOUD_URI",
"user": "YOUR_ZILLIZ_CLOUD_USERNAME",
"password": "YOUR_ZILLIZ_CLOUD_PASSWORD",
"secure": True
}
)
2. 데이터 쿼리
이제 데이터를 로드했으므로 질문-답변 체인에서 사용할 수 있습니다.
아래 코드 스니펫을 확인해 보세요. 이 글의 3부인 "환각 해결"을 다룹니다. 개념을 완전히 이해하는 데 도움이 될 수 있습니다.
이는 지식 베이스에서 주어진 쿼리와 관련된 문서를 검색하는 것을 포함합니다. 이를 수행하려면 similarity_search 메서드를 사용해 쿼리에 대한 특징 벡터를 생성한 다음, Zilliz Cloud에서 유사한 일치 항목과 관련 문서 콘텐츠를 함께 검색합니다.
query = "What did the president say about Ketanji Brown Jackson"
docs = vector_db.similarity_search(query)
그런 다음 load_qa_chain을 실행하여 최종 답변을 얻습니다. 이는 질문에 답하기 위한 가장 일반적인 인터페이스를 제공합니다. 입력 문서에 대해 QA를 수행할 수 있는 체인을 로드하고 문서의 모든 텍스트를 사용합니다.
아래 코드는 OpenAI를 LLM으로 사용합니다. 실행 시 QAChain은 input_documents와 question을 입력으로 받습니다. input_documents는 데이터베이스에서 query와 관련된 문서입니다. 그런 다음 LLM은 이러한 문서의 내용과 질문을 바탕으로 답변을 구성합니다.
from langchain.chains.question_answering import load_qa_chain
from langchain.llms import OpenAI
llm = OpenAI(temperature=0)
chain = load_qa_chain(llm, chain_type="stuff")
chain.run(input_documents=docs, question=query)
AIGC 애플리케이션에 Milvus가 더 나은 이유
따라서 Artificial Intelligence-Generated Content (AIGC) 애플리케이션을 더 안정적으로 만들고 싶다면 텍스트를 나타내는 벡터 데이터베이스가 필요합니다. 그런데 왜 Milvus 벡터 데이터베이스를 선택해야 할까요?
- 시맨틱 검색: Milvus는 추출된 시맨틱 특징 벡터를 저장하여, 기존 데이터베이스로는 어려운 지능적이고 편리한 시맨틱 검색을 가능하게 합니다. 벡터 데이터베이스는 시맨틱 검색을 더욱 지능적이고 편리하게 만듭니다.
- 확장성: 클러스터 및 클라우드 확장을 지원하여 수십억 개의 엔티티를 쉽게 저장하고 검색할 수 있습니다. 확장성은 속도와 효율성이 가장 중요한 애플리케이션에 필수적입니다.
- 하이브리드 검색: Milvus는 벡터 및 스칼라 데이터의 혼합 검색을 지원하여 다양한 검색 시나리오와 요구사항을 충족할 수 있습니다.
- 풍부한 API: Milvus는 Python, Java, Go, Restful 등을 포함한 다국어 API를 제공합니다. Milvus는 다양한 애플리케이션에 쉽게 통합하고 사용할 수 있습니다.
- LLM 통합: OpenAI Plugin, Langchain, LLamaIndex를 포함한 여러 LLM과의 통합을 통해 사용자는 애플리케이션을 더욱 개인화할 수 있습니다.
- 다양한 설정: 저희는 Milvus를 로컬 노트북부터 Milvus-lite, docker containers, 분산 배포, 클라우드 사용과 같은 클라우드 제품에 이르기까지 다양한 사용 사례를 지원하도록 설계했습니다. 이를 통해 Milvus는 다양한 애플리케이션 규모에 쉽게 적응할 수 있으며, 소규모 프로젝트부터 엔터프라이즈급 데이터 검색까지 모두 지원합니다.
애플리케이션을 위한 다음 단계
AI 영역에서는 끊임없이 새로운 발전과 판도를 바꾸는 기술이 등장하여 애플리케이션을 한 단계 끌어올릴 수 있습니다. 여기에서는 애플리케이션을 개선하는 두 가지 방법, 즉 GPTCache 구현과 임베딩 모델 및 프롬프트 조정에 대해 살펴보겠습니다. 이를 통해 성능과 검색 품질을 향상시키고, 애플리케이션을 차별화하며, 더 나은 사용자 경험을 제공할 수 있습니다.
AIGC 애플리케이션 성능 향상 - GPTCache
AIGC 애플리케이션의 성능을 최적화하고 비용을 절감하고 싶다면 GPTCache를 확인해 보세요. 이 혁신적인 프로젝트는 LLM 응답을 저장하기 위한 시맨틱 캐시를 생성하도록 설계되었습니다.
그렇다면 이것이 어떻게 도움이 될까요? LLM에 대한 응답을 캐싱하고, 벡터 데이터베이스가 유사한 질문을 검색하여 캐시된 응답을 얻을 수 있으므로, 애플리케이션은 사용자에게 빠르고 정확하게 답변할 수 있습니다. GPTCache를 사용하면 캐시된 답변에 접근하는 것이 매우 쉬워집니다. 더 이상 중복 응답 생성이 필요 없어 궁극적으로 시간과 컴퓨팅 리소스를 절약할 수 있습니다. GPTCache는 전반적인 사용자 경험을 개선함으로써 한 단계 더 나아갑니다. 더 빠르고 정확한 답변을 제공하면 사용자의 답변 만족도를 높일 수 있으며, 애플리케이션은 더 성공적이 될 것입니다.
검색 품질 향상 - 임베딩 모델 및 프롬프트 조정
GPTCache를 활용하는 것 외에도, 임베딩 모델과 프롬프트를 미세 조정하면 검색 결과의 품질을 향상시킬 수 있습니다. 임베딩 모델은 텍스트를 딥러닝이 처리할 수 있는 숫자 벡터로 변환하는 구성 요소이므로 AI 애플리케이션의 핵심 요소입니다. 임베딩 모델을 조정하면 시맨틱 검색 결과의 정확성과 관련성을 향상시킬 수 있습니다. 여기에는 특정 키워드와 구문에 우선순위를 두도록 모델을 조정하고, 대상 사용자층의 요구와 선호도를 더 잘 반영하도록 가중치 및 점수 산정 메커니즘을 조정하는 작업이 포함됩니다. 잘 훈련된 임베딩 모델을 사용하면 AIGC 애플리케이션이 사용자 입력을 정확하게 해석하고 분류하여 더 정확한 검색 결과를 제공할 수 있습니다.
그 외에도, 애플리케이션에서 사용되는 프롬프트는 검색 결과의 품질을 향상시키는 데 필수적인 역할을 합니다. 프롬프트는 "오늘 무엇을 도와드릴까요?" 또는 "무슨 생각을 하고 계신가요?"와 같이 AI가 사용자에게 입력을 유도하기 위해 사용하는 문구입니다. 이러한 프롬프트를 테스트하고 수정함으로써 검색 결과의 품질과 관련성을 향상시킬 수 있습니다. 예를 들어, 애플리케이션이 특정 산업이나 인구 집단을 대상으로 한다면, 해당 그룹이 사용하는 언어와 용어를 반영하도록 프롬프트를 맞춤화할 수 있습니다. 이는 사용자를 더 관련성 높은 검색 쿼리로 안내하여, 사용자의 요구를 더 정확하게 충족함으로써 더 만족스러운 경험으로 이어집니다. 사용자 요구 사항을 충족하도록 프롬프트를 개선함으로써, 사용자가 더 성공적인 검색을 달성하도록 도울 수 있으며, 그 결과 더 만족도 높은 사용자 기반으로 이어집니다.
결국
요약하자면, LangChain과 Milvus는 LLM 기반 애플리케이션을 처음부터 만드는 개발자에게 완벽한 조합입니다. LangChain은 LLM을 위한 표준적이고 사용자 친화적인 인터페이스를 제공하는 반면, Milvus는 뛰어난 저장 및 검색 기능을 제공합니다. LangChain과 Milvus는 ChatGPT의 지능과 효율성을 향상시킬 수 있으며, 이는 환각이라는 장애물을 넘어서는 데 도움이 됩니다. 더 나아가, GPTCache, 프롬프트 및 모델 튜닝 기술을 통해 우리는 이전에는 가능하다고 생각하지 못했던 방식으로 AI 애플리케이션을 개선할 수 있습니다.
AI의 경계를 계속 확장해 나가면서, 협력하여 AIGC가 인공지능의 무한한 잠재력을 탐구할 수 있는 더 밝은 미래를 만들어 갑시다.
계속 읽기

Notion's Vector Search Is Excellent. Their Next Problem Is Harder.
Notion solved vector search scaling in two years. The next bottleneck — offline context engineering, unified data, and the real-time/offline gap — is harder.

Zilliz Named "Highest Performer" and "Easiest to Use" in G2's Summer 2025 Grid® Report for Vector Databases
Zilliz shines in G2's Summer 2025 Grid® Report as both "Highest Performer" and "Easiest to Use," solving the performance-usability dilemma.

Building RAG Pipelines for Real-Time Data with Cloudera and Milvus
explore how Cloudera can be integrated with Milvus to effectively implement some of the key functionalities of RAG pipelines.



