构建ChatPDF AI助手

简介: 本项目利用通义千问Qwen技术构建了一个ChatPDF AI助手,用户可上传PDF文件并基于文件内容进行对话。项目采用Python及多个库实现,包括Streamlit、OpenAI API、Transformers、Tiktoken等,支持高效、可定制的多语言对话,具备上下文理解能力和成本效益。示例代码展示了从环境配置到功能实现的完整流程,适合开发者快速上手。

使用通义千问Qwen技术构建一个ChatPDF AI助手。这个助手允许用户上传PDF文件,并基于文件内容与用户进行对话。我们将使用Python和相关的库来实现这个助手。

我们使用了以下几种技术:

Streamlit:这是一个开源的Python库,允许开发者快速构建和部署数据应用。它非常适合于创建原型和简单的Web应用,无需前端知识。

OpenAI API:这是OpenAI提供的API服务,允许开发者利用OpenAI的模型进行各种自然语言处理任务。在这个案例中,我们使用它来上传PDF文件并获取文件ID。

Transformers:这是Hugging Face提供的Python库,提供了大量预训练模型和工具,用于处理自然语言。在这个案例中,我们使用它来加载和运行Qwen模型。

Tiktoken:这是一个用于计数和分割tokens的库,它是基于OpenAI的GPT-3 tokenization。在这个案例中,我们使用它来计算消息中的tokens数量,以估算使用成本。

.env文件和python-dotenv库:这是用于管理环境变量的工具,允许开发者将敏感信息(如API密钥)存储在.env文件中,而不是直接硬编码在代码中。

使用的是通义千问Qwen:

通义千问Qwen技术是一个强大的自然语言处理框架,它为开发者提供了以下优点:

高效率:Qwen技术能够快速理解和处理复杂的自然语言输入,为用户提供即时响应。

可定制性:开发者可以根据自己的需求调整和优化Qwen模型,以适应不同的应用场景。

多语言支持:Qwen技术支持多种语言,这使得它能够服务于全球用户。

上下文理解:Qwen技术能够理解长篇文档的上下文,这使得它在处理基于文档的对话时表现出色。

易于集成:Qwen技术可以轻松集成到现有的应用和服务中,为它们提供智能对话能力。

成本效益:通过精确的token计数和高效的模型运行,Qwen技术帮助开发者控制成本,同时提供高质量的服务。

在这个ChatPDF AI助手的案例中,通义千问Qwen技术的应用显著提升了用户体验,使得用户能够通过简单的对话获取PDF文件中的信息,极大地提高了信息检索的便捷性和效率。

案例:

本项目利用通义千问Qwen技术构建了一个ChatPDF AI助手,用户可上传PDF文件并基于文件内容进行对话。项目采用Python及多个库实现,包括Streamlit、OpenAI API、Transformers、Tiktoken等,支持高效、可定制的多语言对话,具备上下文理解能力和成本效益。示例代码展示了从环境配置到功能实现的完整流程,适合开发者快速上手。

环境依赖

首先,确保你安装了以下依赖:

pip install transformers>=4.37.0 streamlit openai

代码实现

  1. 导入必要的库
import streamlit as st
import openai
import tiktoken
from dotenv import load_dotenv
import os
  1. 加载环境变量
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
  1. 初始化客户端
openai.api_key = api_key
  1. 初始化Tiktoken编码器
encoder = tiktoken.encoding.get_encoder("Qwen/Qwen-7B")
  1. 定义初始化页面和对话消息的函数
def init_page():
    st.title("ChatPDF AI 助手")
    st.sidebar.title("选项")
def init_messages():
    st.session_state.messages = []
def upload_pdf():
    file = st.file_uploader("上传 PDF 文件", type=["pdf"])
    if file:
        file_content = file.read()
        file_id = openai.File.create(file=file_content).id
        st.session_state.messages.append({"role": "system", "content": f"上传了文件 {file_id}"})
        return file_id
    return None
def select_llm():
    st.sidebar.markdown("选择语言模型")
    model_name = st.sidebar.selectbox("", ["Qwen/Qwen-7B", "Qwen/Qwen-14B"])
    return model_name
