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

 

 

개발분야와 관련된 동영상을 보다보면 한번쯤 '조코딩'이라는 채널명을 만난 적이 있을 것입니다. 꽤 많은 동영상을 촬영하는 분입니다. 조코딩의 동영상 강의 중에서 랭체인에 관한 내용이 이번에 한 권의 책으로 묶어져 나왔네요. 바로 한빛미디어에서 나온 <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 시스템을 구현하기 위해 입문서를 찾으신다면 괜찮은 책이라 생각됩니다. 비슷한 책으로 테디노트님의 책이 있습니다. 이 책도 한번 같이 읽어봐야겠습니다.

 

반응형

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

 

1/ 요즘 기술 시장과 투자시장의 주요 키워드는 AI와 양자 컴퓨터이다. 그나마 AI는 OpenAI의 ChatGPT 이후 대중에게 많이 다가왔는데, 양자 컴퓨터는 도통 잘 모르겠다는 느낌이 들었다. 그래서 양자 컴퓨터에 관한 책을 한번 봐야겠구나 하는 생각이 들었는데, 마침 geek한 모습의 캐릭터로 유명한 For Dummies 시리즈에서 양자 컴퓨팅 책이 나왔고, 이를 번역한 <모두를 위한 양자 컴퓨터>를 읽게 되었다. 

원서
한빛미디어 번역서


2/ 책을 읽는 동안에도 양자 컴퓨터에 관한 소식이 계속 들려왔다. 젠슨황이 지난 1월에 열린 CES에서 양자 컴퓨터가 유용해지려면 15년에서 30년은 걸릴 것이라고 해서 관련 주가가 확 떨어진 적이 있었고, 2월 19일에  마이크로소프트는 기존의 초전도체 방식이 아닌 토폴로지 큐비트 기술을 활용하는 마요라나1을 공개했다. 이런 뉴스를 접할 때마다 뭔 외계어인가라는 생각과 함께 나름 물리를 잘했는데 하는 자신감에서 오는 (뭔 내용인지 몰라서) 자괴감도 생겼다.v

중국이 공개한 Zuchongzhi-3. 105 큐비트 처리 가능.

 

3/ 이 책은 For dummies  시리즈답게 특정 주제, 이 책에서는 양자 컴퓨팅에 관한 온갖 이야기를 모두 소개하고 있다. 총 4개 파트로 이루어져 있는데, 1부와 2부를 재미있게 읽었다. 1부는 사실상 물리학의 역사이다.  양자와 중성자부터 소개하더니 금방 중첩(superposition)과 얽힘, 터널링과 결맞음 이야기로 달려간다. 하지만 양자 물리학에 대한 과학자들의 도전과 발견에 대한 이야기는 재미있게 읽혔다.  2부는 양자 컴퓨팅과 전통 컴퓨팅 방식을 비교해 가면서 어떤 분야에서 양자 컴퓨팅이 장점을 가지는 것인지에 대해 소개한다. 저자는 양자 컴퓨팅이 암호학, 머신러닝, 생명공학에 큰 변곡점을 만들어낼 수 있는 기반 기술로 이야기한다. 개인적으로 양자기술때문에 현재의 보안 기술이 무력화되는 Q-Day 이야기와 이를 대비한 국가간 기업간 개발 경쟁을 이해하는데 도움이 되었다. 왜 양자 기술에 주목하는지 대략 감을 잡았다고나 할까?

 

4/ 책을 일독했지만, 여전히 몇개 단어가 눈에 조금 익혀졌을 뿐 여전히 양자 컴퓨팅을 제대로 이해하기 어렵다. (뭐 처음 책을 읽기 시작할 때도 제대로 이해할 것이라는 기대는 하지 않았다.) 누군가 나에게 그래서 책을 읽고 나니 양자 컴퓨터에 대해 어떻게 생각해 라고 질문한다면 미래를 바꿀지도 모르는 기반 기술인 것 같다 정도 외에는 딱히 할 말이 없다. 이 책은 양자 컴퓨터를 이해한다기 보다는 양자 컴퓨터에 관련된 이야기를 소개하는 입문서로 괜찮다 생각된다. 하지만 결코 쉽지 않은 책이고, 아마도 2독, 3독을 해야 할 것 같다.

 

5/ 책 편집이나 번역은 무난했지만 조금씩 걸리는 부분이 있었다. 우선 For Dummies 시리즈는 원래 산만한 책인데, 이 책은 너무 정돈되어 있다. 원서를 보면 여러 박스로 본문들이 나뉘어지고, 저자가 관련 맥락에서 제공하고 싶은 정보를 박스로 제공하는 시리즈로 유명한데, 번역서는 박스와 본문이 구별이 잘 되지 않는다. 박스 내용의 글꼴도 본문과 동일하고, 박스 표시도 없어서, 집중하지 않으면 뜬금없는 맥락으로 이어진다.

 번역도 무난한데(내용이 어렵다보니 번역도 어려웠을 것이다), 조금씩 걸리는 부분이 있다. 예를 들어 p.70쪽에서 "부동소수점 숫자의 표준은 32비트, 즉 4바이트로 설정되어 있다. 표준 부동소수점 숫자는 대략 음수 400만에서 양수 400만 사이의 모든 값을 정확하게 저장할 수 있으며, 대부분의 큰 양수 또는 음수의 근사값을 저장할 수도 있다. ( The standard for floating-point numbers was set at 32 bits, or 4 bytes. A standard floating-point number can exactly store any value between about negative 4 million and positive 4 million, and can store approximations of most larger positive or negative numbers.)"라는 문장이 있다. 이 문장은 "부동소수점 타입의 숫자는 4바이트, 즉 32비트의 크기로 저장하는 표준을 사용한다. 이 크기는 -400만에서 400만 사이의 값을 정확히 저장할 수 있고, 근사값을 사용하는 방식으로 훨씬 더 큰 양수 또는 음수값을 저장할 수 있다."가 좀 더 부드러운 번역일 것 같다. 이 부분에서 여전히 원저자가 잘못 쓴 부분이지 않을까 하는 생각이 드는데, IEEE 754 규격에 정의된 부동소수점 방식은 정밀도의 손실없이 값을 표현할 수 있다는 것인데, 단정도일 경우 24비트의 정밀도를 가지므로 대략 -1677만부터 1677만 사이의 값을 손실없이 정확하게 표현할 수 있다. 그것도 정수만... 배정밀도일 경우에도 53비트의 정밀도를 가지므로 대략 -9007조부터 +9007조 사이의 값을 저장할 수 있다. 

괜히  호기심이 발동하여 좀 더 자세히 찾아보았는데, 아주 예전 시스템이나 특정 구현에서는 가수로 사용되는 비트수가 IEEE754 규약보다 적게 사용하여 이 경우 22비트를 사용하였는데, 이 경우 400만이 나온다고 한다. 그럼 양자 컴퓨터는 다른 부동소수점 규약을 사용하는것일까?

 

6/ 여하튼 재미있고 흥미로운 주제이지만, 쉽지 않은 내용인데, 열심히(!) 읽었다. 책을 덮으며 내 머리속에 또하나의 질문이 떠오른다. 양자 컴퓨터가 과연 인류가 아직 해결하지 못한 문제를 해결해낼 수 있는 도구가 될까? 조금 시간차를 두고 한번 더 이 책을 읽어보아야 겠다.

반응형

+ Recent posts