从零到一:基于Ollama与国产模型构建轻量级知识图谱RAG系统

张开发
2026/4/6 5:40:14 15 分钟阅读

分享文章

从零到一:基于Ollama与国产模型构建轻量级知识图谱RAG系统
1. 环境准备与工具选型第一次接触知识图谱RAG系统时我和很多初学者一样被各种术语绕晕了。直到发现Ollama这个神器才真正体会到本地部署大模型的乐趣。这次我们选择的组合是Qwen2.5语言模型bge-large-zh-v1.5嵌入模型这对国产CP在中文场景下的表现让我惊喜。先说说硬件门槛我的测试机是台5年前的游戏本GTX1660显卡16G内存就能流畅运行。如果你用MacBookM1芯片以上机型表现会更佳。软件环境建议直接用conda管理conda create -n LightRAG python3.10 conda activate LightRAG这里有个坑要注意python版本必须用3.9或3.103.11以上版本会遇到依赖冲突。安装LightRAG时推荐源码安装能随时查看最新修复git clone https://github.com/HKUDS/LightRAG cd LightRAG pip install -e .模型部署方面Ollama的安装比想象中简单。下载官方安装包后终端输入ollama pull qwen2.5就能自动下载模型。我实测在100M宽带下7B参数的Qwen2.5模型20分钟就能下载完成。2. 数据准备与模型适配官方示例用的英文数据对中文场景参考有限我改用《射雕英雄传》txt文本做测试。建议文本编码保存为UTF-8格式否则读取时会出现乱码。文本预处理时发现个细节段落之间最好用两个换行符分隔这样chunk分割更准确。关键步骤是模型参数适配这里栽过跟头。bge-large-zh-v1.5的max_token_size是512而源码默认4000会导致运行时崩溃。需要修改两处关键配置# lightrag_ollama_demo.py中embedding_func参数 embedding_funcEmbeddingFunc( embedding_dim1024, # bge专用维度 max_token_size512, # 必须与模型匹配 funclambda texts: ollama_embedding( texts, embed_modelquentinz/bge-large-zh-v1.5, hosthttp://localhost:11434 ) ) # base.py中的QueryParam类 max_token_for_text_unit: int 512 max_token_for_global_context: int 512 max_token_for_local_context: int 512实测发现chunk_token_size设为300效果最佳既能保证上下文连贯性又不会超出模型限制。如果处理专业文献建议调整到200-250区间。3. 中文场景实战调优直接跑英文示例时一切正常换成中文数据却提取不出实体。排查发现是prompt模板没本地化在lightrag/core.py中找到原始prompt我将其改造成中文版本ENTITY_EXTRACTION_TEMPLATE 请从以下文本中提取实体及其关系 {text} 输出要求 1. 识别所有重要实体 2. 用中文描述实体间关系 3. 格式[实体1][关系][实体2]另一个性能优化点是调整ollama的num_ctx参数。Qwen2.5支持8k上下文但实际使用时设为4096更稳定llm_model_kwargs{ host: http://localhost:11434, options: {num_ctx: 4096} # 平衡性能与内存消耗 }对于长文本处理建议启用流式输出。在query方法中添加streamTrue参数能实时看到生成过程避免长时间等待的焦虑。4. 可视化与问题排查Neo4j桌面版是可视化神器社区版完全够用。配置时注意修改bolt连接地址为localhost:7687账号密码默认为neo4j/neo4j。首次登录会要求修改密码记得在代码中同步更新# 在LightRAG初始化时添加 graph_db_config{ uri: bolt://localhost:7687, auth: (neo4j, your_new_password) }遇到实体识别不准时可以尝试以下方案在insert前对文本进行分句处理调整chunk_overlap_token_size到50-100区间为LLM添加示例few-shot prompt内存不足的问题很常见我的解决方法是在ollama启动时添加OLLAMA_MAX_LOADED_MODELS2环境变量修改config.json中的num_thread为物理核心数减一启用量化版本的qwen2.5模型5. 性能优化技巧经过两周的调优测试总结出几个提升效率的实战技巧批量插入优化处理超过1MB的大文件时改用批处理模式with open(novel.txt) as f: for paragraph in f.read().split(\n\n): # 按空行分段落 rag.insert(paragraph, batch_size10)缓存机制LightRAG默认会缓存中间结果但有时需要手动清理rm -rf ./dickens/.cache # 删除缓存目录混合搜索策略不同查询模式适合不同场景人物关系查询用global模式具体事件检索用local模式综合性问题用hybrid模式监控资源占用开个终端窗口运行ollama serve ollama.log 21输出日志能直观看到内存波动。这套系统现在已经成为我的个人知识管理利器从技术文档到小说分析都能胜任。最近正在尝试接入PDF解析模块下一步计划实现自动摘要生成功能。

更多文章