跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI

Linux 环境安装部署 GraphRAG 并使用 Ollama 本地大模型

Linux 环境下安装 GraphRAG 并配置 Ollama 本地大模型。步骤包括创建 Conda 虚拟环境、安装 GraphRAG 库、初始化项目、下载样本数据、修改 settings.yaml 配置文件以对接 Ollama 服务。测试阶段使用全局查询和本地查询模式验证知识图谱构建效果。无 GPU 服务器可能导致索引创建缓慢或报错,需调整模型大小及文本分块参数。

晚风叙旧发布于 2026/3/29更新于 2026/10/24102 浏览

参考官方文档:https://microsoft.github.io/graphrag/get_started/,本次在 Linux 环境下进行安装测试,环境说明:

# 系统
NAME="openEuler"
VERSION="22.03 (LTS-SP3)"
# conda 版本
conda 23.7.2

服务器上没有 GPU 导致创建索引的时候不是超时就是报错,配置信息反复修改多次才创建成功。

1.环境搭建

1.1 创建虚拟环境

官网的步骤是:create a project space and python virtual environment to install graphrag。

# 1.Create Project Space
mkdir graphrag_quickstart
cd graphrag_quickstart
python -m venv .venv

# 2.Activate Python Virtual Environment - Unix/MacOS
source .venv/bin/activate

# 3.Activate Python Virtual Environment - Windows
.venv\Scripts\activate

我使用的是 Anaconda,部署文件提示 GraphRAG requires Python 3.10 - 3.12。本次使用之前创建的虚拟环境 AutoGenStudio。

# 创建虚拟环境
conda create -n AutoGenStudio python=3.10

1.2 安装

python -m pip install graphrag
# 安装成功的版本 autograd 1.8.0 pypi_0 pypi

1.3 初始化

graphrag init

官网的说明信息已经过时了:

This will create two files, .env and settings.yaml, and a directory input, in the current directory.input Location of text files to process with graphrag..env contains the environment variables required to run the GraphRAG pipeline. If you inspect the file, you'll see a single environment variable defined, GRAPHRAG_API_KEY=<API_KEY>. Replace <API_KEY> with your own OpenAI or Azure API key.settings.yaml contains the settings for the pipeline. You can modify this file to change the settings for the pipeline.

1.4 下载样本文件

# 创建目录
mkdir input
# 下载样本文件
curl https://www.gutenberg.org/cache/epub/24022/pg24022.txt -o ./input/book.txt

样本文件是纯英文的,为测试中文又上传了一本《塔木德》tamude.txt(1.75MB),但是初始化 Graph 数据太慢了,最终使用了一个文件里边只有一句话 张三是小学语文老师,他的哥哥张三丰是中学数学老师,他们都在郑州。。

1.5 设置工作区变量

修改配置文件 settings.yaml里的模型相关信息,原始配置如下:

# 模型配置
models:
  default_chat_model:
    type: chat
    model_provider: openai
    auth_type: api_key # or azure_managed_identity
    api_key: ${GRAPHRAG_API_KEY}
    # set this in the generated .env file, or remove if managed identity
    model: gpt-4-turbo-preview
    # api_base: https://<instance>.openai.azure.com
    # api_version: 2024-05-01-preview
    model_supports_json: true
    # recommended if this is available for your model.
    concurrent_requests: 25
    async_mode: threaded # or asyncio
    retry_strategy: exponential_backoff
    max_retries: 10
    tokens_per_minute: null
    requests_per_minute: null
  default_embedding_model:
    type: embedding
    model_provider: openai
    auth_type: api_key
    api_key: ${GRAPHRAG_API_KEY}
    model: text-embedding-3-small
    # api_base: https://<instance>.openai.azure.com
    # api_version: 2024-05-01-preview
    concurrent_requests: 25
    async_mode: threaded # or asyncio
    retry_strategy: exponential_backoff
    max_retries: 10
    tokens_per_minute: null
    requests_per_minute: null
# 文本分块
chunks:
  size: 1200
  overlap: 100
  group_by_columns: [id]
# 图相关配置
extract_graph:
  model_id: default_chat_model
  prompt: "prompts/extract_graph.txt"
  entity_types: [organization,person,geo,event]
  max_gleanings: 1
extract_graph_nlp:
  text_analyzer:
    extractor_type: regex_english # [regex_english, syntactic_parser, cfg]
  async_mode: threaded # or asyncio

配置使用 Ollama 部署的两个本地模型,本地测试根据 GPU 情况尽量选择小一点儿的模型:

NAME ID SIZE MODIFIED
nomic-embed-text:latest 0a109f422b47 274 MB 9 months ago
qwen2.5:0.5b a8b0c5157701 397 MB 12 months ago
# 确认本地 Ollama 服务可用
curl http://localhost:11434/api/tags

修改配置为:

