构建ChatPDF AI助手

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


目录
打赏
0
4
4
0
113
分享
相关文章
exo:22.1K Star!一个能让任何人利用日常设备构建AI集群的强大工具,组成一个虚拟GPU在多台设备上并行运行模型
exo 是一款由 exo labs 维护的开源项目,能够让你利用家中的日常设备(如 iPhone、iPad、Android、Mac 和 Linux)构建强大的 AI 集群,支持多种大模型和分布式推理。
477 100
OmAgent:轻松构建在终端设备上运行的 AI 应用,赋能手机、穿戴设备、摄像头等多种设备
OmAgent 是 Om AI 与浙江大学联合开源的多模态语言代理框架,支持多设备连接、高效模型集成,助力开发者快速构建复杂的多模态代理应用。
332 72
OmAgent:轻松构建在终端设备上运行的 AI 应用,赋能手机、穿戴设备、摄像头等多种设备
Archon – 开源 AI 智能体框架,自主生成代码构建 AI 智能体
Archon 是一个开源的 AI 智能体框架,能够自主生成代码并优化智能体性能,支持多智能体协作、领域知识集成和文档爬取等功能,适用于企业、教育、智能家居等多个领域。
135 10
Archon – 开源 AI 智能体框架,自主生成代码构建 AI 智能体
构建企业AI的信任与信心基石:从认知到实践的全面升级
本文探讨企业在人工智能(AI)广泛应用背景下面临的信任与信心挑战,提出通过数据安全、技术透明度及技能认证构建信任体系。重点介绍生成式人工智能认证(GAI),其能助力企业培养AI人才,提升团队专业能力。文章还建议企业加强内部培训、外部合作与实战应用评估,全方位推动AI战略落地,为企业发展提供支持。
IDEA + 通义灵码AI程序员:快速构建DDD后端工程模板
本文介绍如何使用 IntelliJ IDEA 和阿里云的通义灵码 AI 程序员,快速搭建基于 DDD 领域驱动设计的后端工程模板。通过安装和配置 IDEA、JDK、Maven 及通义灵码插件,用户可以借助 AI 自动生成项目结构和代码。然而,测试发现 AI 生成的代码存在依赖问题,需手动修正才能成功运行。最终,项目包括 Spring Boot、Maven 和 Deepseek API 集成,可调用大模型进行预测。尽管 AI 工具提高了开发效率,但目前仍需人工干预确保项目顺利运行。
158 3
 IDEA + 通义灵码AI程序员:快速构建DDD后端工程模板
Eino:字节跳动开源基于Golang的AI应用开发框架,组件化设计助力构建AI应用
Eino 是字节跳动开源的大模型应用开发框架,帮助开发者高效构建基于大模型的 AI 应用。支持组件化设计、流式处理和可视化开发工具。
288 27
容器化AI模型的安全防护:构建可信的AI服务
在AI模型广泛应用的背景下,容器化AI模型的安全防护至关重要。主要安全威胁包括数据窃取、模型窃取、对抗样本攻击和模型后门攻击等。为应对这些威胁,需采取多层次防护措施:容器安全(如使用可信镜像、限制权限)、模型安全(如加密、水印)、数据安全(如加密、脱敏)和推理安全(如输入验证、异常检测)。此外,利用开源工具如Anchore Engine、Falco和ART等,可进一步加强防护。遵循安全开发生命周期、最小权限原则和深度防御等最佳实践,确保AI服务的安全性和可信度。
PySpur:零代码构建AI工作流!开源可视化拖拽平台,支持多模态与RAG技术
PySpur 是一款开源的轻量级可视化 AI 智能体工作流构建器,支持拖拽式界面,帮助用户快速构建、测试和迭代 AI 工作流,无需编写复杂代码。它支持多模态数据处理、RAG 技术、文件上传、结构化输出等功能,适合非技术背景的用户和开发者快速上手。
173 5
容器化机器学习流水线:构建可复用的AI工作流
本文介绍了如何构建容器化的机器学习流水线,以提高AI模型开发和部署的效率与可重复性。首先,我们探讨了机器学习流水线的概念及其优势,包括自动化任务、确保一致性、简化协作和实现CI/CD。接着,详细说明了使用Kubeflow Pipelines在Kubernetes上构建流水线的步骤,涵盖安装、定义流水线、构建组件镜像及上传运行。容器化流水线不仅提升了环境一致性和可移植性,还通过资源隔离和扩展性支持更大规模的数据处理。
通义灵码AI程序员实战:从零构建Python记账本应用的开发全解析
本文通过开发Python记账本应用的真实案例,展示通义灵码AI程序员2.0的代码生成能力。从需求分析到功能实现、界面升级及测试覆盖,AI程序员展现了需求转化、技术选型、测试驱动和代码可维护性等核心价值。文中详细解析了如何使用Python标准库和tkinter库实现命令行及图形化界面,并生成单元测试用例,确保应用的稳定性和可维护性。尽管AI工具显著提升开发效率,但用户仍需具备编程基础以进行调试和优化。
255 9

热门文章

最新文章