当前位置: 首页 > article >正文

如何开发一个大模型应用?

1. 背景

AIGC技术的突破性进展彻底改变了技术开发的范式,尤其是以GPT为代表的LLM,凭借其强大的自然语言理解与生成能力,迅速成为全球科技领域的焦点。2023年末,随着ChatGPT的爆火,AIGC技术从实验室走向规模化应用,催生了从智能导购、智能客服、内容创作到企业自动化等众多场景的革新。这一浪潮不仅吸引了学术界与产业界的广泛关注,更激发了开发者投身大模型应用生态的热情。

彼时,我作为初探AIGC领域的开发者,亲历了这场技术变革的起始阶段,并加入了大模型应用开发团队。在一年多的实践中,围绕大模型的核心能力,探索了其在垂直领域中的落地场景,涉及提示工程、知识库、RAG、Agent以及应用架构设计和性能优化等关键技术环节。过程中,既见证了生成式AI的颠覆性潜力,也直面了数据质量、数据存储、幻觉抑制等现实挑战,积累了从理论到实战的宝贵经验。

本文旨在基于本人一线开发经验,系统梳理大模型应用落地的关键技术与实践心得,涵盖技术选型、架构设计、问题解决方案及未来趋势展望。希望通过真实案例的分享,为开发者提供可复用的方法论,同时与行业同行共同探讨AIGC技术的边界与可能性,推动技术生态的协同进化。

2. 探索

要做一个大模型应用,我们先要决定做什么业务领域,导购、客服还是企业应用。然后对模型进行选型、评估涉及的相关领域数据有哪些,要应对哪些场景,如何快速响应给用户、如何保障数据实时性。

2.1 业务领域

我们探索了导购以及客服领域。不同的两种业务形态,在具体实现过程中也有较大的差别,具体后文详述。

2.2 模型选型

刚开始做的时候,几乎是一家独大,即GPT,起初我们选用gpt3.5,在速度和推理能力上相对均衡,然后在部分需要更精准的场景下使用gpt4(能力强但成本高且速度慢)。后来gpt4o出现,性能佳且成本低,我们进行了替换。再后来就是gpt4o-mini,在成本和性能上得到了均衡。在一些特殊场景如图片理解、模版匹配上尝试了智普和内部模型。

2.3 数据领域

导购领域,我们以电商场景下的商品导购为例:需要商品属性、价格、促销、评价、图文视频、选购指南、品类、类目介绍等。
客服领域:需要历史客服对话记录,以及某些场域下的问答记录。

2.4 应对场景

导购领域:选购建议、价格信息、优惠信息、类似商品、大小尺寸、商品推荐等。
客服领域:咨询、投诉、建议等

2.5 数据交互

无论导购还是客服领域我们都是以对话形式与用户交互。用户发问后,当然希望快速响应, 同时希望格式更加规范,内容更加精准。
在数据交互方面我们采用了组件化的方式进行交互,一个组件可能为大模型组件(需调用大模型分析总结)、图文组件(图片文字渲染)、商卡组件(商品信息展示)、商品视频组件(商品介绍)等。这样对于用户来说更加容易理解。而且我们在使用大模型时也是在指定场景,如准备阶段、输出阶段,这样流式的交互对用户来说感知上速度也很快。另外为了数据的准确性和丰富性,我们收集了离线数据到知识库,同时用mq维护数据实时性。

3. 架构设计

现有应用中并未采用以下架构,开发过程中考虑时间以及复杂性进行了简化,这里我们介绍更完善的架构。

3.1大模型交互

先将内部接口、知识库、外部接口等基础数据封装为基层数据能力。在上层基于数据能力封装领域能力,每一项能力即大模型可选择的一个工具,也即前台对应的一个组件。可将所有的领域能力提供给大模型,供大模型分析筛选。基于领域能力可形成上层的客服、导购等应用。
在这里插入图片描述

3.2 RAG链路

上图中的知识库都需要RAG的驱动,这里我们详细说明。
在这里插入图片描述
首先我们需要将源数据同步到ES集群和向量库集群中,分别用于标量检索和向量检索。同时需要通过MQ触达数据变更,近实时同步知识库中的数据。构建好知识库的同时,如果有查询任务,先标量查询ES,同时向量化后查询向量库,分别拿到两份数据后,进行重拍筛选,最后将高相关小token的数据投入大模型进行分析推理。

