使用 Llama 3.2 构建一个本地版 PDF 聊天助手

基于本地部署的 Llama 3.2 模型与 Embedchain+ChromaDB 构建离线 PDF 聊天助手,支持上传 PDF、自动解析内容并用自然语言问答,全程无需联网。使用 Streamlit 搭建简洁交互界面,适合希望在本地安全处理敏感文档的技术用户快速上手。

发布于2024年9月28日 03:22
编辑零重力瓦力
评论0
阅读126

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)。通过浏览器打开这个链接就可以了。

相关文章

GPT-6 Astra 驱动本地 Blender 建模,从一句话直接生成可编辑工程文件
AI 编程开发
2026年9月14日
0 条评论
小创

GPT-6 Astra 驱动本地 Blender 建模,从一句话直接生成可编辑工程文件

AI 编程智能体可通过调用本地 Blender Python 接口,将自然语言转化为可编辑的 3D 工程文件,实现从文生图到图生 3D 的生产力突破。该模式支持渐进式迭代与技能固化,解决了传统生成模型不可二次编辑的痛点。但受限于无实时视口反馈,智能体在复杂拓扑与空间对齐上仍存盲区,需依赖视觉回检闭环规避风险。未来演进方向为接入多模态感知系统,以实现更精准的 3D 内容创作。

#AI工具#智能体#3D建模
阅读全文
Superpowers 让 26 款 AI 编程工具学会规范工程,28 万星智能体工作流实战
AI 编程开发
2026年9月14日
0 条评论
小创

Superpowers 让 26 款 AI 编程工具学会规范工程,28 万星智能体工作流实战

开源项目 Superpowers 通过强制工程化约束,解决 AI 编程工具输出混乱问题。该框架适配 26 款主流工具,内置 7 步标准工作流与模块化技能库,强制执行需求澄清、Git 分支隔离及测试驱动开发,将 AI 编码从自由生成转变为严谨的软件工程生命周期管理。虽能显著提升代码稳定性与可维护性,但子代理驱动模式会导致 API Token 消耗激增,大型项目需注意调用成本。

#智能体#vibe编程#开源
阅读全文
Codex 驱动本地 Blender 渲染 3D 场景,三轮提示词沉淀智能体技能
AI 编程开发
2026年9月14日
0 条评论
小创

Codex 驱动本地 Blender 渲染 3D 场景,三轮提示词沉淀智能体技能

独立研究员 Simon Willison 演示了利用 GPT-6 Astra 驱动本地 Blender 完成高质量 3D 场景渲染。该 Coding Agent 通过 Python API 执行无头渲染,具备视觉反思能力,可在三轮对话内将简单模型迭代至电影级画质,并将流程固化为可复用技能。此模式输出完整工程文件,支持二次编辑,重构了 3D 内容生产范式。尽管在复杂有机体建模上仍有局限,但标志着 AI 正作为技术美术精准调用工业软件生态。

#智能体#AI工具#3D
阅读全文
互动讨论

评论区

围绕《使用 Llama 3.2 构建一个本地版 PDF 聊天助手》展开交流,未登录用户可浏览评论,登录后可参与讨论。

评论数
0
登录后参与评论
支持发表观点与回复一级评论,互动后将同步到消息中心。
登录后评论
暂无评论,欢迎成为第一个参与讨论的人。