"한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬받아 작성된 서평입니다."

 

 

개발분야와 관련된 동영상을 보다보면 한번쯤 '조코딩'이라는 채널명을 만난 적이 있을 것입니다. 꽤 많은 동영상을 촬영하는 분입니다. 조코딩의 동영상 강의 중에서 랭체인에 관한 내용이 이번에 한 권의 책으로 묶어져 나왔네요. 바로 한빛미디어에서 나온 <AI 에이전트 서비스 만들기>입니다.

 

 

회사에서 아마존  베드락 기반의 RAG 서비스를 개발/운영하고 있다보니 RAG 시스템이 어떻게 동작하는지, 임베딩 모델과 벡터 저장소의 관계는 무엇인지 정도는 알고 있습니다. 하지만 최근 테크 밋업에 가보니 RAG를 랭체인/랭그래프로 구현한 이야기들을 많이 들을 수 있었습니다. 그래서 최근 화두인 에이전트와 랭체인에 대해 한번 훑어보고 싶어하던 차에 이 책을 살펴보게 되었습니다.

 

조코딩 책의 장점은 각 장에서 설명하는 개발 내용을 예제 서비스로 만들어보는 형태로 풀어낸다는 점입니다.  

1부에서는 랭체인이 어떤 프레임워크인지를 이해하기 위하여 인공지능 시인과 PDF를 기반으로 채팅을 하는 시스템을 개발합니다. 주로 기본적인 LLM, RAG, OpenAI API, LangChain 개념과 환경 설정에 집중하여 설명하고 있습니다.

2부에서는 LangChain의 주요 구성 요소를 살펴봅니다. 파이프 문자를 이용한  LangChain의 LLM 체인 생성을 집중적으로 살펴 봅니다. 특히 Ollama와 Streamlit(파이썬 웹 애플리케이션 프레임워크)로 리뷰 평가 AI/시인/다국어 이메일 생성기 서비스를 만듭니다. 이 과정에서는 RAG라기 보다는 어떤 PDF 문서를 올리거나 텍스트 프롬프트를 주고 API를 호출하여 웹 애플리케이션으로 결과를 보여주는 과정을 보여줍니다.

3부부터는 본격적으로 RAG 시스템을 구축합니다. 여기서부터는 텍스트/PDF 문서를 임베딩(벡터화)하여 ChromaDB 벡터 저장소에 저장하고, 사용자의 질의를 벡터화하여 유사한 결과를 찾아 다시 내용을 요약해서 출력하는 서비스를 만듭니다. 현진건 작가의 소설을 임베딩하고, 사용자가 마치 현진건 선생과 멀티턴 방식의 대화를 나누는 서비스를 만듭니다.

4부에서는 ChromaDB대신 FAISS를 저장소로 사용하고, 이를 기반으로 유사성 검색을 구현합니다. 결국 RAG는 문서 Load -> Split -> Embed -> Store한 다음, Question-> Retrieve -> LLM을 이용한 답변 생성 과정으로 이루어집니다. 다양한 Loader, Splitter, Retriever의 사용 사례를 볼 수 있습니다.

5부에서는 검색 품질을 올리기 위한 여러 방법을 소개합니다. 예를 들어 하나의 질문을 확장된 여러가지 질문으로 파생시켜 검색하는 multiquery 기법, 키워드 검색이 중점인 BM25와 Chroma기반의 벡터 검색을 결합하는 하이브리드 검색 시스템(EnsenbleRetriever 사용)을 설명합니다.

6부에서는 멀티모달을 다룹니다. 텍스트가 아닌 멀티모달 RAG를 구현하는 방법, 이미지 기반의 검색 시스템을 만들어 봅니다.

7부에서는 에이전트가 주제입니다. Function Call을 구현하여 LLM을 장착한 Agent 서비스를 만들어 봅니다. 워크플로를 만드는 것이 7부의 핵심이네요.

8부는 7장에서 익힌 에이전트를 이용하여 CrewAI 기반으로 복합 페르소나를 가진 여러 에이전트를 만들고 이들이 협업하여 결과를 만들어 내는 시스템을 만듭니다. 예제로는 주제어를 입력하면 블로그 글을 만들어 주는 리액트 웹앱을 만듭니다.

 

전체적으로 RAG/랭체인을 이해하기 위한 입문서로 적절해 보입니다. 코드도 친절하게 변경되는 부분을 표시해가면서 완성합니다.  랭체인으로 서비스를 만들려면 파이썬을 알아야 하는데, 기본적인 문법만 익혀도 이 책을 보는데에는 아무런 문제가 없습니다. 개발 언어에 너무 걱정하지 않아도 될 것 같습니다. 기본 문법 외에 람다 함수와 컴프리헨션 기법 정도만 익히고 시작하시면 됩니다.

 