def get_answer(model_name, messages, file_id):
    system_message = {"role": "system", "content": f"文件 ID: {file_id}"}
    messages.append(system_message)
    user_message = st.text_input("输入你的问题:")
    if user_message:
        messages.append({"role": "user", "content": user_message})
        inputs = tokenizer(user_message, return_tensors="pt")
        inputs = inputs.to(model.device)
        pred = model.generate(**inputs)
        answer = tokenizer.decode(pred.cpu()[0], skip_special_tokens=True)
        st.session_state.messages.append({"role": "assistant", "content": answer})
def calculate_cost(messages):
    total_tokens = sum(encoder.encode(msg["content"]).num_tokens for msg in messages)
    cost_per_k_tokens = 0.02  # 假设每千个 token 的价格为 0.02 美元
    total_cost = total_tokens / 1000 * cost_per_k_tokens
    st.markdown(f"总费用: ${total_cost:.2f}")
  1. 主函数
def main():
    init_page()
    init_messages()
    file_id = upload_pdf()
    model_name = select_llm()
    model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto", trust_remote_code=True).eval()
    tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
    while True:
        get_answer(model_name, st.session_state.messages, file_id)
        calculate_cost(st.session_state.messages)
        if not st.button("继续对话"):
            break
  1. 运行应用
if __name__ == "__main__":
    main()


相关文章
|
7月前
|
云安全 人工智能 安全
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
阿里云 AI 安全护栏加入Dify平台,打造可信赖的 AI
3701 166
|
7月前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
4908 93
|
7月前
|
云安全 人工智能 自然语言处理
阿里云x硅基流动:AI安全护栏助力构建可信模型生态
阿里云AI安全护栏:大模型的“智能过滤系统”。
2508 120
|
7月前
|
消息中间件 人工智能 安全
云原生进化论:加速构建 AI 应用
本文将和大家分享过去一年在支持企业构建 AI 应用过程的一些实践和思考。
1774 74
|
7月前
|
人工智能 测试技术 API
构建AI智能体:二、DeepSeek的Ollama部署FastAPI封装调用
本文介绍如何通过Ollama本地部署DeepSeek大模型,结合FastAPI实现API接口调用。涵盖Ollama安装、路径迁移、模型下载运行及REST API封装全过程,助力快速构建可扩展的AI应用服务。
2278 7
|
7月前
|
人工智能 算法 Java
Java与AI驱动区块链:构建智能合约与去中心化AI应用
区块链技术和人工智能的融合正在开创去中心化智能应用的新纪元。本文深入探讨如何使用Java构建AI驱动的区块链应用,涵盖智能合约开发、去中心化AI模型训练与推理、数据隐私保护以及通证经济激励等核心主题。我们将完整展示从区块链基础集成、智能合约编写、AI模型上链到去中心化应用(DApp)开发的全流程,为构建下一代可信、透明的智能去中心化系统提供完整技术方案。
458 3
|
7月前
|
消息中间件 人工智能 安全
构建企业级 AI 应用:为什么我们需要 AI 中间件?
阿里云发布AI中间件,涵盖AgentScope-Java、AI MQ、Higress、Nacos及可观测体系,全面开源核心技术,助力企业构建分布式多Agent架构,推动AI原生应用规模化落地。
721 0
构建企业级 AI 应用:为什么我们需要 AI 中间件?
|
7月前
|
SQL 人工智能 机器人
AI Agent新范式:FastGPT+MCP协议实现工具增强型智能体构建
FastGPT 与 MCP 协议结合,打造工具增强型智能体新范式。MCP 如同 AI 领域的“USB-C 接口”,实现数据与工具的标准化接入。FastGPT 可调用 MCP 工具集,动态执行复杂任务,亦可作为 MCP 服务器共享能力。二者融合推动 AI 应用向协作式、高复用、易集成的下一代智能体演进。
941 0
|
7月前
|
存储 人工智能 安全
《Confidential MaaS 技术指南》发布,从 0 到 1 构建可验证 AI 推理环境
Confidential MaaS 将从前沿探索逐步成为 AI 服务的安全标准配置。
|
7月前
|
人工智能 API 开发工具
构建AI智能体:一、初识AI大模型与API调用
本文介绍大模型基础知识及API调用方法,涵盖阿里云百炼平台密钥申请、DashScope SDK使用、Python调用示例(如文本情感分析、图像文字识别),助力开发者快速上手大模型应用开发。
2631 18
构建AI智能体:一、初识AI大模型与API调用

热门文章

最新文章