07***
2026-05-24

환각과 비용의 병목을 뚫고 프로토타입을 실서비스로 진화시키는 32가지 설계 패턴을 소개합니다. 특정 기술에 종속되지 않는 범용 패턴과 파이썬 예제를 통해 스스로 사고하고 행동하는 프로덕션급 에이전트 시스템을 완성하도록 돕습니다.
한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다.
https://spems.tistory.com/entry/에이전트-시대의-AI-시스템-설계-LLM으로-사칙연산-하기
난 평소에 오픈소스 모델을 활용해보고 싶었다. 요즘 다들 누가 더 돈 많이 쓰는지 경쟁하는 느낌이라, 속세의 경쟁에서 벗어나 자연에서 힐링하는 느낌이었다.
LLM은 확률적 언어 모델이라, 일반적으로 이런 결정론적인 작업을 맡기는 것은 일반적이지 않다. 하지만 견고한 멀티 에이전트 시스템을 만들려면 이러한 기능이 필요하다고 생각했다. 그 시작은 단순한 계산기를 만드는 것이었다.
연산 결과를 문자열이 아닌, 수의 형태로 나타내고 싶었다. 책의 2장 '콘텐츠 스타일의 제어'에는 이와 관련된 내용이 있는데, 특히 2.2절 '문법'에서 옵션3 '사용자가 지정한 스키마 사용' 방식은 내가 사용하는 Ollama 인퍼런스 엔진에서 손쉽게 구현할 수 있었다.
막상 대충 구현해놓고 보니까, 조금만 케이스가 다양해져도 모델은 오답을 내놓았다. 모델이 선택할 수 있는 경우를 구조적으로 줄여나가야 한다고 생각했다. 7장 '에이전트의 행동 능력 활성화' 중 7.1절에서는 도구 호출과 관련된 내용을 다룬다. 마침 Ollama도 쉽게 도구를 호출할 수 있는 인터페이스를 제공하고 있었다. 만든 함수를 세션 맥락에 넘겨주기만 하면 됐는데, 인자의 순서를 뒤바꾸거나 적절한 값을 전달하지 못하는 등의 문제로 함수를 고치느라 시간이 걸렸다.
나는 일반적인 수식에 대한 처리뿐만 아니라, 자연어 형태로 표현된 형태도 처리할 수 있길 원했다. 예를 들어, '4를 절반으로 나누면?'과 같은 문장에서 '4 / 2' 따라서 답은 '2'라는 결론을 도출할 수 있길 원했다. 자꾸 욕심이 커지다보니 유효하지 않은 입력에 대한 예외 처리도 생각했는데, '무한대 / 0'과 같은 사례는 None을 반환하길 원했다. 내가 처음에 사용한 모델은 llama-3.2로, 한글에 대한 학습을 하지 않은 모델이다. 따라서, 모델은 자연스럽게 오답을 반환하기도 했다.
5장에서는 '모델 능력 확장'에 대한 내용을 다루는데, 그 중 5.1절에서는 'LLM 추론의 한계'라고 해서, 모델이 이미 아는 지식과 모르는 지식이 있음을 설명한다. 가령, 우리가 업무에서 일반적으로 총칭하는 '도메인'과 관련된 내용은, 공개된 정보가 아니라면 모델의 학습 대상이 될 수 없다. 따라서, 프롬프트를 통해 그 정보가 무엇인지, 또 어떻게 다루어야 하는지 안내해주어야 한다. 2절과 3절에서 CoT, ToT도 소개하는데, 그렇게까지 복잡하게 들어갈 필요는 없어서, 실패한 테스트를 모두 통과하도록 프리티어 ChatGPT, Gemini를 활용해서 프롬프트를 수정했다.
책의 1.4절은 '세밀한 제어'에 대한 내용으로, 튜닝 가능한 대표적인 모델 파라미터에 대한 설명을 하고 있다. 모델의 추천 역시 Gemini의 조언을 받았다. llama3.2와 같은 모델은 애초부터 경량화가 목적이라 정확성을 보장하는 것이 쉽지 않고, 컴퓨팅 자원이 제한되어 있는 환경에서는 프론티어 모델 중 파라미터가 적은 것을 사용하면 정확도 측면에서 이점을 볼 수 있다고 했다. 실험 결과, 시간은 9배 더 소요됐지만 qwen은 주어진 테스트를 모두 완벽하게 처리했다. (물론 노트북 스펙이 좋지 못해 오버헤드가 포함된 결과이고, 순수하게 모델이 처리에 소요한 시간만 계산하면 3배 정도의 차이를 보인다.)
책은 전체적으로 패턴을 나열하는 형태라, 전형적으로 참조하고 활용하기 좋은 형태다. 참고할 수 있는 소스 코드도 함께 제공되었는데, 아무래도 인퍼런스 차이도 있고 내 프로젝트에 직접적으로 활용하기는 어려울 것 같아, 적극적으로 참고하지는 않았던 것 같다. 어디까지나 방향성과 인사이트가 핵심인 책이니, 당연히 A-Z식의 구현 예제를 기대하긴 어렵다. 번역도 특별히 어색한 부분 없이 잘 읽혔고, 참고할만한 내용들도 주석으로 제공되어서 어려움 없이 읽을 수 있었다.
자투리 시간을 들여 만지작거렸는데, langchain, langgraph 등 확실히 프레임워크가 없으니까 속도가 나지 않았던 것 같다. 그래도 패턴 22 '코드 실행', 패턴 16 '지시사항 진화' 느낌으로 발전시켜나가면 좋을 것 같다는 방향성은 잡혔다.
프리티어 기준으로는 ChatGPT보다 Gemini 성능이 평균적으로 더 좋다. 다음에는 Claude도 적극적으로 사용해볼 예정.
역자 '류광'님은 학부 때, 도널드 커누스 책에서 번역하신 것을 기억해서인지 다시 뵙게되어 반가웠다.
https://www.hanbit.co.kr/store/books/look.php?p_code=B4205161590