本地部署大语言模型实践(2):集成外部知识库详细步骤
在上一篇文章中,我们展示了如何通过 Ollama 这款工具,在本地运行大型语言模型。本篇文章将着重介绍如何让模型从外部知识库中检索定制数据,来提升大型语言模型的准确性,让它看起来更'智能'。
本文涉及 LangChain 和 RAG 两个核心概念。我们将通过实际代码演示如何构建一个基于检索增强生成(Retrieval Augmented Generation)的问答系统。
环境准备
在开始之前,请确保您的开发环境满足以下要求:
- 操作系统:Windows、macOS 或 Linux。
- Python 版本:建议 Python 3.9 或以上。
- 依赖安装:
pip install langchain langchain-community ollama tiktoken docarray - Ollama 服务:确保 Ollama 已在后台运行,并拉取了对应的模型。
准备模型
访问 Ollama 的模型页面,搜索 qwen。本次实验将使用对中文语义理解较好的 qwen:7b 模型。
运行模型
ollama run qwen:7b
第一轮测试:无上下文问答
首先编写基础代码,测试模型在没有外部知识辅助下的回答能力。
from langchain_community.chat_models import ChatOllama
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
# 初始化本地模型
model_local = ChatOllama(model="qwen:7b")
# 定义提示模板
template = "{topic}"
prompt = ChatPromptTemplate.from_template(template)
# 构建链
chain = model_local | StrOutputParser()
# 执行提问
print(chain.invoke("身长七尺,细眼长髯的是谁?"))
模型返回的答案:
这句话描述的是中国古代文学作品《三国演义》中的角色刘备。刘备被描绘为一位身高七尺(约 1.78 米),眼睛细小但有神,长着长须的蜀汉开国皇帝。
可以看到,这是一个开放型问题,没有指定上下文。虽然模型凭借训练数据联想到了三国人物,但答案并不准确(实际上是曹操)。这说明了纯预训练模型在处理特定领域事实时的局限性。
引入 RAG 技术
检索增强生成(Retrieval Augmented Generation,简称 RAG)的工作方式是在共享的语义空间中,从外部知识库中检索事实,将这些事实用作决策过程的一部分,以此来提升大型语言模型的准确性。
RAG 工作流程对比
- :向模型提问 -> 模型从已训练数据中查询数据 -> 组织语言 -> 生成答案。


