Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Redis

Xây dựng các ứng dụng AI nâng cao bằng SDK AI của Upstash và Vercel

Trong bài đăng trên blog này, chúng tôi sẽ đi sâu vào các ứng dụng AI có thể được tạo bằng Upstash Redis, Upstash Vector và Vercel AI SDK. Chúng ta sẽ khám phá các tính năng và khả năng độc đáo của từng công cụ, nêu bật cách chúng có thể được tích hợp để xây dựng các giải pháp AI mạnh mẽ và hiệu quả. Khi xem xét chức năng của những công cụ này, chúng tôi cũng sẽ xem qua ngắn gọn các ứng dụng mẫu.

Vectơ nâng cấp

Trước tiên hãy hiểu vectơ và cơ sở dữ liệu vectơ.

Cơ sở dữ liệu vectơ là hệ thống lưu trữ dữ liệu chuyên dụng được thiết kế để lưu trữ và truy xuất dữ liệu ở định dạng mảng số, được gọi là vectơ. Các cơ sở dữ liệu này xử lý hiệu quả khối lượng lớn vectơ chiều cao, khiến chúng trở nên lý tưởng để quản lý các cấu trúc dữ liệu phức tạp. Lợi ích chính của việc sử dụng cơ sở dữ liệu vectơ:

Hiệu quả :Các cơ sở dữ liệu này cung cấp khả năng lưu trữ và truy xuất hiệu quả các vectơ chiều cao, giảm tải tính toán và tăng tốc độ phản hồi truy vấn trong các ứng dụng AI.

Độ chính xác :Các thuật toán tìm kiếm được tối ưu hóa đảm bảo rằng cơ sở dữ liệu vectơ tìm thấy chính xác các điểm dữ liệu phù hợp nhất, nâng cao hiệu suất của các hệ thống yêu cầu phân loại dữ liệu, chẳng hạn như công cụ đề xuất và hệ thống phát hiện gian lận.

Xử lý theo thời gian thực :Với khả năng xử lý dữ liệu theo thời gian thực, cơ sở dữ liệu vectơ lý tưởng cho các ứng dụng yêu cầu phản hồi ngay lập tức, chẳng hạn như chatbot và phân tích thời gian thực.

Các vectơ trong AI thường biểu thị mô hình đối tượng dựa trên phần nhúng để nắm bắt các tính năng hoặc đặc điểm thiết yếu trong ngữ cảnh của ứng dụng. Ví dụ:trong ứng dụng AI dựa trên xử lý ngôn ngữ tự nhiên, một vectơ có thể biểu thị ngữ nghĩa của văn bản, lời nói hoặc tài liệu nhất định. Trong một ứng dụng dựa trên xử lý hình ảnh, các vectơ biểu thị các đặc điểm của hình ảnh nhất định.

Bây giờ, hãy cùng tìm hiểu sâu về Upstash Vector.

Upstash Vector là cơ sở dữ liệu vectơ không có máy chủ sử dụng DiskANN làm thuật toán tìm kiếm độ tương tự vectơ với 3 loại hàm tương tự:Cosine, khoảng cách Euclidian và tích số chấm. Vì Upstash Vector không có máy chủ nên nó có mức giá trả theo nhu cầu sử dụng và cấp độ miễn phí hỗ trợ những người muốn khám phá.

Bạn có thể tìm thêm thông tin chi tiết về thuật toán và các hàm tương tự được sử dụng trong Upstash Vector trong tài liệu Upstash.

Ngoài khả năng tìm kiếm hiệu suất cao với chi phí thấp, nó còn cung cấp Rest API và SDK trong Typescript và Python để tích hợp Upstash Vector vào cơ sở mã của chúng tôi một cách dễ dàng.

