构建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()


相关文章
|
7天前
|
人工智能 Linux iOS开发
exo:22.1K Star!一个能让任何人利用日常设备构建AI集群的强大工具,组成一个虚拟GPU在多台设备上并行运行模型
exo 是一款由 exo labs 维护的开源项目,能够让你利用家中的日常设备(如 iPhone、iPad、Android、Mac 和 Linux)构建强大的 AI 集群,支持多种大模型和分布式推理。
237 100
|
7天前
|
人工智能 开发框架 数据可视化
Eino:字节跳动开源基于Golang的AI应用开发框架,组件化设计助力构建AI应用
Eino 是字节跳动开源的大模型应用开发框架,帮助开发者高效构建基于大模型的 AI 应用。支持组件化设计、流式处理和可视化开发工具。
134 27
|
9天前
|
人工智能 资源调度 API
AnythingLLM:34K Star!一键上传文件轻松打造个人知识库,构建只属于你的AI助手,附详细部署教程
AnythingLLM 是一个全栈应用程序,能够将文档、资源转换为上下文,支持多种大语言模型和向量数据库,提供智能聊天功能。
2416 14
|
22天前
|
人工智能 开发者 Python
Chainlit:一个开源的异步Python框架,快速构建生产级对话式 AI 应用
Chainlit 是一个开源的异步 Python 框架,帮助开发者在几分钟内构建可扩展的对话式 AI 或代理应用,支持多种工具和服务集成。
136 9
|
25天前
|
人工智能 Cloud Native 安全
|
27天前
|
人工智能
解决方案 | 主动式智能导购AI助手构建获奖名单公布!
解决方案 | 主动式智能导购AI助手构建获奖名单公布!
|
27天前
|
人工智能 Serverless
两步构建 AI 总结助手,实现智能文档摘要
本方案将运用函数计算 FC,构建一套高可用性的 Web 服务,以满足用户多样化的需求。当用户发起请求时,系统内部会自动将包含文本和提示词的信息传递给百炼模型服务,百炼平台将根据后台配置调用相应的大模型服务,对文本数据进行智能识别与解析,最终将总结结果返回给用户。
|
30天前
|
人工智能 算法 前端开发
OmAgent:轻松构建在终端设备上运行的 AI 应用,赋能手机、穿戴设备、摄像头等多种设备
OmAgent 是 Om AI 与浙江大学联合开源的多模态语言代理框架,支持多设备连接、高效模型集成,助力开发者快速构建复杂的多模态代理应用。
195 72
OmAgent:轻松构建在终端设备上运行的 AI 应用,赋能手机、穿戴设备、摄像头等多种设备
|
1月前
|
SQL 人工智能 数据管理
跨云数据管理平台DMS:构建Data+AI的企业智能Data Mesh
跨云数据管理平台DMS助力企业构建智能Data Mesh,实现Data+AI的统一管理。DMS提供开放式元数据服务OneMeta、一站式智能开发平台和云原生AI数据平台,支持多模数据管理和高效的数据处理。结合PolarDB、AnalyticDB等核心引擎,DMS在多个垂直场景中展现出显著优势,如智能营销和向量搜索,提升业务效率和准确性。通过DataOps和MLOps的融合,DMS为企业提供了从数据到AI模型的全生命周期管理,推动数据驱动的业务创新。
|
1月前
|
人工智能 数据处理 语音技术
Pipecat实战:5步快速构建语音与AI整合项目,创建你的第一个多模态语音 AI 助手
Pipecat 是一个开源的 Python 框架,专注于构建语音和多模态对话代理,支持与多种 AI 服务集成,提供实时处理能力,适用于语音助手、企业服务等场景。
107 23
Pipecat实战:5步快速构建语音与AI整合项目,创建你的第一个多模态语音 AI 助手

热门文章

最新文章