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

Xây Dựng Ứng Dụng AI Nâng Cao Sử Dụng Upstash Và Vercel AI SDK

Trong bài blog này, chúng ta 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ụ, làm nổi 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 kiểm tra các chức năng của các công cụ này, chúng ta cũng sẽ nhìn nhanh qua các ứng dụng ví dụ.

Upstash Vector

Hãy hiểu trước về vector và cơ sở dữ liệu vector.

Cơ sở dữ liệu vector là các hệ thống lưu trữ dữ liệu chuyên biệt được thiết kế để lưu trữ và truy xuất dữ liệu ở định dạng mảng số, được gọi là vector. Các cơ sở dữ liệu này xử lý hiệu quả khối lượng lớn vector chiều cao, làm cho chúng trở nên lý tưởng cho việc 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 vector:

Hiệu Quả: Các cơ sở dữ liệu này cung cấp lưu trữ và truy xuất hiệu quả các vector chiều cao, giảm tải tính toán và tăng tốc phản hồi truy vấn trong ứ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 cơ sở dữ liệu vector tìm chính xác các điểm dữ liệu liên quan 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, như движок рекомендации (recommendation engines) và hệ thống phát hiện gian lận.

Xử Lý 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 vector lý tưởng cho các ứng dụng yêu cầu phản hồi ngay lập tức, như chatbot và phân tích thời gian thực.

Các vector trong AI thường đại diện cho mô hình dựa trên embedding của các đối tượng nắm bắt các đặc trư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 vector có thể đại diện cho ngữ nghĩa của văn bản, lời nói hoặc tài liệu cho trước. Trong ứng dụng dựa trên xử lý hình ảnh, vector đại diện cho đặc trưng của hình ảnh cho trước.

Bây giờ, hãy đi sâu vào Upstash Vector.

Upstash Vector là cơ sở dữ liệu vector không máy chủ (serverless) sử dụng DiskANN làm thuật toán tìm kiếm tương đồng vector với 3 loại hàm tương đồng: Cosine, khoảng cách Euclid và dot product. Vì Upstash Vector là serverless, nó có giá trả theo sử dụng (pay-as-you-go) và gói miễn phí hỗ trợ những người muốn khám phá.

Bạn có thể tìm thêm chi tiết về thuật toán và hàm tương đồng được 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 chi phí thấp, nó cung cấp REST API và SDKs bằng Typescript và Python để làm cho việc tích hợp Upstash Vector vào codebase của chúng ta dễ dàng.

Để tích hợp với Upstash Vector, chúng ta cần đăng nhập console trước. Khi đã đăng nhập, chúng ta có thể tạo vector Index bằng cách nhấp nút Create Index. Trong modal bật lên, chúng ta có thể đặt tên index, chọn khu vực nơi index nằm. Sau đó, chúng ta có thể chọn mô hình embedding để dùng để trích xuất embedding từ đối tượng cho trước trước khi ghi vào Upstash Vector index. Có một số mô hình embedding mã nguồn mở được định nghĩa sẵn trong Upstash có thể dùng. Nếu không, chúng ta có thể chọn Custom để thiết lập chiều vector theo mô hình embedding bên ngoài mà chúng ta dùng.

Cuối cùng, chúng ta có thể chọn hàm tương đồng tính khoảng cách giữa các vector. Có 3 hàm tương đồng được định nghĩa trong Upstash: Cosine, Euclidean distance và dot product. Bạn có thể tìm hiểu thêm về các hàm tương đồng trong tài liệu Upstash.

Xây Dựng Ứng Dụng AI Nâng Cao Sử Dụng Upstash Và Vercel AI SDK

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

Khi hoàn tất tạo index, chúng ta có thể tích hợp Upstash Vector với codebase. Tôi sẽ dùng Typescript trong bài blog này, tuy nhiên SDK Python hoặc Go cũng có thể dùng. Chúng ta có thể làm theo hướng dẫn tích hợp cho trước dưới tab Details trên console Upstash Vector. Chúng ta trước tiên cần cài đặt phụ thuộc @upstash/vector.

npm i @upstash/vector 

Bây giờ chúng ta có thể kết nối, ghi và truy vấn với các phương thức sau 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, });

