链载Ai

标题: LightRAG:简单快速的检索增强生成框架快速上手 [打印本页]

作者: 链载Ai    时间: 4 小时前
标题: LightRAG:简单快速的检索增强生成框架快速上手

LightRAG 是一款轻量级的 检索增强生成(RAG, Retrieval-Augmented Generation)框架,旨在通过优化检索和生成流程,降低传统 RAG 系统的部署成本与资源消耗,同时保持高效的问答和内容生成能力。它适用于需要快速响应、低算力支持的场景,如智能客服、知识问答、轻量化 AI 助手等。

安装

安装 LightRAG 核心模块

安装 LightRAG 服务端

LightRAG 服务端提供 Web 界面和 API 支持,便于文档索引、知识图谱探索和简单的 RAG 查询。同时兼容 Ollama 接口,可模拟为 Ollama 聊天模型,方便 Open WebUI 等 AI 聊天机器人接入。

更多关于 LightRAG 服务端的信息,请参考LightRAG Server。

快速开始

查询

使用以下 Python 代码初始化 LightRAG 并执行查询:

importos 
importasyncio
fromlightragimportLightRAG,QueryParam
fromlightrag.llm.openaiimportgpt_4o_mini_complete,gpt_4o_complete,openai_embed
fromlightrag.kg.shared_storageimportinitialize_pipeline_status
fromlightrag.utilsimportsetup_logger

setup_logger("lightrag",level="INFO")

asyncdefinitialize_rag():
rag=LightRAG(
working_dir="your/path",
embedding_func=openai_embed,
llm_model_func=gpt_4o_mini_complete
)

awaitrag.initialize_storages()
awaitinitialize_pipeline_status()

returnrag

defmain():
# 初始化 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()

查询参数(QueryParam)

classQueryParam:
modeiteral["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 模型函数(可针对不同模式使用不同模型)"""
...

top_k 的默认值可通过环境变量TOP_K修改。

LLM 与嵌入模型注入

LightRAG 需要注入 LLM 和嵌入模型的调用方法以完成文档索引和查询任务。

使用 OpenAI 风格 API

asyncdefllm_model_func(
prompt,system_prompt=None,history_messages=[],keyword_extraction=False,**kwargs
)->str:
returnawaitopenai_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
)

asyncdefembedding_func(texts:list[str])->np.ndarray:
returnawaitopenai_embed(
texts,
model="solar-embedding-1-large-query",
api_key=os.getenv("UPSTAGE_API_KEY"),
base_url="https://api.upstage.ai/v1/solar"
)

asyncdefinitialize_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
)
)

awaitrag.initialize_storages()
awaitinitialize_pipeline_status()

returnrag

使用 Hugging Face 模型

参考lightrag_hf_demo.py

# 初始化 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=lambdatexts: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 模型

概述:需先拉取模型(如文本生成模型和嵌入模型nomic-embed-text):

# 初始化 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=lambdatextsllama_embed(
texts,
embed_model="nomic-embed-text"
)
),
)

增加上下文长度

  1. 拉取模型:ollama pull qwen2
  2. 导出模型文件:ollama show --modelfile qwen2 > Modelfile
  3. 添加参数:PARAMETER num_ctx 32768
  4. 创建修改后的模型:ollama create -f Modelfile qwen2m





欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5