ThinkRAG
零GPU笔记本电脑本地运行的大模型知识库,LlamaIndex+Streamlit,支持中文RAG与
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
零GPU笔记本电脑本地运行的大模型知识库,LlamaIndex+Streamlit,支持中文RAG与
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
在 RAG(检索增强生成)技术如火如荼的今天,绝大多数开源实现都假设你拥有云端服务器或高端 GPU——但 ThinkRAG 的作者并不这么认为。
ThinkRAG(Think Retrieval-Augmented Generation)由独立开发者 wzdavid 创建于 2024 年 7 月,项目托管于 GitHub,至今已收获 346 Star,属于 RAG 领域的中等体量但极具特色的工具。与主流 RAG 框架动辄要求 8 卡 A100 不同,ThinkRAG 从立项之初就瞄准了一个被忽视的需求:没有 GPU 的普通用户,如何在笔记本电脑上拥有一个完全私有的本地知识库?
这个需求的背后是一个真实痛点:很多专业人士(律师、医生、科研人员、学生)希望将敏感文档交给大模型处理,但既不想上传到云端,又没有条件自建服务器。ThinkRAG 正是为这个场景而生——零数据库依赖、纯文件存储、CPU 即可运行、所有数据留在本地。
图1:ThinkRAG 项目 Logo
ThinkRAG 构建在两个核心框架之上:LlamaIndex(数据索引与检索)和 Streamlit(Web 界面)。整体架构分为服务端(server/)和前端(frontend/)两层,职责清晰。
| 模块 | 文件 | 职责 |
|---|---|---|
| 索引管理 | server/index.py | 创建、加载、插入 VectorStoreIndex,支持本地文件持久化 |
| 检索引擎 | server/retriever.py | 实现混合检索:向量检索 + BM25 关键词检索 |
| 摄取管道 | server/ingestion.py | AdvancedIngestionPipeline,处理文档解析与节点生成 |
| LLM 模型 | server/models/ | 支持 Ollama 本地模型和 OpenAI 兼容 API |
| 嵌入模型 | server/models/embedding.py | HuggingFace 嵌入模型集成 |
| 存储抽象 | server/stores/ | 支持 Chroma/LanceDB/Elasticsearch/Redis 等向量库 |
| 提示词 | server/prompt.py | 中英双语 Prompt 模板 |
ThinkRAG 的检索系统是一大技术亮点。它没有简单使用向量相似度检索,而是实现了向量 + BM25 混合检索:
class SimpleHybridRetriever(BaseRetriever):
def __init__(self, vector_index, top_k=2):
self.vector_retriever = VectorIndexRetriever(index=vector_index, similarity_top_k=top_k)
self.bm25_retriever = SimpleBM25Retriever.from_defaults(index=vector_index, similarity_top_k=top_k)
两者结果通过归一化分数融合,兼顾语义理解和关键词匹配,对中文文档尤为有效。值得注意的是,BM25 检索器默认不支持中文分词,ThinkRAG 专门用 jieba 实现中文 tokenizer 注入,填补了这个空白。
ThinkRAG 的 Streamlit 前端采用多页面架构:
图2:知识库文件管理界面——上传文档、查看已索引文件
| 页面 | 文件 | 功能 |
|---|---|---|
| Query(问答) | frontend/Document_QA.py | 核心问答界面,展示回答与来源节点 |
| KB_File(文件知识库) | frontend/KB_File.py | 上传本地文件并建立索引 |
| KB_Web(网页知识库) | frontend/KB_Web.py | 抓取网页内容构建知识库 |
| KB_Manage(知识库管理) | frontend/KB_Manage.py | 管理已索引的文档 |
| Model_LLM(大模型) | frontend/Model_LLM.py | 选择大模型(本地 Ollama / 云端 API) |
| Model_Embed(嵌入模型) | frontend/Model_Embed.py | 选择嵌入模型 |
| Model_Rerank(重排模型) | frontend/Model_Rerank.py | 选择重排序模型 |
| Storage(存储后端) | frontend/Storage.py | 在 Chroma / LanceDB / Redis / ES 之间切换 |
图3:LLM 模型配置——支持 Ollama、OpenAI、DeepSeek、Moonshot、智谱 GLM
ThinkRAG 最有价值的部分不是代码量,而是对中国用户的深度适配。这在英文主导的开源 RAG 生态中非常难得。
大多数 RAG 系统使用英文优化的 splitter 处理中文时会出现"字词破碎"问题。ThinkRAG 使用 Spacy 中文模型,结合中文标点规则和段落结构进行语义分块,并启用 zh_title_enhance(中文标题增强)——让每个文本块的标题信息得到强化,提升检索召回质量。
默认嵌入模型为 BAAI/bge-large-zh-v1.5,这是 BGE 系列中专门针对中文优化的版本,在中文语义相似度任务上表现优异。重排模型默认使用 BAAI/bge-reranker-base,进一步提升检索精度。
在 config.py 中预置了 DeepSeek、Moonshot(月之暗面 KIMI)、智谱 GLM 的 API 配置,无需任何代码修改,只需设置环境变量即可切换:
DEEPSEEK_API_KEY=xxx # 深度求索
MOONSHOT_API_KEY=xxx # 月之暗面
ZHIPU_API_KEY=xxx # 智谱AI
答案是:能,但需要一些小步骤。
git clone https://github.com/wzdavid/ThinkRAG
cd ThinkRAG
pip3 install -r requirements.txt
requirements.txt 锁定了 Ollama 版本为 0.3.3(因为 LlamaIndex 与 0.4 版本存在兼容问题),这点在 README 中有明确说明。
ThinkRAG 支持两种使用模式:
模式一:云端 API(推荐新手)
设置好 OPENAI_API_KEY 或 DEEPSEEK_API_KEY 等环境变量后,无需下载任何本地模型,直接通过 API 调用大模型。本地只需运行嵌入模型(BGE-small-zh-v1.5,约 120MB)。
模式二:完全离线(Ollama 本地)
通过 Ollama 下载 DeepSeek-Qwen-Gemma 等模型到本地(约 3-8GB),同时下载 BGE 嵌入模型和重排模型到 localmodels/ 目录,即可完全离线运行。
ThinkRAG 的代码结构体现了良好的工程实践:
config.py,支持环境变量切换,无硬编码不足之处在于:没有 GitHub Actions CI/CD,测试覆盖率未知;README 虽然详细但缺少架构图;对 Chroma 等向量库的版本兼容性有一定要求。
综合评分:72/100(扣分项:缺乏自动化测试、Windows 兼容问题)
ThinkRAG 代表的趋势是 "AI 民主化"——不是每个人都需要 70B 参数的模型,也不是每个场景都需要云端服务器。当隐私、成本、便捷性成为核心诉求时,像 ThinkRAG 这样专为笔记本优化的本地 RAG 系统填补了重要的市场空白。
346 个 Star 在 RAG 工具中不算多,但它的用户口碑值得关注——很多中文用户在社交媒体上分享了用 ThinkRAG 构建法律知识库、医学文献助手、科研笔记系统的经验。这种垂直领域的口碑传播,往往比泛化的工具更持久。
如果你是一名需要处理敏感文档的研究者,或是想在本地快速搭建知识库原型,ThinkRAG 是一个值得尝试的起点——不需要 GPU,不需要云账号,几步配置后,你的笔记本就是一台私有的大模型知识引擎。