Để tích hợp với Upstash Vector, trước tiên chúng ta cần đăng nhập vào bảng điều khiển. Sau khi đăng nhập, chúng ta có thể tạo Chỉ mục vector bằng cách nhấp vào Create Index nút. Trong phương thức bật lên, chúng ta có thể đặt tên cho chỉ mục của mình, chọn vùng chứa chỉ mục. Sau đó, chúng ta có thể chọn một mô hình nhúng sẽ được sử dụng để trích xuất các phần nhúng từ đối tượng nhất định trước khi ghi vào chỉ mục Upstash Vector. Có một số mô hình nhúng nguồn mở được xác định trước trong Upstash có thể được sử dụng. Ngược lại chúng ta có thể chọn Custom để chúng ta có thể đặt kích thước của vectơ theo mô hình nhúng bên ngoài mà chúng ta sử dụng.

Cuối cùng, chúng ta có thể chọn hàm tương tự để tính khoảng cách giữa các vectơ. Có 3 hàm tương tự được xác định trong Upstash:Cosine, khoảng cách Euclide và tích số chấm. Bạn có thể tìm hiểu thêm về các hàm tương tự trong tài liệu Upstash.

Xây dựng các ứng dụng AI nâng cao bằng SDK AI của Upstash và Vercel

Ở màn hình tiếp theo, chúng ta có thể chọn một gói phù hợp với mình.

Sau khi hoàn tất việc tạo chỉ mục, chúng tôi có thể tích hợp Upstash Vector với cơ sở mã của mình. Tôi sẽ sử dụng Typescript trong bài đăng trên blog này, tuy nhiên, SDK Python hoặc Go cũng có thể được sử dụng. Chúng ta có thể làm theo hướng dẫn tích hợp được đưa ra trong Details tab trên bảng điều khiển Upstash Vector. Trước tiên chúng ta cần cài đặt @upstash/vector sự phụ thuộc.

npm i @upstash/vector

Bây giờ chúng ta có thể kết nối, viết và truy vấn bằng các phương thức sau một cách dễ dàng.

import { Index } from "@upstash/vector"
const index = new Index({
 url: <UPSTASH-VECTOR-ENDPOINT>,
 token: <UPSTASH-VECTOR-TOKEN>,
})
await index.upsert({
 id: "id1",
 vector: […],
 metadata: { metadata_field: "metadata_value" },
});
await index.query({
 vector: […],
 topK: 1,
 includeVectors: true,
 includeMetadata: true,
});

SDK AI của Vercel

Vercel AI SDK là bộ công cụ TypeScript được thiết kế để hợp lý hóa việc tích hợp các khả năng AI vào các ứng dụng web. Nó hỗ trợ nhiều framework khác nhau như React, Next.js, Vue, Svelte và Node.js, cho phép các nhà phát triển xây dựng các ứng dụng hỗ trợ AI một cách hiệu quả. Vercel AI SDK bao gồm 3 khái niệm chính:

Lõi SDK AI

Vercel AI SDK Core là một thành phần không thể thiếu của Vercel AI SDK, được thiết kế để hợp lý hóa việc tích hợp các khả năng trí tuệ nhân tạo vào các ứng dụng web. Mô-đun cốt lõi này cung cấp một API hợp nhất hỗ trợ việc sử dụng các mô hình ngôn ngữ lớn (LLM) để tạo văn bản, đối tượng có cấu trúc và lệnh gọi công cụ.

Ví dụ sử dụng phổ biến nhất là sử dụng generateText hoặc streamText API. Hãy nhanh chóng sử dụng chúng trong Typescript.

Trước tiên, hãy nhập Vercel AI SDK bằng cách chạy lệnh sau trên thiết bị đầu cuối.

`npm i ai`

Sau đó, chúng ta có thể sử dụng generateText API làm ví dụ. Vercel AI SDK cung cấp khả năng tích hợp với một số nhà cung cấp mô hình đã biết, chẳng hạn như OpenAI, Antropic, Google, Mistral, v.v. Chúng tôi sẽ sử dụng OpenAI trong ví dụ này, nhưng những ví dụ khác cũng đơn giản như tích hợp OpenAI.

import { generateText } from "ai"
import { openai } from "@ai-sdk/openai"
const { text } = await generateText({
 model: openai("gpt-4-turbo"),
 prompt: "What is love?"
})

Giao diện người dùng SDK AI

