MongoDB Agno와 통합하여 AI 에이전트를 위한 검색 가능한 지식 기반 및 지속적인 대화 기록을 구성할 수 있습니다. 이 튜토리얼에서는 지식 검색 및 세션 저장 에 MongoDB 사용하도록 Agno 에이전트 구성한 다음 해당 구성을 사용하여 요리 어시스턴트를 빌드 방법을 보여 줍니다. 구체적으로 다음 작업을 수행합니다.
환경을 설정합니다.
MongoDB Agno 지식 기반으로 구성합니다.
문서의 질문에 답변하고 대화의 이전 차례를 기억하는 어시스턴트를 구축하세요.
파일 실행하고 출력을 검토 .
배경
Agno는 멀티모달 AI 에이전트를 빌드하기 위한 오픈 소스 Python 프레임워크 입니다. Agno 에이전트 선택적 지식 베이스 및 선택적 데이터베이스 포함한 모듈식 구성 요소로 구성되며, 이 구성 요소는 독립적으로 구성하고 동일한 Agent 객체 에 전달합니다.
MongoDB 이러한 구성 요소 중 두 가지를 제공하며, 이 구성 요소는 다음 클래스를 가져와서 사용할 수 있습니다.
MongoVectorDb클래스: MongoDB Vector Search를 사용하여 Agno의 벡터 데이터베이스 인터페이스를 구현하여 에이전트 MongoDB 컬렉션 에서 관련 문서를 조회 수 있도록 합니다.MongoDb클래스: Agno의 데이터베이스 인터페이스를 구현하고, 에이전트 세션, 메모리 및 지표 MongoDB 컬렉션의 문서로 유지합니다.
팁
Agno는 두 MongoDB 클래스의 이름을 MongoDb으로 지정하여 충돌을 방지하기 위해 벡터 데이터베이스 클래스를 MongoVectorDb로 내보냅니다. 자세한 학습 은 MongoDB 와 Agno 프레임워크 통합을 참조하세요.
이 튜토리얼에서는 두 구성 요소를 모두 사용하며 해당 데이터를 동일한 MongoDB deployment 에 저장합니다.
전제 조건
이 튜토리얼을 완료하려면 다음 리소스가 있어야 합니다.
다음 MongoDB cluster 유형 중 하나입니다.
MongoDB 버전 6.0.11을 실행하는 Atlas 클러스터 7.0.2 또는 그 이상. IP 주소가 Atlas 프로젝트의 액세스 목록에 포함되어 있는지 확인하세요.
Python 과 Docker 사용하여 만든 로컬 Atlas
atlas-local-lib-pypip install atlas-local-lib-py배포서버 .()을(를)설치하여 로컬 배포를 프로그래밍 방식으로 생성하고 관리 . 자세한 학습 은 atlas-local-lib-py 리포지토리 참조하세요.검색 및 벡터 검색이 설치된 MongoDB Community 클러스터.
OpenAI API 키입니다. API 요청에 사용할 수 있는 크레딧이 있는 OpenAI 계정이 있어야 합니다. OpenAI 계정 등록에 대한 자세한 내용은 OpenAI API 웹사이트를 참조하세요.
Python v3.9 이상.
환경 설정
환경 변수를 설정합니다.
agno-mongodb-project 디렉토리 에서 .env 파일 만들고 다음 코드를 추가합니다.
OPENAI_API_KEY="<openai-api-key>" MONGODB_URI="<connection-string>"
<connection-string>을 Atlas 클러스터 또는 로컬 Atlas 배포서버의 연결 문자열로 교체합니다.
연결 문자열은 다음 형식을 사용해야 합니다.
mongodb+srv://<db_username>:<db_password>@<clusterName>.<hostname>.mongodb.net
자세한 학습은 클라이언트 라이브러리를 통해 클러스터에 연결을 참조하세요.
연결 문자열은 다음 형식을 사용해야 합니다.
mongodb://localhost:<port-number>/?directConnection=true
학습 내용은 연결 문자열을 참조하세요.
프로젝트 파일 만듭니다.
agno-mongodb-project 디렉토리 에서 main.py이라는 파일 만듭니다. 이 파일 에 다음 코드를 추가하여 환경 변수를 로드합니다.
import os from dotenv import load_dotenv from agno.agent import Agent from agno.db.mongo import MongoDb from agno.knowledge.knowledge import Knowledge from agno.models.openai import OpenAIChat from agno.vectordb.mongodb import MongoVectorDb load_dotenv()
이후 단계에서는 이 파일 에 코드를 추가하여 지식창고 및 어시스턴트를 빌드 .
지식 기반 구축
이 섹션에서는 MongoDB Agno 지식창고의 벡터 저장 로 구성하고, 여기에 데이터를 저장 , 이에 대해 시맨틱 검색 쿼리 실행 .
MongoDB 벡터 저장 로 구성합니다.
다음 코드를 추가하여 지식창고에 대한 MongoDB 지원 벡터 저장 구성합니다.
vector_db = MongoVectorDb( collection_name="agent_knowledge", db_url=os.environ["MONGODB_URI"], database="agno", ) knowledge = Knowledge(vector_db=vector_db)
앞의 코드는 MongoVectorDb 인스턴스 생성하고 이를 Knowledge 객체 의 vector_db 매개변수에 전달합니다. agent_knowledge 컬렉션 처음 사용하는 경우이므로 Agno는 vector_index_1라는 이름의 MongoDB Vector Search 인덱스 와 함께 컬렉션을 생성합니다.
인덱스 빌드 데 약 1분 정도 소요됩니다. 빌드되는 동안 인덱스는 초기 동기화 상태입니다. 빌드가 완료되면 컬렉션 의 데이터 쿼리를 시작할 수 있습니다.
데이터를 로드하고 저장 .
main.py 파일 에 다음 코드를 추가하여 태국어 레시피가 포함된 PDF 파일 지식창고에 로드합니다.
knowledge.insert( name="Recipes", url="https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf", )
Agno는 파일 다운로드하고 청크로 분할한 다음 기본값 OpenAI 임베더를 사용하여 각 청크 에 대한 임베딩을 생성하고 결과를 컬렉션 에 씁니다.
팁
저장된 문서를 검사하려면 Atlas UI 에서 agno.agent_knowledge 컬렉션 찾습니다. 각 문서 에는 레시피 텍스트 청크 있는 content 필드 와 생성된 벡터를 포함하는 embedding 필드 있습니다. 자세히 학습 컬렉션 보기를 참조하세요.
시맨틱 검색 쿼리 실행합니다.
다음 코드를 main.py 파일 에 추가하여 지식창고의 벡터 데이터베이스 에이전트 에 연결하기 전에 직접 쿼리 . 이 예시 그린 커리 관련 질문과 가장 관련이 있는 세 가지 청크를 검색합니다.
results = vector_db.search(query="How do I make a green curry?", limit=3) for doc in results: print(f"[{doc.name}] {doc.content[:80]}")
결과에는 쿼리 와 의미상 가장 관련이 있는 레시피 청크가 포함되며, 유사성 점수를 기준으로 순위가 매겨집니다.
영구 세션으로 어시스턴트 빌드
이 섹션에서는 지식창고와 MongoDB database 결합하여 완전한 어시스턴트를 빌드 . 에이전트 질문에 답변 위해 지식창고에서 관련 문서를 검색하고, 이전 차례를 다시 참조할 수 있도록 대화 기록을 MongoDB 에 유지합니다.
어시스턴트를 정의합니다.
다음 코드를 main.py 파일 에 추가하여 세션 저장 에 대한 MongoDb 인스턴스 구성한 다음, 이 세션 저장 와 이전 섹션에서 구성한 지식창고를 사용하는 에이전트 생성합니다.
db = MongoDb( db_url=os.environ["MONGODB_URI"], db_name="agno", ) agent = Agent( model=OpenAIChat(id="gpt-4o"), knowledge=knowledge, db=db, search_knowledge=True, add_history_to_context=True, num_history_runs=5, instructions=[ "You are a helpful cooking assistant.", "Answer questions using only the recipes in your knowledge base.", "If the knowledge base does not contain a relevant answer, say so clearly.", ], )
두 번의 대화 차례에 걸쳐 어시스턴트를 실행합니다.
main.py 파일 에 다음 코드를 추가하여 에이전트 에 두 개의 메시지를 보냅니다.
SESSION_ID = "cooking-session-001" # First turn agent.print_response( "My favorite Thai dish is massaman curry.", session_id=SESSION_ID, ) # Second turn agent.print_response( "How do I make my favorite dish?", session_id=SESSION_ID, )
에이전트 매 턴마다 지식창고에서 가장 관련성이 높은 레시피 청크를 조회합니다. 두 호출 모두 동일한 session_id 값을 사용하기 때문에 Agno는 이전 응답에서도 데이터를 검색합니다. Agno는 agno_sessions 컬렉션 에서 세션 메타데이터 검색하고 agno_runs 컬렉션 에서 메시지 콘텐츠를 검색합니다. session_id를 생략하거나 두 번째 호출에서 다른 값을 전달하면 Agno는 새 세션을 시작하고 에이전트 첫 번째 차례에 대한 기록 보유하지 않습니다.
파일 실행
main.py 파일 실행 하려면 agno-mongodb-project 디렉토리 에서 다음 명령을 실행 .
python main.py
명령이 성공적으로 실행되면 출력은 다음과 유사합니다.
INFO Connected to MongoDB successfully. INFO Creating collection 'agent_knowledge'. INFO Creating search index 'vector_index_1'. INFO Search index 'vector_index_1' is ready. INFO Search index 'vector_index_1' created successfully. INFO Adding content from URL https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf INFO Upserting 14 documents # Output from the vector_db.search() call [Recipes] INGREDIENTS (One serving) 150 grams chicken, cut into bite-size pieces 50 grams [Recipes] Thai SELECT Exotic, Healthy, Delicious Dining-Thai Style Thai food has rapidly g [Recipes] Directions: 1. Roughly pound the garlic with bird's eye chilies in a mortar. Add # Output from the agent.print_response() calls ┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ My favorite Thai dish is massaman curry. ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ┏━ Response (gpt-4o) ────────────────────────────────────────────┓ ┃ Great choice — I found a recipe in the knowledge base for ┃ ┃ Massaman Gai (Massaman Curry with Chicken and Potatoes). ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ How do I make my favorite dish? ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ┏━ Response (gpt-4o) ────────────────────────────────────────────┓ ┃ Here's how to make Massaman Gai (Massaman Curry with Chicken ┃ ┃ and Potatoes) from the knowledge base: ┃ ┃ **Ingredients** ┃ ┃ - 300 grams chicken rump ┃ ┃ - 80 grams Massaman curry paste ┃ ┃ - 100 grams coconut cream ┃ ┃ - 300 grams coconut milk ┃ ┃ - 250 grams chicken stock ┃ ┃ - 50 grams roasted peanuts ┃ ┃ - 200 grams potatoes, chopped into large chunks ┃ ┃ - 100 grams onion, chopped into large chunks ┃ ┃ ... ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
다음 단계
전체 매개변수 및 메서드 참조를 포함하여 MongoVectorDb 및 MongoDb 클래스에 대해 자세히 학습 MongoDB 와 Agno 프레임워크 통합을 참조하세요.
To learn more about the MongoDB Vector Search index that Agno creates on your collection, see Create a MongoDB Vector Search Index.