Agent
- Agent란, 자동화된 추론과 의사결정을 가능케 하는 엔진
- 사용자의 쿼리를 바탕으로 정확한 결과를 제공하기 위해 내부적인 결정을 거쳐 해당 쿼리를 실행
- 내부적인 결정은 일반적으로 거대언어모델(LLM)이 시행
- llamaindex에서 agent와 query engine의 차이점
- query engine은 단순히 주어진 데이터를 읽고, 사용자의 질문에 대해 답변을 제공
- agent는 역동적으로 데이터를 이해하고 수정할 수 있음
- 다시 말해, 단순히 데이터를 읽는 것이 아니라 데이터를 읽고 쓸 수 있음
Agent의 핵심 구성요소
- 반복적인 추론 (reasoning loop)
- agent의 종류에 따라 다른 종류의 추론을 진행
- 현재 llamanidex는 OpenAI Function agent, ReAct agent, LLMCompiler Agent 등을 지원
- 도구 추상화 (tool abstraction)
- tool이란 사람이 아니라 agent가 사용할 수 있도록 구성된 일종의 API 인터페이스
- Agent 구성 코드 예시
from llama_index.core.tools import FunctionTool
from llama_index.llms.openai import OpenAI
from llama_index.core.agent import ReActAgent
# 샘플 Tool을 정의
# 해당 예시에서는 간단한 곱셈을 Tool로 만들어줌
def multiply(a: int, b: int) -> int:
"""Multiple two integers and returns the result integer"""
return a * b
multiply_tool = FunctionTool.from_defaults(fn=multiply)
# 언어모델 초기화
llm = OpenAI(model="gpt-3.5-turbo-0613")
# 위에서 정의한 tool을 바탕으로 ReActAgent를 초기화
agent = ReActAgent.from_tools([multiply_tool], llm=llm, verbose=True)
Agent가 수행할 수 있는 작업들
- 복잡한 질문을 작은 단위로 쪼갬
- 어떠한 외부 도구(Tool)를 사용해 질의를 처리할지 결정, Tool 호출에 필요한 파라미터 결정
- 데이터들에 대해 자동화된 검색(search, retrieval) 수행
- 일련의 태스크를 계획
- 메모리 모듈에 완료된 이전 태스크들을 저장
- ReAct agent는 이러한 메모리를 바탕으로 반복적인 추론을 진행
- Tool이란, agent를 위한 API 인터페이스
- 다양한 종류의 Tool이 존재
- FunctionTool: 사용자가 정의한 함수를 Tool로 쉽게 변환시켜주는 도구
- QueryEngineTool: 기존의 query engine을 래핑시켜서 사용할 수 있도록 만들어주는 도구
- 이 밖에도 LlamaHub에서 다양한 종류의 Tool을 지원
- 외부의 다양한 API 등을 tool로 사용해 더 나은 응답을 생성할 수 있음
- 아래는 tool의 개념 이해를 돕기 위한 몇 가지 예시들
- WikipediaToolSpec
- 위키피디아의 정보를 가져와 agent에게 tool로 제공
- 원하는 페이지를 검색하거나 직접 원하는 페이지를 로드할 수도 있음
- SlackToolSpec
- ArxivToolSpec
- agent로 하여금 ArXiv에서 최신 논문들과 그 논문들의 요약을 검색하고 최신 정보를 가져올 수 있도록 함
- AzureTranslateToolSpec, AzureSpeechToolSpec
- agent가 Azure의 번역, 음성(STT, TTS) 서비스를 활용할 수 있도록 함
- PythonFileToolSpec
- 파이썬 파일을 로드해 함수명, 인자, 설명을 자동으로 추출할 수 있도록 함
참고자료
- LlamaIndex > Use cases > Agents (link)
- LlamaIndex > Component Guides > Agents (link)
- LlamaHub > Tools (link)