构建一个基础的大型语言模型(LLM)应用程序

  每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领域的领跑者。点击订阅,与未来同行! 订阅:https://rengongzhineng.io/

几年前,人工智能还是为数不多、钱包鼓得像气球的科技公司的专利玩意儿。但转眼到了今天,找个不急着把AI塞进它们流程和产品里的科技公司都难了——哪怕他们自己对这东西长啥样还一头雾水。

这篇文章,我们就来探索这块新兴领域。如今的AI辅助应用是怎么运作的呢?它们用的是什么架构,为什么在其他方法摔跟头的地方它们却能大放异彩?

“货架上直接拿”的AI


虽然AI给人感觉挺震撼的,但它其实不是啥新鲜事。多年来,科技行业的领头羊们已经在大型应用中使用了机器学习——比如Netflix优化内容编码,Uber计算美食推荐,亚马逊规划配送。这些AI特性都非常专业,普通软件供应商的工具箱里是找不到的。

今儿个,形势有了变化,随着即用型AI技术的爆炸式增长,一些经验丰富的开发团队即使没有巨额预算和专门的机器学习知识,也能将这些功能整合到他们的应用中。

这种向即用型工具的转变主要集中在AI领域的一个相对较小且非常具体的部分:大型语言模型,即LLMs。从更广的视角来看,LLMs可能只是软件开发中可访问AI演进的第一步。未来,我们会有更多工具和更好的模式来将AI特性集成到定制软件中。现在已经很清楚,当前的LLMs并不是许多场景下的完美工具——它们有自己的怪癖、限制和意外的复杂性。但是,获取即用型AI的吸引力非常强大,大多数公司都不在乎这些。他们不愿等待,打算尽可能快地从这项技术中挖掘出每一种可能的用途。

定制化的基本要求


那么,为什么LLMs在其他类型的AI因过于复杂而难以广泛采用的地方却能取得成功呢?有几个原因,但没有基础模型的兴起,这种转变是不可能的。

本质上,基础模型是像OpenAI、谷歌和Facebook这样的公司构建的巨大的、通用目的模型。你可以直接使用一个基础模型(就像ChatGPT所做的)。但真正的诀窍在于调整基础模型以适应个别用例,而不是从头开始训练一个新模型。这是一个重要的区别,因为训练是既耗资金又需要专业知识的部分。

这听起来很有希望,但挑战在于要能够足够定制模型以满足不同行业和不同领域的需求——换句话说,就是独立软件供应商工作并盈利的那些细分市场。一个基础模型本身可能并不令人兴奋,但如果软件公司能够定制它以适用于医疗记录或技术支持票据,那就大不相同了。

但这里有个问题——基础模型并不那么容易定制。你可以尝试用新知识来微调它们,但模型已经知道的内容往往会主导你希望它们学习的新信息,因为这些模型非常庞大。虽然微调并不像从头开始训练那样复杂和昂贵,但它仍然需要时间和关键资源。

因此,目前普遍接受的方法是使用上下文学习。虽然有几种不同的技术,但总的想法是在你当前的请求上下文中给LLM提供所需的信息。这可能意味着展示一些你想要的例子(例如,“按照这种格式”)或在你的提示中包括一些额外的数据(例如,“使用这块数据回答问题”)。这些技术都不是新的,但也没有哪一种成为完全定型的最佳实践,因为LLMs还在快速变化。但核心思想是,上下文学习给开发者提供了他们需要的东西:一个只需最少量定制就能构建适当软件功能的基础模型。

大型语言模型(LLM)应用程序的经典架构

既然我们已经了解了所有背景信息,现在是时候仔细研究人们今天正在构建的LLM应用程序了。

首先,想象一种天真的方法——一个应用程序简单地坐在用户和LLM之间,转发所有请求和响应。这种情况看起来是这样的:

代理到一个LLM 改善这种情况的第一种方法是通过提示工程——换句话说,是在你发送给LLM之前对用户的请求进行正式化和改进。这里有一个例子,它采用用户数据并将其与应用程序指令结合起来,构建最终的提示:

提示工程 现在仍然只有一个提示被发送到LLM,但现在它是一个详细的指令文档,分成了清晰的几部分,用户的数据嵌入其中。

