from <rag_framework> import (
VectorStoreIndex,
SimpleDirectoryReader,
Settings
)
from <rag_framework>.agent import ReActAgent
from <rag_framework>.tools import QueryEngineTool, FunctionTool
# 1. 配置(伪代码)
Settings.llm = LLM(model="<MODEL>")
Settings.embed_model = "<EMBED_MODEL>"
# 2. 加载文档
documents = SimpleDirectoryReader(
input_dir="./documents",
recursive=True,
required_exts=[".pdf", ".docx", ".xlsx", ".txt"]
).load_data()
# 3. 创建索引
index = VectorStoreIndex.from_documents(documents)
# 4. 定义工具
@FunctionTool.from_defaults
def summarize_document(doc_name: str) -> str:
"""生成指定文档的摘要"""
# 过滤特定文档
doc_index = VectorStoreIndex.from_documents(
[d for d in documents if doc_name in d.metadata.get("file_name", "")]
)
engine = doc_index.as_query_engine(response_mode="tree_summarize")
return engine.query("请总结这个文档的主要内容").response
@FunctionTool.from_defaults
def compare_documents(doc1: str, doc2: str, aspect: str) -> str:
"""对比两个文档在某个方面的差异"""
query = f"对比 {doc1} 和 {doc2} 在 {aspect} 方面的差异"
return index.as_query_engine().query(query).response
# 5. 创建智能体
tools = [
QueryEngineTool.from_defaults(
query_engine=index.as_query_engine(),
name="document_search",
description="搜索文档内容,回答关于文档的问题"
),
summarize_document,
compare_documents
]
agent = ReActAgent.from_tools(
tools=tools,
verbose=True,
max_iterations=10
)
# 6. 使用
response = agent.chat(
"帮我总结一下合同文档,并对比与上一版的主要变化"
)