# 模型配置【本地模型参数配置要低一些】
models:
  default_chat_model:
    type: chat
    model_provider: ollama
    auth_type: api_key
    api_key: dummy_key
    model: qwen2.5:0.5b
    api_base: http://localhost:11434
    model_supports_json: true
    concurrent_requests: 1
    async_mode: threaded
    retry_strategy: exponential_backoff
    max_retries: 1
    request_timeout: 1800
    tokens_per_minute: null
    requests_per_minute: null
  default_embedding_model:
    type: embedding
    model_provider: ollama
    auth_type: api_key
    api_key: dummy_key
    model: nomic-embed-text:latest
    api_base: http://localhost:11434
    concurrent_requests: 1
    request_timeout: 1800
    async_mode: threaded
    retry_strategy: exponential_backoff
    max_retries: 1
    tokens_per_minute: null
    requests_per_minute: null
# 文本分块【本地测试的时候尽量小】
chunks:
  size: 64
  overlap: 8
  group_by_columns: [id]
# 抽取实体
extract_graph:
  extractor_type: nlp
extract_graph_nlp:
  text_analyzer:
    extractor_type: regex_english
  async_mode: asyncio

1.6 创建索引

graphrag index

创建索引的过程中会有日志信息输出 logs/indexing-engine.log 以下报错的原因是配置信息 api_base: http://localhost:11434/v1 是错误的,不能带 /v1。

ERROR - graphrag.language_model.providers.litellm.services.retry.exponential_retry - ExponentialRetry: Request failed, retrying, retries=1, delay=2.0, max_retries=10, exception=litell m.APIConnectionError: OllamaException - 404 page not found
Traceback (most recent call last): ...
httpx.HTTPStatusError: Client error '404 Not Found'for url 'http://localhost:11434/v1/api/generate'
For more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404

创建索引完成:

graphrag.cli.index - All workflows completed successfully.

2.测试

测试的文件内容是 张三是小学语文老师,他的哥哥张三丰是中学数学老师,他们都在郑州。

  • 全局查询
# 问题 1
graphrag query -m global -q"郑州有几个老师?"
# 输出结果
对不起,我无法回答这个问题。根据提供的信息,我们只知道有两个老师在郑州工作,但没有提供具体的数量或详细的信息。如果您有其他关于郑州教师的疑问,请告诉我,我会尽力帮助您解答。

# 问题 2
graphrag query -m local -q"郑州的这两个老师什么关系?"
# 输出结果
### Response: 这两个老师是同一家公司的同事,共同工作在同一个城市。他们都是小学语文教师,从事相同的职业和地点。他们都是在中国的学校里教书的老师,拥有相同的地理位置。他们都是中国的小学语文教师,具有相似的专业背景。 --- ### Analyst Reports (Descending Order of Importance)
#### Analyst 1 **Importance Score: 100** 这两个老师是同一家公司的同事,共同工作在同一个城市。 **Importance Score: 85** 他们都是小学语文教师,从事相同的职业和地点。 **Importance Score: 75** 他们都是在中国的学校里教书的老师,拥有相同的地理位置。 **Importance Score: 60** 他们都是中国的小学语文教师,具有相似的专业背景。 --- ### Explanation 根据分析师报告的内容,我们可以得出以下结论: 1. **同事关系**:这两个老师是同一家公司的同事,共同工作在同一个城市。 2. **职业和地点**:他们都是小学语文教师,从事相同的职业和地点。这意味着他们在同一所学校或教育机构中工作。 3. **地理位置**:他们都是在中国的学校里教书的老师,拥有相同的地理位置。这表明他们的工作地点是相同的。 4. **专业背景**:他们都是中国的小学语文教师,具有相似的专业背景。 这些信息共同说明了这两个老师之间的关系和他们在教育领域的相同之处。通过分析,我们可以得出结论,这两个老师在职业、地点和专业领域上都是一致的,因此他们是同事关系。
  • 本地查询
# 问题 1
graphrag query -m local -q"郑州有几个老师?"
# 输出结果
根据提供的数据,郑州市目前没有具体的教师数量信息。但是我们可以从其他相关数据中推断出一些可能的情况。首先,我们查看了'Entities'表中的记录,发现有两所学校的信息:一个是'ZHANG SONG FENG',另一个是'ZHANG SONG'。这两个实体分别对应的是'张三丰'和'张三'的描述。这表明可能存在多个老师在郑州工作,但具体数量无法从现有数据中得知。此外,'Relationships'表中的记录显示了两对教师之间的关系:一对是'ZHANG SONG FENG'和'ZHANG SONG',另一对是'ZHANG SONG FENG'和'张三'。这些信息表明可能存在多个老师在郑州工作,但具体数量也无法从现有数据中得知。综上所述,根据提供的数据,郑州市目前没有具体的教师数量信息。但是,我们可以推测可能有多个老师在郑州工作,但由于缺乏确切的数字,我们无法给出一个准确的答案。