전체적으로 RAG의 구조를 이해하고, 각 하위 구성요소들이 어떻게 협업하는지를 이해하는데 도움이 되는 책입니다. 그러면서도 예제 프로젝트를 만들어 보면서 실무의 경험을 살짝 경험할 수 있습니다. 저는 231쪽의 청크 사이즈와 오버랩 사이즈 예제가 좋았습니다. 이런 정보들은 만들면서 찾아보고 실험해봐야 얻는 지식이니깐요.

 

그리고 OpenAI의 Embedding 모델인 text-embedding-ada-002는 항상 1536 차원의 고정 크기 벡터라는 것도 알았습니다. :)

 

이제 베드락으로 초반에 연동했던 서비스를 LangChain으로 구현해 봐야겠네요. RAG 시스템을 구현하기 위해 입문서를 찾으신다면 괜찮은 책이라 생각됩니다. 비슷한 책으로 테디노트님의 책이 있습니다. 이 책도 한번 같이 읽어봐야겠습니다.

 

반응형

 

 

파이썬에는 다양한 패키지 관리 도구가 존재합니다. pip, venv, virtualenv, pipenv, poetry 등 각 도구들은 가상환경 생성, 패키지 설치, 의존성 관리 등의 역할을 분담합니다. 최근 이 모든 기능을 하나로 통합하면서도 빠른 속도를 자랑하는 새로운 도구가 등장했습니다. 바로 uv입니다.

 

uv

uvAstral에서 개발한 초고속 파이썬 패키지 관리 도구입니다. 러스트(Rust)로 개발되었기 때문에 네이티브 툴의 매우 빠른 속도와 러스트 메모리 모델이 제공하는 높은 안정성이 제공합니다. Astral은 uv뿐만 아니라 파이썬 코드 린터인 Ruff도 러스트로 개발하고 있습니다. uv는 여러 파이썬 도구들이 제공하던 다양한 기능을 하나로 통합한 스위스 군대 칼같은 멀티툴로, 단일 명령어를 사용하여 가상환경을 만들고 패키지를 설치하며, 프로젝트의 의존성을 관리할 수 있습니다.

 

특징

  • 매우 빠른 속도: 러스트로 구현되었기 때문에 기존 도구보다 월등히 빠릅니다. pip보다 10배~100배 빠르다고 홍보하고 있죠.
  • 올인원 도구: pip, venv, virtualenv, pip-tools, poetry의 기능을 모두 갖추고 있습니다.
  • 자동 가상환경 생성: 패키지를 설치할 때 가상환경이 없으면 자동으로 생성합니다.
  • PEP 582 지원: .venv 없이도 프로젝트 로컬 디렉터리에 패키지를 설치할 수 있습니다.
  • Python과의 높은 호환성: 표준 파이썬 워크플로와 충돌 없이 동작할 수 있습니다.

 

무엇을 대체할 수 있을까?

uv는 아래 도구들을 모두 대체할 수 있습니다:

  • pip (패키지 설치/제거)
  • venv, virtualenv (가상환경 생성)
  • pip-tools, pipenv, poetry (의존성 관리 및 고정)

따라서 여러 도구를 설치하여 설정하지 않아도, uv 하나만으로 파이썬 프로젝트를 효율적으로 관리할 수 있습니다.

 

설치

uv는 다음 명령어만 실행하면 간편하게 설치됩니다.

curl -Ls https://astral.sh/uv/install.sh | sh

설치 후에는 터미널에서 uv 명령어가 동작하는지 확인해 봅니다:

uv --version

 

 

 

가상환경

파이썬에서 가상환경(Virtual Environment)은 서로 다른 프로젝트마다 독립적인 패키지 공간을 제공하는 기술입니다. 프로젝트마다 필요한 패키지 버전이 다를 수 있기 때문에, 시스템 전체에 영향을 주지 않고 프로젝트별로 격리된 환경을 만드는 것이 중요합니다.

 

가상환경이 필요한 이유

  • 서로 다른 프로젝트가 서로 다른 패키지 버전을 필요로 할 수 있습니다.
  • 전역 파이썬 환경에 설치된 패키지는 다른 프로젝트에 영향을 줄 수 있습니다.
  • 개발과 배포 환경 간에 일관성을 유지하기 위해서도 중요합니다.

예를 들어, A 프로젝트는 Django 4.2, B 프로젝트는 Django 5.2.5를 사용한다고 가정해 봅시다. 전역 환경에서 패키지를 설치하면 의존성 충돌이 일어날 수 있지만, 따로 가상환경을 분리하여 패키지를 설치하면 이 문제가 일어나지 않습니다.

 

가상환경의 구조

보통 가상환경은 .venv 또는 env라는 폴더로 구성되어 있고, 내부에 아래와 같은 구조를 가집니다:

.venv/
├── bin/ (또는 Scripts/ - 윈도우)
├── lib/
├── pyvenv.cfg

 

가상환경 사용법

가상환경 만들기