准备一个提示是一个关键步骤,但还有更多可以做的。将应用程序视为LLM上的一个独立的抽象层有助于思考。换句话说,应用程序可以为LLM交互添加新的可能性和功能。例如,你可以获取用户的请求,推断他们想要执行的任务,并使用该任务来发起多个LLM请求。有时,一个请求会使用从前一个请求返回的数据,这是一种称为提示链的技术:

提示链 我们还没有看到今天LLM应用的主导模式,即检索增强生成(RAG)。这里的想法是从另一个来源提取一块相关的、特定领域的信息,并使用该信息在你发送给LLM的提示中。检索到的信息可以包括私有数据,给基础模型提供它以前从未见过的信息。

检索增强生成(RAG) RAG的概念看起来很直接。然而,它引入了两个重大挑战:

数据的数量

你不能把LLM可能需要的所有东西都塞进你的提示中。例如,如果你想要一个LLM使用《战争与和平》中的引用来构建论点,你不能把整本书的文本放入提示中,因为那超出了LLM的上下文窗口可用的空间。(上下文窗口是LLM一次可以考虑的所有新数据的度量。即将到来的LLM可能会有明显更大的上下文窗口,可能解决这个问题。然而,专家们仍然相信,将大量数据塞进上下文窗口在可预见的未来将是极其缓慢和昂贵的。)

数据的相关性

如果你不能使用所有东西,你给LLM的东西最好是相关的。例如,如果你在询问关于《战争与和平》的问题,你应该选择可能包含你希望LLM分析的内容的摘录。要使这项工作,你需要另一种AI驱动的能力,称为语义搜索,我们将很快讨论。 这些架构是关键的构建块。当你将这些技术结合在一起时,你将看到一些真正新的AI辅助交互的可能性。例如,想象你正在创建一个个人健康应用程序。如果你没有这些架构在心中,你可能会实现一个非常简单的模式:添加一个聊天机器人功能,告诉LLM它是一个致力于提供建议的健康专家,并让用户提问。但如果你更有野心,你可以构建这样工作的软件:

  1. 首先,应用程序采访用户以收集健身目标并创建个人档案(不需要AI)。
  2. 接下来,应用程序要求LLM根据个人档案创建总体健康目标,可能会查看一份经过审核的建议列表或使用一个可信来源。
  3. 然后,根据用户的兴趣和行动,应用程序要求LLM构建样本菜单,建议正念练习,并计划每周的锻炼时间表。

也许你心中有更雄心勃勃的互动想法——例如,在日历中添加锻炼提醒,将食谱成分放入购物清单,寻找当地活动,发送电子邮件,启动其他应用程序。此时,就很清楚LLM不再仅仅是一个文档生成器或智能搜索工具。

这些想法有些还不成熟和实验性。目前,我们有很多令人印象深刻的玩具项目,但在这个领域还没有突出的成功。但这种情况很可能在几个月内,而不是几年内发生变化。

基础建设

在我们迄今为止看到的例子中,“应用程序”部分是我们开发者需要构建的,我们利用自己的常规技巧和对问题领域及业务的理解来完成这一任务。应用程序外部有两个预构建的成分:

  • 大型语言模型(LLM)
  • 向量数据库

让我们深入了解实现这一架构的技术细节。

选择LLM


目前,开发者们用来原型设计新LLM应用的最常见的LLM是OpenAI的GPT-4。OpenAI API的优势在于它是最成熟的产品。它是最易于编程使用的LLM,其响应最为一致,需要的额外工作最少。

开发者创建了概念验证之后,会进行实验。更便宜的GPT-3.5 Turbo能否同样有效?把它迁移到像Claude或甚至是开源的Llama这样的替代服务上怎么样,这两者都可以通过亚马逊Bedrock服务轻松访问?如果你雄心勃勃,一个开源的LLM模型可以自我托管,尽管这自带其挑战,目前这还不是一个常见的方法。

选择向量数据库


向量数据库以一种特殊的数值表示形式存储文本块,称为向量嵌入。这与LLM理解提示中的文本的过程相同。但拥有嵌入式内容的真正优势在于你可以使用自然语言处理(NLP)的特性来分析它。最有用的是,你可以使用词语的概念含义而非它们的字母来进行搜索。例如,“认证”的嵌入可能与“密码”的嵌入类似,允许搜索找到相关内容,这些内容不一定使用完全相同的词语,但覆盖相同的主题。

