Agent는 신생 기술 → 선구자도 별로 없고 변화도 빠름
머신러닝 → Vision 딥러닝 1. Tensorflow (Google) → Agent
2. Pytorch (Meta)
LangChain → 모든 에이전트 구축의 기반 Base
< LangChain과 LCEL > # LangChain은 언어, LCEL은 그 언어를 쓰기위한 문법 체계
LangChain : LLM 앱을 블록처럼 조립하는 프레임워크
- 핵심 개념
n Retriever : 자료를 찾는 부품 (벡터 DB에서 찾음)
#Transformer에서 임베딩해서 벡터로 만드니까
n OutputParser : 모델 출력을 표, JSON, 문장으로 정리
n Tool : 외부 기능 호출(웹 검색, 계산)
n Runnable : 위 부품들을 하나의 흐름으로 다루는 공통 인터페이스
LCEL (LangChain Expression Language)
- 선언형, 함수형 스타일로 흐름을 한 줄에 표현
- Chain = prompt | model | parser
위 코드처럼 | 기호를 사용해 입력 → 모델 → 출력 처리 흐름을 파이프로 간단하게 연결할 수 있는 것이 LCEL의 핵심
# 자연어 처리에 RNN으론(시퀀스to시퀀스) 한계가 있어 Transformer(attention알고리즘)의 등장
- Runnable 프로토콜 (LCEL의 핵심)
n LancgChain의 모든 부품이 같은 규칙으로 연결되는 공용 어댑터
# 같은 규칙 = 입력 형식, 출력 형식, 실행 방법이 통일
n LangChain의 Runnable이 하나의 표준 인터페이스가 됨
u 부품(프롬프트, 리트리버, LLM, 파서)을 블록처럼 끼워 맞출 수 있음
u 다른 모델, 벡터DB로 갈아 끼워도 코드 대부분 그대로 유지 가능
1. RunnableSequence – 순차적 파이프라인
여러 컴포넌트를 순서대로 연결한 실행 흐름 (직선 파이프라인)
# 가장 기본적인 조립 방식, 파이프( | )로 눈에 보이는 순서 표현
2. RunnableParallel – 병렬적 멀티태스킹
하나의 입력을 router 에이전트를 이용해 여러 갈래로 동시에 보내고, 결과를 한 바구니에 모으는 패턴
< RAG 아키텍처 >
- RAG (Retrieval-Augmented Generation)
n 외부 지식(최신 혹은 사내 자료)을 찾아 근거와 함께 답을 만드는 방식
n LLM의 약점인 환각(Hallucination) 현상을 완화하는 것이 핵심 전략
1단계. 문서 적재 (Loading): PDF, 웹사이트, 노션, 위키, CSV, 내부 문서 등
2단계. 문서 분할 (chunking): LLM이 다룰 수 있는 크기로 잘라 검색 정확도와 맥락 보전의 균형을 맞추는 작업
- 권장 기본 설정 : 청크 크기( chunk_size ) : 300~800토큰 범위에서 시작
겹침(overlap) : 10~20% → 문장 끊김 완화
3단계. 색인화 (Indexing % Embedding): 분할된 문서 청크를 의미 기반으로 검색할 수 있도록 특수한 색인(벡터)로 저장
임베딩 모델 = 검색 품질의 절반 → 한국어 지원 및 도메인 적합성 확인 필요
4단계. 검색 (Retrieval): 사용자의 질문을 벡터 좌표로 전환(embedding), 의미적으로 가장 유사한 문서 청크들을 신속하게 탐색
최종흐름. 전달(주입 Prompt stuffing): 검색된 관련 문서 청크를 사용자 원본 질문과 함계 템플릿에 넣어 LLM에게 참고 자료로 전달 → LLM은 참고 자료를 바탕으로 최종 답변
- RAG 성능 용소
1. 리트리버(Retriever)
A. 유사도 검색: 질문과 의미적으로 가장 유사한 문서 조각(Chunk)를 찾는 방식
B. MMR(Maximal Marginal Relevance): 유사도 높은 결과만 제시할 경우 중복 가능성 존재 → 유사도를 유지하면서 결과의 다양성을 확보
2. 프롬프트 : 명확학게, 수치 기반 작성
A. 지시문: LLM의 역할과 답변 생성 규칙을 정의
B. 컨텍스트: 리트리버가 검색한 문서 조각들이 삽입되는 영역
C. 질문: 사용자의 원본 질문이 삽입되는 영역
LLM의 근본적인 특징: 상태 비저장(Stateless)
- “방금 말한 것”을 알지 못함. 한번 대답하면 끝. → 메모리가 없는 LLM 애플리케이션은 단답형 Q&A만 가능 → 대화 기록 저장소의 역할을 하는 메모리 아키텍처가 필요
LangSmith(=LangGraph) : AI 어플리케이션 관제 역할
복잡하고 예측 불가능한 LLM 애플리케이션을 안정적이고 지속적 개발 및 개선을 위해 필수인 관제 센터
- LLM 앱의 블랙박스를 확인하여 어디서 비용이 발생하고 어디서 틀렸는지 확인 가능
- 주요 역할
n 추적(Tracing): “사용자 질문 → 검색 → 생성” 각 단계의 시간, 비용, 토큰을 기록
i. 문제 발생 시 원인을 신속하게 파악 가능
ii. 병목 지점과 비용 폭탄을 바로 확인 가능
n 평가(Eval): “AI가 얼마나 똑똑한가?” 를 정기적으로 시험하고 정량적으로 평가
n 피드백 수집 및 학습: 문제점 파악하고 지속적 개선
i. 실제 운영 데이터 기반 AI모델과 프롬프트를 점진적으로 발전시키는 LLMOps 핵심 활동
Ops = Operation (운영) : 배포된 모델에 대해서 계속 개선 → 자동화를 목표
1. 제일 먼저 등장 DevOps : 개발과 운영 사이 Operation 시스템 싸이클
CI(지속적인 통합), CD(지속적인 개발)
2. MLOps : 머신러닝 Operation
CI(지속적인 통합), CD(지속적인 개발), CT(지속적인 훈련)
3. LLMOps : 자연어 기반 처리 Operation
4. AIOps, AgentOps
CrewAI: task(작업)기반으로 필요한 Agent 또는 Tool을 구현해서 Crew로 묶어서 Agent System을 만듦 # 실습 → 모든 문서는 Markdown 형태로
- 역할, 목표가 명확한 여러 자율 에이전트들이 하나의 팀(Crew)를 이뤄 프로세스에 따라 협력 → 오케스트레이션 프레임워크
# yaml 파일: 반정형 타입으로, system 구성에 필요한 config 정보들을 텍스트 형태로 저장
# 프롬프트 분류 (config에 넣음)
Instruction (명령) : Role, Goal
Description (설명) : tool, task, information, Docstring
LLM은 어떻게 Agent를 어떻게 호출해서 사용할까?
- 프롬프트를 사용한다! 이때 프롬프트는 Description
CrewAI 구성 요소
- Agent
n 특정 역할, 목표를 가진 자율 행위 단위
n 단순한 LLM 호출이 아닌 고유한 설정(config에 ~.yaml 파일에)을 가진 상태 저장 객체(Stateful Object)
- Task: 에이전트에게 할당된 상세한 업무 지시서(설명, 기대 산출물, 수행 담당 에이전트)
- Crew: 작업을 조율하는 프로세스 관리자
Agent 설계: 세 가지 요소를 구체적, 명확히 정의할수록 에이전트의 일관성과 결과물 품질 향상
- role: 에이전트의 전문성과 권한을 정의
- goal: 에이전트가 달성해야 할 구체적인 산출물의 기준과 성공 조건을 명시
- backstory: 에이전트의 응답 스타일, 상황 맥락, 전문성의 깊이를 부여 # 톤앤매너
- 행동 제어 및 주요 파라미터 # 행동 제어: prompt, Hyper Parameter
n llm: 에이전트가 사용할 특정 LLM모델 지정
n max_iter: 최대 반복 횟수 # 무한 루프 방지
n max_rpm: 분당 요청 수 제한 # 과도한 API 비용 발생 방지
n allow_delegation: 에이전트가 자신의 능력을 벗어나는 과업을 다른 에이전트에게 위임 여부 결정
n verbose: 모든 사고 과정을 로그로 출력
Tools – 에이전트의 능력 확장
- 내장 도구: 웹 검색, 웹사이트 스크래핑, 파일 읽기/쓰기 등 CrewAI가 기본 제공하는 도구
- 커스텀 도구: 개발자가 직접 정의한 Python 함수 # @tool 데코레이터 사용
Tasks – 업무 지시서
- Task는 에이전트의 행동 범위를 명확히 하고 결과물의 품질을 보증하는 가장 중요한 수단
- 핵심 구성요소: description(설명), expected_output(기대 산출물)
Crew오케스트레이션
- Sequential(순차적 프로세스): 정의된 순서대로 Task를 진행 # 프로세스가 정형화된 경우
- Hierarchical(계층적 프로세스): 매니저 역할 LLM이 존재. 최종 목표를 분석하고 필요한 Task들을 동적으로 계획 # 프로세스가 가변적인 경우 적합
CrewAI가 RAG를 구현하는 두가지 방법
1. Knowledge (지속형 레퍼런스): Crew나 Agent에 연결되는 지속적으로 참조되는 핵심 지식 베이스
2. Rag Tool (일회성, 실행형 툴): 특정 Task를 수행하는 중 즉시 특정 데이터 소스 기반 질의가 필요할 때 에이전트가 능동적으로 사용하는 툴
LLM들은 수학을 못한다. → transformer는 자연어를 기반으로 다음에 올 단어를 예측해서 답을 주기 때문에 연산이 아님.
agent의 temperature는 0~1의 값을 가짐 → 1에 가까울수록 상상력이 높다 = 환각(허구성)↑
보통 0.2~0.3정도 → 문장이 적당히 매끄러워지고 환각은 낮음