使用AWS Amplify AI Kit和Neon Postgres构建基于RAG的应用步伐

打印 上一主题 下一主题

主题 880|帖子 880|积分 2640

序言

现代应用步伐开发已经转变为不仅包括提供出色开发人员体验(DX)的工具,还包括简单入门和生产路径之间的合理平衡。正是这种情绪激发了Amplify AI kit的发布。这种对常见AI任务(如与大型语言模子(LLM)对话和从提示生成内容)的抽象意味着开发人员有更快的上市时间,制止编写样板代码。
在这篇文章中,我们将逾越入门体验,使用来自Neon的无服务器Postgres数据库来检索产物数据,而不是来自Amplify的默认数据库模子。如许做,我们将使用检索加强生成(RAG)简化与LLM对话所需的代码。

应用概述

对应用步伐消费者的一个共同吸引力是人工智能怎样被用来加强现有产物,而不是与之竞争。一个简单有效的演示方法是创建一个客户可以与之交互的聊天机器人。在实际天下的场景中,这不会制止客户自己购物,但会引导他们使用天然语言举行购买。

 从架构上讲,每当用户访问应用步伐时,他们都可以与我们的LLM驱动的机器人聊天。这些模子是根据一般数据练习的,尽管在我们的用例中,我们也希望它了解我们的产物数据。产物信息可以随时更改,因此从我们数据库中的信息中提取很紧张。这种在一般信息或访问特定命据之间举行选择的想法很强大,并且可以通过工具(也称为“函数调用”)来实现。

要记住的一个紧张概念是,当LLM选择使用工具时,它不会代表您调用您的数据。它只是在用户提示的环境下传递哪个工具最有效。从那里,应用步伐决定他们想要调用什么函数。 

然后未来自该函数的相应发送回LLM,并将其格式化为天然语言提供给终极用户。
正如人们可能想象的那样,自己编排这种模式不仅会很乏味,还会导致错误。幸运的是,这种无差别的繁重工作是Amplify AI套件默认提供的。
具体来说,本项目将使用Amazon BedRock和Claude 3.5 Haiku LLM,因为该模子带有工具支持。Amplify将答应我们指定一个与我们的数据库相对应的工具。在本例子中,这将是我们的Neon Postgres数据库,此中包含产物信息。
 
使用Neon创建无服务器Postgres数据库

连接到现有数据源的本领意味着开发人员可以在默认数据库Amazon DynamoDB之外使用Amplify的模式自省功能,以代表他们生成CRUD操作。设置Neon数据库很简单。创建帐户后,系统会提示您创建项目。

 Neon支持基于分支的项目,类似于git。这些是main分支的副本。在我的例子中,我可以选择创建一个名为dev/mtliendo的分支。这是推荐的,但不是必需的。在任何一种环境下,您都需要确保复制该分支的连接字符串,因为它在以下部分中很紧张。

 
我们的默认数据库现在已经设置好,但是它还没有包含任何表。更具体地说,我们的表模式还没有定义。你会很难过地发现我不知道怎样写SQL。幸运的是,霓虹灯通过他们的“用人工智能生成”功能办理了这个问题。通过与他们的法学硕士聊天,我想做什么,会为我生成一个回复。
在他们的SQL编辑器中,我写了以下内容:
   创建一个名为“Products”的表模式。每个产物都有一个随机ID、一个作为日期时间的“更新时间”字段、一个作为日期时间的“创建时间”字段、一个作为数字、一个“名称”和一个“形貌”的“以美分为单位的价格”字段。
  

 
运行提示符后,我看到以下相应:
  1. CREATE TABLE Products (
  2.     id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  3.     updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
  4.     created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
  5.     price_in_cents INTEGER NOT NULL,
  6.     name VARCHAR(255) NOT NULL,
  7.     description TEXT
  8. );
复制代码
从那里,我可以选择对代码举行更改,并在我熟悉语法后运行一次下令。
要验证一切是否按预期设置,单击侧边栏中的“表”链接将答应我们验证模式,以及填充我们的数据库。


   对于这个项目,我已经向数据库中添加了几个项目。此外,请务必将连接字符串复制到我们的数据库中,因为我们在下一节中需要它。连接字符串可以在侧边栏的“概述”部分找到。
  使用AI套件加强Amplify Gen 2

AWS Amplify是将您的前端应用步伐连接到由AWS提供支持的后端的最简单方法。假设已经创建了使用JavaScript框架(如NextJS)的应用步伐,通过在项目根目次中运行以下下令来搭建Amplify文件:
  1. npm create amplify
复制代码
这将安装Amplify的依赖项并创建一个amplify目次。在修改该目次中的代码之前,我们将安装Amplify AI套件所需的其他一些依赖项:
  1. npm i @aws-amplify/ui-react @aws-amplify/ui-react-ai
复制代码
这些是我们将很快使用的UI组件。
在此之前,我们将让Amplify使用products表自省我们的数据库,以便我们可以在后端使用它。第一步是将我们的连接字符串存储为秘密。这个秘密存储在AWS Systems Manager的参数存储中。幸运的是,Amplify提供了一种简单的方法来做到这一点。
在您的终端中,运行以下下令:
  1. npx ampx sandbox secret set SQL_CONNECTION_STRING
