试了下LightRAG
本地化 rag 中的翘楚,效果非常不错,搭配 ollama 。
如图随便找个文档,示例是从裁判文书下载的文档
pip install lightrag-hku
32768
后,服务端 ollama 的OLLAMA_NUM_PARALLEL
并发数就不要配置了,如果配置则这个参数乘以对应的数值就会显存爆炸import os
import logging
from lightrag import LightRAG, QueryParam
from lightrag.llm import ollama_model_complete, ollama_embedding
from lightrag.utils import EmbeddingFunc
# 设置日志级别
logging.basicConfig(format="%(levelname)s:%(message)s", level=logging.INFO)
# 创建工作目录
WORKING_DIR = "./my_rag_project"
os.makedirs(WORKING_DIR, exist_ok=True)
# 初始化 LightRAG,使用 Ollama 模型
rag = LightRAG(
working_dir=WORKING_DIR,
llm_model_func=ollama_model_complete,
llm_model_name="qwen2:7b", # 使用 qwen 模型
llm_model_max_async=4, # 最大并发请求数
llm_model_max_token_size=32768,
llm_model_kwargs={
"host": "http://localhost:11434", # Ollama 服务地址
"options": {"num_ctx": 32768} # 上下文窗口大小
},
embedding_func=EmbeddingFunc(
embedding_dim=768,
max_token_size=8192,
func=lambda texts: ollama_embedding(
texts,
embed_model="nomic-embed-text", # 使用 nomic-embed-text 作为嵌入模型
host="http://localhost:11434"
),
),
)
# 插入文档并进行查询
documents = [
"人工智能(AI)是计算机科学的一个分支,致力于开发能模拟人类智能的系统。",
"机器学习是 AI 的核心技术之一,它使计算机能够从数中学习和改进。",
"深度学习是机器学习的一个子领域,使用多层神经网络处理复杂问题。"
]
# 插入文档
rag.insert(documents)
# 使用不同的检索模式进行查询
modes = ["naive", "local", "global", "hybrid"]
query = "请解释 AI 、机器学习和深度学习之间的关系"
for mode in modes:
print(f"\n 使用{mode}模式的查询结果:")
result = rag.query(query, param=QueryParam(mode=mode))
print(result)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.