챗지피티(ChatGPT)와 같은 대화형 AI의 ‘두뇌’는 대규모 언어 모델(LLM: Large Language Model)이다. ChatGPT의 API가 공개된 이후, 많은 기업과 엔지니어가 경쟁적으로 LLM 응용 프로그램 개발에 착수했는데, 이러한 개발을 효율화하는 도구가 랭체인(LangChain)이다. 랭체인은 파이썬(Python) 등에서 호출할 수 있는 라이브러리 중 하나로, ‘챗지피티 같은 언어 생성 AI를 사용한 애플리케이션 개발에 유용한 도구 모음’과 같은 것이다. 언어 생성 AI 모델의 라이브러리는 많지만, 랭체인이 기능의 풍부함과 사용의 용이성 등에서 뛰어나 현재는 사실상의 표준이 됐다. 이 책은 랭체인을 사용해 애플리케이션을 개발하면서 랭체인의 기능을 자세히 설명한다.
Contents
1장: 챗지피티와 랭체인
01. 챗지피티와 언어 모델에 관해 알아보기
___챗지피티란?
___OpenAI의 API에서 사용할 수 있는 대표적인 두 가지 언어 모델
___OpenAI 이외의 언어 모델 알아보기
02. 랭체인 개요
___언어 모델을 이용한 애플리케이션 개발
___랭체인으로 언어 모델을 이용한 애플리케이션 개발이 쉬워진다
___랭체인에 준비된 6개의 모듈
03. 랭체인을 이용한 애플리케이션 예시
___PDF에 대해 질문할 수 있는 챗봇
___파일 상호작용 및 인터넷 검색이 가능한 챗봇
04. 실습 준비
___파이썬 실행 환경 구축
___VS Code에서 파이썬을 이용한 개발이 쉬워지는 확장 기능
___OpenAI API 키 받기
___환경 변수에 API 키 설정하기
05. OpenAI의 API를 호출해 작동을 확인한다
___Chat 모델의 API를 호출해 보자
2장: Model I/O - 언어 모델을 다루기 쉽게 만들기
01. 언어 모델을 이용한 응용 프로그램 작동 방식
___언어 모델 호출이란?
___Model I/O는 랭체인의 가장 기본적인 모듈이다
___Model I/O를 구성하는 3개의 서브모듈
___Language models를 사용해 gpt-3.5-turbo 호출하기
___PromptTemplate로 변수를 프롬프트에 전개하기
___PromptTemplate에서 제공하는 다른 기능들
___Language models와 PromptTemplate의 결합
___목록 형식으로 결과 받기
02. Language models - 사용하기 쉬운 모델
___통일된 인터페이스로 사용하기 쉬움
___Chat models와 LLMs
___Language models의 편리한 기능
03. Templates - 프롬프트 구축의 효율성 향상
___프롬프트 엔지니어링을 통한 결과 최적화
04. Output parsers - 출력 구조화
___결과를 날짜와 시간 형식으로 받아보기
___출력 형식을 직접 정의하기
___잘못된 결과가 반환될 때 수정을 지시할 수 있게 한다
3장: Retrieval - 알지 못하는 데이터를 다루기
01. 언어 모델이 미지의 데이터를 처리할 수 있게 하려면
___모르는 정보에 기반한 답변을 할 수 있는 구조
___답변에 필요한 문장을 찾는 방법이 중요
___유사 문장 검색을 위해 필요한 벡터화란?
___언어 모델을 사용해 텍스트를 벡터화하기
___벡터 유사도 검색
___벡터 유사도 검색에서 RAG를 통합하는 구체적인 절차
___사전 준비
___검색 및 프롬프트 구축
02. 주어진 PDF를 기반으로 답변하는 챗봇 만들기
___PDF에서 문장 불러오기
___문장 나누기
___분할된 문장을 벡터화해 데이터베이스에 저장한다
___벡터 데이터베이스에서 검색 실행하기
___검색 결과와 질문을 조합해 질문에 답하게 한다
___채팅 화면 만들기
___채팅 화면에서 질문을 입력할 수 있게 하기
___채팅 시작 시 파일 업로드 가능
03. RetrievalQA로 QA 시스템 구축이 쉬워진다
___RetrievalQA란?
___RetrievalQA로 코드를 간단하게
04. 준비된 Retrievers를 사용해 위키백과를 정보원으로 활용
___Retrievers는 문서를 검색하는 기능 세트
___Retrievers에서 어떤 검색을 할지 제어하는 방법
4장: Memory - 과거의 대화를 장·단기 기억하기
01. 언어 모델에서 대화란 무엇인가
___HumanMessage와 AIMessage를 번갈아 가며 대화한다
02. 문맥에 맞는 답변을 할 수 있는 챗봇 만들기
___Chat models로 대화 기록을 기반으로 한 응답을 하게 하는 것
___ConversationChain을 통해 알기 쉽게 처리
03. 히스토리를 데이터베이스에 저장하고 영속화하기
___데이터베이스에 저장해 대화 기록을 영속화할 수 있다
___데이터베이스 준비하기
___환경 변수에 레디스 정보 설정하기
___레디스를 사용해 대화를 영속화한다
04. 여러 개의 대화 기록을 가질 수 있는 챗봇 만들기
___세션 ID를 바꿔서 대화 기록 전환하기
05. 매우 긴 대화 기록에 대응한다
___대화 기록이 너무 길어지면 언어 모델을 호출할 수 없다
___오래된 대화 삭제하기
___대화를 요약해 토큰 수 제한에 대응한다
5장: Chains - 여러 프로세스를 통합
01. 다중 처리를 정리할 수 있다
___Chains는 일련의 과정을 정리할 수 있다
02. 여러 모듈을 쉽게 조합할 수 있는 Chains
___LLMChain을 사용해 여러 모듈을 통합하는 방법
___ConversationChain으로 기억을 가진 애플리케이션 개발이 쉬워진다
___Chains에서 어떤 처리가 이뤄지고 있는지 자세히 보기
03. 특정 기능에 특화된 Chains
___특정 URL에 접속해 정보를 얻게 하는 방법
04. Chains 자체 정리하기
___Chains 자체를 순서대로 실행하는 SimpleSequentialChain
6장: Agents - 자율적으로 외부와 상호작용해 언어 모델의 한계를 뛰어넘기
01. 외부와 상호작용하면서 자율적으로 행동하는 Agents
___언어 모델에 도구를 부여할 수 있다
___주어진 URL에서 정보를 얻게 하기
02. Tool을 추가해 Agent가 할 수 있는 일을 늘리기
___Agent가 할 수 있는 것은 전달하는 Tool에 따라 달라진다
___환경 변수에 SerpApi의 API 키 설정하기
___google-search-results 설치하기
03. Tool을 직접 제작해 기능 확장하기
___Tool을 직접 만들어서 할 수 있는 일의 폭을 더욱 넓힌다
04. Retrievers를 사용해 문장을 검색하는 Tool 만들기
___Retrievers는 Tool로 변환할 수 있다
05. 문맥에 맞게 답변하는 에이전트 만들기
___대화 기록을 보관하는 에이전트 생성하기
7장: Callbacks - 다양한 이벤트 발생 시 처리하기
01. Callbacks 모듈로 할 수 있는 일 알아보기
___로그 수집 및 모니터링, 다른 애플리케이션과 연동 가능
02. Callbacks 모듈을 사용해 외부 라이브러리와 연동하기
___준비된 클래스를 사용해 외부 라이브러리와 연동할 수 있다
03. 로그를 터미널에 표시할 수 있는 Callbacks 만들기
___Callbacks 모듈을 직접 제작해 이벤트 발생 시 처리를 수행한다
부록: 랭체인에 대해 더 자세히 알아보는 팁
01. 공식 문서의 사용 사례에서 배우기
___공식 문서 보기
___Code understanding
___Tagging
02. 랭체인의 공식 블로그 및 기타 소스 확인
___랭체인 공식 블로그
___awesome-langchain으로 랭체인 관련 정보 수집하기
___랭체인과 연동할 수 있는 언어 모델 및 외부 시스템 확인하기
Author
타무라 하루카,최용
1990년 도쿄에서 태어났다. 프리랜서 풀스택 엔지니어로서 다수의 웹서비스를 처음부터 개발하고 운영했다. 베이스푸드(BASE FOOD) 주식회사에 첫 번째 엔지니어로 참여해 정기 구매 시스템을 구축했으며, 그 후 상장까지 프런트엔드, 백엔드, 인프라 전부를 담당했다. ChatGPT에 큰 충격을 받고 AI 관련 기술에 관심을 갖게 되었으며, 동영상에 번역 자막을 붙일 수 있는 웹 서비스를 개인적으로 개발해 출시했다(konjac.ai).
1990년 도쿄에서 태어났다. 프리랜서 풀스택 엔지니어로서 다수의 웹서비스를 처음부터 개발하고 운영했다. 베이스푸드(BASE FOOD) 주식회사에 첫 번째 엔지니어로 참여해 정기 구매 시스템을 구축했으며, 그 후 상장까지 프런트엔드, 백엔드, 인프라 전부를 담당했다. ChatGPT에 큰 충격을 받고 AI 관련 기술에 관심을 갖게 되었으며, 동영상에 번역 자막을 붙일 수 있는 웹 서비스를 개인적으로 개발해 출시했다(konjac.ai).