复制代码
这将设置一个秘密值SQL_CONNECTION_STRING并提示输入该值。从这里,粘贴从Neon复制的连接字符串,然后按回车键。
   本节假设您已经在本地计算机上配置了AWS Amplify。假如您需要配置Amplify,请参阅留档了解说明。
  存储秘密后,我们可以指示Amplify自省我们的数据库并创建我们可以在前端应用步伐中使用的CRUD操作:
  1. npx ampx generate schema-from-database --connection-uri-secret SQL_CONNECTION_STRING --out amplify/data/schema.sql.ts
复制代码
运行此下令将在amplify/data文件夹中创建一个schema.sql.ts文件。紧张的是不要修改此文件,因为它由放大器管理。运行该下令后,该文件应类似于以下屏幕截图:

 
Amplify使用此文件将我们的Postgres数据库映射为与其a.model方法一起使用的格式。
   假如你想了解放大器在幕后做了什么来完成这项工作,请检察留档。
   
  1. import { type ClientSchema, defineData, a } from '@aws-amplify/backend'
  2. import { schema as generatedSqlSchema } from './schema.sql'
  3. const sqlSchema = generatedSqlSchema.setAuthorization((models) => [
  4.     models.items.authorization((allow) => [allow.authenticated().to(['read'])]),
  5. ])
  6. const schema = a.schema({
  7.     chat: a
  8.         .conversation({
  9.             aiModel: a.ai.model('Claude 3.5 Haiku'),
  10.             systemPrompt:
  11.                 'You are a helpful assistant, that focuses on selling and upselling merchandise',
  12.             tools: [
  13.                 a.ai.dataTool({
  14.                     name: 'MerchQuery',
  15.                     description:
  16.                         'Search for questions regarding merchandise, shopping apparel, and item prices.',
  17.                     model: a.ref('items'), //! This refers to the name of our table
  18.                     modelOperation: 'list',
  19.                 }),
  20.             ],
  21.         })
  22.         .authorization((allow) => allow.owner()),
  23. })
  24. const combinedSchema = a.combine([sqlSchema, schema])
  25. export type Schema = ClientSchema<typeof combinedSchema>
  26. export const data = defineData({ schema: combinedSchema })
复制代码
现在我们的Neon数据库在我们的应用步伐中,我们可以将其导入amplify/data/resource.ts文件,并将其与放大AI套件的对话功能相结合。让我们分解一下这个文件中发生了什么:


  • 第4行:这里我们正在为Neon的products表分配授权规则。在这种环境下,只有登录用户才气对其执行read操作。
  • 第8行:我们创建一个名为chat的标识符。这是一个对话机器人,它至少接收LLM的名称,并提示它应该怎样运行。模子名称是键入的并且在Intellisense中可用,这毫无价值。
  • 第13行:我们通过给它一个工具来加强我们的机器人。名称和形貌由我们来定义,而model必须引用我们Neon数据库的名称。现在唯一支持的modelOperation是list。
  • 第22行:此行提供了对幕后发生的事变的洞察。DynamoDB表跟踪已登录的用户对话历史记录。
通过将所有这些元素放在一起,我们有了一个完全托管的办理方案,可以安全地与了解我们数据库中项目的LLM举行对话。
为了测试我们的办理方案,我们将首先通过运行以下下令来部署我们的AWS后端:
  1. npx ampx sandbox
复制代码
部署后,我们可以导入我们的Amplify配置并配置我们的客户端应用步伐以使用Amplify提供的配置、UI组件和挂钩:
  1. import { generateClient } from 'aws-amplify/api'
  2. import { Schema } from '@/amplify/data/resource'
  3. import { useEffect } from 'react'
  4. import { Amplify } from 'aws-amplify'
  5. import awsconfig from '@/amplify_outputs.json'
  6. import { withAuthenticator } from '@aws-amplify/ui-react'
  7. import { AIConversation, createAIHooks } from '@aws-amplify/ui-react-ai'
  8. import '@aws-amplify/ui-react/styles.css'
  9. Amplify.configure(awsconfig)
  10. const client = generateClient<Schema>()
  11. const { useAIConversation } = createAIHooks(client)
复制代码
配置后,可以在约莫20行代码中设置包含聊天、对话感知、流式传输、加载状态和身份验证的整个前端:
  1. function Home() {
  2.     const [
  3.         {
  4.             data: { messages },
  5.             isLoading,
  6.         },
  7.         handleSendMessage,
  8.     ] = useAIConversation('chat')
  9.     return (
  10.         <div className="flex justify-center items-center m-10 max-w-screen-md">
  11.             <AIConversation
  12.                 avatars={{ user: { username: 'Focus Otter' } }}
  13.                 messages={messages}
  14.                 handleSendMessage={handleSendMessage}
  15.                 isLoading={isLoading}
  16.                 variant="bubble"
  17.                 welcomeMessage="Hello! I'm your helpful storefront assistant. Feel free to ask me questions about my merch!"
  18.             />
  19.         </div>
  20.     )
  21. }
  22. export default withAuthenticator(Home)
复制代码
请随意将上面的代码与本文中的第一个屏幕截图举行比力。Amplify AI套件的新AIConversation组件提供了完备的聊天UI,同时仍公开各种道具以进一步定制您的特定需求。

结论

在这篇文章中,我们讨论了构建支持使用检索加强生成(RAG)与LLM对话的全栈应用步伐的一些复杂性。然后,我们看到了AWS Amplify的新AI套件怎样通过抽象样板文件来极大地简化这种体验,从而答应开发人员专注于真正使应用步伐与众差别的部分。正如我们所看到的,这种轻松的设置不会以捐躯可扩展性为代价。我们通过从Neon创建Postgres数据库并将其与我们的工具一起使用来证实这一点。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表