Meta 推出了新的开源模型 Llama 3.2。新版模型体积更小、生成令牌速度更快、准确度也更高,能够方便的构建基于 RAG 的 AI 应用。这个教程将展示如何使用 Llama 3.2 和 RAG 构建一个简单而强大的 PDF 聊天助手。到时,您能够上传PDF文件并向它提出问题。所有操作都在本地完成,完全免费无需联网。
构建目标
PDF 聊天助手使用 Llama 3.2 和 RAG 分析 PDF 文档,并根据它的内容回答问题。
- 使用 Streamlit 创建一个简单的使用界面
- 将 RAG 与 Llama 3.2 的强大功能相结合
- 使用 Embedchain 框架实现 RAG 功能
- 使用 ChromaDB 存储 PDF 内容的向量
前提条件
- 需要在本地电脑安装 Python(建议使用 3.7 或更高版本)
- 对 Python 编程有基本的了解
- 选择一个你熟悉的 Python 代码编辑器(推荐 VSCode 或 PyCharm)
构建步骤
第一步:环境设置
1. 克隆 GitHub 仓库
git clone https://github.com/Shubhamsaboo/awesome-llm-apps.git
2. 前往 chat_with_pdf 文件夹
cd chat_with_pdf
3. 安装应用依赖项
pip install -r requirements.txt
第二步:创建 Streamlit 应用
创建一个新文件 chat_pdf.py 并添加以下代码:
1. 导入所需库
在文件顶部添加
import os import tempfile import streamlit as st from embedchain import App import base64 from streamlit_chat import message
2. 配置应用程序
在这个应用程序中,我们将使用 Ollama 的 Llama-3.2。您也可以选择 OpenAI、Anthropic 或其他任何 LLM。
使用开源的 ChromaDB 作为矢量数据库(您可以自由选择任何其他矢量数据库)。
def embedchain_bot(db_path): return App.from_config( config={ "llm": {"provider": "ollama", "config": {"model": "llama3.2:latest", "max_tokens": 250, "temperature": 0.5, "stream": True, "base_url": 'http://localhost:11434'}}, "vectordb": {"provider": "chroma", "config": {"dir": db_path}}, "embedder": {"provider": "ollama", "config": {"model": "llama3.2:latest", "base_url": 'http://localhost:11434'}}, } )
3. 处理 PDF 文件的上传和预览
def display_pdf(file): base64_pdf = base64.b64encode(file.read()).decode('utf-8') pdf_display = f'' st.markdown(pdf_display, unsafe_allow_html=True)
4. 设置 Streamlit 应用程序
Streamlit 允许您仅使用 Python 代码创建用户界面。对于这个应用程序,我们将:
- 使用'st.title()' 为应用程序添加标题
- 使用'st.caption()' 为应用程序添加描述
5. 创建一个用于PDF上传和预览的侧边栏
with st.sidebar: st.header("PDF Upload") pdf_file = st.file_uploader("Upload a PDF file", type="pdf") if pdf_file: st.subheader("PDF Preview") display_pdf(pdf_file)
6. 将 PDF 添加到知识库。当上传 PDF 时,内容会被处理并添加到 ChromaDB 中以供检索。
if st.button("Add to Knowledge Base"): with st.spinner("Adding PDF to knowledge base..."): with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as f: f.write(pdf_file.getvalue()) st.session_state.app.add(f.name, data_type="pdf_file") os.remove(f.name) st.success(f"Added {pdf_file.name} to knowledge base!")
7. 创建一个聊天界面,让用户可以向 PDF 文件提出问题
for i, msg in enumerate(st.session_state.messages): message(msg["content"], is_user=msg["role"] == "user", key=str(i)) if prompt := st.chat_input("Ask a question about the PDF"): st.session_state.messages.append({"role": "user", "content": prompt}) message(prompt, is_user=True)
8. 处理用户问题并显示回复,并添加一个清除聊天历史记录的按钮
with st.spinner("Thinking..."): response = st.session_state.app.chat(prompt) st.session_state.messages.append({"role": "assistant", "content": response}) message(response) if st.button("Clear Chat History"): st.session_state.messages = []
第三步:运行应用
1. 在终端中,进入项目文件夹,并运行以下命令,启动 Streamlit 应用
streamlit run chat_pdf.py
Streamlit 会提供一个本地 URL(通常是 http://localhost:8501)。通过浏览器打开这个链接就可以了。
评论(0)