LangChain과 Weights & Biases 시작하기
LangChain과 Weights & Biases를 통합해 동적이고 데이터 기반의 AI 애플리케이션을 구축하는 방법을 알아보세요. 이 글은 AI 번역본입니다. 오역이 있을 수 있으니 댓글로 알려주세요.
Created on September 15|Last edited on September 15
Comment
이 글에서는 다음 내용을 살펴보겠습니다 LangChain 의 기능을 확장합니다 언어 모델 그리고 Weights & Biases가 이러한 애플리케이션 개발을 어떻게 최적화하는지도 살펴보겠습니다. 또한 Weights & Biases가 이러한 모델의 학습과 개발을 최적화하여 LangChain을 어떻게 보완하는지 검토하겠습니다.
LangChain의 핵심 구성 요소부터 Weights & Biases 통합을 위한 실용적인 팁까지, 이 글은 AI 개발에서 중요한 이러한 도구를 익히고 활용하려는 분들을 위해 종합적인 가이드를 제공하는 것을 목표로 합니다.

목차
LangChain이란 무엇인가요?LangChain이 특별한 이유는 무엇일까요?LangChain 구성 요소LangChain 라이브러리LangChain 템플릿LangServeLangSmithWeights & Biases 개요LangChain은 어떻게 작동하나요?데이터를 벡터 인덱스에 저장하기데이터 검색체이닝LangChain과 Weights & Biases 시작하기1단계: 필요한 라이브러리 설치2단계: 필요한 라이브러리 임포트하기3단계: LangChain에서 Weights & Biases 로깅 활성화4단계: OpenAI 키를 설정하고 새로운 OpenAI 모델 초기화하기5단계: LangChain 문서 데이터 로드하기6단계: 문서에서 FAISS 인덱스 생성하기7단계: 문서용 쿼리 만들기8단계: 프롬프트 템플릿 설정하기Weights & Biases로 LangChain 활동 추적하기LangChain과 Weights & Biases 초보자 실전 팁LangChainWeights & Biases결론참고
LangChain이란 무엇인가요?
LangChain 은 단순한 프레임워크 그 이상으로 언어 모델: 이 도구 키트는 이러한 모델을 외부 데이터와 계산 워크플로에 통합하기 위한 것입니다. 데이터베이스, API, 그리고 사용자 정의 로직과의 연결을 가능하게 함으로써 LangChain은 모델을 독립적인 텍스트 생성기에서 동적인 문제 해결 에이전트로 바꿉니다.
주요 기능:
- 구조화된 데이터 접근: 언어 모델은 실시간 데이터나 특정 데이터에 기반해 응답을 생성할 수 있습니다.
- 프로세스 체이닝: LangChain은 데이터 검색, 추론, 알고리즘 등 다양한 구성 요소의 출력을 결합하여 다단계 워크플로를 지원합니다.
LangChain이 특별한 이유는 무엇일까요?
LangChain의 장점은 언어 모델과 실제 활용 사이의 간극을 효과적으로 메워 준다는 점에 있습니다.
특징 및 차별점:
- 실시간 데이터 통합: 모델은 구조화된 데이터와 상호작용하여 맥락에 맞는 결과를 제공합니다.
- 프로세스 체이닝: 여러 단계를 통합해 정교한 AI 솔루션을 구현하는 워크플로를 구축하세요.
- 맞춤형 템플릿: 사전 구축된 템플릿을 사용하면 특정 요구에 맞게 워크플로를 더 쉽게 맞출 수 있습니다.
LangChain 구성 요소
LangChain은 네 가지 핵심 구성 요소로 이루어져 있습니다:
LangChain 라이브러리
LangChain의 핵심을 이루는 이 라이브러리는 데이터 소스와의 통합을 돕고, 복잡한 연산 체인을 가능하게 합니다.
사용 사례
- 데이터 기반 응답: 실시간 기상 데이터처럼 최신이거나 특정한 데이터에 기반해 응답을 생성해야 하는 애플리케이션(예: 실시간 데이터를 바탕으로 날씨 보고서를 생성하는 경우)에 적합합니다.
- 복잡한 쿼리 처리: 쿼리가 정보를 검색하고 처리한 뒤 언어 기반 출력을 생성하는 등 여러 단계의 연산을 필요로 하는 경우.
LangChain 템플릿
LangChain 템플릿 미리 정의된 구조나 스크립트로, 언어 모델이 특정 형식이나 스타일로 응답을 생성하도록 안내합니다. 이러한 템플릿은 다양한 애플리케이션 요구에 맞게 높은 수준으로 커스터마이즈할 수 있습니다.
LangChain에서 제공하는 템플릿 예시는 다음과 같습니다:
- OpenAI Functions를 활용한 데이터 추출: OpenAI의 함수 호출 기능을 활용해 비정형 소스에서 구조화된 데이터를 추출하세요.
- 로컬 Retrieval-Augmented Generation: Ollama, GPT4All, Chroma와 같은 로컬 도구만 활용하여 데이터 특화 챗봇을 구축하세요.
- OpenAI Functions 에이전트: OpenAI의 function calling과 Tavily를 활용해 동작을 실행할 수 있는 챗봇을 설계하세요.
- XML 에이전트: Anthropic과 You.com을 활용해 실행 중심의 챗봇을 구축하세요.
사용 사례
- 표준화된 보고: 일관된 형식이 필요한 비즈니스 보고서, 연구 요약, 또는 뉴스 기사 작성 시.
- 교육 콘텐츠 제작: 퀴즈, 설명, 서술형 문제 등 교육 자료를 체계적으로 제작할 때.
LangServe
LangServe 언어 모델을 위한 서버 인터페이스 역할을 하며, 사용자들이 API 호출을 통해 언어 모델의 기능에 접근할 수 있도록 합니다. 이를 통해 기존 시스템이나 애플리케이션에 언어 모델을 더 쉽게 통합할 수 있습니다.
사용 사례
- 웹 애플리케이션: 전체 모델을 내장하지 않고도 웹 애플리케이션에 언어 모델 기능을 통합하려는 개발자용.
- 마이크로서비스 아키텍처: 서로 다른 서비스들이 언어 모델과 독립적으로 상호작용해야 하는 마이크로서비스 아키텍처에서.
LangSmith
LangSmith 에 초점을 맞춥니다 언어 모델 미세 조정 특정 작업이나 도메인에 맞게 사용할 수 있습니다. 사용자는 모델의 응답을 더욱 정밀하게 맞춤화할 수 있어, 특화된 애플리케이션에 적합합니다.
사용 사례
- 도메인 특화 애플리케이션: 법률, 의료, 기술 등과 같이 언어 모델이 도메인 특화 콘텐츠를 이해하고 생성해야 하는 분야에서.
- 맞춤형 고객 서비스: 회사 브랜드 보이스를 반영하거나 특정 유형의 고객 문의를 처리하도록 챗봇과 가상 비서를 맞춤화할 때.
Weights & Biases 개요
Weights & Biases는 강력한 추적, 시각화, 디버깅 도구를 제공해 LangChain의 역량을 강화하는 대표적인 머신러닝 플랫폼입니다. 두 시스템은 다음과 같이 함께 작동합니다:
왜 LangChain과 함께 Weights & Biases를 사용해야 할까요?
- 실험 추적: 구성과 메트릭을 모니터링하세요.
- 시각화: 성능과 최적화에 대한 인사이트를 얻으세요.
- 디버깅: 워크플로에서 병목 현상이나 비효율을 쉽게 찾아내세요.
LangChain은 어떻게 작동하나요?
LangChain은 벡터 데이터베이스와 체이닝을 활용해 질의를 처리하고 응답합니다. 다음은 워크플로의 구성 요소입니다:
데이터를 벡터 인덱스에 저장하기

