通过小学课文《三打白骨精》的故事学习微软的 GraphRAG

0. 引言

最近,微软发布的 GraphRAG 项目备受关注,今天抽时间简单学习了一下。

这种项目如果只看文档和代码会显得枯燥且难以理解,尤其是文档和示例全是英文,理解起来更加费时。

于是,我通过小学课文《三打白骨精》的故事,从部署效果上整体体验了一下。

1. 安装 GraphRAG

pip install graphrag

2. 运行索引器

现在我们需要设置一个数据项目和一些初始配置。

首先,准备一个示例数据集:

mkdir -p ./ragtest/input

现在让我们将《三打白骨精》的故事写入到 book.txt 文件中。

cat << EOF > ./ragtest/input/book.txt
人教版《三打白骨精》课文

一天,唐僧师徒四人来到一座高山前,只见山势险峻,峰岩重叠。走了一天的路,唐僧感觉饥饿,就让孙悟空去找些吃的。悟空跳上云端,四处观看,见南山有熟透的山桃,便要摘些来给师父充饥。

悟空刚走,唐僧就被妖怪白骨精发现了。白骨精不胜欢喜,自言自语道:“造化!造化!都说吃了唐僧肉可以长生不老。今天机会来了!”它正要上前,见唐僧身边有猪八戒和沙僧保护,就摇身变作美貌的村姑,拎了一罐斋饭,径直走到唐僧面前,说是特地来请他们用斋的。唐僧一再推辞,八戒嘴谗,夺过罐子就要动口。

正在这时,悟空从南山摘桃回来,睁开火眼金睛一看,认出村姑是个妖精,举起金箍棒当头就打。唐僧连忙扯住悟空。悟空说:“它是个妖精,是来骗 你的。”说着,就朝妖精劈脸一棒。妖精扔下一具假尸首,化作一缕轻烟逃走了。

唐僧责怪悟空无故伤人性命。悟空打开罐子,从里面跳出来几只青蛙、癞蛤蟆,根本没有什么斋饭。唐僧这才有些相信那村姑是妖怪。

师徒们吃了桃子继续赶路。山坡上闪出一个年满八旬的老妇人,手拄着弯头竹杖,一步一声地哭着走来。悟空见又是那妖精变的,也不说话,当头就是一棒。白骨精见棍棒落下,又用法术脱了身,丢了具假尸首在路上。

唐僧一见,惊得从马上摔下来,坐在地上,不由分说,一口气念了二十遍紧箍咒。悟空头痛难忍,连忙哀告。唐僧喝道:“你为何不听劝说,把人打死 一个,又打死一个?”“它是妖精!”唐僧非常生气:“胡说!哪有那么多妖精!你无心向善,有意作恶,你去吧!”悟空说:“师父若真不要我,就请退下我头上的金箍儿!”唐僧大惊:“我只学过紧箍咒,却没有什么松箍咒儿!”悟空说:“若无松箍咒,你还带我走吧。”唐僧无奈:“我再饶你这一次,但不可再行凶了。”悟空忙点头答应,扶着唐僧上了马,继续前行。

白骨精不甘心就这样让唐僧走了,又变成一个白发老公公,假装来找他的妻子和女儿。悟空把金箍棒藏在身边,走上前迎着妖精,笑道:“你瞒得了别 人,瞒不过我!我认得你这个妖精。”悟空抽出金箍棒,怕师父念咒语,没有立刻动手,暗中叫来众神,吩咐道:“这妖精三番两次来蒙骗我师父,这一次定要打死它。你们在半空中作证。”众神都在云端看着。悟空抡起金箍棒,一棒打死了妖精。妖精化作一堆骷髅,脊梁上有一行字,写着白骨夫人。
EOF

运行以下命令 graphrag.index --init 初始化您的工作区。

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

这将创建两个文件:.envsettings.yaml./ragtest 目录中。

.env 包含运行 GraphRAG 流水线所需的环境变量。如果您检查该文件,您会看到一个定义的环境变量 GRAPHRAG_API_KEY=<API_KEY>。这是 OpenAI API 端点的 API 密钥。您可以将其替换为自己的 API 密钥。
settings.yaml 包含流水线的设置。您可以修改此文件以更改流水线的设置。

下面示例是我修改后的配置:

llm:
  api_key: sk-123456
  type: openai_chat # or azure_openai_chat
  model: gpt-4
  model_supports_json: true # recommended if this is available for your model.
  api_base: http://192.168.31.12:8000/v1

embeddings:
  async_mode: threaded # or asyncio
  llm:
    api_key: sk-123456
    type: openai_embedding # or azure_openai_embedding
    model: xiaobu-embedding-v2
    api_base: http://192.168.31.12:7965/v1