Vercel AI SDK UI là bộ công cụ không phụ thuộc vào khung được thiết kế để giúp các nhà phát triển xây dựng các ứng dụng trò chuyện, hoàn thiện và trợ lý tương tác với một số chức năng bổ sung như tạo giao diện trò chuyện, các thành phần AI tổng quát và quản lý trạng thái.

Các ví dụ sử dụng phổ biến nhất là useChatuseCompletion móc. useChat cung cấp tính năng truyền phát tin nhắn trò chuyện bằng cách trừu tượng hóa việc quản lý trạng thái đối với loại đầu vào và đầu ra cần thiết như tin nhắn, trạng thái tải và lỗi. useCompletion cho phép nhà phát triển quản lý các thao tác hoàn thành văn bản trong ứng dụng AI, xử lý trạng thái đầu vào trò chuyện và tự động cập nhật giao diện người dùng khi có các thao tác hoàn thành mới từ nhà cung cấp của bạn.

Sau đây, hãy xem cách sử dụng useChat nhanh chóng làm ví dụ cho giao diện người dùng AI SDK.

const { messages, input, handleInputChange, handleSubmit} =
 useChat({
 api: "api/chat",
 initialMessages: […],
 onResponse(response) {},
 streamMode: "text",
 });

Như bạn có thể thấy, nó cần điểm cuối API để gọi khi tin nhắn được gửi, một chức năng khi nhận được phản hồi và nó tự quản lý trạng thái.

AI SDK RSC

Phần này của Vercel AI SDK dành cho kết xuất phía máy chủ. Mục đích của AI SDK RSC là cung cấp hỗ trợ cho mô hình ngôn ngữ lớn (LLM) để tạo và truyền phát giao diện người dùng trực tiếp từ máy chủ đến máy khách thông qua Thành phần máy chủ React (RSC).

AI SDK RSC có nhiều chức năng để hỗ trợ đầu ra phát trực tuyến cho giao diện người dùng được hiển thị phía máy chủ. Để biết thêm chi tiết về chúng, vui lòng truy cập tài liệu Vercel AI SDK RSC. Trong blog này, chúng ta sẽ chỉ kiểm tra một chức năng để xem nó hoạt động như thế nào. Với mục đích này, hãy hiểu cách sử dụng streamUI chức năng.

const result = await streamUI({
 model: openai('gpt-4o'),
 prompt: 'Get the weather for San Francisco',
 text: ({ content }) => <div>{content}</div>,
 tools: {},
});

Như có thể thấy, streamUI cũng hoạt động giống như các chức năng AI SDK Core. Sự khác biệt chính là phát trực tuyến giao diện người dùng được kết xuất từ máy chủ.

Tóm lại, Vercel AI SDK giúp các nhà phát triển xây dựng các ứng dụng AI trong tất cả các phần của quá trình phát triển phần mềm từ backend đến frontend.

Upstash Redis

Trong các ứng dụng AI, Upstash Redis có thể được sử dụng chủ yếu để giới hạn tốc độ nhằm bảo vệ việc sử dụng API và mô hình LLM, mục đích lưu vào bộ nhớ đệm hoặc lưu trữ lịch sử tin nhắn trong ứng dụng chatbot AI.

Trước tiên chúng ta nên tạo cơ sở dữ liệu Redis trên bảng điều khiển Upstash.

Xây dựng các ứng dụng AI nâng cao bằng SDK AI của Upstash và Vercel

Sau khi tạo cơ sở dữ liệu Redis, chúng ta có thể tích hợp Redis với cơ sở mã của mình để ghi và truy vấn dữ liệu, có thể là dữ liệu bộ đệm, lịch sử tin nhắn, trạng thái hội thoại, v.v. Để làm điều đó, trước tiên chúng ta nên cài đặt Upstash Redis SDK.

npm i @upstash/redis

Sau đó, chúng ta có thể kết nối cơ sở dữ liệu Redis từ mã.

import { Redis } from '@upstash/redis'
const redis = new Redis({
 url: <UPSTASH-REDIS-ENDPOINT>,
 token: <UPSTASH-REDIS-TOKEN>,
})
const data = await redis.set('foo', 'bar');

