搭建基于Ollama和千问3的个人私有知识库(附源码)

10人浏览 / 0人评论 / 添加收藏

使用 Python 基于 Ollama 构建个人私有知识库是一个非常实用的项目,可以实现本地化、隐私安全的文档问答系统。以下是完整的路径和步骤,帮助你从零开始搭建一个基于 Ollama 的本地知识库系统。

🛠️ 环境准备

1. 安装 Ollama

前往官网安装:https://ollama.com/
# macOS / Linux
curl -fsSL https://ollama.com/install.sh | sh

# 启动 Ollama 服务
ollama serve

2. 拉取模型(建议)

ollama pull llama3
ollama pull nomic-embed-text

nomic-embed-text 是 Ollama 推荐的嵌入模型,用于生成文本向量。

 

接下来直接上干货,介绍如下:

一、项目结构
- app.py :主应用文件,包含所有功能实现
- requirements.txt :项目依赖文件
- documents/ :存放上传的PDF文档
- vector_store/ :向量存储目录

二、核心功能
1. 文档管理 :支持PDF文档上传和重新索引
2. 智能索引 :使用千问3嵌入模型对文档进行向量编码
3. 语义搜索 :基于向量相似性检索相关文档
4. 智能问答 :结合千问3模型生成基于文档的回答
5. 用户友好界面 :Streamlit实现的交互式界面


三、技术栈
- Python :核心编程语言
- Ollama :本地大模型运行框架
- 千问3 :用于嵌入和问答的大模型
- LangChain :构建语言模型应用的框架
- Chroma :向量数据库
- Streamlit :Web界面框架
- PyPDF :PDF文档处理

四、如何使用
1. 启动应用 :在项目目录运行 streamlit run app.py
2. 访问界面 :打开浏览器访问 http://localhost:8501
3. 上传文档 :在侧边栏上传PDF文档
4. 索引文档 :点击"重新索引文档"按钮
5. 提问 :在主界面输入问题,系统会基于文档内容生成回答
## 特点
- 完全本地 :所有数据和模型都在本地运行,保护隐私
- 智能检索 :基于语义理解的文档检索
- 上下文感知 :回答基于上传的文档内容,避免幻觉
- 易于使用 :直观的Web界面,无需技术背景

 

部分代码如下:

文件app.py

import os
import streamlit as st
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import OllamaEmbeddings
from langchain_community.document_loaders import PyPDFLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.llms import Ollama
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser

# 配置
EMBEDDING_MODEL = "qwen3-embedding:latest"
LLM_MODEL = "qwen3:latest"
VECTOR_STORE_PATH = "./vector_store"
DOCUMENTS_DIR = "./documents"

# 确保文档目录存在
os.makedirs(DOCUMENTS_DIR, exist_ok=True)

# 初始化嵌入模型
embeddings = OllamaEmbeddings(model=EMBEDDING_MODEL)

# 初始化LLM
llm = Ollama(model=LLM_MODEL)

# 加载文档函数
def load_documents():
   documents = []
   for filename in os.listdir(DOCUMENTS_DIR):
       if filename.endswith(".pdf"):
           file_path = os.path.join(DOCUMENTS_DIR, filename)
           loader = PyPDFLoader(file_path)
           documents.extend(loader.load())
   return documents

想要下载全部代码,请搜索微信公众号“数字科技家园”,回复“知识库”下载完整源代码。

全部评论