- 벡터화: 임베딩을 사용해 텍스트를 벡터 표현으로 변환하세요.
- 인덱싱: FAISS나 Pinecone 같은 데이터베이스를 사용해 유사도 검색을 효율적으로 수행하세요.
데이터 검색

- 질의 벡터화: 질의를 벡터로 변환하세요.
- 검색 수행하기 인덱스에서 가장 관련성 높은 데이터를 검색하세요.
체이닝

- 통합: 검색된 데이터를 언어 모델과 결합해 응답을 생성하세요.
LangChain과 Weights & Biases 시작하기
1단계: 필요한 라이브러리 설치
먼저 LangChain, Weights & Biases(wandb), OpenAI 등을 포함한 필요한 모든 Python 라이브러리를 설치합니다. 이 라이브러리들은 언어 모델을 통합하고 프로젝트에서 벡터 인덱싱을 처리하는 데 필수적입니다.
!pip install langchain wandb!pip install openai!pip install pinecone-client!pip install langchain-openai!pip install tiktoken!pip install faiss-gpu!pip install --upgrade openai
2단계: 필요한 라이브러리 임포트하기
다음으로, 이러한 라이브러리에서 필요한 모듈을 임포트합니다. 이 단계에서 OpenAI의 언어 모델과 LangChain을 함께 사용할 수 있도록 환경을 설정하고, 문서 로딩과 데이터 인덱싱을 위한 도구도 준비합니다.
from langchain_openai import ChatOpenAI, OpenAIEmbeddingsfrom langchain.chains import create_retrieval_chainfrom langchain.prompts import ChatPromptTemplatefrom langchain.schema import Documentfrom langchain.vectorstores import FAISSfrom langchain.document_loaders import PyPDFLoaderimport os
3단계: LangChain에서 Weights & Biases 로깅 활성화
여기서는 Weights & Biases를 사용해 LangChain 작업의 로깅을 활성화합니다. 이는 LangChain 애플리케이션의 성능을 추적하고 시각화하는 데 핵심적이며, 동작 방식에 대한 인사이트를 제공합니다.
os.environ["LANGCHAIN_WANDB_TRACING"] = "true"# optionally set your wandb settings or configsos.environ["WANDB_PROJECT"] = "langchain-tracing"
4단계: OpenAI 키를 설정하고 새로운 OpenAI 모델 초기화하기
그다음 OpenAI API 키로 환경을 설정하고, 자연어 처리를 위해 사용할 ChatGPT와 같은 언어 모델을 초기화합니다.
# Set OpenAI API keyos.environ['OPENAI_API_KEY'] = "insert your OpenAI API key here"# Initialize the language modelllm = ChatOpenAI()
5단계: LangChain 문서 데이터 로드하기
이 단계에서는 PyPDFLoader를 사용해 PDF 파일에서 LangChain 문서를 로드합니다. 또한 문서를 섹션이나 페이지 단위로 분할하여 처리하기 쉬운 형태로 만듭니다. ChatGPT가 LangChain에 대해 충분히 잘 알지 못할 수 있으므로, 데이터 소스로 LangChain 자체의 문서를 사용하겠습니다.
loader = PyPDFLoader("/kaggle/input/langchaindocumentationpdf/langChainDocumentation.pdf")pages = loader.load_and_split()
6단계: 문서에서 FAISS 인덱스 생성하기
로드한 문서 섹션을 임베딩으로 변환하고 FAISS 인덱스를 생성합니다. 이렇게 하면 우리의 쿼리에 대해 효율적인 유사도 검색을 수행할 수 있습니다.
embeddings = OpenAIEmbeddings()faiss_index = FAISS.from_documents(pages, embeddings)
7단계: 문서용 쿼리 만들기
특정 쿼리를 정의하고 FAISS 인덱스를 사용해 이 쿼리에 가장 잘 맞는 문서의 관련 섹션을 찾습니다.
# Create a query for the documentquery = "What is LangChain?"docs = faiss_index.similarity_search(query, k=1)# Access the text of the top resultretrieved_doc = docs[0] if docs else None
8단계: 프롬프트 템플릿 설정하기
마지막으로, 검색된 문서의 컨텍스트를 포함하는 언어 모델용 템플릿을 준비합니다. 이 템플릿을 사용해 쿼리와 문서에서 결합된 정보를 바탕으로 응답을 생성합니다.
# Set up the enhanced prompt templateprompt_template = ChatPromptTemplate.from_template("Based on the following information:\n\n{context}\n\n""Can you answer this question: {input}?")# Format the prompt with the actual context and the queryif retrieved_doc:formatted_prompt = prompt_template.format(context=retrieved_doc.page_content, input=query)# Invoke the language model with the formatted promptresponse = llm.invoke(formatted_prompt)print("Response:\n", response)else:print("No relevant document found.")
문서 파일이 비어 있는 경우 출력
응답:
제공된 정보에 따르면 “LangChain”에 대한 언급은 없습니다. “LangChain”이 해바라기 은하 또는 제시된 정보와는 관련 없는 다른 것을 가리킬 수도 있습니다. 더 많은 맥락을 제공하시거나 질문을 구체적으로 설명해 주시겠어요?
문서 파일에 실제 데이터가 포함된 경우 출력
응답:
content='LangChain은 언어 모델 기반 애플리케이션 개발을 돕는 프레임워크입니다. 애플리케이션이 컨텍스트를 인지하고, 제공된 컨텍스트를 바탕으로 추론할 수 있도록 해줍니다. LangChain은 여러 구성 요소로 이루어져 있으며, 다양한 컴포넌트에 대한 인터페이스와 통합을 제공하는 Python 및 JavaScript 라이브러리(LangChain Libraries), 미리 구성된 체인과 에이전트, 그리고 다양한 작업에 쉽게 배포할 수 있는 레퍼런스 아키텍처를 제공하는 LangChain Templates를 포함합니다. 또한 LangServe는 LangChain 체인을 REST API로 배포할 수 있게 하며, LangSmith는 어느 LLM 프레임워크로 구축된 체인이든 디버깅, 테스트, 평가, 모니터링을 수행할 수 있는 개발자 플랫폼으로서 LangChain과 매끄럽게 통합됩니다. 전반적으로 LangChain은 개발, 프로덕션 전환, 배포에 필요한 도구를 제공하여 애플리케이션 라이프사이클 전반을 단순화합니다.'
Weights & Biases로 LangChain 활동 추적하기

Weights & Biases를 사용해 추적 테이블을 만들었고, 여기에서 LLM의 타임라인과 모델 아키텍처를 추적할 수 있습니다.
LangChain과 Weights & Biases 초보자 실전 팁
LangChain
- 성능 최적화를 위해 Pinecone, Chroma 같은 다양한 벡터 스토리지 솔루션을 시험해 보세요.
- 복잡한 체인으로 확장하기 전에 기본 워크플로부터 작게 시작하세요.
Weights & Biases
- 맞춤형 지표를 사용해 언어 모델을 더 효과적으로 평가하세요.
- 자세한 로그와 시각화를 통해 시간 경과에 따른 변화를 추적하세요.
결론
LangChain과 Weights & Biases는 AI 개발을 혁신하는 도구입니다. LangChain은 언어 모델을 실제 데이터와 논리 프로세스에 연결해 역량을 확장하고, Weights & Biases는 효과적인 추적과 최적화를 보장합니다. 두 도구를 함께 사용하면 정교하고 데이터 중심적인 AI 애플리케이션을 구축하는 데 필요한 프레임워크와 도구를 모두 갖출 수 있습니다.
참고
Add a comment