LangChain
LLM은 상태를 저장하지 않으므로 이전 대화 내용을 기억하지 못합니다. 새로운 대화에서 이전에 사용한 컨텍스트를 다시 가져오기 위해 영구 데이터베이스에 저장해야 할 수도 있습니다. 이렇듯 LLM에 장단기 메모리를 추가하는 것은 개발자의 주요 임무입니다. LangChain은 대규모 언어 모델(LLM)을 사용하여 애플리케이션을 개발하기 위한 오픈 소스 프레임워크로써, 랭체인을 사용해 챗봇 또는 개인 비서를 만들고, 문서 또는 구조화된 데이터에 대한 Q&A를 요약, 분석, 생성하고, 코드를 쓰거나 이해하고, API와 상호작용하고, 생성형 AI를 활용하는 여러 애플리케이션을 만들 수 있습니다. 현재 랭체인은 파이썬과 타입스크립트/자바스크립트 두 가지 버전이 있습니다. LLM을 효과적으로 사용할 수 있는 프롬프트 작성에는 어느 정도 기술이 필요하지만, LLM 사용법은 대체로 간단합니다. 반면 언어 모델을 사용한 프로그래밍은 어려울 수 있습니다. 그럴 때는 랭체인을 사용하면 됩니다.
언어 모델에는 LLM과 채팅 모델, 두 종류가 있습니다. LLM은 문자열을 입력으로 받고 문자열을 반환합니다. 채팅 모델은 메시지 목록을 입력으로 받고 채팅 메시지를 반환합니다. 채팅 메시지에는 내용과 역할, 두 가지 구성 요소가 포함됩니다. 역할은 내용의 출처를 사람, AI, 시스템, 함수 호출 또는 일반 입력 등으로 지정합니다.
일반적으로 LLM은 입력에 프롬프트 템플릿을 사용합니다. 프롬프트 템플릿을 사용해 LLM 또는 채팅 모델이 수행할 역할, 예를 들어 “영어를 프랑스어로 번역하는 유용한 비서” 등을 지정할 수 있습니다. 또한 프롬프트 템플릿을 이용하면 번역할 구문 목록과 같은 다양한 내용 인스턴스에 해당 템플릿을 적용할 수 있습니다.
LangChain의 주요 특징:
- 다양한 LLM 지원: 랭체인은 오픈AI, 코히어(Cohere), AI21에서 제공하는 주류 LLM과 허깅페이스(Hugging Face)에서 제공되는 오픈소스 LLM을 지원
- 구조적 프로그래밍: 여러 LLM을 순서대로 연결하고 상호 작용하도록 설계하여 복잡한 AI 애플리케이션 개발을 용이하게 합니다.
- 데이터 연결: 외부 데이터 소스(예: 데이터베이스, API)와 LLM을 연결하여 데이터 기반 추론 및 분석을 수행할 수 있도록 합니다.
Model I/O
모델 I/O 모듈은 LLM 모델과의 인터페이스. 이는 기본적으로 효과적인 프롬프트를 생성/관리하고, 공통 인터페이스를 통해서 모델 API를 호출하고, 모델 출력에서 정보를 추출한다.. 생성형 AI의 핵심인 프롬프트 엔지니어링이 랭체인에서 잘 처리된다. 이 모듈은 LLM 제공자가 노출하는 인증, API 매개변수, 엔드포인트를 요약한다. 이 모듈은 마지막으로, 모델에서 보낸 응답을 애플리케이션서 사용할 수 있는 원하는 형식으로 해석하는 작업을 돕는다.
Data Connection
Data Connection 모듈은 LLM 애플리케이션의 ETL 파이프라인에 해당한다. 이 모듈은 PDF 또는 엑셀 파일과 같은 외부 문서를 로드하고, 이를 처리하기 위해 일괄적으로 단어 임베딩으로 변환한 다음, 임베딩을 벡터 데이터베이스에 저장하고, 마지막으로 쿼리를 통해 검색하기 위한 빌딩 블록을 제공한다. 앞서 설명한 바와 같이, 이는 랭체인의 가장 중요한 구성 요소이다.
Chains
LLM과 상호 작용하는 것은 유닉스 파이프라인을 사용하는 것과 많은 면에서 유사하다. 한 모듈의 출력이 다른 모듈에 입력으로 전송된다. 개발자는 종종 원하는 결과를 얻을 때까지 LLM을 사용해 응답을 명확하게 하고 요약해야 한다.
랭체인의 체인은 구성 요소와 LLM을 활용하여 예상되는 응답을 얻는 효율적인 파이프 라인을 구축하도록 설계됐다. 간단한 체인에는 프롬프트와 LLM이 포함될 수 있지만 재귀와 같이 LLM을 여러 번 호출하여 결과를 얻는 등 매우 복잡한 체인을 구축할 수도 있다. 예를 들어, 체인은 문서를 요약한 다음 이에 대한 감정 분석을 수행하는 프롬프트가 포함될 수 있다.
Memory
LLM은 상태 비저장형이지만 정확한 응답을 위해 컨텍스트가 필요하다. 랭체인의 메모리 모듈은 모델에 단기 및 장기 메모리를 쉽게 추가할 수 있도록 도와주며 체인 실행 간 애플리케이션 상태 유지한다. 단기 메모리는 간단한 메커니즘을 통해 대화의 기록을 유지한다. 메시지 기록은 레디스(Redis)와 같은 외부 소스에 저장되어 장기 메모리를 유지할 수 있다.
Callbacks
랭체인은 개발자에게 LLM 애플리케이션의 다양한 단계에 연결할 수 있는 콜백 시스템을 제공한다. 이는 체인의 중간 단계를 기록 및 스트리밍한다. 파이프라인 내에서 특정 상황이 발생할 때 호출되는 사용자 지정 콜백 핸들러를 작성할 수 있게 해준다다. 랭체인의 기본 콜백은 모든 단계의 출력을 콘솔에 간단히 인쇄하는 stdout을 가리킨다.
Agents
LLM은 추론과 행동이 가능한데, 이는 ReAct 프롬프트 기법이라고 불린다. 랭체인의 에이전트는 LLM을 사용하여 프롬프트를 행동 계획으로 추출하는 ReAct 프롬프트 제작을 단순화한다.
에이전트는 일종의 동적 체인으로 생각할 수 있다. 에이전트의 상위 지시문이 주어지면 체인이 사용할 툴을 선택할 수 있도록 한다. 동작의 순서는 체인(코드)으로 하드 코딩 된다. 언어 모델은 에이전트 내에서 추론 엔진으로 사용되어 어떤 순서로 어떤 동작을 취할지 결정한다.
원문보기:
https://www.ciokorea.com/column/305341#csidxea547b8e4628bc19b3dff101588141c
1. Schema
1.1 채팅 메세지 - System : AI에게 해야 할 일을 알려주는 배경 컨텍스트 - Human : 사용자 메세지 - AI : AI가 응답한 내용을 보여주는 상세 메세지
1.1 문서 텍스트와 메타데이터를 담고있는 객체입니다.
예제1) PyPDFLoader - PDF to Document
2. Models
2.1 언어 모델 (LLMs) 텍스트 문자열을 입력하고, 텍스트 문자열을 출력하는 모델입니다. LangChain 은 LLM 공급자가 아니며, 인터페이스만 제공합니다.
2.2 채팅 모델 채팅 모델은 언어 모델의 변형으로, 내부적으로는 언어 모델을 사용하지만 노출되는 인터페이스는 다르다2.3 텍스트 임베딩 모델 텍스트를 벡터 (텍스트의 의미 를 담고 있는 일련의 숫자) 로 변경합니다. 주로 두 텍스트를 함께 비교할 때 사용
3. Prompt 모델을 프로그래밍 하는 새로운 방법은 프롬프트를 사용
3.1 Prompt
3.2 Prompt Template
3.3 예제 선택기 (Example Selector)
3.4 출력 파서 (Output Parser)
4. Index
4.1 문서 로더 (Document Loader) CSV, HTML, 메일, Image, PDF, PPT, Site, Youtube 등 다양한 소스에서 Document 를 작성할 수 있는 Loader 가 제공 댓글 가져오기, 사이트 로더, 유튜브 자막 불러오기,
4.2 텍스트 분할기 (Text Splitters) 책과 같이 문서가 너무 길어서 LLM 에 한번에 입력이 어려운 경우, 문서를 잘게 쪼개야 합니다. 이 경우 텍스트 분할기를 이용 OpenAI의 오픈소스인 tiktoken 을 사용하여 사용된 토큰을 추정한 분할 마크다운 텍스트 분할기
4.3 백터 스토어 (Vector Stores) 벡터 (Vector)를 저장하는 데이터베이스와 관련된 기능입니다. 벡터 저장소 작업의 핵심 부분은 일반적으로 임베딩을 통해 생성되는 벡터를 만드는 것
4.4 검색기 (Retrievers) 리트리버 인터페이스는 문서를 쉽게 결합할 수 있는 일반 인터페이스입니다. 현재 ChatGPT Plugin Retriever 와 VectorStore Retriever 가 있습니다.
5. Memory 기본적으로 체인과 에이전트는 상태를 저장하지 않습니다. 즉, 쿼리가 수행되면 독립적으로 처리합니다. Memory 컴포넌트는 LLM 이 정보를 기억할 수 있도록 지원합니다. 간단하게는 과거 채팅 히스토리를 기억할 수 도 있고, 더 복잡한 정보를 검색 할 수도 있습니다.
5.1 채팅 메세지 History ChatMessageHisotry 클래스는 Human, AI 메세지를 저장한 다음 모두 가져올 수 있습니다.
6. Chain
6.1 간단한 Sequential Chain LLMChain 을 이용하여 LLM 출력을 다른 LMM의 입력으로 사용할 수 있도록 합니다
6.2 요약 Chain 한번에 처리가 어려운 문서를 나눠서 요약
7. Agents 사용자 입력에 따라 Agent는 여러 도구 중 호출할 수 있는 경우 도구를 결정할 수 있습니다. Agnet는 LLM 을 사용하여 수행핼 작업과 순서를 결정합니다. 이 과정에서 도구를 사용하여 출력을 관찰하거나 사용자에게 반환할 수 있습니다.
7.1 Tools 구글 검색, 데이터베이스 조회, Python REPL 등을 이용하여 현재 문자열을 입력받아 결과값을 출력합니다. OpenAI Plugins 과 유사한 영역
LangChain의 활용 사례:
- 챗봇: 사용자의 의도를 파악하고 자연스러운 대화를 통해 질문에 답변하거나 작업을 수행하는 챗봇 개발
- 문서 요약 및 분석: 방대한 문서에서 핵심 내용을 추출하고 분석하여 요약
- 코드 생성 및 분석: 프로그래밍 언어를 이해하고 코드를 생성하거나 분석하여 개발 작업을 지원
- 창의적인 콘텐츠 제작: 시, 소설, 대본 등 창의적인 텍스트 콘텐츠를 자동으로 생성
- 데이터 기반 추론 및 예측: 데이터에서 패턴을 파악하고 미래를 예측하여 의사 결정을 지원
LangChain의 장점:
- LLM 활용 용이성: 복잡한 LLM 기술을 이해하지 않고도 쉽게 활용하여 AI 애플리케이션을 개발할 수 있습니다.
- 개발 효율성 향상: 모듈 구성, 코드 재사용 등을 통해 개발 시간을 단축하고 생산성을 높일 수 있습니다.
- 확장성 및 유연성: 다양한 LLM과 데이터 소스를 지원하며, 새로운 기능 추가가 용이하여 변화하는 요구에 맞게 쉽게 확장할 수 있습니다.
랭체인 사용례를 보면 문서에 대한 Q&A, API와의 통합, SQL, 챗봇, 코드 작성, 추출, 그래프 데이터 분석, 자가 검사, 요약, 태깅 등이 포함돼 있습니다. 일부 사용례에는 많은 예제가 있습니다. 예를 들어, Q&A에는 17개 정도가 있습니다. 웹 스크랩과 같이 예제가 하나인 경우도 있습니다.
랭체인 통합 (https://python.langchain.com/docs/integrations/platforms/)
현재 약 657개의 랭체인 통합(integration)이 있습니다. 문서 로더 163개, 벡터 저장소 65개, 텍스트 임베딩 모델 52개, 챗 모델 29개, LLM 80개, 콜백 27개, 툴 112개, 툴킷 21개, 메시지 히스토리 17개입니다. 통합은 공급업체별 그룹으로도 제공됩니다. 랭체인은 기본적으로 이런 모든 통합 기능을 위한 중립적 허브 역할을 합니다.
랭체인식 언어 (https://blog.langchain.dev/langchain-expression-language/)
랭체인식 언어(LangChain Expression Language, LCEL)는 체인을 구성하고 스트리밍, 배치 및 비동기 지원을 기본적으로 제공하는 선언적 방법입니다. LCEL은 랭체인을 더 쉽게 사용할 수 있게 해줍니다. LCEL은 기본적으로 파이썬 또는 타입스크립트/자바스크립트를 사용한 체인 만들기의 고수준 대안이므로 코드를 사용해 구성할 때 사용하는 모든 기존 랭체인 생성자를 그대로 사용해 체인을 만들 수 있습니다.
- 파이썬을 위한 랭체인 설치
- pip install langchain
- 모델 공급자, 데이터 저장소 또는 다른 통합을 위한 모듈은 포함되지 않는다
- pip install langchain[llms]
- 랭체인 및 일반적인 언어 모델을 설치
- pip install langchain[all]
- 랭체인과 모든 통합을 설치
- 자바스크립트용 랭체인을 설치하려면 npm, Yarn, 또는 pnpm을 사용한다. 예를 들면,
- npm install -S langchain
- 자바스크립트용 랭체인은 Node.js, 클라우드플레어 워커(Cloudflare Workers), 버셀(Vercel)/Next.js(브라우저, 서버리스, 엣지 함수), 수파베이스 엣지(Supabase Edge) 함수, 웹 브라우저, 디노(Deno)에서 사용할 수 있다.
- https://aws.amazon.com/ko/what-is/langchain/
- https://www.samsungsds.com/kr/insights/what-is-langchain.html
- https://www.ciokorea.com/column/305341
- https://revf.tistory.com/280
- 랭체인(LangChain)의 개념과 이해
- https://m.post.naver.com/viewer/postView.naver?volumeNo=37460860&memberNo=36733075
- IDG의 아티클
- https://www.ciokorea.com/column/325534#csidx5b8a1893b2aace687d99edeb5a05b54%C2%A0
- 랭체인 사용례 (https://python.langchain.com/docs/use_cases/)
- 랭체인 통합 (https://python.langchain.com/docs/integrations/platforms/)
- 랭체인식 언어 (https://blog.langchain.dev/langchain-expression-language/)
- LangChain 공식 웹사이트:
https://python.langchain.com/v0.2/docs/integrations/document_loaders/org_mode/ - LangChain GitHub 레포지토리:
https://github.com/langchain-ai/langchain - LangChain 한국어 문서:
https://docs.kanaries.net/ko/articles/langchain-chains-what-is-langchain - LangChain 개념 및 모듈 구성:
https://yongeekd01.tistory.com/92 - LangChain이란 무엇인가요? - IBM:
https://www.ibm.com/kr-ko/topics/langchain - 랭체인: 랭체인은 LLM을 사용하여 애플리케이션 생성을 단순화하도록 설계된 프레임워크입니다.:
https://ko.wikipedia.org/wiki/%EB%9E%AD%EC%B2%B4%EC%9D%B8 - 튜토리얼 https://python.langchain.com/v0.2/docs/introduction/
- 깃허브 튜토리얼:
https://github.com/gkamradt/langchain-tutorials/blob/main/LangChain%20Cookbook.ipynb - 간단한 LLM 애플리케이션 구축
- 챗봇 만들기
- 에이전트 구축
- LangGraph 소개
0 댓글