현재 디렉터리에 .venv 폴더를 만들고 가상환경을 생성하려면 다음 명령어를 실행합니다:

uv venv

가상환경의 이름을 지정하여 만들고 싶다면 다음 명령어를 실행합니다:

uv venv myenv

 

여러 버전의 파이썬 설치하기

uv에서는 파이썬을 설치할 수 없습니다. 따라서 파이썬 런타임은 따로 설치해야 하며, 설치된 파이썬 버전을 기반으로 가상환경을 만듭니다.

 

uv에서 특정 파이썬 버전으로 가상환경을 만들려면 해당 버전이 시스템에 먼저 설치되어 있어야 합니다. 파이썬은 공식 웹사이트나 pyenv, 패키지 매니저를 통해 여러 버전을 한 컴퓨터에 설치할 수 있습니다.

 

macOS / Linux의 경우 pyenv를 사용할 수 있습니다.

brew install pyenv         # macOS의 경우
sudo apt install pyenv     # Ubuntu의 경우

pyenv install 3.11.6
pyenv install 3.10.13

 

설치된 버전은 pyenv versions로 확인하고, 특정 버전을 기본값으로 설정할 수 있습니다.

pyenv global 3.11.6

 

Windows의 경우 python.org에서 설치본을 다운로드 받아 설치하거나 winget 명령어로 설치할 수 있습니다.

winget install Python.Python.3.11
winget install Python.Python.3.10

 

설치 후 python3.11 --version 과 같이 확인할 수 있고, uv에서 사용할 때는 해당 경로 또는 명령어를 지정하면 됩니다.

 

다른 파이썬 버전으로 가상환경 만들기

사용하고 싶은 파이썬 버전을 --python 매개변수로 지정합니다.

uv venv --python=python3.11

Windows에서는 파이썬의 전체 경로를 지정합니다.

uv venv --python="C:\Python311\python.exe"

가상환경을 활성화하는 방법은 기존과 동일합니다.

 

macOS/Linux에서는 다음 명령어를 실행합니다.:  .venv/bin/activate

Windows에서는 다음 명령어를 실행합니다.: .venv\Scripts\Activate.ps1

가상환경을 비활성화하려면 다음 명령어를 실행합니다.: deactivate

 

패키지 설치 및 의존성 관리

uvpip의 역할을 빠르고 효율적으로 수행합니다. 아래는 uv pip를 사용하는 주요 예제입니다.

 

패키지 설치 관리

패키지 설치

uv pip install requests

이 명령어는 requests 패키지를 설치합니다. 사용중인 가상환경이 없으면 자동으로 .venv 가상환경을 만들고 거기에 해당 패키지를 설치합니다.

 

설치된 패키지 목록 저장하기

uv pip freeze > requirements.txt

 

requirements.txt 기반으로 패키지 설치하기

uv pip install -r requirements.txt

 

더 빠르고 깔끔하게 동기화하고 싶다면 sync 명령어를 사용할 수 있습니다:

uv pip sync requirements.txt

 

패키지는 어디에 설치될까?

uv pip install로 설치한 패키지는 가상환경 내부의 site-packages 폴더에 저장됩니다.
예를 들어, .venv 폴더를 가상환경으로 사용하고 있다면 다음 경로에 설치됩니다:

 

macOS/Linux에서는 다음 경로에 설치됩니다. : .venv/lib/python3.x/site-packages/

Windows에서는 다음 경로에 설치됩니다. : .venv\Lib\site-packages\

이 경로는 파이썬이 모듈을 찾을 때 사용하는 sys.path에 자동 등록됩니다.
즉, 가상환경을 활성화하면 해당 디렉터리에 설치된 모든 모듈을 바로 import해서 사용할 수 있습니다.

import site
print(site.getsitepackages())

import sys
print(sys.path)

 

uv는 일반적인 파이썬 가상환경 구조를 준수하므로 기존 venv, virtualenv와 완벽히 호환됩니다.

 

이제 uv로 빠르고 깔끔한 파이썬 개발 환경을 구성해보세요.

 

 

가상환경에 대한 보다 자세한 이야기는 제가 번역하고 인사이트 출판사에서 펴낸 <파이썬다운 코드를 개발하는 63가지 실용기법> 488쪽부터 493쪽까지 설명되어 있습니다.

알라딘: https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=369848931

교보: https://product.kyobobook.co.kr/detail/S000217294649

YES24: https://www.yes24.com/product/goods/151253343

 

파이썬다운 코드를 개발하는 63가지 실용 기법 | 프로그래밍 인사이트 Programming Insight | 용 추이

63가지 핵심 파이썬 기술을 익힐 수 있는 간단하지만 강력한 방법을 제시한다. 예를 들어, ‘시퀀스에서 항목을 찾으려면 어떻게 해야 할까?’와 같은 질문에서 출발하여 매우 명확한 기본 해결

www.aladin.co.kr

 

반응형

+ Recent posts