构建ChatPDF AI助手

本文涉及的产品
NLP自然语言处理_高级版,每接口累计50万次
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_基础版,每接口每天50万次
简介: 本项目利用通义千问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()


相关文章
|
3天前
|
人工智能 开发框架 算法
Qwen-Agent:阿里通义开源 AI Agent 应用开发框架,支持构建多智能体,具备自动记忆上下文等能力
Qwen-Agent 是阿里通义开源的一个基于 Qwen 模型的 Agent 应用开发框架,支持指令遵循、工具使用、规划和记忆能力,适用于构建复杂的智能代理应用。
55 10
Qwen-Agent:阿里通义开源 AI Agent 应用开发框架,支持构建多智能体,具备自动记忆上下文等能力
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
PeterCat:一键创建开源项目 AI 问答机器人,自动抓取 GitHub 仓库信息、文档和 issue 等构建知识库
PeterCat 是一款开源的智能答疑机器人,能够自动抓取 GitHub 上的文档和 issue 构建知识库,提供对话式答疑服务,帮助开发者和社区维护者高效解决技术问题。
40 7
PeterCat:一键创建开源项目 AI 问答机器人,自动抓取 GitHub 仓库信息、文档和 issue 等构建知识库
|
15天前
|
人工智能 数据可视化 JavaScript
NodeTool:AI 工作流可视化构建器,通过拖放节点设计复杂的工作流,集成 OpenAI 等多个平台
NodeTool 是一个开源的 AI 工作流可视化构建器,通过拖放节点的方式设计复杂的工作流,无需编码即可快速原型设计和测试。它支持本地 GPU 运行 AI 模型,并与 Hugging Face、OpenAI 等平台集成,提供模型访问能力。
91 14
NodeTool:AI 工作流可视化构建器,通过拖放节点设计复杂的工作流,集成 OpenAI 等多个平台
|
9天前
|
人工智能 Serverless API
aliyun解决方案评测|主动式智能导购AI助手构建
《主动式智能导购AI助手构建》方案结合百炼大模型与函数计算,提供高效智能导购服务。然而,实际体验中发现官方教程的说明顺序有待优化,特别是关于百炼大模型服务开通及API-key的使用指引不够清晰,导致初次使用者需查阅额外资料。此外,架构设计和实践原理在部署过程中逐步展现,有助于理解,但针对生产环境的具体指导还需进一步完善以满足实际需求。为优化用户体验,建议调整文档中的步骤顺序,确保新手能更顺畅地完成部署和测试。
105 27
|
15天前
|
机器学习/深度学习 人工智能 运维
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
阿里云技术公开课预告:Elastic和阿里云搜索技术专家将深入解读阿里云Elasticsearch Enterprise版的AI功能及其在实际应用。
114 2
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
|
3天前
|
人工智能 分布式计算 数据处理
MaxCompute Data + AI:构建 Data + AI 的一体化数智融合
本次分享将分为四个部分讲解:第一部分探讨AI时代数据开发范式的演变,特别是MaxCompute自研大数据平台在客户工作负载和任务类型变化下的影响。第二部分介绍MaxCompute在资源大数据平台上构建的Data + AI核心能力,提供一站式开发体验和流程。第三部分展示MaxCompute Data + AI的一站式开发体验,涵盖多模态数据管理、交互式开发环境及模型训练与部署。第四部分分享成功落地的客户案例及其收益,包括互联网公司和大模型训练客户的实践,展示了MaxFrame带来的显著性能提升和开发效率改进。
|
13天前
|
人工智能 自然语言处理 监控
解决方案评测:主动式智能导购AI助手构建
作为一名数据工程师,我体验了主动式智能导购AI助手构建解决方案,并进行了详细评测。该方案通过百炼大模型和函数计算实现智能推荐与高并发处理,部署文档详尽但部分细节如模型调优需改进。架构设计清晰,前端支持自然语言处理与语音识别,中间件确保实时数据同步。生产环境部署顺畅,但在系统监控方面可进一步优化。总体而言,该方案在零售行业具有显著应用潜力,值得尝试。
52 17
|
11天前
|
数据采集 机器学习/深度学习 人工智能
基于AI的网络流量分析:构建智能化运维体系
基于AI的网络流量分析:构建智能化运维体系
73 13
|
13天前
|
人工智能 Serverless API
尽享红利,Serverless构建企业AI应用方案与实践
本次课程由阿里云云原生架构师计缘分享,主题为“尽享红利,Serverless构建企业AI应用方案与实践”。课程分为四个部分:1) Serverless技术价值,介绍其发展趋势及优势;2) Serverless函数计算与AI的结合,探讨两者融合的应用场景;3) Serverless函数计算AIGC应用方案,展示具体的技术实现和客户案例;4) 业务初期如何降低使用门槛,提供新用户权益和免费资源。通过这些内容,帮助企业和开发者快速构建高效、低成本的AI应用。
58 12
|
11天前
|
人工智能 容灾 关系型数据库
【AI应用启航workshop】构建高可用数据库、拥抱AI智能问数
12月25日(周三)14:00-16:30参与线上闭门会,阿里云诚邀您一同开启AI应用实践之旅!