GraphRAG 踩坑记录

GraphRAG 踩坑记录

  • GraphRAG 0.1.1
  • neo4j-community-3.5.22
  • JDK-8

一些参考资源


1. GraphRAG 构建

一定要安装0.1.1版本,网上的资源包括文档都是这个版本的,我一开始安装的0.5.0版本,和早期版本相比有很大的区别

conda create -n "graphrag" python=3.12
conda activate graphrag
pip install graphrag==0.1.1

然后新建一个graphrag-demo的文件夹作为根目录,在根目录下新建一个叫novel的文件夹作为我们的demo项目目录。在novel路径下再新建一个input目录,存放我们的文档。在这个demo项目中,我们取小说《斗破苍穹》的前20个章节作为知识库中的文档,命名为novel.txt(后缀必须是txt)。此时项目目录结构如下:

graphrag (root)
|____novel
     |____input
          |____novel.txt

执行以下命令对novel项目初始化:

python -m graphrag.index --init --root ./novel

此时novel路径下多出了.envsettings.yaml两个文件。在.env中把GRAPHRAG_API_KEY修改为自己的OPENAI_API_KEY(不加双引号),在settings.yaml修改模型为“gpt-4o"(gpt-4太贵,而gpt-3.5效果又太差)。然后执行以下命令建立索引:

python -m graphrag.index --root ./novel

取《斗破苍穹》前20章节,这一步花费了数分钟,约$1.3

等待索引建立完成后,可以用以下命令测试一下:

python -m graphrag.query --root ./novel --method global "这个故事的主题是什么?"

2. GraphRAG中文优化

参考graphrag-practice-chinese,所需代码文件均可从该仓库下载

1. 修改settings.yaml中的相关配置信息,换用中文大模型,以更好地支持中文(节约费用)

# `settings.yaml` 包含了 GraphRAG pipeline 的设置。我们需要在其中对两个模型的设置进行更改,这里更改了的 LLM 和 Embedding 部分,使用的是:
# 智谱 AI 的 `glm-4-flash` 和 `embedding-3`。
# - 大语言模型:`glm-4-flash`
# - 嵌入模型:`embedding-3`

  ...
encoding_model: cl100k_base
skip_workflows: []
llm:
  api_key: ********************** # your API key
  type: openai_chat # or azure_openai_chat
  model: glm-4-flash
  model_supports_json: false # recommended if this is available for your model.
  max_tokens: 4000
  request_timeout: 180.0
  api_base: https://open.bigmodel.cn/api/paas/v4
  
  ...
  
embeddings:
  ## parallelization: override the global parallelization settings for embeddings
  async_mode: threaded # or asyncio
  # target: required # or all
  llm:
    api_key: ********************** # your API key
    type: openai_embedding # or azure_openai_embedding
    model: embedding-3
    api_base: https://open.bigmodel.cn/api/paas/v4

2. 替换文档拆分策略

官方分块把文档按照 token 数进行切分,对于中文来说容易在 chunk 之间出现乱码,这里参考 Langchain-ChatChat 开源项目,用中文字符数对文本进行切分。

首先安装requirements.txt当中的依赖:

conda activate GraphRAG-pip
pip install -r requirements.txt

然后复制文件 splitter/tokens.py 替换掉 python 依赖库中的 graphrag/index/verbs/text/chunk/strategies/tokens.py 即可

3. 使用中文提示词(chinese-prompt)

初始化后,在 prompts 目录中可以看到 GraphRAG 的四个 prompt 文件的内容都由英文书写,并要求 LLM 使用英文输出。

为了更好地处理中文内容,这里我使用 gpt-4o 模型,将 prompts/ 中的四个 prompt 文件都翻译成中文,并要求 LLM 用中文输出结果。

如果你有更好的想法,想要自定义提示词,同样可以通过修改这四个 prompt 文件来实现,但注意不要修改提示词的文件名,以及不要修改和遗漏了在原提示词中有关输出的关键字段和格式,以免 GraphRAG 无法正常获取它们。

3. Neo4j可视化

这一部分参考大佬在Github上的Notebook:blogs/msft_graphrag/ms_graphrag_retriever.ipynb at master · tomasonjo/blogs 大佬的代码也是基于早期版本的GraphRAG写的,所以如果我们装的是比较新的GraphRAG就会遇到很多问题(我就是在这里把版本从0.5.0改回0.1.1的)