NLP是支撑LLMs的AI的基础领域。为了为你自己的内容创建嵌入,你需要一个嵌入模型。你可以使用一个开源库——有几个——但再次强调,最简单的服务是由OpenAI API提供的。


一旦你创建了嵌入,就需要将它们存储在数据库中。你需要使用一个向量数据库,它将索引你的文本块,以便你能高效地搜索它们。目前最常用的向量数据库是Pinecone,它是一个完全托管的云服务。然而,向量数据库领域几乎与LLMs一样快速发展,还有许多其他产品可以尝试。

未来,我将更仔细地查看使这些单独部分工作的工具,比如不同语言的LLM库。现在你已经对整体架构有了坚实的理解,这些细节将更有意义。即使你现在不急于开始构建自己的AI驱动实验,这个概览仍然是一个很好的参考点。因为到明年这个时候,这个领域肯定会再次发生翻天覆地的变化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/497478.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Radio Silence for mac 好用的防火墙软件

Radio Silence for Mac是一款功能强大的网络防火墙软件,专为Mac用户设计,旨在保护用户的隐私和网络安全。它具备实时网络监视和控制功能,可以精确显示每个网络连接的状态,让用户轻松掌握网络活动情况。 软件下载:Radio…

图扑数字孪生智慧城市,综合治理一屏统览

现代城市作为一个复杂系统,牵一发而动全身,城市化进程中产生新的矛盾和社会问题都会影响整个城市系统的正常运转。智慧城市是应对这些问题的策略之一。领导曾在中央城市工作会议上指出,城市工作要树立系统思维,从构成城市诸多要素…

探索数据库mysql--------------mysql主从复制和读写分离

目录 前言 为什么要主从复制? 主从复制谁复制谁? 数据放在什么地方? 一、mysql支持的复制类型 1.1STATEMENT:基于语句的复制 1.2ROW:基于行的复制 1.3MIXED:混合类型的复制 二、主从复制的工作过程 三个重…

HarmonyOS 应用开发之UIAbility组件与UI的数据同步

基于当前的应用模型,可以通过以下几种方式来实现UIAbility组件与UI之间的数据同步。 使用EventHub进行数据通信:在基类Context中提供了EventHub对象,可以通过发布订阅方式来实现事件的传递。在事件传递前,订阅者需要先进行订阅&a…

I/O模型的一些理解

