微信扫码
添加专属顾问
 
                        我要投稿
探索高效问答与内容生成的新选择,LightRAG框架让你轻松驾驭RAG技术。 核心内容: 1. LightRAG框架的轻量化设计及优势 2. 快速部署与安装指南 3. 实际应用示例与环境配置
 
                                cd LightRAG  
pip install -e .  
pip install lightrag-hku  
pip install "lightrag-hku[api]"  
# 按需创建 Python 虚拟环境  
# 安装 API 支持的可编辑模式  
pip install -e ".[api]"  
examples 目录。export OPENAI_API_KEY="sk-..."。curl https://raw.githubusercontent.com/gusye1234/nano-graphrag/main/tests/mock_data.txt > ./book.txt  
import os  
import asyncio  
from lightrag import LightRAG, QueryParam  
from lightrag.llm.openai import gpt_4o_mini_complete, gpt_4o_complete, openai_embed  
from lightrag.kg.shared_storage import initialize_pipeline_status  
from lightrag.utils import setup_logger  
setup_logger("lightrag", level="INFO")  
async def initialize_rag():  
    rag = LightRAG(  
        working_dir="your/path",  
        embedding_func=openai_embed,  
        llm_model_func=gpt_4o_mini_complete  
    )  
    await rag.initialize_storages()  
    await initialize_pipeline_status()  
    return rag  
def main():  
    # 初始化 RAG 实例  
    rag = asyncio.run(initialize_rag())  
    # 插入文本  
    rag.insert("Your text")  
    # 选择检索模式:朴素搜索、本地搜索、全局搜索、混合搜索、知识图谱与向量混合搜索  
    mode = "mix"  
    rag.query(  
        "What are the top themes in this story?",  
        param=QueryParam(mode=mode)  
    )  
if __name__ == "__main__":  
    main()  
class QueryParam:  
    mode: Literal["local", "global", "hybrid", "naive", "mix"] = "global"  
    """检索模式:  
    - "local": 聚焦上下文相关信息  
    - "global": 利用全局知识  
    - "hybrid": 结合本地与全局检索  
    - "naive": 基础搜索(无高级技术)  
    - "mix": 融合知识图谱与向量检索(支持结构化 KG 和非结构化向量,通过 HTML img 标签处理图像内容,通过 top_k 控制检索深度)  
    """  
    only_need_context: bool = False  
    """若为 True,仅返回检索到的上下文,不生成回答"""  
    response_type: str = "Multiple Paragraphs"  
    """响应格式(如:"多个段落"、"单个段落"、"项目符号")"""  
    top_k: int = 60  
    """检索的 top 数量(本地模式为实体数,全局模式为关系数)"""  
    max_token_for_text_unit: int = 4000  
    """每个检索文本块的最大 token 数"""  
    max_token_for_global_context: int = 4000  
    """全局检索中关系描述的最大 token 数"""  
    max_token_for_local_context: int = 4000  
    """本地检索中实体描述的最大 token 数"""  
    ids: list[str] | None = None  # 仅支持 PG Vector 数据库  
    """过滤 RAG 的 ID 列表"""  
    model_func: Callable[..., object] | None = None  
    """可选:覆盖本次查询的 LLM 模型函数(可针对不同模式使用不同模型)"""  
    ...  
使用 OpenAI 风格 API
async def llm_model_func(  
    prompt, system_prompt=None, history_messages=[], keyword_extraction=False, **kwargs  
) -> str:  
    return await openai_complete_if_cache(  
        "solar-mini",  
        prompt,  
        system_prompt=system_prompt,  
        history_messages=history_messages,  
        api_key=os.getenv("UPSTAGE_API_KEY"),  
        base_url="https://api.upstage.ai/v1/solar",  
        **kwargs  
    )  
async def embedding_func(texts: list[str]) -> np.ndarray:  
    return await openai_embed(  
        texts,  
        model="solar-embedding-1-large-query",  
        api_key=os.getenv("UPSTAGE_API_KEY"),  
        base_url="https://api.upstage.ai/v1/solar"  
    )  
async def initialize_rag():  
    rag = LightRAG(  
        working_dir=WORKING_DIR,  
        llm_model_func=llm_model_func,  
        embedding_func=EmbeddingFunc(  
            embedding_dim=4096,  
            max_token_size=8192,  
            func=embedding_func  
        )  
    )  
    await rag.initialize_storages()  
    await initialize_pipeline_status()  
    return rag  
