来源:互联网 更新时间:2026-08-17 14:24
GraphRAG最近可谓风头正劲,微软开源之后迅速成为技术圈的热点。作为一个在RAG领域实践的开发者,我也第一时间尝试部署,但直接使用OpenAI接口对网络环境有要求。于是,一个更实际的想法冒了出来:能否用本地的开源模型来替换它?
动手实践的过程远比预想的曲折,途中踩了不少“坑”。好在经过一番调试,最终成功地将GraphRAG完美部署到了纯离线环境中。下面就把整个经过和关键步骤梳理出来,既是一次分享,也为日后自己复现留个记录。

GraphRAG的安装本身并不复杂,通过pip即可完成。但需要注意官方要求的Python版本范围是3.10到3.12。
pip install graphrag
安装完成后,需要建立一个工作目录来存放你的知识数据。当前GraphRAG支持txt和csv格式的文件。
mkdir -p ./ragtest/input
接下来,将准备好的数据文件放入/ragtest/input目录下。为了演示,这里使用了一份截取后的中文文本数据。
初始化工作区是第一步,运行以下命令:
python -m graphrag.index --init --root ./ragtest1
执行完毕后,目录结构会发生变化,主要生成了两个关键文件:.env和settings.yaml。
.env文件包含了运行GraphRAG管道所需的环境变量,默认定义了GRAPHRAG_API_KEY,如果使用云端服务需要在此处配置API密钥。settings.yaml文件则是整个管道的配置核心,我们可以通过修改它来适配本地模型。接下来就是改造settings.yaml文件的核心部分。前提条件是,你已经在本地通过Ollama安装好了以下两个模型:
quentinz/bge-large-zh-v1.5:latest gemma2:9b
那么,你可以将以下配置内容复制到settings.yaml中。关键点在于将LLM和Embedding的接口指向本地的Ollama服务。
encoding_model: cl100k_base
skip_workflows: []
llm:
api_key: ollama
type: openai_chat
model: gemma2:9b # 替换为你Ollama中的本地LLM模型
model_supports_json: true
max_tokens: 2048
api_base: http://localhost:11434/v1 # 注意LLM接口路径是/v1
concurrent_requests: 1
parallelization:
stagger: 0.3
async_mode: threaded
embeddings:
async_mode: threaded
llm:
api_key: ollama
type: openai_embedding
model: quentinz/bge-large-zh-v1.5:latest # 替换为你Ollama中的本地Embedding模型
api_base: http://localhost:11434/api # 注意Embedding接口路径是/api
concurrent_requests: 1
# 以下是数据处理、缓存、存储等配置,可根据需要调整
chunks:
size: 300
overlap: 100
group_by_columns: [id]
input:
type: file
file_type: text
base_dir: "input"
file_encoding: utf-8
file_pattern: ".*.txt$"
cache:
type: file
base_dir: "cache"
storage:
type: file
base_dir: "output/${timestamp}/artifacts"
# ... 其他任务(实体提取、社区报告等)的配置保持默认或根据模型能力微调
配置完成后,就可以启动索引构建管道了:
python -m graphrag.index --root ./ragtest1
这个过程会开始构建索引和知识图谱,耗时取决于数据量的大小。
仅完成配置还不够,进行本地查询时可能会遇到错误,因为GraphRAG原生代码在某些环节仍会调用OpenAI的SDK。因此,需要对两处源码进行修改。
找到文件:graphrag/llm/openai/openai_embeddings_llm.py(具体路径在你的Python site-packages目录下)。
用以下内容替换原有代码,其核心是将嵌入生成调用重定向到Ollama的本地接口:
# ... 文件头部版权和导入部分 ...
import ollama
class OpenAIEmbeddingsLLM(BaseLLM[EmbeddingInput, EmbeddingOutput]):
# ... 类定义和初始化部分 ...
async def _execute_llm(
self, input: EmbeddingInput, **kwargs: Unpack[LLMInput]
) -> EmbeddingOutput | None:
args = {
"model": self.configuration.model,
**(kwargs.get("model_parameters") or {}),
}
embedding_list = []
for inp in input:
# 关键修改:调用ollama的embeddings接口,model名称需与settings.yaml中一致
embedding = ollama.embeddings(model="quentinz/bge-large-zh-v1.5:latest", prompt=inp)
embedding_list.append(embedding["embedding"])
return embedding_list
ollama.embeddings调用的model参数,务必与settings.yaml中embeddings.llm.model配置的模型名称完全一致。
找到文件:graphrag/query/llm/oai/embedding.py。
用以下内容替换。这个修改使得在查询阶段,系统会使用LangChain的OllamaEmbeddings来调用本地模型。
# ... 文件头部版权和导入部分 ...
from langchain_community.embeddings import OllamaEmbeddings
class OpenAIEmbedding(BaseTextEmbedding, OpenAILLMImpl):
# ... 类定义和初始化部分 ...
def _embed_with_retry(
self, text: str | tuple, **kwargs: Any
) -> tuple[list[float], int]:
try:
retryer = Retrying(...)
for attempt in retryer:
with attempt:
# 关键修改:使用OllamaEmbeddings生成向量
embedding = (
OllamaEmbeddings(
model=self.model,
).embed_query(text)
or []
)
return (embedding, len(text))
except RetryError as e:
# ... 错误处理 ...
return ([], 0)
else:
return ([], 0)
async def _aembed_with_retry(
self, text: str | tuple, **kwargs: Any
) -> tuple[list[float], int]:
try:
retryer = AsyncRetrying(...)
async for attempt in retryer:
with attempt:
embedding = (
await OllamaEmbeddings(
model=self.model,
).embed_query(text) or []
)
return (embedding, len(text))
except RetryError as e:
# ... 错误处理 ...
return ([], 0)
else:
return ([], 0)
完成这两处源码修改后,主要的“坑”就算跨过去了。
运行以下命令,测试针对具体事实的查询:
python -m graphrag.query --root ./ragtest1 --method local "人卫社的网址"
如果配置和修改都正确,系统会从构建的知识图谱中返回相关的实体和信息。对于较小的演示数据集,它能准确抓取并解析到文本中提及的网址等信息,证明图谱构建是成功的。
运行以下命令,测试更高层次的概括性查询:
python -m graphrag.query --root ./ragtest1 --method global "人卫社的网址"
全局查询会尝试理解问题的意图,并可能从更综合的角度(例如实体描述、上下文关联)返回信息。成功返回结果意味着整个GraphRAG管道——从索引构建到查询检索——已经在本地模型上跑通了。
至此,一个完全基于本地开源模型的GraphRAG系统就部署完成了。大家可以参照这个流程尝试,主要的障碍应该都已扫清。
腾讯ima怎么把微信内容一键导入知识库?
黄金价格不断创新高!黄金稳定币XAU、PAXG市值达11亿美元
CC币价格预测(2026-2035):Canton币今日价格走势+长期价格预测
新浪互联网热点小时报丨2026年07月26日16时_今日实时互联网热点速递
腾讯ima怎么创建共享知识库?
2026鸣潮账号交易安全指南:五大交易平台对比与风险避坑分析
今日比特币暴涨分析:Metaplanet的比特币BTC投资推动股价上涨17%
新浪机器学习热点小时报丨2026年07月25日18时_今日实时机器学习热点速递
新浪人工智能热点小时报丨2026年07月30日18时_今日实时人工智能热点速递
比特币(BTC)核心周期指标复刻历史走势 价格或跌破5.8万美元关键支撑位
蚂蚁庄园今日答案7月21日(今日已更新) 蚂蚁庄园今天正确答案是什么呢
Celestia价格预测2026-2032:TIA币能否引领山寨币上涨行情?历史价格回顾
2026年三角洲行动账号交易指南:5大交易平台对比与安全选购建议
Windy卫星云图怎么看?云层变化识别技巧
TRUMP价格走势与WEPE预售进展解析
kimi提示词专家使用方法新手指南
抖音怎么取消申请退货退款?抖音上取消退货怎么操作
WorkBuddy登录后怎么查看积分?
一加手机如何设置三指长按屏幕局部截图
短剧《仙人跳获透视,古玩玉器我全拿捏》剧情介绍
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc