Lightrag1.2.6代码解读
项目 目的 极简版
得到 文本块,处理为 实体 和 关系
a. 文本块(chunks)
- 文本内容:“Alice and Bob are collaborating on quantum computing research.”
- 来源id:doc-1
b. 实体(entities)
| 实体名称 | 类型 | 描述 | 来源 |
|---|---|---|---|
| Alice | person | 量子物理领域的研究员 | doc-1 |
| Bob | person | 数学家 | doc-1 |
| Quantum Computing | technology | 利用量子力学现象进行计算的技术 | doc-1 |
c. 关系(relationships)
| 关系编号 | 起点(src_id) | 终点(tgt_id) | 描述 | 关键词 | 权重 | 来源 |
|---|---|---|---|---|---|---|
| 1 | Alice | Bob | Alice和Bob是研究伙伴 | collaboration, research | 1.0 | doc-1 |
| 2 | Alice | Quantum Computing | Alice从事量子计算研究 | research, expertise | 1.0 | doc-1 |
| 3 | Bob | Quantum Computing | Bob研究量子计算的应用 | research, application | 1.0 | doc-1 |
项目结构
边看边更新
LightRAG-main |__examples | |__lightrag_ollama_demo.py | |__lightrag | |__ kg | | |__ json_kv_impl.py | | | |__ __init__.py | |__ base.py | |__ lightrag.py | |__ utils.py | | |__setup.py | |
main()开始 (lightrag_ollama_demo.py)
main()内容
| |
初始化: rag = asyncio.run(initialize_rag())
进入initialize_rag(), (lightrag_ollama_demo.py)
| |
rag = LightRAG(………..)
(lightrag_ollama_demo.py)
初始化 LightRAG的对象 各个属性,主要是llm_model_X和embedding_func,两个模型均由本例ollama提供
显式传入的参数是__init__里的,它还有__post_init__。
| |
await rag.initialize_storages()
(lightrag_ollama_demo.py)
每个storages的初始化都类似,其父类都时base里的Base…Storage
kg文件夹里的 各种_impl里定义具体的子类(如JsonDocStatusStorage) 继承了父类
| |
__post_init__
(lightrag.py)
由于使用了@dataclass,故__init__自动实现了,而要内部再init则用__post_init__
| |
这里初始化了各个组件的,调用各种模块
就拿self.full_docs举例而言,它是 BaseKVStorage的实例化,该实例的初始化,由key_string_value_json_storage_cls 类 传入 namespace和embedding_func返回
initialize_pipeline_status()
(shared_storage.py)
初始化pipeline的各种状态值
| |
插入: rag.insert(f.read())
rag.insert(f.read())
-> self.ainsert(input)
-> self.apipeline_enqueue_documents
-> self.apipeline_process_enqueue_documents
进入rag.insert内
rag.insert(f.read()) -> 转到 self.ainsert(input),input即 f.read()(字符串),
| |
进入self.ainsert内
两个内容,一个是 添加 文档状态信息,另一个是 处理文档
| |