构建ChatPDF AI助手

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_基础版,每接口每天50万次
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()


相关文章
|
1月前
|
人工智能 开发框架 决策智能
谷歌开源多智能体开发框架 Agent Development Kit:百行代码构建复杂AI代理,覆盖整个开发周期!
谷歌开源的Agent Development Kit(ADK)是首个代码优先的Python工具包,通过多智能体架构和灵活编排系统,支持开发者在百行代码内构建复杂AI代理,提供预置工具库与动态工作流定义能力。
221 3
谷歌开源多智能体开发框架 Agent Development Kit:百行代码构建复杂AI代理,覆盖整个开发周期!
|
1月前
|
人工智能 关系型数据库 OLAP
光云科技 X AnalyticDB:构建 AI 时代下的云原生企业级数仓
AnalyticDB承载了光云海量数据的实时在线分析,为各个业务线的商家提供了丝滑的数据服务,实时物化视图、租户资源隔离、冷热分离等企业级特性,很好的解决了SaaS场景下的业务痛点,也平衡了成本。同时也基于通义+AnalyticDB研发了企业级智能客服、智能导购等行业解决方案,借助大模型和云计算为商家赋能。
89 17
|
25天前
|
数据采集 人工智能 大数据
演讲实录:中小企业如何快速构建AI应用?
AI时代飞速发展,大模型和AI的应用创新不断涌现,面对百花齐放的AI模型,阿里云计算平台大数据AI解决方案总监魏博文分享如何通过阿里云提供的大数据AI一体化平台,解决企业开发难、部署繁、成本高等一系列问题,让中小企业快速搭建AI应用。
|
1月前
|
存储 人工智能 自然语言处理
15.4K Star!Vercel官方出品,零基础构建企业级AI聊天机器人
"基于Next.js 14和AI SDK打造的Chat SDK,让开发者快速构建支持多模态交互、代码执行、文件共享的智能对话系统,5分钟完成全栈部署!" —— Vercel AI Chatbot项目核心宣言
100 5
|
2月前
|
人工智能 数据可视化 API
36.7K star!拖拽构建AI流程,这个开源LLM应用框架绝了!
`Flowise` 是一款革命性的低代码LLM应用构建工具,开发者通过可视化拖拽界面,就能快速搭建基于大语言模型的智能工作流。该项目在GitHub上线不到1年就斩获**36.7K星标**,被开发者誉为"AI时代的乐高积木"。
176 8
|
9天前
|
人工智能 运维 安全
阿里云 Serverless 助力海牙湾构建弹性、高效、智能的 AI 数字化平台
海牙湾(G-Town)是一家以“供应链+场景+技术+AI”为核心驱动力的科技公司,致力于为各行业提供数字化转型解决方案。通过采用阿里云Serverless架构,解决了弹性能力不足、资源浪费与运维低效的问题。SAE全托管特性降低了技术复杂度,并计划进一步探索Serverless与AI结合,推动智能数字化发展。海牙湾业务覆盖金融、美妆、能源等领域,与多家知名企业建立战略合作,持续优化用户体验和供应链决策能力,保障信息安全并创造可量化的商业价值。未来,公司将深化云原生技术应用,助力更多行业实现高效数字化转型。
|
15天前
|
存储 人工智能 NoSQL
表格存储:为 AI 注入“记忆”,构建大规模、高性能、低成本的 Agent Memory 数据底座
本文探讨了AI Agent市场爆发增长背景下的存储需求,重点介绍了Tablestore在Agent Memory存储中的优势。2025年被视为AI Agent市场元年,关键事件推动技术发展。AI Agent的存储分为Memory(短期记忆)和Knowledge(长期知识)。Tablestore通过高性能、低成本持久化存储、灵活的Schemaless设计等特性满足Memory场景需求;在Knowledge场景中,其多元索引支持全文、向量检索等功能,优化成本与稳定性。实际案例包括通义App、某浏览器及阿里云多项服务,展示Tablestore的卓越表现。最后邀请加入钉钉群共同探讨AI技术。
675 13
|
1月前
|
人工智能 数据可视化 关系型数据库
23.5K star!零代码构建AI知识库,这个开源神器让问答系统开发像搭积木一样简单!
FastGPT 是一个基于大语言模型的智能知识库平台,提供开箱即用的数据处理、RAG检索和可视化AI工作流编排能力,让你无需编写代码就能轻松构建复杂的问答系统!
100 1
|
1月前
|
人工智能 自然语言处理 数据可视化
89.4K star!这个开源LLM应用开发平台,让你轻松构建AI工作流!
Dify 是一款开源的 LLM 应用开发平台,通过直观的可视化界面整合 AI 工作流、RAG 管道、智能代理等功能,助你快速实现从原型到生产的跨越。支持本地部署和云端服务,提供企业级功能与完整 API 接口。
|
2月前
|
数据采集 消息中间件 人工智能
AI Agent:构建以数据为中心的智能体
在过去一年里大模型领域主要有两大领域的热点,一个是 LLM,几乎每月速度革新,大家关心的是效果和成本。另一个是 AI Agent,大家尝试解决各个领域应用问题,大家关心的是场景和竞争力。下面我们重点分享一下 AI Agent 的趋势和实践。
371 14
OSZAR »