本篇文章我们将基于 Ollama 本地运行大语言模型(LLM),并结合 ChromaDB、LangChain 来建立一个小型的基于网页内容进行本地问答的 RAG 应用。
概念介绍
先简单了解下这些术语:
LLM (Large Language Model) 是通过使用海量的文本数据集(书籍、网站等)训练出来的,具备通用语言理解和生成的能力。虽然它可以推理许多内容,但它们的知识仅限于特定时间点之前用于训练的数据。
LangChain 是一个用于开发由大型语言模型(LLM)驱动的应用程序的框架。提供了丰富的接口、组件、能力简化了构建 LLM 应用程序的过程。
Ollama 是一个免费的开源框架,可以让大模型很容易的运行在本地电脑上。
RAG(Retrieval Augmented Generation)是一种利用额外数据增强 LLM 知识的技术,它通过从外部数据库获取当前或相关上下文信息,并在请求大型语言模型(LLM)生成响应时呈现给它,从而解决了生成不正确或误导性信息的问题。
工作流程如下:
- 加载并解析网页内容。
- 将文本分割成块(Chunking)。
- 使用嵌入模型将文本转换为向量。
- 将向量存储到向量数据库(Chroma)。
- 用户提问时检索相关向量。
- 结合检索内容与 Prompt 生成回答。
基于上述 RAG 步骤,接下来我们将使用代码完成它。
开始搭建
1. 环境准备
依据 Ollama 使用指南完成大模型的本地下载和运行。
# LLM
ollama pull llama3
# Embedding Model
ollama pull nomic-embed-text
2. 安装依赖
安装 langchain、langchain-community、bs4 等库。
pip install langchain langchain-community bs4
3. 初始化 LangChain 对象
初始化 langchain 提供的 Ollama 对象,配置流式输出。
from langchain_community.llms import Ollama
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
# 1. 初始化 llm, 让其流式输出
llm = Ollama(
model="llama3",
temperature=0.1,
top_p=,
callback_manager=CallbackManager([StreamingStdOutCallbackHandler()])
)