3.3 数据驱动

大模型选择好工具函数后,即选择了领域能力列表。然后我们需要采用并发编排工具驱动领域能力调用底层的基础数据,拿到基础数据后,再执行领域能力,解析处理逻辑。详细流程图如下:
在这里插入图片描述
上图中还涉及到依赖分层调用以及数据复用、数据注入,另一篇文章有详细介绍此处的并发能力,这里不再赘述。

3.4 交互链路Agent

在这里插入图片描述

4. 总结

在做大模型应用时,主要关注的点在于数据的丰富性以及实时性,大模型推理的合理性、输出的规范性和及时性。在架构设计上,要避免大模型的无限制推理,保证模型分析的可控。同时限制大模型的随意发挥,可通过预定制的能力卡控模型的随意性。为了保障时效性,需要在合适的阶段再调用大模型,同时给用户输出某些内容,避免长时间等待。

相关文章:

如何开发一个大模型应用?

1. 背景 AIGC技术的突破性进展彻底改变了技术开发的范式,尤其是以GPT为代表的LLM,凭借其强大的自然语言理解与生成能力,迅速成为全球科技领域的焦点。2023年末,随着ChatGPT的爆火,AIGC技术从实验室走向规模化应用&…...

01-零基础入门嵌入式系统

1.什么是嵌入式系统 首先我们要知道计算机系统分为大型机、通用计算机和嵌入式系统三大类。 计算机系统的发展,经历了由1台计算机系统为N个人服务的大型机时代到由1台计算机系统为1个人服务的PC时代,正在步入由N台计算机系统为1个人服务的嵌入式时代。 嵌…...

【机器学习】CNN与Transformer的表面区别与本质区别

仅供参考 表面区别 1. 结构和原理: CNN:主要通过卷积层来提取特征,这些层通过滑动窗口(卷积核)捕捉局部特征,并通过池化层(如最大池化)来降低特征的空间维度。CNN非常适合处理具有网格状拓扑结构的数据,如图像。Transformer:基于自注意力(Self-Attention)机制,能…...

[数据结构]二叉搜索树详解

目录 一、二叉搜索树的概念 二、二叉搜索树的性能分析 三、二叉搜索树的中序遍历用于排序去重 四、二叉搜索树的查找 1、查找的非递归写法 2、查找的递归写法 五、二叉搜索树的插入 1、插入的非递归写法 2、插入的递归写法 六、二叉搜索树的删除 1、删除的非递归写法…...

撕碎QT面具(2):groupBox内容居中显示

问题描述: 当笔者在GroupBox中使用Form Layout构建图中内容时,不能居中显示。 解决方案: 1、首先在form layout左右添加横向弹簧,并ctrl进行选中这三个控件。点击水平布局,让中间的控件不变形。 2、选中groupBox&#…...

SpringBoot速成(14)文件上传P23-P26

1. 什么是 multipart/form-data? 想象一下,你有一个包裹要寄给朋友,但包裹里有不同类型的东西:比如一封信(文字)、一张照片(图片)和一个小礼物(文件)。为了确…...

图论入门算法:拓扑排序(C++)

上文中我们了解了图的遍历(DFS/BFS), 本节我们来学习拓扑排序. 在图论中, 拓扑排序(Topological Sorting)是对一个有向无环图(Directed Acyclic Graph, DAG)的所有顶点进行排序的一种算法, 使得如果存在一条从顶点 u 到顶点 v 的有向边 (u, v) , 那么在排序后的序列中, u 一定…...

PTA:使用指针方式求一个给定的m×n矩阵各行元素之和

本题要求编写程序&#xff0c;使用指针方式求一个给定的mn矩阵各行元素之和。&#xff08;例如&#xff1a;scanf("%d", *(matrix i) j); // 使用指针方式访问二维数组元素&#xff09; 输入格式: 输入第一行给出两个正整数m和n&#xff08;1<m<6, 1<n&…...

【iOS】SwiftUI状态管理