# 问题 2
graphrag query -m local -q"郑州的这两个老师什么关系?"
# 输出结果
在提供的数据中,我们无法直接找到关于'郑州的两个老师'之间具体关系的信息。然而,我们可以从其他相关数据中推断出一些可能的关系。根据'Entities'表中的信息,'ZHANG SONG FENG'和'ZHANG SONG'都是描述为'小学语文老师'的人。这表明这两个老师都从事教育工作,并且他们都在同一个城市(郑州)工作。因此,我们可以推测: - **Zhao Song Feng 和 Zhao Song 是同一个人**:因为他们的职业是相同的(小学语文教师),并且他们都位于同一个城市(郑州)。这种职业和地理位置上的重合可能意味着他们是同一人。 - **Zhao Song Feng 和 Zhao Song 有共同的教育背景**:他们都是在同一个城市工作的语文老师,这表明他们在教育领域有着相似的经历或知识基础。综上所述,'郑州的这两个老师'可能是同一个人,即'Zhao Song Feng'。他们的职业和地理位置上的重合可能意味着他们是同一人。

3.总结

  1. 官网的部署流程并非最新的
  2. 没有 GPU 的服务器初始化及问答的效果都不好
  3. 其他原因(模型小、知识图谱索引质量低、文本质量差)

目录

  1. 系统
  2. conda 版本
  3. 1.环境搭建
  4. 1.1 创建虚拟环境
  5. 1.Create Project Space
  6. 2.Activate Python Virtual Environment - Unix/MacOS
  7. 3.Activate Python Virtual Environment - Windows
  8. 创建虚拟环境
  9. 1.2 安装
  10. 安装成功的版本 autograd 1.8.0 pypi_0 pypi
  11. 1.3 初始化
  12. 1.4 下载样本文件
  13. 创建目录
  14. 下载样本文件
  15. 1.5 设置工作区变量
  16. 模型配置
  17. 文本分块
  18. 图相关配置
  19. 确认本地 Ollama 服务可用
  20. 模型配置【本地模型参数配置要低一些】
  21. 文本分块【本地测试的时候尽量小】
  22. 抽取实体
  23. 1.6 创建索引
  24. 2.测试
  25. 问题 1
  26. 输出结果
  27. 问题 2
  28. 输出结果
  29. Response: 这两个老师是同一家公司的同事,共同工作在同一个城市。他们都是小学语文教师,从事相同的职业和地点。他们都是在中国的学校里教书的老师,拥有相同的地理位置。他们都是中国的小学语文教师,具有相似的专业背景。 --- ### Analyst Reports (Descending Order of Importance)
  30. Analyst 1 Importance Score: 100 这两个老师是同一家公司的同事,共同工作在同一个城市。 Importance Score: 85 他们都是小学语文教师,从事相同的职业和地点。 Importance Score: 75 他们都是在中国的学校里教书的老师,拥有相同的地理位置。 Importance Score: 60 他们都是中国的小学语文教师,具有相似的专业背景。 --- ### Explanation 根据分析师报告的内容,我们可以得出以下结论: 1. 同事关系:这两个老师是同一家公司的同事,共同工作在同一个城市。 2. 职业和地点:他们都是小学语文教师,从事相同的职业和地点。这意味着他们在同一所学校或教育机构中工作。 3. 地理位置:他们都是在中国的学校里教书的老师,拥有相同的地理位置。这表明他们的工作地点是相同的。 4. 专业背景:他们都是中国的小学语文教师,具有相似的专业背景。 这些信息共同说明了这两个老师之间的关系和他们在教育领域的相同之处。通过分析,我们可以得出结论,这两个老师在职业、地点和专业领域上都是一致的,因此他们是同事关系。
  31. 问题 1
  32. 输出结果
  33. 问题 2
  34. 输出结果
  35. 3.总结

更多推荐文章

查看全部
  • VS Code 远程连接服务器后 GitHub Copilot 无法使用
  • 基于 Llama-Factory 构建弹幕互动机器人
  • Spring Boot 后端开发核心注解详解
  • Ollama 与 Open-WebUI 本地运行大模型
  • 基于大模型的学术论文生成工具功能介绍
  • 使用 Python 和 AI 构建智能害虫识别助手
  • 解决 Google Scholar 自动化查询限制问题
  • AI 专利翻译大模型技术解析,支持全球百种语言互译
  • DeepSeek 与通义万相结合实现 AI 视频生成实战
  • 深入理解数据结构中的时间与空间复杂度
  • 基于 Leaflet-Trackplayer 实现高速轨迹 WebGIS 可视化实战
  • 机器学习核心算法实战笔记:从 KNN 到集成学习
  • 无人机时变风场下跟随策略路径模拟与 Matlab 仿真
  • 基于高阶 CBF 的端到端无人机高速避障:7.5m/s 丛林穿越与 RL 安全突破
  • 机器学习:逻辑回归算法原理与实现
  • AI 智能体 Skills 驱动开发:从使用到项目实战详解
  • 微信小程序 WebView 与内嵌网页双向通信实战
  • AI 产品经理职业发展指南:七步掌握核心技能与未来趋势
  • 从猎豹到机器人:脊柱仿生学如何重塑四足机器人的运动极限
  • 微分动态规划 DDP 与迭代线性二次型调节器 iLQR 理论推导

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online