Nếu chúng tôi muốn sử dụng Redis để giới hạn tốc độ, chúng tôi cũng có thể sử dụng SDK giới hạn tốc độ do Upstash cung cấp. Phần phụ thuộc cần cài đặt sẽ khác với SDK giới hạn tốc độ.

npm install @upstash/ratelimit

Bây giờ, để thực hiện giới hạn tỷ lệ;

import { Ratelimit } from "@upstash/ratelimit";
import { Redis } from "@upstash/redis";
 
// Create a new ratelimiter, that allows 10 requests per 10 seconds
const ratelimit = new Ratelimit({
 redis: Redis.fromEnv(),
 limiter: Ratelimit.slidingWindow(10, "10 s"),
 analytics: true,
 /**
 * Optional prefix for the keys used in redis. This is useful if you want to share a redis
 * instance with other applications and want to avoid key collisions.5
 */
 prefix: "prefix",
});
 
// Use a constant string to limit all requests with a single ratelimit
// Or use a userID, apiKey or ip address for individual limits.
const identifier = "identifier";
const { success } = await ratelimit.limit(identifier);
if (!success) {
 return "Unable to process at this time";
}
// rest of the code

Sử dụng Upstash Redis và Vector với Vercel AI SDK

Bây giờ, những gì có thể được thực hiện với các công cụ được giải thích ở trên? Rất nhiều thứ...

Chatbot RAG là ứng dụng AI tổng quát phổ biến nhất có thể được xây dựng bằng cơ sở dữ liệu Vercel AI SDK và Upstash Vector. Thế hệ tăng cường truy xuất (RAG) là một khung nâng cao giúp tăng cường đáng kể khả năng của chatbot và các hệ thống AI đàm thoại khác. Nó kết hợp hai thành phần quan trọng — truy xuất và tạo — để cung cấp phản hồi chính xác hơn, phù hợp với ngữ cảnh và mang tính thông tin hơn. Các chatbot RAG sử dụng cơ sở dữ liệu vectơ làm công cụ truy xuất, lưu trữ và cung cấp lịch sử trò chuyện ở định dạng nhúng có thể được sử dụng để tạo phản hồi tiếp theo từ mô hình LLM. Bằng cách này, mô hình LLM có thể tạo ra các phản hồi phù hợp với bối cảnh của cuộc trò chuyện và học hỏi từ cuộc trò chuyện trước đây.

Đối với loại ứng dụng chatbot này, Upstash Vector là cơ sở dữ liệu vectơ hoàn hảo có thể đóng vai trò là công cụ truy xuất. Ngoài việc tích hợp với Upstash Vector, chúng ta có thể sử dụng streamText hoặc streamObject API của thành phần Vercel AI SDK Core ở phía phụ trợ để tạo và truyền phản hồi đến từ các mô hình LLM như OpenAI, Anthropic, Mistral, v.v. Về phía giao diện người dùng, chúng ta có thể tận dụng useChat hook của thành phần UI SDK Vercel AI, đây là một framework mạnh mẽ xử lý giao diện người dùng trò chuyện và quản lý trạng thái. Bạn có thể xem ví dụ về ứng dụng RAG trong bài đăng trên blog DegreeGuru.

Một ví dụ phổ biến khác về loại ứng dụng AI có thể được xây dựng dễ dàng với Vercel AI SDK là hệ thống đề xuất. Hệ thống khuyến nghị là một trong những tính năng quan trọng nhất của nền tảng thương mại điện tử. Nó sử dụng sở thích cá nhân và lịch sử của người dùng để xác định sở thích của người dùng nhằm đưa ra những khuyến nghị hữu ích. Trong khi xây dựng hệ thống đề xuất, Vercel AI SDK Core có thể giúp chúng tôi trích xuất các phần nhúng dữ liệu người dùng một cách dễ dàng bằng cách sử dụng embed chức năng. Hãy xem mã ví dụ bên dưới.