使用 Hugging Face 模型
# 初始化 LightRAG 并使用 Hugging Face 模型  
rag = LightRAG(  
    working_dir=WORKING_DIR,  
    llm_model_func=hf_model_complete,  # Hugging Face 文本生成模型  
    llm_model_name='meta-llama/Llama-3.1-8B-Instruct',  # Hugging Face 模型名称  
    # 使用 Hugging Face 嵌入函数  
    embedding_func=EmbeddingFunc(  
        embedding_dim=384,  
        max_token_size=5000,  
        func=lambda texts: hf_embed(  
            texts,  
            tokenizer=AutoTokenizer.from_pretrained("sentence-transformers/all-MiniLM-L6-v2"),  
            embed_model=AutoModel.from_pretrained("sentence-transformers/all-MiniLM-L6-v2")  
        )  
    ),  
)  
使用 Ollama 模型
# 初始化 LightRAG 并使用 Ollama 模型  
rag = LightRAG(  
    working_dir=WORKING_DIR,  
    llm_model_func=ollama_model_complete,  # Ollama 文本生成模型  
    llm_model_name='your_model_name',  # 模型名称  
    # 使用 Ollama 嵌入函数  
    embedding_func=EmbeddingFunc(  
        embedding_dim=768,  
        max_token_size=8192,  
        func=lambda texts: ollama_embed(  
            texts,  
            embed_model="nomic-embed-text"  
        )  
    ),  
)  
ollama pull qwen2ollama show --modelfile qwen2 > ModelfilePARAMETER num_ctx 32768ollama create -f Modelfile qwen2mrag = LightRAG(  
    ...  
    llm_model_kwargs={"options": {"num_ctx": 32768}},  
    ...  
)  
集成 LlamaIndex
# 使用 LlamaIndex 直接访问 OpenAI  
import asyncio  
from lightrag import LightRAG  
from lightrag.llm.llama_index_impl import llama_index_complete_if_cache, llama_index_embed  
from llama_index.embeddings.openai import OpenAIEmbedding  
from llama_index.llms.openai import OpenAI  
from lightrag.kg.shared_storage import initialize_pipeline_status  
from lightrag.utils import setup_logger  
setup_logger("lightrag", level="INFO")  
async def initialize_rag():  
    rag = LightRAG(  
        working_dir="your/path",  
        llm_model_func=llama_index_complete_if_cache,  # LlamaIndex 兼容的生成函数  
        embedding_func=EmbeddingFunc(  
            embedding_dim=1536,  
            max_token_size=8192,  
            func=lambda texts: llama_index_embed(texts, embed_model=embed_model)  
        ),  
    )  
    await rag.initialize_storages()  
    await initialize_pipeline_status()  
    return rag  
def main():  
    rag = asyncio.run(initialize_rag())  
    with open("./book.txt", "r", encoding="utf-8") as f:  
        rag.insert(f.read())  
    # 执行不同模式的查询...  
if __name__ == "__main__":  
    main()  
from lightrag.utils import TokenTracker  
# 方法 1:上下文管理器(推荐)  
with TokenTracker() as tracker:  
    result1 = await llm_model_func("问题 1")  
    result2 = await llm_model_func("问题 2")  
print("总 token 消耗:", tracker.get_usage())  
# 方法 2:手动记录  
tracker = TokenTracker()  
tracker.reset()  
rag.insert()  
rag.query("问题 1", param=QueryParam(mode="naive"))  
print("插入和查询的 token 消耗:", tracker.get_usage())  
reset()conversation_history = [  
    {"role": "user", "content": "主角对圣诞节的态度如何?"},  
    {"role": "assistant", "content": "故事开头, Ebenezer Scrooge 对圣诞节持消极态度..."},  
    {"role": "user", "content": "他的态度如何转变?"}  
]  
query_param = QueryParam(  
    mode="mix",  # 支持所有模式  
    conversation_history=conversation_history,  
    history_turns=3  # 考虑最近 3 轮对话  
)  
response = rag.query("这种性格转变的原因是什么?", param=query_param)  
custom_prompt = """  
你是环境科学专家,提供详细且结构化的回答,并包含示例。  
---对话历史---  
{history}  
---知识库---  
{context_data}  
---响应规则---  
目标格式和长度:{response_type}  
"""  
response_custom = rag.query(  
    "可再生能源的主要优势是什么?",  
    param=QueryParam(mode="hybrid"),  
    system_prompt=custom_prompt  
)  
rag.query_with_separate_keyword_extraction(  
    query="解释万有引力定律",  
    prompt="为学习物理的高中生提供详细解释",  
    param=QueryParam(mode="hybrid")  
)  
基础插入
# 单文本插入  
rag.insert("文本内容")  
批量插入
# 批量插入多文本  
rag.insert(["文本 1", "文本 2", ...])  
# 自定义批量大小  
rag = LightRAG(addon_params={"insert_batch_size": 4})  
rag.insert(["文本 1", "文本 2", ...])  # 每批处理 4 个文档(默认 10)  
带 ID 插入
# 单文本带 ID  
rag.insert("文本 1", ids=["ID_FOR_TEXT1"])  
# 多文本带 ID 列表(需与文本数量一致)  
rag.insert(["文本 1", "文本 2"], ids=["ID1", "ID2"])  
流水线插入
# 异步入队和处理文档(适合后台增量处理)  
await rag.apipeline_enqueue_documents(input_data)  
await rag.apipeline_process_enqueue_documents()  
多文件类型支持
import textract  
file_path = "文档.pdf"  
text_content = textract.process(file_path).decode("utf-8")  
rag.insert(text_content)  
插入自定义知识图谱
custom_kg = {  
    "chunks": [{"content": "文本块", "source_id": "doc-1"}],  
    "entities": [{"entity_name": "实体", "description": "描述"}],  
    "relationships": [{"src_id": "A", "tgt_id": "B", "description": "关系"}]  
}  
rag.insert_custom_kg(custom_kg)  
引用功能
# 插入带文件路径的文档(支持溯源)  
documents = ["内容 1", "内容 2"]  
file_paths = ["path1.txt", "path2.txt"]  
rag.insert(documents, file_paths=file_paths)  
使用 Neo4J 存储
export NEO4J_URI="neo4j://localhost:7687"  
export NEO4J_USERNAME="neo4j"  
export NEO4J_PASSWORD="password"  
async def initialize_rag():  
    rag = LightRAG(  
        working_dir=WORKING_DIR,  
        llm_model_func=gpt_4o_mini_complete,  
        graph_storage="Neo4JStorage",  # 覆盖默认图存储(NetworkX)  
    )  
    await rag.initialize_storages()  
    return rag  