最后,我们将运行流水线!

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

此过程需要一些时间来运行。这取决于输入数据的大小、您使用的模型以及使用的文本块大小(这些可以在 .env 文件中配置)。流水线完成后,您应该会看到一个名为 ./ragtest/output/<timestamp>/artifacts 的新文件夹,其中包含一系列 Parquet 文件。

3. 使用查询引擎

现在让我们使用此数据集来提出一些问题。

以下是使用全局搜索提出高级问题的示例:

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

示例输出结果:

## 故事的主题分析

在对数据集的深入分析中,我们发现了两个核心主题,它们构成了故事的骨架和灵魂。

### 智慧较量与保护责任

主要主题之一是悟空与白骨精之间的智慧较量,以及保护与责任的探讨 [Data: Reports (1)]. 这一主题不仅展现了角色间的智力对决,还深入挖掘了保护他人及承担社会责任的重要性。它强调了在面对邪恶势力时,正义和智慧如何成为克服困难的关键。

### 团队协作与共同目标

另一个重要主题是师徒四人共同的目标和团队协作精神 [Data: Reports (0)]. 在旅途中,他们面对各种挑战,但通过相互支持和合作,展现了强大的团队力量。这一主题强调了在追求共同目标时,团结一致、互相帮助的重要性。

综上所述,故事不仅是一场智慧与勇气的较量,也是一次关于团队精神和责任担当的深刻探讨。

以下是使用本地搜索对特定角色提出更具体问题的示例:

python -m graphrag.query \
--root ./ragtest \
--method local \
"齐天大圣是谁?他主要的关系是什么?"

示例输出结果:

齐天大圣是中国古代神话传说中的一个著名角色,最广为人知的是《西游记》中孙悟空的形象。在故事中,孙悟空原本是一只石猴,在花果山修炼成仙,因机缘巧合获得了金箍棒,并练就了七十二变、筋斗云等神通广大之术。

齐天大圣的主要关系如下:

1. 师徒关系:孙悟空拜唐僧为师,与猪八戒、沙僧一起保护唐僧西天取经。在《西游记》中,他们四人共同经历了九九八十一难,最终取得真经,功 德圆满。

2. 朋友关系:孙悟空与牛魔王、蛟魔王等妖王结拜兄弟,建立了深厚的友谊。此外,在取经路上,他还结识了许多神仙和妖怪,如观音菩萨、太上老 君、红孩儿等。

3. 敌对关系:孙悟空在《西游记》中与许多敌人交手,包括白骨精、蜘蛛精、黄袍怪、金角大王、银角大王等。其中最著名的对手是牛魔王和六耳猕 猴,他们曾多次与孙悟空发生冲突。

4. 爱情关系:在《西游记》中,孙悟空并没有明确的爱情故事。但在其他版本的传说中,他与玉兔精、紫霞仙子等女性角色有过情感纠葛。
5. 师徒关系:孙悟空拜菩提祖师为师,在方寸山斜月三星洞学习了七十二变和筋斗云等神通广大之术。

总之,齐天大圣孙悟空在《西游记》中是一个充满智慧、勇敢、忠诚的角色,他与许多神仙、妖怪建立了复杂的关系网络。

从输出结果来看,大语言模型不仅仅使用我们提供的文档进行回答,还使用了其在预训练过程中学习的知识。这是一个需要在后续解决的问题。

4. (可选)cache 结果有什么

运行索引器的过程过程中,会在 ./ragtest/cache 目录下面生成下面结果,我们逐个看看下面文件中的内容是什么。

├── community_reporting
│   ├── create_community_report-chat-v2-956040a7658c8d45f7041c07a4fae5c1
│   └── create_community_report-chat-v2-9b132180c5c4a3ad025df9d38f4f1a38
├── entity_extraction
│   ├── chat-0756a10ada2cb8cfb1ac08fc29927f84
│   ├── chat-65db4e68d2a77d14a3ff6d664974026f
│   ├── chat-9f0f380ad2d3816ca6a6d55f31b33859
│   ├── chat-d0e03195ccf6401d8716fdcbd110377e
│   ├── chat-d829d663c6dae4e2965d4719a51c489c
│   ├── chat-df746e68ab4eff462a2671034d225f45
│   └── chat-ea0f3a21ed599a484e1a31d8fb5efca8
├── summarize_descriptions
│   ├── summarize-chat-v2-0a0c1cc4b8be6e99f7f6174e41410346
│   ├── summarize-chat-v2-3762741166688b1829eba6e791624116
│   ├── summarize-chat-v2-39
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值