从零构建生产级 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 应用的构建,敬请期待~😉

相关推荐
PetterHillWater2 小时前
AI编程之CodeBuddy的小试
后端·aigc
Zhikes2 小时前
FLUX.Kontext 一句话P图界的神,淘汰了80%的工作流,本地部署。
aigc
程序员小灰2 小时前
AI独角兽团队Manus裁员80人,剩下40人迁至新加坡总部!
人工智能·aigc·agent
DigitalOcean4 小时前
DigitalOcean GradientAI:从基础设施到应用,打造全栈式AI开发解决方案
aigc
iThinkAi智能体7 小时前
最新Coze(扣子)智能体工作流:1分钟生成10个爆款认知觉醒视频,无需写文案剪辑
aigc
redreamSo9 小时前
AI Daily | AI日报:AI浏览器混战,Chrome地位受挑战; 研究:AI让资深开发者编程变慢19%; 华人女记者深扒OpenAI数据盗窃黑幕
程序员·aigc·资讯
程序员X小鹿9 小时前
豆包又一个新功能,超级实用,4 种玩法,你肯定用得上!(建议收藏)
aigc
win4r11 小时前
🚀当Cursor和Claude code拥有了记忆!编程能力倍增!Graphiti MCP Server让AI编程助手实现持久超强记忆!时序知识图谱让你的代码
aigc·claude·cursor
iThinkAi11 小时前
最新Coze(扣子)智能体工作流:把公众号文章、网页内容一键生成精美流光卡片、小红书图文
aigc
杀生丸学AI11 小时前
【三维生成】FlashDreamer:基于扩散模型的单目图像到3D场景
人工智能·3d·大模型·aigc·蒸馏与迁移学习·扩散模型与生成模型