이 글은 LLM 에이전트에 대한 개인 학습 내용을 꾸준히 정리하여 올립니다.
1. 논문
2. 블로그
- LLM 기반 자율 에이전트 시스템의 주요 구성 요소
- 계획 (Planning)
- 하위 목표 분해 및 복잡한 작업 관리
- 자기 비판 및 자기 반성을 통한 개선
- 메모리 (Memory)
- 단기 메모리: 인-컨텍스트 학습
- 장기 메모리: 외부 벡터 저장소 및 빠른 검색
- 도구 사용 (Tool Use)
- 계획 (Planning) 구현 기법
- Chain of Thought (CoT): 복잡한 작업을 단계별로 분해
- Tree of Thoughts: 다중 추론 가능성 탐색
- LLM+P: 외부 고전적 플래너 활용
- 자기 반성 (Self-Reflection) 구현
- ReAct: 추론과 행동을 결합한 프롬프트 템플릿
- Reflexion: 동적 메모리와 자기 반성 능력 부여
- Chain of Hindsight (CoH): 과거 출력에 대한 피드백 시퀀스 학습
- 메모리 (Memory) 구현
- 외부 벡터 저장소 사용
- 최대 내적 검색 (MIPS) 알고리즘
• LSH, ANNOY, HNSW, FAISS, ScaNN 등
- 도구 사용 (Tool Use) 구현
- MRKL: 전문가 모듈 컬렉션과 LLM 라우터 결합
- TALM & Toolformer: 외부 도구 API 사용 학습
- HuggingGPT: ChatGPT를 태스크 플래너로 활용, HuggingFace 모델 선택
- API-Bank: 도구 증강 LLM 성능 평가 벤치마크
- 사례 연구
- 과학적 발견 에이전트 (ChemCrow)
- 생성형 에이전트 시뮬레이션 (The Sims 스타일)
- 개념 증명 예제
- AutoGPT: 자율 에이전트 설정 가능성 시연
- GPT-Engineer: 자연어로 지정된 작업에 대한 코드 저장소 생성
- 주요 과제
- 유한한 컨텍스트 길이
- 장기 계획 및 작업 분해의 어려움
- 자연어 인터페이스의 신뢰성 문제
- AI 에이전트의 구성 요소
- LLM
- 프롬프트 (시스템 프롬프트 또는 환경 정보)
- 행동 공간 (에이전트가 사용할 수 있는 도구들)
- 다중 에이전트 시스템 예시 (CodeR)
- 관리자: 계획 작성
- 재현자: 오류 재현 코드 작성
- 오류 위치 탐지기: 오류 발생 파일 찾기
- 편집기: 파일 수정
- 검증자: 결과 확인
- 다중 에이전트 시스템의 문제점
- 구조 설계의 어려움
- 맥락 정보 유지의 어려움
- 유지보수의 복잡성
- 단일 에이전트 시스템 구현 방안
- 단일 LLM: 최신 범용 LLM 사용 (예: Claude, GPT-4, llama-3.1, Qwen-2.5)
- 단일 행동 공간
- 범용 도구 제공 (예: 코드 작성, 코드 실행, 웹 브라우징)
- 필요시 여러 도구 세트 결합
- 단일 프롬프트 기법
- 모든 프롬프트 연결: 긴 문맥 처리 가능한 모델 활용 (예: Claude 200k 토큰, Llama 128k 토큰)
- 검색 증강 프롬프팅: 효율성과 정확성을 위해 관련 정보만 검색하여 제공
- OpenHands의 접근 방식
- 단일 일반화 AI 에이전트 기반 소프트웨어 개발자 구현
- 범용 도구 세트 제공
- 모든 프롬프트 연결 방식 사용
- 향후 연구 방향
- 효과적인 단일 프롬프트 기법 개발
- 검색 증강 프롬프팅 연구
- 에이전틱 워크플로우의 개념
- 비 에이전틱 워크플로우(단일 프롬프트-응답)와 대조됨
- 여러 단계의 반복적이고 상호작용적인 프로세스를 포함
- 사고, 행동, 수정의 과정을 거침
- 에이전틱 워크플로우의 성능
- GPT-3.5를 Agentic 워크플로우로 사용 시 GPT-4의 제로샷 성능을 상회함
- Human Eval 벤치마크에서 GPT-3.5 (Agentic): 77%, GPT-4 (제로샷): 67%
- 주요 에이전트 설계 패턴
- 반성(Reflection)
- 자체 생성 코드를 검토하고 수정
- 단위 테스트 실패 시 자가 진단 및 수정
- 관련 연구: "Self-Refine", "Reflexion"
- 도구 사용(Tool Use)
- 웹 검색, 코드 생성 및 실행 등 외부 도구 활용
- 컴퓨터 비전 작업에서 특히 유용
- 관련 연구: "Gorilla", "MM-REACT"
- 계획(Planning)
- 복잡한 작업을 여러 단계로 분해하고 실행
- 실패 시 대안 경로 탐색 가능
- 관련 연구: "Chain-of-Thought Prompting", "HuggingGPT"
- 다중 에이전트 협업(Multi-agent Collaboration)
- 여러 역할(예: CEO, 디자이너, 프로그래머)을 맡은 에이전트들의 협업
- 채팅 형식의 대화를 통한 복잡한 작업 수행
- 관련 연구: "ChatDev", "AutoGen"
- 기술적 고려사항
- 즉각적인 응답보다는 장시간 처리를 허용해야 함
- 빠른 토큰 생성 속도의 중요성 (반복적 프로세스에서 유리)
- 낮은 품질의 빠른 모델이 높은 품질의 느린 모델보다 나을 수 있음
- 에이전틱 워크플로우의 효과
- 작업 시간 단축
- 다양한 정보 소스의 효율적 통합
- 높은 품질의 콘텐츠 생성
- 향후 전망
- 에이전틱 워크플로우를 통해 AI 기능이 크게 확장될 것으로 예상
- AGI로 가는 여정의 중요한 단계로 인식됨
- 참고: Exploring Agentic Workflows: A Deep Dive into AI-Enhanced Productivity
- AutoGen의 개요
- LLM 워크플로우를 자동화, 최적화, 조율하기 위한 프레임워크
- 복잡한 LLM 기반 애플리케이션 개발을 단순화
- 주요 특징
- 사용자 정의 가능하고 대화형 에이전트 제공
- 다중 에이전트 간 자동화된 대화 지원
- LLM, 인간, 도구를 통합한 에이전트 구성 가능
- 구현 방법
- 특화된 능력과 역할을 가진 에이전트 세트 정의
- 에이전트 간 상호작용 동작 정의
- AutoGen 에이전트의 특징
- LLM 사용 및 역할 쉽게 구성 가능
- 인간 지능 및 감독 통합 가능
- LLM 기반 코드/함수 실행 지원
- 지원하는 기능
- 자동화된 복잡한 작업 해결 (그룹 채팅 통해)
- 추론 매개변수 튜닝을 통한 성능 최적화
- 코드 생성, 실행, 디버깅 자동화
- 제공된 도구를 함수로 사용
- 응용 사례
- ChatGPT + 코드 인터프리터 + 플러그인의 향상된 버전 구현
- 지속적 학습 및 새로운 기술 학습 자동화
- 다중 전문가 에이전트 협력을 통한 복잡한 작업 해결
- 기술적 이점
- 모호성, 피드백, 진행 상황, 협업을 자연스럽게 처리
- 코딩 관련 작업에 효과적 (도구 사용 및 문제 해결)
- 사용자의 원활한 개입 또는 제외 허용
- 다양한 통신 패턴 지원
- 구현 예시
- 대화형 체스 게임
- GroupChatManager를 이용한 다중 에이전트 그룹 채팅
- 사용 방법
- 파이썬 패키지로 제공 (pip install pyautogen)
- 간단한 코드로 강력한 기능 구현 가능
- API 구성
- 빌드 타임 API: 에이전트 생성, 구성 및 관리
- 런타임 API: 사용자 입력으로 에이전트 호출 및 작업 수행을 위한 오케스트레이션 시작
- 에이전트 구성 요소
- 기반 모델(Foundation Model, FM): 사용자 입력 해석 및 응답 생성에 사용
- 지시사항: 에이전트의 목적 및 기능 정의
- 액션 그룹:
∘ OpenAPI 스키마 또는 함수 세부 정보 스키마로 파라미터 정의
∘ (선택적) Lambda 함수: API 호출 처리
- 지식 베이스: 추가 컨텍스트 제공을 위해 연결
- 프롬프트 템플릿: 기본 4개 제공 (전처리, 오케스트레이션, 지식 베이스 응답 생성, 후처리)
- 빌드 타임 프로세스
- 모든 구성 요소를 조합하여 기본 프롬프트 구성
- 고급 프롬프트를 통해 각 단계별 로직 및 퓨-샷 예제 추가 가능
- 에이전트 준비 단계에서 모든 구성 요소 및 보안 설정 패키징
- 런타임 프로세스 (InvokeAgent API)
- 전처리: 사용자 입력 컨텍스트화 및 분류
- 오케스트레이션
- FM을 사용한 입력 해석 및 다음 단계 논리 생성
- 액션 그룹 호출 또는 지식 베이스 쿼리 예측
- 필요시 Lambda 함수 호출 또는 파라미터 반환
- 지식 베이스 쿼리 또는 사용자 재프롬프트
- 관찰 결과 생성 및 기본 프롬프트 보강
- 프로세스 반복 또는 사용자 응답 반환
- 후처리: 최종 응답 포맷팅 (기본적으로 비활성화)
- 추적 기능
- 런타임에서 활성화 가능
- 에이전트의 논리, 액션, 쿼리, 관찰 등 각 단계 추적
- FM에 전송된 전체 프롬프트 및 출력 포함
- API 응답 및 지식 베이스 쿼리 결과 포함
- 대화 기록
- InvokeAgent 요청을 통해 세션 지속
- 오케스트레이션 기본 프롬프트 템플릿에 컨텍스트 지속적 추가
- 에이전트의 정확도 및 성능 향상에 기여
- TaskWeaver의 주요 목적
- 자연어 사용자 요청을 실행 가능한 코드로 변환
- 복잡한 데이터 구조 처리 지원
- 동적 플러그인 선택 기능
- 도메인 특화 계획 프로세스 지원
- 핵심 아키텍처 구성요소
- 플래너
- 시스템의 진입점 역할
- 사용자 요청을 하위 작업으로 분할
- 실행 프로세스 관리 및 자체 반성 수행
- 실행 결과를 사람이 읽을 수 있는 응답으로 변환
- 코드 제너레이터
- 플래너로부터 받은 하위 작업에 대한 코드 생성
- 기존 플러그인과 도메인 특화 작업 예제 고려
- 코드 익스큐터
- 생성된 코드 실행
- 전체 세션 동안 실행 상태 유지
- 주요 설계 고려사항
- 코드 우선 분석 경험
- 사용자 요청을 파이썬 프로그램으로 변환
- pandas DataFrame, numpy ndarray 등 네이티브 데이터 구조 활용
- 데이터베이스 쿼리, 머신러닝 알고리즘 실행, 결과 요약 및 시각화 지원
- 도메인 적응
- 플러그인을 통한 사용자 정의
• 사용자가 정의한 플러그인(파이썬 구현 및 스키마 포함)으로 도메인 지식 통합
- 예제를 통한 사용자 정의
• YAML 형식의 인터페이스로 LLM에 특정 요청 응답 방법 교육
• 계획 수립용 예제와 코드 생성용 예제 두 가지 카테고리 제공
- 상태 유지 코드 실행
- 전체 세션 동안 코드 실행 상태 유지
- 주피터 노트북과 유사한 방식으로 작동하나, 사용자는 자연어 사용
- 지능형 계획 분해 및 자체 반성
- 사용자 요청에 더 신뢰성 있고 체계적인 응답 제공
- 제한된 코드 생성
- 생성된 코드의 기능을 제한하여 보안 위험 감소
- 작동 워크플로우
- 플래너가 사용자 쿼리, 코드 인터프리터 설명, 계획 예제를 바탕으로 계획 생성
- 코드 제너레이터가 관련 플러그인 정의를 포함한 프롬프트를 받아 코드 스니펫 생성
- 생성된 코드는 코드 익스큐터로 전송되어 실행
- 실행 결과는 플래너로 반환되어 다음 계획 단계 결정
- 이 과정을 반복하며 사용자 요청 완료
- 기술적 특징
- LLM의 코딩 능력을 활용하여 복잡한 로직 구현
- 사용자 정의 예제와 플러그인을 통해 도메인 특화 지식 통합
- 복잡한 데이터 구조에 대한 효율적인 처리
- 다중 라운드 통신을 통한 작업 수행 능력
참고