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

相关推荐
程序员X小鹿9 小时前
新出的多模态AI笔记工具:视频秒变图文笔记、生成脑图、播客等,太好用了!
aigc
_张一凡10 小时前
OpenAI Sora 2提示词指南:打造精准视频生成指令
aigc·音视频
后端小肥肠11 小时前
【n8n 入门系列】10 分钟部署 n8n,手把手教你搭第一个自动化工作流,小白可学!
人工智能·aigc
iThinkAi智能体12 小时前
狂揽6779.8万播放的邪修玩法!用Coze智能体工作流1分钟生成100个爆款视频,附详细教程
aigc
猫头虎15 小时前
HAMi 2.7.0 发布:全面拓展异构芯片支持,优化GPU资源调度与智能管理
嵌入式硬件·算法·prompt·aigc·embedding·gpu算力·ai-native
Mintopia18 小时前
动态数据驱动的 AIGC 模型:Web 端实时更新训练的技术可行性
前端·javascript·aigc
墨风如雪1 天前
Ling-1T:蚂蚁百灵如何以“非思考”策略,开启万亿参数效率新篇章?
aigc
明月(Alioo)1 天前
用AI帮忙,开发刷题小程序:微信小程序中实现Markdown图片解析与渲染功能详解
微信小程序·小程序·aigc
lzq6031 天前
基于AIGC的图表狐深度评测:自然语言生成专业级统计图表的技术实现
信息可视化·aigc
春末的南方城市1 天前
开放指令编辑创新突破!小米开源 Lego-Edit 登顶 SOTA:用强化学习为 MLLM 编辑开辟全新赛道!
人工智能·深度学习·机器学习·计算机视觉·aigc