Vercel AI SDK

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

AI SDK Core

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

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

Trước tiên, nhập Vercel AI SDK bằng cách chạy lệnh sau trên terminal.

`npm i ai` 

Sau đó, chúng ta có thể dùng API generateText làm ví dụ. Vercel AI SDK cung cấp tích hợp với một số nhà cung cấp mô hình biết đến, như OpenAI, Anthropic, Google, Mistral v.v. Chúng ta sẽ dùng OpenAI trong ví dụ này, nhưng các cái 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?" })

AI SDK UI

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

Ví dụ sử dụng phổ biến nhất là hook useChat và useCompletion. useChat cung cấp streaming tin nhắn chat bằng cách trừu tượng hóa quản lý state cho các kiểu input/output cần thiết như tin nhắn, trạng thái loading và lỗi. useCompletion cho phép nhà phát triển quản lý text completion trong ứng dụng AI, xử lý state input chat và tự động cập nhật UI khi completion mới đến từ provider.

Ở đây, hãy xem nhanh cách dùng useChat làm ví dụ cho AI SDK UI.

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

Như bạn thấy, nó nhận API endpoint để gọi khi tin nhắn được gửi, một hàm khi nhận phản hồi, và nó tự quản lý state.

AI SDK RSC

Phần này của Vercel AI SDK dành cho server-side rendering. 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à stream UI trực tiếp từ server đến client qua React Server Components (RSC).

AI SDK RSC có nhiều hàm để hỗ trợ streaming output cho UI server-side rendered. Để biết thêm chi tiết, 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 hàm để xem nó hoạt động như thế nào. Với mục đích này, hãy hiểu cách dùng hàm streamUI.

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 như các hàm AI SDK Core. Khác biệt chính là streaming UI đã render từ server.

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

Upstash Redis

Trong ứng dụng AI, Upstash Redis có thể dùng chủ yếu cho rate limiting để bảo vệ API và sử dụng mô hình LLM, mục đích caching hoặc lưu trữ lịch sử tin nhắn trong ứng dụng chatbot AI.

Chúng ta nên trước tiên tạo cơ sở dữ liệu Redis trên Upstash console.

Xây Dựng Ứng Dụng AI Nâng Cao Sử Dụng Upstash Và Vercel AI SDK

Khi đã tạo xong cơ sở dữ liệu Redis, sau đó chúng ta có thể tích hợp Redis với codebase để ghi và truy vấn dữ liệu, có thể là dữ liệu cache, lịch sử tin nhắn, trạng thái hội thoại v.v. Để làm vậy, chúng ta nên cài đặt SDK Upstash Redis trước.

npm i @upstash/redis 

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

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 ta muốn dùng Redis cho rate limiting, chúng ta có thể dùng SDK rate limiting do Upstash cung cấp. Phụ thuộc để cài đặt khác cho SDK rate limiting.

npm install @upstash/ratelimit 

Bây giờ, để triển khai rate limiting;

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ể làm với các công cụ được giải thích ở trên? Rất nhiều thứ...

RAG chatbots là ứng dụng AI tạo sinh phổ biến nhất có thể xây dựng với Vercel AI SDK và cơ sở dữ liệu vector Upstash Vector. Retrieval-Augmented Generation (RAG) là một khung nâng cao đáng kể nâng cao khả năng của chatbot và các hệ thống AI hội thoại khác. Nó hợp nhất hai thành phần quan trọng — truy xuất (retrieval) và tạo sinh (generation) — để cung cấp phản hồi chính xác hơn, có ngữ cảnh phù hợp và nhiều thông tin hơn. RAG chatbots dùng cơ sở dữ liệu vector như một retriever (bộ truy xuất), lưu trữ và đưa ra lịch sử chat ở định dạng embedding có thể dùng để tạo phản hồi tiếp theo từ mô hình LLM. Cách này, mô hình LLM có thể tạo phản hồi liên quan đến ngữ cảnh hội thoại và học từ cuộc nói chuyện trước.