I/O模型的一些理解 一些基本的概念同步阻塞、同步非阻塞、异步阻塞、异步非阻塞总结概念 I/O模型一些例子 从源头解释从TCP发送数据的流程说起阻塞I/O | 非阻塞I/OI/O多路复用信号驱动I/O异步I/O再谈IO模型里面的同步异步 参考连接 参考链接 参考链接 一些基本的概念 阻塞(b…

Postman传对象失败解决

文章目录 情景复现解决方案总结 情景复现 postman中调用 debug发现pId传入失败 分析解释: 实体类中存在pId、uid和num字段 controller层将GoodsCar作为请求体传入 解决方案 当时觉得很奇怪,因为uid和num可以被接收,而pId和num的数据类型相…

pyecharts操作三

pyecharts操作三 pyecharts 是一个用于生成Echarts图表的Python库。Echarts是百度开源的一个数据可视化JS库,可以生成一些非常酷炫的图表。 环境安装 pip install pyecharts 检查版本 import pyecharts print(pyecharts.version) 2.0.3 GL关系图 import rando…

uniApp使用XR-Frame创建3D场景(3)光源投影的运用。

上一篇讲解了如何在uniApp中创建xr-frame子组件并创建简单的3D场景。 这篇我们讲解光源在场景中的运用以及相关属性。 在子组件 xr-start的index.wxml文件中我们加入如下代码 <xr-scene render-system"alpha:true" bind:ready"handleReady"><xr…

PhpStorm 2023 for Mac/Win:开启PHP集成开发新纪元,让编程更高效更智能

在数字时代的浪潮中&#xff0c;PHP作为一种广泛应用的服务器端脚本语言&#xff0c;其重要性不言而喻。而要在PHP的世界里游刃有余&#xff0c;一款强大的集成开发环境&#xff08;IDE&#xff09;是必不可少的。PhpStorm 2023&#xff0c;正是这样一款能够助您一臂之力的编程…

语音模块摄像头模块阿里云结合,实现垃圾的智能识别

语音模块&摄像头模块&阿里云结合 文章目录 语音模块&摄像头模块&阿里云结合1、实现的功能2、配置2.1 软件环境2.2 硬件配置 3、程序介绍3.1 程序概况3.2 语言模块SDK配置介绍3.3 程序文件3.3.1 开启摄像头的程序3.3.2 云端识别函数( Py > C ) & 串口程序…

FebHost:什么是哈萨克斯坦.KZ域名?

哈萨克斯坦&#xff0c;作为中亚地区重要的一员,其国家域名”.kz”正成为这个独立国家在网络世界中的代表。作为一个经济快速发展的国家,哈萨克斯坦的互联网基础设施和网络应用也在蓬勃发展。而.kz域名正是哈萨克斯坦网络身份的重要体现。 作为注册和管理.kz域名的主要机构,哈…

helm 部署 Kube-Prometheus + Grafana + 钉钉告警部署 Kube-Prometheus

背景 角色IPK8S 版本容器运行时k8s-master-1172.16.16.108v1.24.1containerd://1.6.8k8s-node-1172.16.16.109v1.24.1containerd://1.6.8k8s-node-2172.16.16.110v1.24.1containerd://1.6.8 安装 kube-prometheus mkdir -p /data/yaml/kube-prometheus/prometheus &&…

【Web应用技术基础】CSS(6)——使用 HTML/CSS 实现 Educoder 顶部导航栏

第一题&#xff1a;使用flex布局实现Educoder顶部导航栏容器布局 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Educoder</title><script src"https://cdn.staticfile.org/jquery/1.1…

语音陪玩交友软件系统程序-app小程序H5三端源码交付,支持二开!

电竞行业的发展带动其周边产业的发展&#xff0c;绘制着游戏人物图画的抱枕、鼠标垫、海报销量极大&#xff0c;电竞游戏直播、游戏教程短视频也备受人们喜爱&#xff0c;自然&#xff0c;像游戏陪练、代练行业也随之生长起来&#xff0c;本文就来讲讲&#xff0c;从软件开发角…

Starrocks基于主机和容器的读写测试

背景介绍 在云原生时代&#xff0c;存算分离架构显然已经是当下大数据架构的必备选型&#xff0c;但是在不同的虚拟化计算资源&#xff08;主机、容器&#xff09;之上&#xff0c;是否能有差异点以及对于不同服务的性能损耗程度如何&#xff1f;来判断应该在什么样的场景下选…

react+vite+antD+reduce+echarts项目完整记录

reactviteantDreduceecharts项目完整记录 之前写前端项目&#xff0c;都是用的vue&#xff0c;从最开始的vue2到后来的vue3&#xff0c;断断续续写了3年&#xff0c;打包工具也从webpack转到了vite&#xff0c;全局数据管理工具从vuex转到了pinia。总体而言&#xff0c;vue3对…

软件工程学习笔记12——运行维护篇

运行维护篇 一、版本发布1、关于软件版本2、版本发布前&#xff0c;做好版本发布的规划3、规范好发布流程&#xff0c;保障发布质量 二、DevOps工程师1、什么是 DevOps 三、线上故障1、遇到线上故障&#xff0c;新手和高手的差距在哪里2、大厂都是怎么处理线上故障的 四、日志管…

自然语言处理(NLP)全面指南

自然语言处理&#xff08;NLP&#xff09;是人工智能领域中最热门的技术之一&#xff0c;它通过构建能够理解和生成人类语言的机器&#xff0c;正在不断推动技术的发展。本文将为您提供NLP的全面介绍&#xff0c;包括其定义、重要性、应用场景、工作原理以及面临的挑战和争议。…

JavaEE之网络初识(网络中的一些基本概念)详解

&#x1f63d;博主CSDN主页: 小源_&#x1f63d; &#x1f58b;️个人专栏: JavaEE &#x1f600;努力追逐大佬们的步伐~ 目录 1. 前言 2. 网络中的一些基本概念 2.1 IP地址 2.2 端口号 2.3 网络协议 2.4 协议分层 2.5 封装 2.6 分用 (封装的逆向过程) 2.7 客户端 vs …

uniApp使用XR-Frame创建3D场景(7)加入点击交互

上篇文章讲述了如何将XR-Frame作为子组件集成到uniApp中使用 这篇我们讲解如何与场景中的模型交互&#xff08;点击识别&#xff09; 先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"><xr-node><xr-mesh id"…