인공지능(AI) 시대에는 방대한 데이터 세트에서 의미 있는 지식을 추출하는 것이 기업과 개인 모두에게 중요해졌습니다. 검색 증강 생성(RAG)은 AI의 기능을 대폭 강화하여 시스템이 사람과 유사한 텍스트를 생성할 뿐만 아니라 실시간으로 관련 정보를 가져올 수 있도록 지원하는 획기적인 기술입니다. 이러한 융합을 통해 문맥이 풍부하고 세부 사항이 정확한 응답을 생성합니다.
인공지능(AI)이라는 광활한 바다를 항해하는 흥미진진한 항해를 시작할 때, 우리를 안내할 다음 세 가지 축을 이해하는 것이 필수적입니다. 생성형 AI, 거대언어모델(LLM), LangChain, Hugging Face, 그리고 이 RAG(검색 증강 생성)의 유용한 애플리케이션이죠.
이 여정의 핵심에는 거대언어모델(LLM)과 생성형 AI라는 혁신을 이끄는 두 가지 강력한 엔진이 있습니다.
Qwen, GPT 등과 같은 LLM은 인간과 유사한 언어를 대규모로 이해하고 생성할 수 있는 텍스트의 거인입니다. 이러한 모델은 방대한 텍스트 데이터 말뭉치를 학습하여 일관되고 문맥과 연관성이 있는 텍스트 문자열을 예측하고 생성할 수 있습니다. 번역에서 콘텐츠 제작에 이르기까지 다양한 자연어 처리 작업의 근간이 됩니다.
생성형 AI는 AI 영역에서 교묘한 창작의 마법사라고 할 수 있습니다. 이미지, 음악, 그리고 가장 중요한 것은 텍스트와 같이 학습 데이터와 유사한 새로운 데이터 인스턴스를 생성하는 기술을 포괄합니다. 여기서 생성형 AI는 이전에 볼 수 없었던 새롭고 유익한 답변, 스토리 또는 아이디어를 만들어내는 AI의 능력을 의미합니다. 이를 통해 AI는 단순히 과거를 모방하는 것이 아니라 발명하고 혁신하며 영감을 얻을 수 있습니다.
LangChain은 다양한 AI 구성요소 간의 원활한 통합과 상호 작용을 가능하게 하는 구조를 세심하게 설계하는 AI 워크플로의 설계자 역할을 합니다. 이 프레임워크는 LLM 및 검색 시스템을 포함한 지능형 하위 시스템의 데이터 흐름을 연결하는 복잡한 프로세스를 간소화하여 정보 추출 및 자연어 이해와 같은 작업을 그 어느 때보다 쉽게 수행할 수 있게 해줍니다.
Hugging Face는 AI 모델이 번성하는 번화한 대도시와 같습니다. 이 중앙 허브는 사전 학습된 방대한 모델을 제공하며, 머신러닝 탐색과 적용을 위한 비옥한 토양 역할을 합니다. 이 허브와 리소스에 액세스하려면 Hugging Face 계정을 만들어야 합니다. 이 단계를 거치면 광활한 AI의 세계로 가는 문이 열립니다. Hugging Face를 방문하여 가입하고 모험을 시작하세요.
검색 증강 생성(RAG)은 생성형 AI의 창의적인 능력과 지식 검색의 정확성을 결합하여 명료할 뿐만 아니라 심층적인 정보를 제공하는 시스템을 만드는 정교한 AI 기술입니다. RAG의 잠재력과 효율성을 최대한 활용하기 위해 방대한 정보 저장소를 빠르게 검색할 수 있는 강력한 도구인 벡터 데이터베이스를 통합했습니다. 다음은 벡터 데이터베이스로 RAG가 작동하는 방식에 대한 향상된 분석입니다.
벡터 데이터베이스의 통합은 RAG의 효율성의 핵심입니다. 기존의 메타데이터 검색 방법은 속도가 느리고 정확도가 떨어질 수 있지만, 벡터 데이터베이스는 매우 큰 데이터 세트에서도 문맥과 관련된 정보를 거의 즉각적으로 검색할 수 있습니다. 이러한 접근 방식은 귀중한 시간을 절약할 뿐만 아니라 AI의 응답이 가장 적절하고 최신의 정보에 근거하도록 보장합니다.
RAG의 능력은 챗봇, 디지털 비서, 정교한 연구 도구 등 정확하고 신뢰할 수 있으며 맥락에 기반한 정보 제공이 중요한 애플리케이션에서 특히 유용합니다. 단순히 설득력 있는 답변을 작성하는 것이 아니라 검증 가능한 데이터와 실제 지식에 기반한 콘텐츠를 생성하는 것이 중요합니다.
LangChain, Hugging Face, LLM, GenAI, 그리고 벡터 데이터베이스로 강화된 RAG에 대한 풍부한 이해로 무장한 우리는 이러한 기술을 현실로 구현할 코딩 모험의 문턱에 서 있습니다. 앞으로 살펴볼 Python 스크립트는 이러한 요소들의 시너지를 통해 창의성과 맥락뿐 아니라 공상 과학의 영역으로 여겨졌던 깊이 있는 이해력으로 반응할 수 있는 AI 시스템을 보여줄 것입니다. 벡터 데이터베이스를 사용하여 코딩을 준비하고 RAG의 혁신적인 힘을 경험해 보세요.
이 기술 오디세이를 시작하기 전에 모든 준비가 완료되었는지 확인해 보겠습니다.
전부 준비하셨나요? 좋습니다! 이제 본격적으로 시작해 보겠습니다.
Python 종속성을 신중하게 관리하면 AI 프로젝트를 안정적이고 신뢰할 수 있는 기반 위에 구축할 수 있습니다. 종속성이 제자리에 있고 환경이 올바르게 설정되었으면 스크립트를 실행하고 RAG와 LangChain의 성능을 실제로 확인할 준비가 된 것입니다.
이제 Python 스크립트를 실행하여 RAG가 작동하는 것을 확인할 수 있습니다.
LangChain 프레임워크와 Hugging Face의 Transformers 라이브러리를 사용하여 AI를 탐색하기 전에 안전하고 잘 구성된 환경을 구축하는 것이 중요합니다. 이러한 준비에는 필요한 라이브러리를 가져오고 환경 변수를 통해 API 키와 같은 민감한 정보를 관리하는 것이 포함됩니다.
from torch import cuda
from langchain_community.vectorstores import FAISS
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_community.embeddings.huggingface import HuggingFaceEmbeddings
from transformers import AutoModelForCausalLM, AutoTokenizer
from langchain_community.llms.huggingface_pipeline import HuggingFacePipeline
from transformers import pipeline
from dotenv import load_dotenv
load_dotenv()
Hugging Face의 AI 모델로 작업할 때는 종종 Hugging Face API에 액세스해야 하며, 이를 위해서는 API 키가 필요합니다. 이 키는 Hugging Face 서비스에 요청할 때 고유 식별자로, 모델을 로드하고 애플리케이션에서 사용할 수 있도록 해줍니다.
환경을 안전하게 설정하려면 다음과 같이 하세요.
HUGGINGFACE_API_KEY=your_api_key_here
your_api_key_here를 Hugging Face에서 얻은 실제 API 키로 바꿉니다.
modelPath = "sentence-transformers/all-mpnet-base-v2"
device = 'cuda' if cuda.is_available() else 'cpu'
model_kwargs = {'device': device}
여기서는 임베딩에 사용할 사전 학습된 모델의 경로를 설정합니다. 또한 빠른 계산을 위해 가능한 경우 GPU를 활용하고, 그렇지 않은 경우 기본값을 CPU로 설정하여 디바이스 설정을 구성합니다.
embeddings = HuggingFaceEmbeddings(
model_name=modelPath,
model_kwargs=model_kwargs,
)
# Made up data, just for fun, but who knows in a future
vectorstore = FAISS.from_texts(
["Harrison worked at Alibaba Cloud"], embedding=embeddings
)
retriever = vectorstore.as_retriever()
선택한 모델과 구성으로 HuggingFaceEmbedding의 인스턴스를 초기화합니다. 그런 다음, 고차원 공간에서 효율적인 유사도 검색을 수행할 수 있는 FAISS를 사용해 벡터스토어를 생성합니다. 또한 임베딩을 기반으로 정보를 가져올 리트리버를 인스턴스화합니다.
template = """Answer the question based only on the following context:
{context}
Question: {question}
"""
prompt = ChatPromptTemplate.from_template(template)
여기서는 AI와의 상호작용을 구성하는 데 사용될 채팅 프롬프트 템플릿을 정의합니다. 여기에는 체인을 실행하는 동안 동적으로 채워질 컨텍스트와 질문을 위한 자리 표시자가 포함됩니다.
AI와 자연어 처리의 세계에서 토큰화 도구와 언어 모델은 텍스트를 의미 있는 행동으로 전환하는 역동적인 듀오입니다. 토큰화 도구는 언어를 모델이 이해할 수 있는 조각으로 분해하고, 언어 모델은 이러한 입력을 기반으로 언어를 예측하고 생성합니다. 이 과정에서 우리는 이러한 기능을 활용하기 위해 Hugging Face의 AutoTokenizer와 AutoModelForCausalLM 클래스를 사용하고 있습니다. 하지만 언어 모델을 선택할 때 한 가지 크기가 모든 것에 적합하지 않다는 점을 기억하는 것이 중요합니다.
모델의 크기는 고려해야 할 중요한 요소입니다. Qwen-72B와 같은 큰 모델은 더 많은 파라미터를 가지므로 일반적으로 더 미묘한 텍스트를 이해하고 생성할 수 있습니다. 하지만 더 많은 연산 능력이 필요합니다. 하이엔드 GPU와 충분한 메모리를 갖추고 있다면 이러한 대형 모델을 선택하여 기능을 최대한 활용할 수 있습니다.
반면에 Qwen-1.8B와 같은 작은 모델은 표준 컴퓨팅 환경에서 훨씬 더 관리하기 쉽습니다. 이 작은 모델도 IoT 및 모바일 디바이스에서 실행할 수 있어야 합니다. 더 큰 모델만큼 복잡한 언어를 잘 포착하지는 못하지만, 여전히 뛰어난 성능을 제공하며 특수 하드웨어가 없는 사용자도 쉽게 접근할 수 있습니다.
고려해야 할 또 다른 사항은 작업의 성격입니다. 대화형 AI를 구축하는 경우, 대화에 맞게 미세 조정되고 대화의 뉘앙스를 기본 모델보다 더 잘 처리할 수 있는 Qwen-7B-Chat과 같은 채팅 전용 모델을 사용하면 더 나은 결과를 얻을 수 있습니다.
모델이 클수록 하드웨어에서 더 많은 것을 요구할 뿐만 아니라 클라우드 기반 서비스를 사용하여 모델을 실행하는 경우 더 높은 비용이 발생할 수 있습니다. 각 추론은 처리 시간과 리소스를 차지하므로 대규모 모델로 작업하는 경우 비용이 더 늘어날 수 있습니다.
어떤 모델을 사용할지 결정할 때는 사용 가능한 리소스와 프로젝트의 특정 요구 사항과 비교하여 더 큰 모델의 이점을 잘 따져보세요. 이제 막 시작했거나 소규모로 개발하는 경우에는 소규모 모델이 최선의 선택일 수 있습니다. 요구 사항이 커지거나 고급 기능이 필요한 경우 더 큰 모델로 업그레이드하는 것을 고려하세요.
Qwen 시리즈는 오픈소스이므로 다양한 모델을 실험하여 프로젝트에 가장 적합한 모델을 찾을 수 있다는 점을 기억하세요. 다른 모델을 사용하기로 결정한 경우 스크립트의 모델 선택 부분은 다음과 같습니다.
# This can be changed to any of the Qwen models based on your needs and resources
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-7B", trust_remote_code=True)
model_name_or_path = "Qwen/Qwen-7B"
model = AutoModelForCausalLM.from_pretrained(model_name_or_path,
device_map="auto",
trust_remote_code=True)
토큰화 도구와 인과 관계 언어 모델을 각각 AutoTokenizer와 AutoModelForCausalLM 클래스를 사용하여 Hugging Face에서 로드합니다. 이러한 구성 요소는 자연어 입력을 처리하고 출력을 생성하는 데 매우 중요합니다.
이 파이프라인은 이전에 로드된 언어 모델과 토큰화 도구를 사용하여 텍스트를 생성하도록 설계되었습니다. 파라미터를 세분화하고 텍스트 생성의 동작을 제어하는 데 있어 각 파라미터의 역할을 이해해 보겠습니다.
pipe = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
max_new_tokens=8192,
do_sample=True,
temperature=0.7,
top_p=0.95,
top_k=40,
repetition_penalty=1.1
)
hf = HuggingFacePipeline(pipeline=pipe)
원하는 파라미터로 파이프라인을 설정한 후 다음 코드 줄을 작성합니다.
hf = HuggingFacePipeline(pipeline=pipe)
파이프 객체를 HuggingFacePipeline으로 감쌉니다. 이 클래스는 LangChain 프레임워크의 일부이며, 파이프라인을 AI 애플리케이션 구축을 위한 LangChain의 워크플로에 원활하게 통합할 수 있게 해줍니다. 파이프라인을 래핑함으로써, 이제 리트리버 및 파서와 같은 LangChain의 다른 구성 요소와 함께 사용하여 더 복잡한 AI 시스템을 만들 수 있습니다.
이러한 파라미터를 신중하게 선택하면 보다 창의적이고 다양한 결과물을 원하거나 일관되고 집중된 텍스트를 목표로 하는 등 애플리케이션의 특정 요구 사항에 맞게 텍스트 생성의 동작을 미세 조정할 수 있습니다.
아래 코드 스니펫은 초기 질문이 관련 정보를 검색하도록 유도한 다음 생성 프로세스를 보강하는 데 사용되어 입력 질문에 대한 정보에 기반하고 맥락에 맞는 답변을 제공하는 완전한 엔드투엔드 RAG 시스템을 나타냅니다.
1. 체인 제작:
chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| hf
| StrOutputParser()
)
코드의 이 부분에서 일어나는 일은 다음과 같습니다.
(파이프) 연산자를 사용하는 것은 이 코드가 함수형 프로그래밍 스타일, 특히 한 함수의 출력이 다음 함수의 입력이 되는 함수 구성 또는 파이프라인 패턴의 개념을 사용하고 있음을 의미합니다.
2. 체인 호출:
results = chain.invoke("Where did Harrison work?")
이 줄에서는 특정 질문으로 체인을 호출하고 있습니다: "Where did Harrison work?" 이 호출은 체인에 정의된 전체 작업 시퀀스를 트리거합니다. 리트리버는 관련 정보를 검색한 다음 프롬프트를 통해 질문과 함께 Hugging Face 모델에 전달합니다. 모델은 수신된 입력에 따라 응답을 생성합니다.
3. 결과 프린팅:
print(results)
생성된 응답은 StrOutputParser()에 의해 파싱되어 최종 결과로 반환된 다음 콘솔 또는 다른 출력으로 프린트됩니다.
마지막으로 리트리버, 프롬프트 템플릿, Hugging Face 파이프라인, 출력 구문 분석기를 연결하여 RAG 체인을 구축합니다. 질문으로 체인을 호출하면 결과가 프린트됩니다.
여러분은 방금 RAG와 LangChain을 통해 AI의 세계로 크게 도약했습니다. 이 코드를 이해하고 실행함으로써, 여러분은 전례 없는 방식으로 정보를 추론하고 상호 작용할 수 있는 인텔리전트 시스템을 만들 수 있는 잠재력을 발휘하고 있는 것입니다.
이 문서는 원래 영어로 작성되었습니다. 원본 문서는 여기를 참조하세요.
Der Beginn der KI-Revolution – eine Reise mit RAG und LangChain
70 posts | 2 followers
FollowRegional Content Hub - August 12, 2024
Regional Content Hub - March 20, 2024
James Lee - October 11, 2023
JJ Lim - December 31, 2021
Regional Content Hub - May 20, 2024
JJ Lim - December 29, 2023
70 posts | 2 followers
FollowTop-performance foundation models from Alibaba Cloud
Learn MoreAccelerate AI-driven business and AI model training and inference with Alibaba Cloud GPU technology
Learn MoreAccelerate innovation with generative AI to create new business success
Learn MoreA platform that provides enterprise-level data modeling services based on machine learning algorithms to quickly meet your needs for data-driven operations.
Learn MoreMore Posts by Regional Content Hub