从零构建生产级 AI 应用 ChatWithPDF

前言

目前 AIGC 的浪潮很火,不管你是什么方向的程序员,都可以通过大模型去构建自己的 App,但是搜索资料学习的时候发现:

  • 目前构建 AI 应用的中文资源比较少,大多数都是英文的。
  • 教程大多是 demo 级别,没有生产级的构建教程,更没有带有完整代码且一步步教学的资源。
  • 构建应用一般会使用 Langchain 提升构建效率,但是 Langchain 文档有点乱,并且版本迭代较快,使用方式有差异。

由于以上原因,本人在学习构建自己的 AI 应用时候踩了很多坑,加上身边的小伙伴也想要一个完整的教程。本着 以输出倒逼输入 的目的,决定开一个系列,从零基础一步步构建 生产级 AI 应用 ,只需要一点点 🤏🏻 Python 基础就 ok。

无 Python 基础的同学可以通过 Python 官网教程,快速学习一波,有这个基础就够了。

目标产品 ChatWithPDF

实践是最快的一种学习方式,所以本系列的目的就是构建一个对标 PDF.ai 的产品,用户可以上传自己的 PDF 文件,然后通过 ChatWithPDF 对 PDF 文件内容提问学习,得到总结,查找信息等等。

这类应用一般都是要收费的(根据上传的 PDF 大小,PDF 数量收取对应费用),通过学习这个系列可以自己本地构建一个应用,免费辅助学习知识,绝壁不亏 。

环境准备

构建这个产品需要的东西就2个:Python 环境 + OpenAI API Key ,由于 Python 环境安装比较简单,这里就不介绍了,直接按照 Python 官网教程 就ok。

如果有不知道 OpenAI 是神马,直接浏览器搜索下就知道了,这里也不赘述。但是由于 OpenAI API 的访问问题,这里建议使用 Azure OpenAI API。

注册一个微软云 Azure 账号,绑定下自己的信用卡就有免费的额度,足够我们整个系列的使用。

方案概览

开始编码之前,需要先做方案设计。针对 ChatWithPDF 的应用功能,有两个方案,如下所示:

方案1:全量提交所有内容(不推荐)

这个方案在 PDF 内容比较少时,不会有问题。但是当 PDF 内容比较长的时候有3个问题:

  1. 发送给 ChatGPT 的内容是有长度限制的(token数量限制),PDF 内容比较长的时候会发送失败。
  2. 即使 ChatGPT 没有内容限制,当一次性提交大量文本时,获取回复效果并没想象中好。
  3. 发送内容多少等于消耗token数量的多少,内容多token消耗多相当于成本高。

方案2:提交和用户问题相关的 PDF 内容(推荐)

方案 2 主要分为 4 个步骤:

  • 当用户上传 PDF 之后,摘取 PDF 的文本内容,将所有内容切割成文本块。
  • 存储每个文本块的内容。
  • 当用户提问时,找到和问题最相关的文本块。
  • 将相关联的文本块 + 用户问题一起提交给 ChatGPT。

上图是完整的流程,其实分为两个步骤:

  1. 构建通过用户上传的 PDF 构建相关的向量数据库
  1. 处理用户的问题

在本系列中我们采用方案2,目前的流程是为了方便大家在学习前有个整体的印象,在实际开发过程中还有很多细节需要处理,目前是忽略的。但最终效果的好坏很大程度上就是细节决定的,所以后续对于细节方面也会做详细的分析。

Embedding 介绍

👆🏻上个小节有个关键步骤就是需要检索出 PDF 中与用户提问相关联的文本块,要实现这个过程就是通过使用 Embedding 对文本进行向量化处理。

Embedding 是一种将物体(如文本)表示为低维向量的技术。这些向量具有以下特性:

  1. 距离相近的向量对应含义相近的物体。
  2. 支持数学运算,如Embedding(马德里)-Embedding(西班牙)+Embedding(法国)≈Embedding(巴黎)。
  3. 能够揭示物体间的潜在关系。

举个具体的例子,"我感到很快乐" 这句话通过 Embedding 算法之后就会得到一个向量,如下图所示。

在这里,我们并不需要知道 Embedding 算法的具体实现,因为已经有人帮我们实现好,我们需要知道的是一个基本原理,方便我们后续的开发工作。

为什么通过 Embedding 之后的内容可以进行相关联程度的检索呢?

因为 Embedding 就是将文本(高维度)映射到了一个低维度(每个维度都有个评分)向量,然后通过计算向量之间的相似度来决定文本之间的相关联性。

总结

本文是从零构建生产级 AI 应用的第一篇,主要介绍了做这个事情的背景原因以及整体的方案概述,下一篇将介绍如何利用 Langchain 加速我们的 AI 应用的构建,敬请期待~😉

相关推荐
SL_staff1 小时前
企业AI落地难?JVS-AI渐进式实践:安全可控、小切口验证、标准化沉淀与规模化复制
java·开源·aigc
小虎AI生活1 小时前
Anatomy 接入 WorkBuddy 实操:一句话生成 12 零件可交互科普模型(附2组提示词)
aigc·ai编程
长沙三为智能科技5 小时前
GEO与传统SEO的5个关键差异:排名与被引用、关键词与答案型的全维度对比
python·aigc·seo·ai搜索·geo优化
threerocks6 小时前
一个人指挥一支 AI 剧组:Gemini 4 + Omni 1.2 剧情短片制作保姆级教程
aigc·openai·ai编程
西安小哥8 小时前
大厂把大模型做成一层网关之后,我先把三件事重新想了
aigc
小和尚同志8 小时前
阿里大佬做的一款轻量化 Token 监控工具—知度 Tokei
人工智能·aigc·监控
小虎AI生活18 小时前
WorkBuddy 积分不够烧?我找到了每天白送 5000 的平台
aigc·ai编程
Csvn19 小时前
模型挂了全站 502?降级链让它先保住“有响应”(R04)
人工智能·aigc·agent
狼爷21 小时前
AI 时代学习真相:答案唾手可得,思考才是稀缺品
aigc