Đối với loại ứng dụng chatbot này, Upstash Vector là cơ sở dữ liệu vector hoàn hảo có thể làm retriever. Bên trên tích hợp với Upstash Vector, chúng ta có thể dùng API streamText hoặc streamObject của thành phần Vercel AI SDK Core ở phía backend để tạo và stream phản hồi từ các mô hình LLM như OpenAI, Anthropic, Mistral v.v. Ở phía frontend, chúng ta có thể tận dụng hook useChat của thành phần Vercel AI SDK UI, một khung mạnh mẽ xử lý UI chat và quản lý state. Bạn có thể thấy ví dụ ứng dụng RAG trong bài blog DegreeGuru.

Một ví dụ phổ biến khác về loại ứng dụng AI có thể dễ dàng xây dựng với Vercel AI SDK là hệ thống đề xuất (recommendation systems). Hệ thống đề xuất 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ó dùng sở thích cá nhân và lịch sử của người dùng để xác định mối quan tâm của người dùng để đưa ra đề xuất hữu ích. Khi xây dựng hệ thống đề xuất, Vercel AI SDK Core có thể giúp chúng ta trích xuất embedding của dữ liệu người dùng dễ dàng bằng cách dùng hàm embed. Hãy xem ví dụ mã dưới đây.

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 embedding, thực tế là dữ liệu ngữ nghĩa ở định dạng mảng số, chúng ta có thể lưu kết quả đầu ra trong Upstash Vector. Những embedding này có thể được truy vấn và phân loại theo thói quen người dùng và dùng trong đề xuất tương lai.

Hàm embed trích xuất embedding từ đầu vào trong Vercel AI SDK Core có thể dùng trong bất kỳ loại ứng dụng machine learning nào, như tìm kiếm ngữ nghĩa (semantic search), tìm kiếm hình ảnh, tóm tắt nội dung v.v. Nhà phát triển có thể chèn vector embedding được trích xuất bởi hàm này vào cơ sở dữ liệu Upstash Vector để sản phẩm có thể phân tích đầu vào dựa trên embedding mà không cần lưu trữ dữ liệu thô, thứ vô dụng cho thuật toán AI. Ví dụ ứng dụng cuối cùng là Tóm tắt AI cho đánh giá khách hàng. Trong ví dụ này, chúng ta có thể trích xuất embedding từ các văn bản cho trước, là đánh giá khách hàng của sản phẩm và lưu nó trong vector database. Sau đó, analyst có thể dùng các vector để lấy tóm tắt dữ liệu bằng cách prompt đến mô hình LLM, với Vercel AI SDK Core lần nữa.

Ví dụ cuối cùng chúng ta có thể thảo luận trong blog này là hệ thống phát hiện gian lận/bất thường (fraud/anomaly detection systems). Trong định dạng cơ bản của phát hiện bất thường, nhà phát triển cần phân loại giao dịch, hoặc hành vi người dùng để phát hiện có chuyển động bất thường nào. Với mục đích đó, cơ sở dữ liệu vector Upstash có thể dùng để tạo vector đị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 qua lưu trữ vector trong Upstash Vector, công cụ phân tích có thể lấy độ tương đồng của tương tác đến với các tương tác trong không gian vector. Các điểm tương đồng này có thể giúp xác định xem tương tác là bình thường hay không.

Trong tất cả các ứng dụng ví dụ chúng ta đã thảo luận ở trên, chúng ta có thể tận dụng tính năng Rate limiting của Upstash cho bất kỳ loại hoạt động nặng nào, như tạo văn bản, gọi mô hình AI để trích xuất embedding v.v. Nhờ rate limiting, chúng ta có thể bảo vệ các hoạt động của mình khỏi bùng nổ traffic. 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, như lịch sử tin nhắn, cache của các prompt dùng cho mô hình LLM v.v.

Kết Luận

Trong bài blog này, chúng ta đã khám phá rằng Upstash Redis, Upstash Vector, và Vercel AI SDK tạo thành một tổ hợp giá trị cho việc xây dựng ứng dụng AI nâng cao. Các công cụ này hoạt động cùng nhau để quản lý dữ liệu hiệu quả, xử lý thông tin, và triển khai mô hình AI. Các ví dụ cung cấp chứng minh sự đa dạng của technology stack này trong việc tạo ra một loạt giải pháp AI.

Để thêm ví dụ, bạn có thể kiểm tra blog Upstash và template Vercel.