如何运行 GraphRAG Unified Search 演示应用对比多个索引的搜索结果?
【免费下载链接】graphragA modular graph-based Retrieval-Augmented Generation (RAG) system项目地址: https://gitcode.com/GitHub_Trending/gr/graphrag
如果你已经用 GraphRAG 对多个数据集建好了索引,想在一个界面上选定不同索引、发送同一个问题,并并排查看 Basic RAG、Local、Global、Drift 四种搜索方式给出的答案与引用,就可以运行 GraphRAG 仓库自带的unified-search-app演示应用。它是一个 Streamlit 应用,通过listing.json目录文件加载多个 GraphRAG 索引(本地目录或 Blob 存储均可)。适用前提:环境中有 Python 3.11 和 UV;该应用没有发布到 PyPI,必须 clone GraphRAG 仓库并在unified-search-app目录下运行。应用首页如下(文档配图):
准备多个索引:目录结构与 listing.json
Unified Search 依赖一个“项目目录 + 索引清单”的约定:先按 docs/get_started.md 的 Getting Started 流程用 GraphRAG 对每个数据集完成索引,再按下面的结构组织所有索引。结构来自 unified-search-app/README.md:
projects_folder - listing.json - dataset_1 - settings.yaml - .env (optional if you declare your environment variables elsewhere) - output - prompts - dataset_2 - settings.yaml - .env (optional if you declare your environment variables elsewhere) - output - prompts其中output是 GraphRAG 索引产出的 parquet 表(应用读取的表名在 data_config.py 中写死为output/communities、output/community_reports等),settings.yaml是该数据集索引时的配置,prompts存放提示词文件。每个数据集目录内的其他文件夹会被忽略,不影响应用运行;只有listing.json中声明的数据集才会被使用。
在projects_folder根目录创建listing.json,每个数据集一条记录,字段含义:key用于标识数据集,path指向数据集目录,name是展示名,description是描述,community_level是要过滤的社区层级(整数)。README 中的示例:
[{ "key": "christmas-demo", "path": "christmas", "name": "A Christmas Carol", "description": "Getting Started index of the novel A Christmas Carol", "community_level": 2 }]实际使用时把各字段替换为你自己的数据集标识、目录和描述即可,path需与上一节目录结构中dataset_1、dataset_2的位置对应。
设置数据源:本地文件夹或 Blob Storage
应用通过环境变量决定从哪里读取listing.json和各数据集文件(见 default.py),二选一:
主路径:本地数据文件夹。用绝对路径设置DATA_ROOT:
export DATA_ROOT=/absolute/path/to/projects_folder将/absolute/path/to/projects_folder替换为你实际的projects_folder绝对路径——README 明确要求使用绝对路径。
可选分支:Azure Blob Storage。在 Blob 存储账户中创建data容器并按同样的目录结构上传,然后执行az login并选择一个对该存储有读权限的账户,再设置:
export BLOB_ACCOUNT_NAME=<blob_storage_name> export BLOB_CONTAINER_NAME=<blob_container_with_projects> # 可选,默认使用 data 容器两个变量都要替换为你自己的值。如果DATA_ROOT和BLOB_ACCOUNT_NAME都未设置,应用会在启动阶段抛出ValueError: Either DATA_ROOT or BLOB_ACCOUNT_NAME environment variable must be set.,这是判断环境变量是否生效的直接依据。
安装依赖并启动应用
进入unified-search-app目录后,按 README 建议始终使用虚拟环境,然后安装依赖并启动:
uv venv --python 3.11 source .venv/bin/activate uv sync uv run poe startuv venv --python 3.11/source .venv/bin/activate:创建并激活 Python 3.11 的虚拟环境;uv sync:安装应用的全部依赖(依赖清单见 pyproject.toml,固定了streamlit==1.43.0等版本);uv run poe start:启动应用。poe 任务start实际执行的是streamlit run app/home_page.py,即 home_page.py。
如果需要容器方式运行,仓库提供了 Dockerfile:它基于mcr.microsoft.com/oryx/python:3.11镜像,安装 uv 后执行uv sync --no-install-project,EXPOSE 8501,入口为uv run poe start_prod。start_prod对应streamlit run app/home_page.py --server.port=8501 --server.address=0.0.0.0,用于对外部地址提供访问。
在界面中提问并对比搜索结果
应用启动后是左右两个面板。
左侧配置面板(可收起)包含三项:
- Datasets:
listing.json中声明的所有数据集都会出现在下拉框中,切换它即可在多个索引之间对比; - Number of suggested questions:设置建议问题数量;
- Search options:选择本次要参与对比的搜索方式,至少必须启用一种,否则界面会提示
Please select at least one search option from the sidebar.。
右侧面板自上而下是:所选数据集的名称与描述、"Suggest some questions" 按钮(该功能使用 global search 分析数据集,生成上面设置数量的建议问题,点击问题左侧的复选框即可选中)、"Ask a question to compare the results" 提问输入框,以及 Search 和 Community Explorer 两个标签页。点击 "Suggest some questions" 后的界面(文档配图):
在输入框输入问题(或选中一条建议问题)后,启用的搜索方式会各自在一列中输出答案,答案下方展示对应的引用。四种搜索方式在界面上的标注是:
| 搜索方式 | Answer context |
|---|---|
| Basic RAG | Fixed number of text chunks of raw documents |
| Local Search | Graph index query results with relevant document text chunks |
| Global Search | AI-generated network reports covering all input documents |
| Drift Search | Includes community information |
Community Explorer 标签页分为 Community Reports List 和 Selected Report 两栏,用于浏览所选数据集的社区报告(文档配图):
结果判断与限制
- 启动配置是否正确:数据集出现在左侧下拉框,且右上方显示该数据集的 name 和 description,说明
listing.json、path和DATA_ROOT(或 Blob 配置)都指向了正确位置;下拉框为空时先检查环境变量和listing.json所在目录。 - 任务完成标志:输入问题后,启用的每种搜索方式都输出了带引用的答案,即可在同一页面横向对比多个索引、多种搜索方式的结果。
- 限制:README 明确声明该应用仅为 demo/experimental 用途、不受支持,相关 issue 可能不会被处理;它只使用
listing.json中声明的数据集,未声明的目录一律忽略;数据集目录中的settings.yaml、output、prompts是应用读取索引所需的部分,缺表时 Blob 数据源只会记录Table ... does not exist警告并返回空表(见 blob_source.py),本地数据源则打印Table ... does not exist。
如果对比过程中发现某类搜索结果不符合预期,下一步可以回到 docs/get_started.md 检查对应数据集的索引配置,或用 docs/query/overview.md 中介绍的搜索方式单独运行对应查询。
【免费下载链接】graphragA modular graph-based Retrieval-Augmented Generation (RAG) system项目地址: https://gitcode.com/GitHub_Trending/gr/graphrag
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考