import { embed } from 'ai';
import { openai } from '@ai-sdk/openai';
// 'embedding' is a single embedding object (number[])
const { embedding } = await embed({
 model: openai.embedding('text-embedding-3-small'),
 value: 'sunny day at the beach',
});

Sau khi trích xuất các phần nhúng, thực chất là dữ liệu ngữ nghĩa ở định dạng mảng số, chúng ta có thể lưu trữ kết quả đầu ra trong Upstash Vector. Những phần nhúng đó có thể được truy vấn và phân loại theo thói quen của người dùng và được sử dụng trong các đề xuất trong tương lai.

embed Chức năng trích xuất các phần nhúng từ đầu vào trong Vercel AI SDK Core có thể được sử dụng trong bất kỳ loại ứng dụng học máy nào, chẳng hạn như tìm kiếm ngữ nghĩa, tìm kiếm hình ảnh, tóm tắt nội dung, v.v. Các nhà phát triển có thể chèn các phần nhúng vectơ được chức năng này trích xuất vào cơ sở dữ liệu Upstash Vector để các sản phẩm có thể phân tích đầu vào dựa trên các phần nhúng mà không cần lưu trữ dữ liệu thô, điều này vô dụng đối với các thuật toán AI. Ứng dụng ví dụ cuối cùng là Bản tóm tắt AI của Đánh giá của khách hàng. Trong ứng dụng ví dụ này, chúng ta có thể trích xuất các phần nhúng từ các văn bản nhất định, đó là các đánh giá của khách hàng về sản phẩm và lưu trữ nó trong cơ sở dữ liệu vectơ. Sau đó, các nhà phân tích có thể sử dụng vectơ để lấy bản tóm tắt dữ liệu bằng cách nhắc đến mô hình LLM, với Vercel AI SDK Core.

Ví dụ cuối cùng mà chúng ta có thể thảo luận trong bài đăng trên blog này là hệ thống phát hiện gian lận/bất thường. Trong định dạng phát hiện bất thường rất cơ bản, nhà phát triển cần phân loại các giao dịch hoặc hành vi của người dùng để họ có thể phát hiện xem có bất kỳ chuyển động bất thường nào hay không. Với mục đích đó, cơ sở dữ liệu vectơ Upstash có thể được sử dụng để tạo các vectơ nhằm định vị trong không gian n chiều. Khi các tương tác của người dùng được định vị trong không gian thông qua việc lưu trữ các vectơ trong Upstash Vector, các công cụ phân tích có thể nhận được sự tương đồng của tương tác đến với các tương tác trong không gian vectơ. Những điểm tương đồng này có thể giúp xác định xem hoạt động tương tác có bình thường hay không.

Trong tất cả các ứng dụng mẫu mà chúng tôi đã thảo luận ở trên, chúng tôi có thể sử dụng tính năng giới hạn Tốc độ tăng giá cho bất kỳ loại hoạt động nặng nào, chẳng hạn như tạo văn bản, gọi mô hình AI để trích xuất nội dung nhúng, v.v. Nhờ giới hạn tốc độ, chúng tôi có thể bảo vệ hoạt động của mình khỏi sự bùng nổ lưu lượng truy cập. Ngoài ra, Upstash Redis có thể là nơi tuyệt vời để lưu trữ dữ liệu người dùng thô cho ứng dụng của chúng tôi, chẳng hạn như lịch sử tin nhắn, bộ đệm của lời nhắc mà chúng tôi sử dụng cho mô hình LLM, v.v.

Kết luận

Trong bài đăng trên blog này, chúng tôi đã phát hiện ra rằng Upstash Redis, Upstash Vector và Vercel AI SDK tạo thành một sự kết hợp có giá trị để xây dựng các ứng dụng AI nâng cao. Các công cụ này phối hợp với nhau để quản lý dữ liệu, xử lý thông tin và triển khai các mô hình AI một cách hiệu quả. Các ví dụ được cung cấp chứng minh tính linh hoạt của nhóm công nghệ này trong việc tạo ra nhiều giải pháp AI.

Để biết thêm ví dụ, bạn có thể kiểm tra blog Upstash và mẫu Vercel.