AI 에이전트 시스템 구축 및 최적화에 대한 Q&A
에이전트 시스템 실무 적용 및 어려움
- 정확도와 속도 간의 균형: 에이전트 시스템은 LLM(대규모 언어 모델) 애플리케이션으로, 정확도와 속도 사이의 균형을 맞추는 것이 중요합니다.
- 속도 저하 문제: 여러 LLM API나 도구를 결합하면 시스템 요청 작업이 증가하여 속도가 느려집니다.
- API 호출 과정: LLM API 호출, 도구 API 호출, 그리고 환각 현상 제거를 위한 LLM API 재처리 등으로 여러 번의 API 호출이 필요합니다.
- 정확도 향상 방법: 여러 LLM을 연결하여 AI 후처리 작업을 거치거나, LLM 답변을 구조화된 형식으로 파싱하여 정확도를 높일 수 있습니다.
- 통제성 확보: LLM 답변을 JSON 스키마나 Pydantic 데이터 모델을 사용하여 구조화된 형식으로 파싱하는 것이 중요합니다.
- LLM 필요성 판단: LLM이 정말 필요한 부분과 그렇지 않은 부분을 정확히 판단하여 속도 저하를 방지해야 합니다.
- LLM 추론 시간 단축: 빠른 속도를 제공하는 API를 사용하거나, 오픈 소스 LLM을 양자화 및 경량화하여 추론 시간을 줄일 수 있습니다.
- VLLM (Very Large Language Model): 페이지드 어텐션 기능을 통해 LLM 서빙 속도를 향상시키는 프레임워크입니다.
- 정확도와 속도 균형 예시: 코렉티브 RAG(Retrieval-Augmented Generation) 시스템을 예시로 들어, 질문이 벡터 DB 검색이 필요한지 LLM 자체적으로 답변 가능한지 판단하는 AI 노드를 추가하고, 검색된 문서와 질문의 연관성을 판단하는 과정을 설명합니다.
다수 사용자 대상 LLM 서빙 방법
- 비동기 API 호출: 다수 사용자를 처리할 때, 비동기 API 호출을 사용하여 효율성을 높일 수 있습니다.
- 쓰레드 구조의 문제점: 동기식 쓰레드 구조에서는 사용자 수 증가에 따라 쓰레드 수가 늘어나 리소스 사용이 비효율적입니다.
- 비동기 모델의 장점: 단일 쓰레드 내에서 비동기 로직을 사용하여 API 호출을 효율적으로 처리하고, 리소스 사용을 최소화할 수 있습니다.
- 비동기 프로그래밍 예시: 파이썬의
asyncio라이브러리를 사용하여 동기식과 비동기식 API 호출의 차이를 설명합니다. - 메시지 브로커 시스템: 더 많은 사용자를 처리해야 할 때 메시지 브로커 시스템(예: Kafka, RabbitMQ)을 활용하여 시스템 확장성을 높일 수 있습니다.
- 메시지 브로커 작동 방식: 사용자의 API 요청을 브로커 시스템에 저장하고, 선입선출 방식으로 처리하여 시스템 부하를 줄입니다.
- 당근마켓의 LLM 서빙 아키텍처: 메시지 큐, 데이터 변환, 피처 플랫폼, 데이터 분석 및 머신러닝 모델 훈련을 위한 시스템을 예시로 제시합니다.
AI 에이전트 시스템 현황 및 가능성
- AI 에이전트의 활용: 채GPT의 웹 검색, 코드 실행, 캔버스 기능 등의 예시를 통해 AI 에이전트가 이미 다양한 분야에서 활용되고 있음을 설명합니다.
- 로우 코드 툴: 에이전트 시스템을 로우 코드로 만들 수 있는 툴 (N8N, Pylon, Flowise AI)를 소개합니다.
- N8N: UI 기반의 오픈 소스 워크플로우 자동화 툴로, 다양한 서비스와 API를 연결하여 에이전트 시스템을 쉽게 구축할 수 있습니다.
- Flowise AI: 노드 기반의 UI로 에이전트 시스템을 시각적으로 설계하고 테스트할 수 있는 툴입니다.
- 서비스화 필요성: 서비스화가 필요한 로직에는 LangChain과 같은 API를 활용하여 에이전트 시스템을 구축해야합니다.
메타데이터 관리 방법
- LangChain의 메타데이터 태거: 오픈 AI 메타데이터 태거를 사용하여 문서에 메타데이터를 추가하는 방법을 설명합니다.
- JSON 스키마 및 Pydantic 모델: 메타데이터 스키마를 JSON 스키마 또는 Pydantic 데이터 모델로 정의하여 메타데이터를 생성할 수 있습니다.
- 메타데이터 구성: 사용자의 검색 방식에 따라 메타데이터를 구성하는 것이 중요하며, 기업명, 연도, 분기, 재무제표 섹션 등의 정보가 포함될 수 있습니다.
- 벡터 DB 관리: PGVector (PostgreSQL 확장) 및 Milvus와 같은 벡터 DB를 활용하여 메타데이터를 관리할 수 있습니다.
- PGVector: 기존 RDB 환경에서 벡터 검색 기능을 추가할 때 사용할 수 있는 포스트그레SQL 확장입니다.
- Milvus: 오픈 소스 벡터 데이터베이스로, 하이브리드 검색 (키워드 기반 검색과 임베딩 유사도 기반 검색)을 지원합니다.
오픈 소스 LLM 기반 에이전트 시스템 예제
- 활용 모델: Ollama를 통해 쉽게 사용할 수 있는 Qwen 2.5 7B 모델(4비트 양자화)을 사용하여 RAG 시스템을 구축하는 방법을 설명합니다.
- Ollama: 오픈 소스 LLM 실행 및 관리 도구입니다.
- 데이터 로딩 및 분할: PyPDFLoader를 사용하여 PDF 문서의 텍스트를 로드하고, RecursiveCharacterTextSplitter를 사용하여 텍스트를 분할합니다.
- 임베딩 모델: BGE-M3 (Hugging Face) 임베딩 모델을 사용하여 텍스트를 벡터화합니다.
- 벡터 DB: Chroma 벡터 스토어를 사용하여 임베딩 벡터를 저장합니다.
- 리트리버 생성: 벡터 스토어를 기반으로 Retriever를 생성합니다.
- LangGraph: RAG 시스템을 노드 기반 그래프로 구성하여, 에이전트, 검색, 질문 재생성, 답변 생성 등의 단계를 정의합니다.
- 구현 단계:
- 사용자의 질문을 받아 검색이 필요한지 여부를 판단하는 에이전트 노드 설정.
- 검색 도구를 툴 노드로 설정.
- 검색된 문서와 질문의 연관성을 판단하는 노드 설정.
- 질문 재작성 노드 설정.
- 답변 생성 노드 설정.
- 한문 포함 여부 검사 노드 설정.
- 최적화: 임베딩 유사도 계산을 통해 검색된 문서와 질문의 연관성을 판단하여 속도를 개선합니다.
- 결과: 2024년 정책금융 지원 규모에 대한 질문에 대해, 시스템이 문서를 검색하고 답변을 생성하는 과정을 보여줍니다. (8GB RAM 환경에서 40초 소요)
결론
이 영상은 AI 에이전트 시스템 구축 및 최적화에 대한 다양한 질문에 대한 답변을 제공하며, 실제 서비스 적용 사례나 실무 경험이 부족한 부분도 있지만, 최대한 많은 정보를 수집하여 제공하고자 노력했습니다.