【RAGLite+ollama】解决RAGLite连接Ollama embedding模型问题
简单的介绍
取至官方README https://github.com/superlinear-ai/raglite
RAGLite 是一个使用 PostgreSQL 或 SQLite 进行检索增强生成 (RAG) 的 Python 工具包。
🧠 选择任何具有LiteLLM的LLM提供商,包括本地llama-cpp-python模型
💾 选择PostgreSQL或SQLite作为关键字和矢量搜索数据库
🥇 选择任何带有重新排序器的重新排序器,包括默认的多语言FlashRank
🔍 数据库原生关键字和向量搜索的混合搜索( tsvector + pgvector , FTS5 + sqlite-vec 1 )
功能很强大我这里就不再二次进行翻译了,直接看原文即可,我主要是用了他的向量检索和全文检索的功能
解决RAGLite连接Ollama embedding模型问题
之前在研究sqllite的向量数据库的时候偶然发现的超好用的RAG python库,目前该工具支持PQ和SQLlite数据库,网上介绍很多了,大部分都是翻译至原RAGlite GitHub的ReadMe,这里主要是解决一下Ollama和RAGlite的向量模型连接问题,由于这个框架还很新所以网上找不到任何关于这个框架连接ollama的向量模型连接方式。
GayHub链接:
https://github.com/superlinear-ai/raglite
RagLite连接ollama 向量模型方法
原版readme中提供的方法:
# Example 'local' config with a SQLite database and a llama.cpp LLM:
my_config = RAGLiteConfig(
db_url="sqlite:///raglite.db",
llm="llama-cpp-python/bartowski/Meta-Llama-3.1-8B-Instruct-GGUF/*Q4_K_M.gguf@8192",
embedder="llama-cpp-python/lm-kit/bge-m3-gguf/*F16.gguf@1024", # A context size of 1024 tokens is the sweet spot for bge-m3.
)
让RAGlite支持连接Ollama 向量模型的方法
首先需要在你的python文件的开头加入下面环境设置
os.environ["OLLAMA_API_BASE"] = f"http://{SERVER_HOST}:11434"
server_host 是你服务器的地址如果是本地就是localhost
my_config =RAGLiteConfig(
db_url=f"sqlite:///./{RAG_DB_PATH}",
llm="ollama/{聊天的模型}",
embedder=f"ollama/{向量模型全名}" , # 你的ollama向量模型
chunk_max_size = 300, # 原配置默认是1440,中文向量模型通常是512上下文
embedder_sentence_window_size = 1 #配置逻辑块,原配置默认3个
)
这里有几点需要注意,调用ollama 的话必须添加 ollama/ 在模型的前面
同时,请注意你使用的中文向量模型的上下文长度,不知道的话去hugging Face找你用的向量模型的上下文长度,我使用的embed模型上下文长度是512,如果这里长度超过向量模型最大长度 ollama会报500错误 (这破报错查了我五个多小时没发现
你可能会遇到的BUG和解决思路
前提背景:
RagLite是基于liteLLM的项目,本体是支持liteLLM的所有模型的连接方式,但是liteLLM对于ollama的向量模型有一个Bug,我们需要先解决这个Bug然后才能正常使用
BUG1、修复liteLLM ollama 向量模型引用Bug
RagLite这个工具是基于LiteLLM这个工具进行ollama连接,在我现在使用的LiteLLM版本中[Version: 1.56.5] litellm有一个ollama向量模型的bug,如下图所示
解决方法
首先定位到你环境中的 liteLLM 的这个文件
[llms/ollama/completion/handler.py]
然后修改第55行,去掉await
response_json = await response.json()
修改为
response_json = response.json()
即可解决问题。
PS:在我编写这篇文章的时候,liteLLM官方更新了新版,据说解决了这个问题,如果新版没碰到这个问题,就不要动了
BUG2、修改RagLite解决异步请求处理逻辑问题
在我们修改后,启动RagLite会出现一个RuntimeError: Event loop is closed 的报错。
解决方法
1.给RAGlite官方提issues,官方更新的超级快,两个月贡献值都是绿的,代码仙人
2、给LiteLLM官方提issues,这是一个上万星的项目,超多大佬
临时解决方法
PS:这里我提供一个曲线救国的方法
在你调用RAGlite的代码的之前加入下面两行
import nest_asyncio
nest_asyncio.apply()
更多推荐

所有评论(0)