Gemini Pro로 구동되는 에이전트: LangTrace를 통한 에이전트 워크플로우 활성화
Gemini Pro와 LangTrace가 고급 LLM 기능을 위한 주체적 워크플로우를 어떻게 열어주는지 발견하세요. 계획, 외부 도구 사용, 그리고 프로덕션 준비 AI 시스템을 위한 추적을 탐색하세요.
2025년 1월 15일
AI 주도 에이전트의 힘을 unleash하세요. Gemini Pro Experimental 모델로 말이죠. 이 최첨단 언어 모델이 외부 도구와 API를 원활하게 통합하여 복잡한 과제를 해결하고 포괄적이고 맞춤형 응답을 제공하는 방법을 발견하세요. 이 에이전트 기반 접근법의 이점을 탐색하고 콘텐츠와 워크플로우를 위한 새로운 가능성을 unleash하세요.
에이전트란 무엇이며 어떻게 작동하는가?
에이전트란 무엇이며 어떻게 작동하는가?
에이전트는 본질적으로 추가적인 기능을 가진 대규모 언어 모델(LLM)입니다. 여기에는 다음과 같은 기능이 포함됩니다:
-
계획: 에이전트는 사용자 질문을 분해하고 이를 해결하기 위한 종합적인 계획을 수립할 수 있습니다.
-
외부 도구/API: 에이전트는 계획을 실행하는 데 사용할 수 있는 외부 도구 또는 API에 액세스할 수 있습니다.
-
메모리: 에이전트는 계획 실행 진행 상황과 추가로 취해야 할 단계를 추적합니다.
제공된 예에서 에이전트는 Gemini 1.5 Pro 실험 모델을 LLM으로 사용하며, 두 가지 도구에 액세스할 수 있습니다:
-
RAG(Retrieval-Augmented Generation): 이는 "Attention is All You Need" 논문을 사용하는 에이전트의 지식베이스 역할을 합니다.
-
웹 검색: 에이전트는 지식을 보완하기 위해 웹에서 정보를 검색할 수 있습니다.
에이전트는 LangTrace를 사용하여 계획 실행 과정의 모든 단계를 추적합니다. 이러한 관찰 가능성은 특히 프로덕션 환경에서 에이전트의 의사 결정 과정을 이해하는 데 중요합니다.
환경 설정하기
환경 설정하기
시작하려면 필요한 패키지를 설치하고 필요한 API 키를 설정해야 합니다. 다음과 같이 진행하겠습니다:
-
패키지 설치: Google Generative AI 패키지, LangChain, Tavly Python(검색 엔진), FAISS(벡터 저장소) 및 LangTrace Python SDK를 설치할 것입니다.
-
패키지 가져오기: 재귀적 문자 텍스트 분할기, PDF 로더, Tavly 검색 결과 및 Google 생성 AI 임베딩 모델을 가져올 것입니다.
-
API 키 설정:
- Tavly API 키: 동영상 설명에 제공된 "API 키 받기" 링크를 클릭하여 Tavly API 키를 얻을 수 있습니다.
- Google API 키: Google AI Studio에서 Google API 키를 얻을 수 있습니다.
- LangTrace API 키: LangTrace(LLM 애플리케이션용 오픈 소스 관찰 플랫폼)에 계정을 만들고 "API 키 생성"을 클릭하여 API 키를 얻을 수 있습니다.
-
환경 변수 설정: Tavly API 키와 LangTrace API 키를 환경 변수로 설정할 것입니다.
-
오류 처리: LangSmith 통합과 관련된 오류가 발생하면 걱정하지 마세요. 현재는 LangChain과 Gemini Pro 통합에만 관심이 있습니다.
이제 환경 설정이 완료되었으므로 에이전트를 구축하고 필요한 도구를 통합하는 다음 단계로 넘어갈 수 있습니다.
RAG 파이프라인 만들기
RAG 파이프라인 만들기
RAG 파이프라인을 설정하려면 먼저 지식베이스 역할을 할 PDF 문서를 로드해야 합니다. 이 경우 "transformers.pdf" 파일이 있으며, 이 파일에는 12페이지의 내용이 포함되어 있습니다.
다음으로 langchain.text_splitter
모듈의 RecursiveCharacterTextSplitter
를 사용하여 문서를 500개의 토큰과 100개의 중복으로 구성된 더 작은 조각으로 분할합니다. 이를 통해 총 24개의 다른 조각을 생성하여 검색에 사용할 수 있습니다.
그런 다음 Google Generative AI 임베딩 모델을 로드합니다. 이 모델은 각 문서 조각의 임베딩을 계산하는 데 사용됩니다. 임베딩의 차원은 768입니다.
임베딩을 저장하기 위해 FAISS 벡터 저장소를 사용합니다. 이를 통해 질문이 제공될 때 문서 조각에 대한 유사성 검색을 효율적으로 수행할 수 있습니다.
마지막으로 RetrievalQA
도구를 만듭니다. 이 도구는 에이전트가 "Attention is All You Need" 논문과 관련된 정보를 검색할 수 있도록 FAISS 리트리버와 설명으로 구성됩니다.
이 설정을 통해 에이전트는 RAG 파이프라인을 사용하여 변환기 및 관련 주제에 대한 질문에 대한 관련 정보를 찾아 검색할 수 있습니다.
도구 설정하기
도구 설정하기
에이전트의 도구를 설정하려면 먼저 필요한 패키지를 설치해야 합니다:
1# 필요한 패키지 설치 2!pip install google-generative-ai langchain tavlpy faiss-cpu langtracing
다음으로 필요한 모듈을 가져오고 사용할 서비스의 API 키를 설정합니다:
1import os 2from langchain.document_loaders import PyPDFLoader 3from langchain.text_splitter import RecursiveCharacterTextSplitter 4from langchain.embeddings.openai import OpenAIEmbeddings 5from langchain.vectorstores import FAISS 6from langtracing.sdk.python import LangTracer 7 8# Tavly API 키 설정 9TAVLY_API_KEY = os.environ.get("TAVLY_API_KEY") 10 11# LangTrace API 키 설정 12LANGTRACING_API_KEY = os.environ.get("LANGTRACING_API_KEY")
그런 다음 PDF 문서를 로드하고, 이를 조각으로 분할하고, 임베딩과 벡터 저장소를 만들어 RAG(Retrieval Augmented Generation) 파이프라인을 설정합니다:
1# PDF 문서 로드 2loader = PyPDFLoader("transformers.pdf") 3documents = loader.load() 4 5# 문서를 조각으로 분할 6text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100, length_function=len) 7chunks = text_splitter.split_documents(documents) 8 9# 임베딩 및 벡터 저장소 생성 10embeddings = OpenAIEmbeddings() 11vector_store = FAISS.from_documents(chunks, embeddings)
마지막으로 에이전트가 액세스할 수 있는 두 가지 도구, 즉 검색 도구와 검색 도구를 만듭니다:
1from langchain.agents import Tool 2 3# 검색 도구 생성 4retriever_tool = Tool( 5 name="retriever_tool", 6 description="변환기 아키텍처와 관련된 정보는 이 도구를 사용하세요. "Attention is all you need" 논문과 관련된 정보를 검색하는 데 유용합니다.", 7 func=lambda query: vector_store.similarity_search(query, k=3) 8) 9 10# 검색 도구 생성 11search_tool = Tool( 12 name="search_tool", 13 description="포괄적이고 정확하며 신뢰할 수 있는 결과를 제공하는 검색 엔진입니다. 현재 이벤트에 대한 질문에 답변할 때 유용합니다. 입력은 검색 쿼리여야 합니다.", 14 func=lambda query: Tavly(TAVLY_API_KEY).search(query) 15)
도구 설정이 완료되었으므로 이제 에이전트를 만들고 사용할 준비가 되었습니다.
에이전트 만들기
에이전트 만들기
에이전트를 만들기 위해 LangChain의 ReAct 에이전트 클래스를 사용할 것입니다. 이는 계획, 메모리 및 원하는 도구에 액세스할 수 있는 특별한 유형의 에이전트입니다.
먼저 도구 제어 및 계획 수립을 위한 자세한 프롬프트 또는 지침을 에이전트에게 제공해야 합니다. LangChain은 LangChain Hub와 유사한 템플릿을 제공합니다.
ReAct 템플릿을 사용하고 필요에 따라 수정할 것입니다. 프롬프트에는 다음이 포함됩니다:
- 가능한 한 잘 답변하세요.
- 다음과 같은 도구에 액세스할 수 있습니다:
- 검색 도구: "Attention is All You Need" 논문과 관련된 정보.
- 검색 도구: 포괄적이고 정확하며 신뢰할 수 있는 결과를 제공하는 검색 엔진. 현재 이벤트에 대한 질문에 답변할 때 유용합니다.
- 다음 형식을 사용하세요:
- 답변해야 할 질문.
- 사고 과정.
- 취할 조치(즉, 어떤 도구를 사용할지).
- 도구의 출력.
- 최종 답변.
이 프롬프트를 사용하여 ReAct 에이전트를 만들 수 있습니다:
1agent = ReActAgent( 2 name="Gemini 1.5 Pro", 3 tools=tools, 4 system_message=system_prompt 5)
여기서 tools
는 앞서 정의한 도구 목록이며, system_prompt
는 ReAct 템플릿을 기반으로 생성한 프롬프트입니다.
이제 AgentExecutor
를 사용하여 에이전트를 실행하고 질문을 제공할 수 있습니다:
1executor = AgentExecutor( 2 agent=agent, 3 tools=tools, 4 verbose=True 5) 6 7result = executor.run("What is the current weather in LA?") 8print(result)
에이전트는 사고 과정을 거쳐 적절한 도구를 사용하고 최종 답변을 제공합니다. LangTrace 라이브러리를 사용하여 에이전트의 의사 결정 과정을 검토할 수도 있습니다.
에이전트와 상호 작용하기
에이전트와 상호 작용하기
우리가 설정한 에이전트는 계획, 작업 실행, 작업 결과에 따른 내부 상태 업데이트가 가능한 반응형 에이전트입니다. 이 에이전트와 상호 작용해 보겠습니다.
먼저 로스앤젤레스의 현재 날씨에 대한 간단한 질문을 에이전트에게 해보겠습니다:
1question = "What is the current weather at LA?" 2result = agent.run(question) 3print(result)
에이전트는 사고 과정을 거쳐 현재 날씨를 찾기 위해 검색 도구를 사용하고, 결과를 처리하여 최종 답변을 제공합니다.
다음으로 현재 올림픽에서 국가별 금메달 수 목록을 요청해 보겠습니다:
1question = "Can you give me a list of gold medals per country in the current Olympics?" 2result = agent.run(question) 3print(result)
여기서도 에이전트는 관련 정보를 찾기 위해 검색 도구를 사용하고, 결과를 처리하여 답변을 제공합니다.
마지막으로 변환기에서 주목 메커니즘의 개념을 설명해 달라고 요청해 보겠습니다:
1question = "Can you explain the concept of attention in transformers?" 2result = agent.run(question) 3print(result)
이 경우 에이전트는 질문이 "Attention is All You Need" 논문과 관련된 것으로 인식하고, 검색 도구를 사용하여 관련 정보를 가져옵니다. 그런 다음 정보를 처리하여 스케일된 점곱 주목 메커니즘의 핵심 개념에
자주하는 질문
자주하는 질문