不过大佬用的Neo4j应该是4.x的,而我服务器上跑的是neo4j-community-3.5.22,因此对大佬代码中涉及的一些Cypher语句做了修改,最终将GraphRAG结果导入了Neo4j数据库进行可视化。

TODO

提示优化

<think>好的,我现在需要回答用户关于DeepSeek、Dify和RAG的比较与区别的问题。首先,我需要分别理解这三个概念各自的定义和功能,然后找出它们之间的联系和不同之处。 首先,RAG(Retrieval-Augmented Generation)是一个结合了检索和生成的框架,用于增强生成模型的效果。根据用户提供的引用[1],RAG通过检索外部知识库来辅助生成更准确的回答,适用于需要实时数据或专业知识的场景。这可能涉及到传统RAGGraphRAG等不同变体,但核心是检索与生成的结合。 接下来是Dify,根据引用[2]、[3]、[4]、[5],Dify是一个开源的AI应用开发平台,允许用户构建和部署基于大语言模型的应用,比如智能客服或知识库系统。它支持多种模型集成,包括本地部署的模型如Ollama,并且提供可视化界面,方便管理知识库和数据处理。Dify可能使用RAG作为其技术之一,来增强生成的效果,但Dify本身更偏向于一个开发工具或平台,帮助用户整合各种技术。 然后是DeepSeek,根据引用[3],DeepSeek是一个大语言模型,可能类似于GPT,需要本地部署。用户提到DeepSeek在本地部署后,可以与Dify结合使用来构建个人知识库。这说明DeepSeek是模型层面的,而Dify是应用层面的,两者可以配合使用。 现在需要比较这三者的区别。RAG是技术框架,用于提升生成模型的效果;Dify是应用开发平台,可能集成RAG等技术;DeepSeek是具体的语言模型,属于底层技术。因此,它们的层次不同:DeepSeek属于模型层,RAG是架构层的方法,Dify是应用层的工具。 需要确认引用中的信息是否准确。引用[1]提到RAG的框架,包括GraphRAG,这支持了RAG作为技术框架的描述。引用[2]和[3]说明Dify的功能和部署方式,引用[3]提到DeepSeek的本地部署,结合Dify使用。因此,可以总结出三者的角色和相互关系。 可能用户想知道如何选择这些技术,或者它们在不同应用中的位置。需要明确各自的定位:RAG用于增强生成,Dify用于构建应用,DeepSeek作为模型提供生成能力。例如,使用Dify平台可以集成DeepSeek模型,并应用RAG技术来提升回答质量。 最后,生成相关问题时要围绕它们的区别、应用场景、如何结合使用等方面提问,帮助用户进一步理解。</think>### DeepSeek、Dify与RAG的比较与区别 #### 1. **核心定位** - **DeepSeek**:开源大语言模型(LLM),提供文本生成和理解能力,需本地部署或通过API调用,属于底层模型层技术。例如,支持知识问答、文本生成等任务[^3]。 - **Dify**:开源的AI应用开发平台,专注于构建基于大语言模型的应用(如知识库、智能客服)。提供可视化界面、知识库管理、多模型集成(如DeepSeek、Ollama)等功能,属于应用开发工具层[^2][^5]。 - **RAG**(检索增强生成):一种技术框架,通过结合检索外部知识库和生成模型,提升回答的准确性和专业性,属于架构层技术[^1]。 #### 2. **功能差异** - **DeepSeek** 侧重于模型本身的能力,如文本生成、逻辑推理,需依赖开发工具(如Dify)或自行编码才能落地为实际应用。 - **Dify** 提供全链路开发支持: - 集成多种模型(如DeepSeek、GPT) - 支持RAG技术实现知识库问答 - 提供数据预处理、提示词工程、部署监控等功能[^5]。 - **RAG** 需结合具体模型(如DeepSeek)和工具(如Dify)使用,核心是优化生成效果。例如,在Dify中通过上传文档构建知识库,利用RAG框架实现精准回答[^3]。 #### 3. **协作关系** - **典型应用流程**: DeepSeek(模型) + Dify(平台) + RAG(技术框架) 示例:在Dify平台部署DeepSeek模型,通过RAG调用企业知识库,构建智能客服系统。 #### 4. **适用场景** - **DeepSeek**:需自主训练或调优模型的场景,如定制化文本生成。 - **Dify**:快速开发AI应用(如知识库、对话机器人),无需深入编码。 - **RAG**:需结合实时数据或专业知识的生成任务(如法律咨询、医疗问答)[^1]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值