{"product_id":"multi-document-agent-truy-vấn-nhiều-tai-liệu-với-llamaindex","title":"Multi-Document Agent — Truy vấn nhiều tài liệu với LlamaIndex","description":"\n\u003cp\u003eKhi bạn cần trả lời câu hỏi span nhiều tài liệu khác nhau — \"So sánh chính sách của Q1 và Q2\", \"Tìm tất cả đề cập về khách hàng X trong các báo cáo\" — một query engine đơn lẻ không đủ. \u003cstrong\u003eMulti-Document Agent\u003c\/strong\u003e của LlamaIndex giải quyết vấn đề này bằng cách tạo một agent thông minh có thể điều phối nhiều indexes cùng lúc.\u003c\/p\u003e\n\n\u003cp\u003eKết hợp với \u003cstrong\u003eClaude\u003c\/strong\u003e, Multi-Document Agent có thể tổng hợp, so sánh, và phân tích thông tin từ nhiều nguồn — đưa ra câu trả lời toàn diện mà không cần người dùng biết data nằm ở đâu.\u003c\/p\u003e\n\n\u003ch2\u003eKiến trúc Multi-Document Agent\u003c\/h2\u003e\n\n\u003cp\u003eHệ thống bao gồm ba lớp:\u003c\/p\u003e\n\n\u003col\u003e\n  \u003cli\u003e\n\u003cstrong\u003eDocument Agents\u003c\/strong\u003e — Mỗi tài liệu có agent riêng với index và query engine\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eTop-level Agent\u003c\/strong\u003e — Agent điều phối, quyết định document nào cần query\u003c\/li\u003e\n  \u003cli\u003e\n\u003cstrong\u003eTool Registry\u003c\/strong\u003e — Danh sách tất cả document agents dưới dạng tools\u003c\/li\u003e\n\u003c\/ol\u003e\n\n\u003ch2\u003eCài đặt\u003c\/h2\u003e\n\n\u003cpre\u003e\u003ccode\u003epip install llama-index llama-index-llms-anthropic llama-index-embeddings-voyageai\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003cpre\u003e\u003ccode\u003eimport os\nfrom llama_index.core import Settings, VectorStoreIndex, SummaryIndex, Document\nfrom llama_index.llms.anthropic import Anthropic\nfrom llama_index.embeddings.voyageai import VoyageEmbedding\nfrom llama_index.core.tools import QueryEngineTool\nfrom llama_index.core.agent import ReActAgent\n\nSettings.llm = Anthropic(model=\"claude-opus-4-5\", max_tokens=2048)\nSettings.embed_model = VoyageEmbedding(\n    model_name=\"voyage-3\",\n    voyage_api_key=os.environ.get(\"VOYAGE_API_KEY\")\n)\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eBước 1: Chuẩn bị nhiều tài liệu\u003c\/h2\u003e\n\n\u003cpre\u003e\u003ccode\u003e# Giả lập nhiều báo cáo từ các phòng ban khác nhau\ndocuments_data = {\n    \"bao_cao_kinh_doanh_q1\": {\n        \"title\": \"Báo cáo Kinh doanh Q1 2024\",\n        \"text\": \"\"\"Doanh thu Q1 2024: 5.2 tỷ đồng, tăng 23% so với Q1 2023.\n        Sản phẩm bán chạy nhất: Enterprise Plan (45% doanh thu).\n        Khách hàng mới: 234 doanh nghiệp. Churn rate: 2.1%.\n        Thị trường trọng điểm: TP.HCM (40%), Hà Nội (35%), Đà Nẵng (15%).\n        Đội sale đạt 118% KPI. Pipeline Q2 ước tính 8.5 tỷ đồng.\"\"\"\n    },\n    \"bao_cao_ky_thuat_q1\": {\n        \"title\": \"Báo cáo Kỹ thuật Q1 2024\",\n        \"text\": \"\"\"Uptime hệ thống Q1: 99.95%. Tổng incidents: 3 (2 minor, 1 major).\n        Major incident ngày 15\/2: downtime 45 phút do lỗi database migration.\n        API response time trung bình: 145ms (giảm từ 210ms Q4 2023).\n        Deploy 47 features mới. Giảm 30% tech debt.\n        Team mở rộng từ 12 lên 18 engineers. Đang tuyển thêm 5 người.\"\"\"\n    },\n    \"bao_cao_nhan_su_q1\": {\n        \"title\": \"Báo cáo Nhân sự Q1 2024\",\n        \"text\": \"\"\"Tổng nhân viên Q1: 87 người (tăng 15 so với Q4 2023).\n        Tuyển mới: 18 người (Sales: 5, Engineering: 8, Marketing: 3, Support: 2).\n        Nghỉ việc: 3 người. Turnover rate: 3.4% (tốt hơn benchmark ngành 5%).\n        Chi phí nhân sự: 1.8 tỷ\/tháng. Satisfaction score: 8.2\/10.\n        Training hours trung bình: 12 giờ\/người\/tháng.\"\"\"\n    },\n    \"bao_cao_marketing_q1\": {\n        \"title\": \"Báo cáo Marketing Q1 2024\",\n        \"text\": \"\"\"Leads generated Q1: 1,240 (tăng 56% so với Q1 2023).\n        CAC (Customer Acquisition Cost): 12.5 triệu đồng.\n        Conversion rate: 18.9% (lead to customer).\n        Top channels: Google Ads (35%), Content Marketing (28%), Referral (22%).\n        Blog traffic: 450K visits\/tháng. Newsletter subscribers: 28,000.\n        Events tổ chức: 3 webinars (tổng 890 attendees).\"\"\"\n    }\n}\n\n# Chuyển thành LlamaIndex Documents\ndocuments = {\n    key: Document(\n        text=data[\"text\"],\n        metadata={\"title\": data[\"title\"], \"doc_id\": key, \"quarter\": \"Q1_2024\"}\n    )\n    for key, data in documents_data.items()\n}\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eBước 2: Tạo Document Agents\u003c\/h2\u003e\n\n\u003cp\u003eMỗi tài liệu có hai loại index: VectorIndex (cho câu hỏi cụ thể) và SummaryIndex (cho tóm tắt):\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003edef build_document_agent(doc_id, document):\n    \"\"\"Xây dựng agent cho một tài liệu cụ thể.\"\"\"\n\n    # Vector index cho semantic search\n    vector_index = VectorStoreIndex.from_documents([document])\n    vector_engine = vector_index.as_query_engine(similarity_top_k=3)\n\n    # Summary index cho tóm tắt toàn bộ tài liệu\n    summary_index = SummaryIndex.from_documents([document])\n    summary_engine = summary_index.as_query_engine(response_mode=\"tree_summarize\")\n\n    doc_title = document.metadata[\"title\"]\n\n    # Tools cho document agent này\n    doc_tools = [\n        QueryEngineTool.from_defaults(\n            query_engine=vector_engine,\n            name=f\"search_{doc_id}\",\n            description=f\"Tìm kiếm thông tin cụ thể trong: {doc_title}. \"\n                       f\"Dùng cho câu hỏi về số liệu, sự kiện, chi tiết.\"\n        ),\n        QueryEngineTool.from_defaults(\n            query_engine=summary_engine,\n            name=f\"summarize_{doc_id}\",\n            description=f\"Tóm tắt toàn bộ nội dung: {doc_title}. \"\n                       f\"Dùng khi cần tổng quan.\"\n        )\n    ]\n\n    # Document-level agent\n    doc_agent = ReActAgent.from_tools(\n        tools=doc_tools,\n        llm=Settings.llm,\n        verbose=False\n    )\n\n    return doc_agent\n\n# Xây dựng tất cả document agents\nprint(\"Building document agents...\")\ndoc_agents = {}\nfor doc_id, document in documents.items():\n    doc_agents[doc_id] = build_document_agent(doc_id, document)\n    print(f\"  Built agent for: {documents_data[doc_id]['title']}\")\n\nprint(f\"\nTotal document agents: {len(doc_agents)}\")\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eBước 3: Tạo Top-level Agent\u003c\/h2\u003e\n\n\u003cp\u003eTop-level agent điều phối tất cả document agents, quyết định tài liệu nào cần truy vấn:\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003efrom llama_index.core.tools import FunctionTool\n\ndef create_top_level_tools(doc_agents, documents_data):\n    \"\"\"Tạo tools cho top-level agent từ document agents.\"\"\"\n    top_tools = []\n\n    for doc_id, doc_agent in doc_agents.items():\n        doc_title = documents_data[doc_id][\"title\"]\n\n        def make_query_fn(agent):\n            def query_document(question: str) -\u0026gt; str:\n                \"\"\"Query document agent và trả về kết quả.\"\"\"\n                return agent.chat(question).response\n            return query_document\n\n        # Tạo tool gọi document agent\n        tool = FunctionTool.from_defaults(\n            fn=make_query_fn(doc_agent),\n            name=f\"query_{doc_id}\",\n            description=f\"Truy vấn thông tin từ: {doc_title}. \"\n                       f\"Chứa dữ liệu về Q1 2024.\"\n        )\n        top_tools.append(tool)\n\n    return top_tools\n\ntop_tools = create_top_level_tools(doc_agents, documents_data)\n\n# Top-level orchestrator agent\ntop_agent = ReActAgent.from_tools(\n    tools=top_tools,\n    llm=Settings.llm,\n    verbose=True,\n    system_prompt=\"\"\"Bạn là AI analyst thông minh. Bạn có thể truy vấn nhiều báo cáo khác nhau.\n    Khi trả lời câu hỏi phức tạp, hãy:\n    1. Xác định báo cáo nào cần tra cứu\n    2. Query từng báo cáo liên quan\n    3. Tổng hợp thông tin thành câu trả lời toàn diện\n    Luôn trả lời bằng tiếng Việt.\"\"\"\n)\n\nprint(\"Top-level agent ready!\")\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eBước 4: Truy vấn Multi-Document\u003c\/h2\u003e\n\n\u003cpre\u003e\u003ccode\u003e# Câu hỏi đơn giản - 1 document\nprint(\"=== Q1: Đơn giản ===\")\nresponse = top_agent.chat(\"Doanh thu Q1 2024 là bao nhiêu?\")\nprint(f\"Trả lời: {response.response}\n\")\n\n# Câu hỏi phức tạp - nhiều documents\nprint(\"=== Q2: Cross-document ===\")\nresponse = top_agent.chat(\n    \"So sánh tình hình kinh doanh và kỹ thuật Q1 2024. \"\n    \"Có điểm nào đáng chú ý không?\"\n)\nprint(f\"Trả lời: {response.response}\n\")\n\n# Câu hỏi phân tích tổng hợp\nprint(\"=== Q3: Phân tích tổng hợp ===\")\nresponse = top_agent.chat(\n    \"Chi phí nhân sự Q1 là bao nhiêu? Tương quan với doanh thu như thế nào?\"\n)\nprint(f\"Trả lời: {response.response}\")\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eKết quả mẫu\u003c\/h2\u003e\n\n\u003cp\u003eKhi hỏi \"So sánh doanh thu và chi phí marketing Q1:\", agent sẽ:\u003c\/p\u003e\n\n\u003col\u003e\n  \u003cli\u003eQuery báo cáo kinh doanh: \"Doanh thu Q1 là 5.2 tỷ\"\u003c\/li\u003e\n  \u003cli\u003eQuery báo cáo marketing: \"CAC = 12.5 triệu, 234 khách hàng mới\"\u003c\/li\u003e\n  \u003cli\u003eTính toán: \"Chi phí marketing ≈ 2.9 tỷ (234 x 12.5tr), chiếm ~56% doanh thu\"\u003c\/li\u003e\n  \u003cli\u003eTổng hợp câu trả lời đầy đủ với insights\u003c\/li\u003e\n\u003c\/ol\u003e\n\n\u003ch2\u003eOptimization: Parallel Query\u003c\/h2\u003e\n\n\u003cp\u003eVới nhiều documents, query tuần tự chậm. LlamaIndex hỗ trợ query song song:\u003c\/p\u003e\n\n\u003cpre\u003e\u003ccode\u003eimport asyncio\nfrom llama_index.core.agent import ReActAgent\n\nasync def parallel_query(doc_agents, question):\n    \"\"\"Query tất cả document agents song song.\"\"\"\n    tasks = []\n    for doc_id, agent in doc_agents.items():\n        # Async chat\n        tasks.append(agent.achat(question))\n\n    results = await asyncio.gather(*tasks, return_exceptions=True)\n\n    summaries = {}\n    for (doc_id, _), result in zip(doc_agents.items(), results):\n        if not isinstance(result, Exception):\n            summaries[doc_id] = result.response\n\n    return summaries\n\n# Lấy overview tất cả documents song song\nloop = asyncio.get_event_loop()\nsummaries = loop.run_until_complete(\n    parallel_query(doc_agents, \"Tóm tắt highlights Q1 2024\")\n)\u003c\/code\u003e\u003c\/pre\u003e\n\n\u003ch2\u003eKết luận\u003c\/h2\u003e\n\n\u003cp\u003eMulti-Document Agent giải quyết một trong những thách thức lớn nhất của RAG: làm thế nào để AI trả lời câu hỏi cần thông tin từ nhiều nguồn khác nhau. Với LlamaIndex + Claude, bạn có thể xây dựng hệ thống phân tích dữ liệu thông minh có thể tổng hợp báo cáo, so sánh tài liệu, và đưa ra insights cross-document.\u003c\/p\u003e\n\n\u003cp\u003eTiếp theo, khám phá \u003ca href=\"\/en\/collections\/nang-cao\"\u003eRouter Query Engine\u003c\/a\u003e để tự động định tuyến câu hỏi đến index phù hợp nhất, hoặc đọc về \u003ca href=\"\/en\/collections\/nang-cao\"\u003eSubQuestion Engine\u003c\/a\u003e để phân tách câu hỏi phức tạp.\u003c\/p\u003e\n\n\u003chr\u003e\n\u003ch3\u003eBài viết liên quan\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"\/en\/products\/multi-modal-rag-v%E1%BB%9Bi-llamaindex-claude-vision\"\u003eMulti-Modal RAG với LlamaIndex + Claude Vision\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/en\/products\/contextual-retrieval-nang-c%E1%BA%A5p-rag-v%E1%BB%9Bi-embeddings-ng%E1%BB%AF-c%E1%BA%A3nh\"\u003eContextual Retrieval — Nâng cấp RAG với embeddings ngữ cảnh\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/en\/products\/llamaindex-claude-rag-pipeline-c%C6%A1-b%E1%BA%A3n\"\u003eLlamaIndex + Claude — RAG pipeline cơ bản\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/en\/products\/autonomous-coding-agent-ai-t%E1%BB%B1-vi%E1%BA%BFt-code-t%E1%BB%AB-spec\"\u003eAutonomous Coding Agent — AI tự viết code từ spec\u003c\/a\u003e\u003c\/li\u003e\n\u003cli\u003e\u003ca href=\"\/en\/products\/building-effective-agents-v%E1%BB%9Bi-claude-h%C6%B0%E1%BB%9Bng-d%E1%BA%ABn-ki%E1%BA%BFn-truc\"\u003eBuilding Effective Agents với Claude — Hướng dẫn kiến trúc\u003c\/a\u003e\u003c\/li\u003e\n\u003c\/ul\u003e","brand":"Minh Tuấn","offers":[{"title":"Default Title","offer_id":47721905029332,"sku":null,"price":0.0,"currency_code":"VND","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0821\/0264\/9044\/files\/multi-document-agent-truy-v_n-nhi_u-tai-li_u-v_i-llamaindex_6dae2a86-4911-4e0f-9556-6621289598d6.jpg?v=1774521798","url":"https:\/\/claude.vn\/en\/products\/multi-document-agent-truy-v%e1%ba%a5n-nhi%e1%bb%81u-tai-li%e1%bb%87u-v%e1%bb%9bi-llamaindex","provider":"CLAUDE.VN","version":"1.0","type":"link"}