Ollama+grainte-4.0组合:小白也能用的RAG应用搭建
Ollama+granite-4.0组合:小白也能用的RAG应用搭建
1. 引言:为什么选择这个组合?
你是否曾经想过在自己的电脑上搭建一个智能问答系统,却因为技术门槛太高而放弃?或者想要一个能理解你文档内容的AI助手,但不知道从何入手?
今天我要介绍的Ollama+granite-4.0组合,可能就是你在寻找的解决方案。这个组合最大的特点就是简单易用——不需要深厚的技术背景,不需要昂贵的硬件设备,甚至不需要复杂的配置过程。
granite-4.0-h-350m是一个轻量级但功能强大的指令模型,只有3.5亿参数,却支持12种语言(包括中文),能够处理摘要、分类、问答、代码生成等多种任务。而Ollama则是一个让大型语言模型在本地运行变得异常简单的框架。
最重要的是,这个组合特别适合RAG(检索增强生成)应用——也就是让AI能够基于你的特定文档内容来回答问题,而不是仅仅依靠它训练时学到的通用知识。
2. 环境准备与快速部署
2.1 安装Ollama
首先,我们需要安装Ollama框架。这个过程非常简单:
访问Ollama官网(https://ollama.com),选择适合你操作系统的版本下载。支持Windows、macOS和Linux系统。
以Windows为例:
- 下载OllamaSetup.exe文件
- 双击安装,点击"Install"按钮
- 等待安装完成,Ollama会自动启动
安装完成后,你可以在任务栏看到Ollama的图标,右键可以查看日志或退出程序。
2.2 验证安装
打开命令行终端(CMD或PowerShell),输入以下命令检查Ollama是否正常工作:
ollama --version
如果显示版本信息,说明安装成功。
2.3 调整模型存储位置(可选但推荐)
默认情况下,Ollama会把模型下载到C盘用户目录。如果你希望更改存储位置,可以设置环境变量:
- 右键点击"此电脑"→"属性"→"高级系统设置"→"环境变量"
- 在"系统变量"中点击"新建"
- 变量名:
OLLAMA_MODELS - 变量值:你想要存储的路径,比如
E:\ollama\models - 重启Ollama服务使设置生效
3. 部署granite-4.0模型
3.1 拉取模型
现在我们来获取granite-4.0-h-350m模型。在命令行中输入:
ollama pull granite4:350m-h
这个过程可能需要几分钟时间,取决于你的网络速度。模型大小约700MB左右,相比动辄几十GB的大模型,可以说是非常轻量了。
3.2 验证模型
下载完成后,运行以下命令测试模型是否正常工作:
ollama run granite4:350m-h "你好,请介绍一下你自己"
如果模型正确回应,说明部署成功!
4. 构建简单的RAG应用
4.1 什么是RAG?
RAG(Retrieval-Augmented Generation,检索增强生成)是一种让AI模型能够基于特定文档内容来回答问题的技术。简单来说,就是:
- 把你的文档内容转换成可搜索的形式
- 当用户提问时,先找到相关的文档片段
- 让AI基于这些片段生成回答
这样得到的答案更加准确和具体,因为是基于你提供的真实内容。
4.2 准备文档数据
首先,我们需要一些文档作为知识库。创建一个名为documents的文件夹,里面放一些文本文件(.txt格式),比如:
- company_intro.txt(公司介绍)
- product_manual.txt(产品手册)
- faq.txt(常见问题解答)
每个文件包含一些文本内容,这些将是我们的知识来源。
4.3 创建简单的检索系统
由于granite-4.0是纯文本模型,我们需要先构建一个简单的检索系统。创建一个Python脚本rag_simple.py:
import os
import json
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
class SimpleRAG:
def __init__(self, documents_folder):
self.documents = []
self.document_files = []
# 读取所有文档
for filename in os.listdir(documents_folder):
if filename.endswith('.txt'):
with open(os.path.join(documents_folder, filename), 'r', encoding='utf-8') as f:
content = f.read()
self.documents.append(content)
self.document_files.append(filename)
# 创建TF-IDF向量器
self.vectorizer = TfidfVectorizer()
self.document_vectors = self.vectorizer.fit_transform(self.documents)
def retrieve(self, query, top_k=3):
# 将查询转换为向量
query_vector = self.vectorizer.transform([query])
# 计算相似度
similarities = cosine_similarity(query_vector, self.document_vectors)
# 获取最相关的文档
top_indices = similarities.argsort()[0][-top_k:][::-1]
results = []
for idx in top_indices:
results.append({
'file': self.document_files[idx],
'content': self.documents[idx][:500] + '...' # 截取前500字符
})
return results
# 使用示例
if __name__ == "__main__":
rag = SimpleRAG('documents')
results = rag.retrieve("产品有哪些功能?")
print("相关文档:", results)
4.4 集成Ollama进行问答
现在我们将检索系统与Ollama集成,创建完整的RAG流程:
import requests
import json
class OllamaRAG:
def __init__(self, documents_folder):
self.retriever = SimpleRAG(documents_folder)
def ask(self, question):
# 第一步:检索相关文档
relevant_docs = self.retriever.retrieve(question)
# 构建提示词
context = "\n\n".join([f"来自{doc['file']}的内容:{doc['content']}" for doc in relevant_docs])
prompt = f"""基于以下文档内容,请回答用户的问题。
相关文档内容:
{context}
用户问题:{question}
请根据上述文档内容回答问题,如果文档中没有相关信息,请如实告知。"""
# 第二步:调用Ollama生成回答
response = requests.post(
'http://localhost:11434/api/generate',
json={
'model': 'granite4:350m-h',
'prompt': prompt,
'stream': False
}
)
if response.status_code == 200:
return response.json()['response']
else:
return "抱歉,生成回答时出现错误。"
# 使用示例
if __name__ == "__main__":
rag_system = OllamaRAG('documents')
while True:
question = input("\n请输入你的问题(输入'退出'结束):")
if question.lower() == '退出':
break
answer = rag_system.ask(question)
print(f"\n回答:{answer}")
5. 进阶技巧与优化建议
5.1 提升检索效果
简单的TF-IDF检索在某些场景下可能不够准确,你可以考虑:
- 使用更先进的嵌入模型:如Sentence-BERT等深度学习模型
- 添加元数据过滤:根据文档类型、时间等进行筛选
- 实现混合检索:结合关键词检索和语义检索
5.2 优化提示词工程
granite-4.0对提示词比较敏感,好的提示词能显著提升效果:
def build_better_prompt(question, context):
return f"""你是一个专业的助手,需要基于提供的文档内容回答问题。
# 文档内容:
{context}
# 用户问题:
{question}
# 回答要求:
1. 只基于上述文档内容回答,不要使用外部知识
2. 如果文档中没有相关信息,请说"根据现有文档,无法回答这个问题"
3. 回答要简洁明了,直接针对问题
4. 可以适当引用文档中的具体信息
请开始回答:"""
5.3 处理长文档
对于长文档,可以考虑以下策略:
- 文档分块:将长文档分成较小的段落(200-500字)
- 层次检索:先检索相关文档,再在文档内检索相关段落
- 摘要生成:对长文档先生成摘要,检索时先用摘要筛选
6. 实际应用案例
6.1 企业知识库问答
假设你有一家小公司,有很多产品文档、流程说明等。使用这个RAG系统,新员工可以快速找到需要的信息:
- "我们公司的休假政策是什么?"
- "产品X的技术规格有哪些?"
- "报销流程需要哪些步骤?"
6.2 学习助手
如果你正在学习某个主题,可以把相关教材、论文整理成文档:
- "机器学习中的过拟合是什么意思?"
- "请总结第三章的主要内容"
- "这个概念在实际中如何应用?"
6.3 个人知识管理
整理你的读书笔记、项目文档等:
- "我去年关于项目管理的笔记有哪些要点?"
- "那本关于习惯养成的书主要讲了什么?"
7. 常见问题解答
7.1 模型响应慢怎么办?
granite-4.0-h-350m本身速度很快,如果感觉慢可能是以下原因:
- 硬件限制:确保有足够的内存(至少8GB)
- 并发设置:检查Ollama的环境变量配置
- 网络问题:如果是第一次运行,可能需要下载模型
7.2 回答不准确如何改善?
- 检查检索效果:确保相关文档能被正确检索到
- 优化提示词:给模型更明确的指令和约束
- 调整温度参数:降低温度值让回答更确定性
7.3 支持哪些文件格式?
目前的简单版本只支持txt文本文件,但你可以扩展支持:
- PDF:使用PyPDF2或pdfplumber提取文本
- Word:使用python-docx库
- 网页:使用BeautifulSoup解析HTML
8. 总结
通过Ollama+granite-4.0组合,我们搭建了一个简单但实用的RAG应用。这个方案的优势在于:
- 低门槛:不需要深度学习专业知识
- 低成本:可以在普通电脑上运行
- 高效率:从安装到应用搭建只需小时级别
- 可扩展:可以根据需要不断优化和改进
无论你是想为企业搭建知识库,还是为个人学习创建助手,这个组合都能提供一个很好的起点。最重要的是,你可以完全控制数据和隐私,所有处理都在本地进行。
现在就开始尝试吧,相信你会发现更多有趣的应用场景!
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐


所有评论(0)