State ObservedObject StateObject 的使用 import SwiftUIclass CountModel: ObservableObject {Published var count: Int 0 // 通过 Published 标记的变量会触发视图更新init() {print("TimerModel initialized at \(count)")} }struct ContentView: View {State…...

自制简单的图片查看器(python)

图片格式&#xff1a;支持常见的图片格式&#xff08;JPG、PNG、BMP、GIF&#xff09;。 import os import tkinter as tk from tkinter import filedialog, messagebox from PIL import Image, ImageTkclass ImageViewer:def __init__(self, root):self.root rootself.root.…...

ChatGPT行业热门应用提示词案例-AI绘画类

AI 绘画指令是一段用于指导 AI 绘画工具&#xff08;如 DALLE、Midjourney 等&#xff09;生成特定图像的文本描述。它通常包含场景、主体、风格、色彩、氛围等关键信息&#xff0c;帮助 AI 理解创作者的意图&#xff0c;从而生成符合要求的绘画作品。 ChatGPT 拥有海量的知识…...

Visual Studio Code的下载安装与汉化

1.下载安装 Visual Studio Code的下载安装十分简单&#xff0c;在本电脑的应用商店直接下载安装----注意这是社区版-----一般社区版就足够用了---另外注意更改安装地址 2.下载插件 重启后就是中文版本了...

分词器(Tokenizer) | 有了分词器,为什么还需要嵌入模型

文章目录 什么是tokenizer有了分词器&#xff0c;为什么还需要嵌入模型分词器为什么在transformers 里Hugging Face的Tokenizer大模型不同tokenizer训练效果对比分词器库选择当前顶尖大模型所采用的 Tokenizer 方法与词典大小 参考 什么是tokenizer Tokenizers huggingface官方…...

scala中 隐式转换

一、 隐式转换&#xff1a; 编译器 偷偷地&#xff0c;自动地帮我们把一种数据类型转换为另一种类型 例如&#xff1a; int --> double object test {// 复习隐式转换// 隐式转换&#xff1a; 编译器 偷偷地&#xff0c;自动地帮我们把一种数据类型转换为另一…...

实战开发coze应用-姓氏头像生成器(上)

​欢迎关注【AI技术开发者】 上次&#xff0c;我们开发了一个对话形式的头像生成器智能体&#xff08;Agents&#xff09;&#xff0c;广受大家欢迎。 同时也接收到一些用户的反馈&#xff0c;生成前无法看到头像样式、初次使用不会用等等。 对此&#xff0c;我准备使用Coze开…...

【Node.js】express框架

目录 1初识express框架 2 初步使用 2.1 安装 2.2 创建基本的Web服务器 2.3 监听方法 2.3.1 监听get请求 2.3.2 监听post请求 2.4 响应客户端 2.5 获取url中的参数(get) 2.5.1 获取查询参数 2.5.2 获取动态参数 2.6 托管静态资源 2.6.1 挂载路径前缀 2.6.2 托管多…...

JS逆向实战三:1688工厂信息

本文说明&#xff1a;B站学习笔记整理&#xff0c;仅供学习参考~~ 网站&#xff1a;https://sale.1688.com/factory/category.html 1. 页面分析与解密 刷新页面&#xff0c;通过对关键词进行搜索&#xff0c;实现接口定位。 通过多次刷新页面或者页面翻页&#xff0c;找到变化…...

Pipeline 获取 Jenkins参数

Pipeline 获取 Jenkins参数 Jenkins 提供了一系列默认的环境变量&#xff0c;这些变量在构建过程中可以被使用。以下是一些常见的 Jenkins 默认环境变量&#xff1a; WORKSPACE: 当前构建的工作目录路径 JOB_NAME: 当前构建的作业名称 BUILD_NUMBER: 当前构建的编号&#xff…...

ESP32 在IDF_V5.3.1版本下实现AP无线热点模式!(带WIFI事件处理)

一、什么是ESP32的AP无线热点模式&#xff1f; ESP32 的 AP&#xff08;Access Point&#xff09;模式 是指 ESP32 作为无线接入点运行&#xff0c;它自己创建一个 Wi-Fi 网络&#xff0c;允许其他设备&#xff08;如手机、电脑、平板等&#xff09;直接连接到它上面&#xff0…...

Elasticsearch:探索 CLIP 替代方案

作者&#xff1a;来自 Elastic Jeffrey Rengifo 及 Toms Mura 分析图像到图像和文本到图像搜索的 CLIP 模型的替代方案。 在本文中&#xff0c;我们将通过一个模拟房地产网站的实际示例介绍 CLIP 多模态模型&#xff0c;探索替代方案&#xff0c;并分析它们的优缺点&#xff0c…...

Nginx 在Linux中安装、使用

Nginx 在Linux中安装、使用 一、官网下载Nginx 官网地址&#xff1a;http://nginx.org/en/download.html 二、上传到服务器解压 1、上传到指定的服务器地址 上传的地址自己决定&#xff0c;我上传到 /data/home/prod/nginx/ 2、解压 使用命令&#xff1a; tar -zxvf “你的N…...

CodeGPT 使用教程(适用于 VSCode)

CodeGPT 使用教程&#xff08;适用于 VSCode&#xff09; CodeGPT 是一个 VSCode 插件&#xff0c;可以让你在代码编辑器中直接调用 GPT 进行代码补全、优化、调试等操作。以下是详细的安装和使用步骤&#xff1a; 1. 安装 CodeGPT 方式 1&#xff1a;从 VSCode 插件市场安装…...

Python常见面试题的详解9

1. 如何找出整数数组中第二大的数 要点 定义一个函数用于在整数数组里找出第二大的数。 若数组元素少于 2 个&#xff0c;则返回 None。 借助两个变量 first 和 second 来跟踪最大数和第二大数。 可以添加异常处理&#xff0c;以应对输入非整数数组的情况。 若数组包含重复…...

【Spring+MyBatis】_图书管理系统(下篇)

图书管理系统上篇、中篇如下&#xff1a; 【SpringMyBatis】_图书管理系统&#xff08;上篇&#xff09;-CSDN博客 【SpringMyBatis】_图书管理系统&#xff08;中篇&#xff09;-CSDN博客 目录 功能5&#xff1a;删除图书 6.1 约定前后端交互接口 6.2 后端接口 6.3 前端…...

若依-@Excel新增注解numberFormat

Excel注解中原本的scale会四舍五入小数&#xff0c;导致进度丢失 想要的效果 显示的时候保留两个小数真正的数值是保留之前的数值 还原过程 若以中有一個專門的工具类&#xff0c;用来处理excel的 找到EXCEL导出方法exportExcel()找到writeSheet,写表格的方法找到填充数据的方法…...

Cherry-Studio下载安装教程,AI面向开发者的工具或平台(付安装包)

文章目录 一、Cherry Studio是什么&#xff1f;二、功能特点 一、Cherry Studio是什么&#xff1f; Cherry Studio 是一款开源跨平台的多模型服务桌面客户端&#xff0c;集成超 300 个大语言模型&#xff0c;内置 300 多个预配置 AI 助手&#xff0c;支持多格式文件处理、全局…...

多信道接收机

线性调频&#xff08;LFM&#xff09;信号&#xff0c;模拟多个目标反射的回波信号&#xff0c;并进行混频和滤波处理。 % 参数设置 c 3e8; % 光速 (m/s) f0 8.566e9; % 载波频率 (Hz) T 10e-6; % 脉冲持续时间 (s) B 100e6; % 信号带宽 (Hz) mu B / T; % 调频斜率 (Hz/s…...

修改项目的一些前端记录(自用)

<div style"background:#f2f2f2;position:absolute;top:75px;width:10%;bottom:0px">\<ol class"tree">\<li>\<label for"folder1" class"folderOne foldertop"><img src"common/img/时间.png" …...

阿里云虚机的远程桌面登录提示帐户被锁定了

提示由于安全原因&#xff0c;帐户被锁定。 阿里云虚机ECS的远程桌面登录提示帐户被锁定了&#xff0c;只能登录阿里云处理 阿里云-计算&#xff0c;为了无法计算的价值 需选择通过VNC连接 然后计算机管理&#xff0c;解除帐户锁定即可。...

AD(Altium Designer)器件封装——立创商城导出原理图和PCB完成器件封装操作指南

1、立创商城下载原理图和PCB图 1.1 打开立创商城 官网:www.SZLCSC.COM 1.2 寻找所需器件 以芯片为例 器件类——>芯片类——>对应芯片 1.3 确定所需芯片 确定芯片——>数据手册 1.4 打开原理图和PCB图 1:原理图 2:PCB 3:打开 1.5 导出原理图 操作...