使用 PostgreSQL 存储
# 示例:使用 PostgreSQL + AGE  
rag = LightRAG(  
    graph_storage="AGEStorage",  
    vector_storage="PGVectorStorage",  
    kv_storage="PGKVStorage",  
    ...  
)  
使用 Faiss 存储
# 安装依赖:pip install faiss-cpu(或 faiss-gpu)  
async def embedding_func(texts: list[str]) -> np.ndarray:  
    from sentence_transformers import SentenceTransformer  
    model = SentenceTransformer('all-MiniLM-L6-v2')  
    return model.encode(texts, convert_to_numpy=True)  
rag = LightRAG(  
    vector_storage="FaissVectorDBStorage",  
    vector_db_storage_cls_kwargs={"cosine_better_than_threshold": 0.3},  
    embedding_func=EmbeddingFunc(embedding_dim=384, func=embedding_func),  
    ...  
)  
# 按实体名删除  
rag.delete_by_entity("实体名称")  
# 按文档 ID 删除(级联删除关联的实体和关系)  
rag.delete_by_doc_id("doc_id")  
创建实体和关系
# 创建实体  
entity = rag.create_entity("Google", {"description": "科技公司", "entity_type": "company"})  
# 创建关系  
relation = rag.create_relation("Google", "Gmail", {"description": "开发邮箱服务"})  
编辑实体和关系
# 更新实体  
updated_entity = rag.edit_entity("Google", {"description": "Alphabet 子公司"})  
# 重命名实体(自动迁移关系)  
renamed_entity = rag.edit_entity("Gmail", {"entity_name": "Google Mail"})  
# 更新关系  
updated_relation = rag.edit_relation("Google", "Google Mail", {"description": "维护邮箱服务"})  
# 导出为 CSV(默认格式)  
rag.export_data("knowledge_graph.csv")  
# 指定格式(Excel/Markdown/Text)  
rag.export_data("output.xlsx", file_format="excel")  
# 包含向量数据  
rag.export_data("complete_data.csv", include_vector_data=True)  
# 基础合并  
rag.merge_entities(  
    source_entities=["AI", "人工智能", "机器学习"],  
    target_entity="人工智能技术"  
)  
# 自定义合并策略  
rag.merge_entities(  
    source_entities=["John", "John Doe"],  
    target_entity="John Smith",  
    merge_strategy={"description": "拼接", "entity_type": "保留首个"}  
)  
# 清除所有缓存  
await rag.aclear_cache()  
# 清除指定模式(如本地搜索)  
await rag.aclear_cache(modes=["local"])  
# 同步版本  
rag.clear_cache(modes=["global"])  
| 参数 | 类型 | 说明 | 默认值 | 
|---|---|---|---|
| lightrag_cache+时间戳 | |||
| JsonKVStorage | |||
| NanoVectorDBStorage | |||
| NetworkXStorage | |||
| JsonDocStatusStorage | |||
| openai_embed | |||
| gpt_4o_mini_complete | |||
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
 
            2025-09-15
2025-09-02
2025-08-05
2025-08-18
2025-08-25
2025-08-25
2025-08-25
2025-09-03
2025-08-20
2025-09-08
2025-10-04
2025-09-30
2025-09-10
2025-09-10
2025-09-03
2025-08-28
2025-08-25
2025-08-20