Upstash と Vercel AI SDK を使用して高度な AI アプリケーションを構築する
このブログ投稿では、Upstash Redis、Upstash Vector、Vercel AI SDK を使用して作成できる AI アプリケーションについて詳しく説明します。各ツールの独自の特徴と機能を検討し、それらを統合して強力で効率的な AI ソリューションを構築する方法に焦点を当てます。これらのツールの機能を検討する際に、サンプル アプリケーションについても簡単に見ていきます。
アップスタッシュベクター
まず、ベクトルとベクトル データベースについて理解しましょう。
ベクトル データベースは、ベクトルと呼ばれる数値配列形式でデータを保存および取得するように設計された特殊なデータ ストレージ システムです。これらのデータベースは大量の高次元ベクトルを効率的に処理できるため、複雑なデータ構造の管理に最適です。ベクトル データベースを使用する主な利点:
効率 :これらのデータベースは、高次元ベクトルの効率的な保存と取得を提供し、計算負荷を軽減し、AI アプリケーションでのクエリ応答を高速化します。
精度 :最適化された検索アルゴリズムにより、ベクトル データベースが最も関連性の高いデータ ポイントを正確に見つけられるようになり、レコメンデーション エンジンや不正検出システムなど、データ分類を必要とするシステムのパフォーマンスが向上します。
リアルタイム処理 :ベクトル データベースはリアルタイムでデータを処理できるため、チャットボットやリアルタイム分析など、即時応答が必要なアプリケーションに最適です。
AI のベクトルは通常、アプリケーションのコンテキストで重要な機能や特性を捕捉するオブジェクトの埋め込みベースのモデルを表します。たとえば、自然言語処理ベースの AI アプリケーションでは、ベクトルは特定のテキスト、音声、またはドキュメントのセマンティクスを表す場合があります。画像処理ベースのアプリケーションでは、ベクトルは指定された画像の特徴を表します。
それでは、Upstash Vector について詳しく見ていきましょう。
Upstash Vector は、コサイン、ユークリッド距離、ドット積の 3 種類の類似度関数を備えたベクトル類似度検索アルゴリズムとして DiskANN を利用するサーバーレス ベクトル データベースです。 Upstash Vector はサーバーレスであるため、従量課金制の価格設定と、探索したいユーザーをサポートする無料枠があります。
Upstash Vector で使用されるアルゴリズムと類似度関数の詳細については、Upstash のドキュメントを参照してください。
低コストで高性能な検索機能に加えて、Typescript と Python の Rest API と SDK を提供して、Upstash Vector をコードベースに簡単に統合できます。
Upstash Vector と統合するには、まずコンソールにログインする必要があります。ログインしたら、Create Index をクリックしてベクターインデックスを作成できます。 ボタン。ポップアップ モーダルで、インデックスに名前を付け、インデックスが存在するリージョンを選択できます。その後、Upstash Vector インデックスに書き込む前に、指定されたオブジェクトから埋め込みを抽出するために使用する埋め込みモデルを選択できます。 Upstash には、使用できる事前定義されたオープンソース埋め込みモデルがいくつかあります。それ以外の場合は、Custom を選択できます。 これにより、使用する外部埋め込みモデルに従ってベクトルの次元を設定できるようになります。
最後に、ベクトル間の距離を計算する類似度関数を選択できます。 Upstash では、コサイン、ユークリッド距離、ドット積という 3 つの類似度関数が定義されています。類似度関数の詳細については、Upstash のドキュメントをご覧ください。

次の画面では、自分に合ったプランを選択できます。
インデックスの作成が完了したら、Upstash Vector をコードベースに統合できます。このブログ投稿では Typescript を使用しますが、Python または Go SDK も使用できます。 Details に示されている統合ガイドに従うことができます。 Upstash Vector コンソールのタブ。まず、@upstash/vector をインストールする必要があります。 依存関係。
npm i @upstash/vector
これで、次のメソッドを使用して簡単に接続、書き込み、クエリを実行できるようになりました。
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 は、AI 機能の Web アプリケーションへの統合を効率化するために設計された TypeScript ツールキットです。 React、Next.js、Vue、Svelte、Node.js などのさまざまなフレームワークをサポートしており、開発者は AI を活用したアプリケーションを効率的に構築できます。 Vercel AI SDK は 3 つの主要な概念で構成されています。
AI SDK コア
Vercel AI SDK コアは Vercel AI SDK の不可欠なコンポーネントであり、Web アプリケーションへの人工知能機能の統合を合理化するように設計されています。このコア モジュールは、テキスト、構造化オブジェクト、ツール呼び出しを生成するための大規模言語モデル (LLM) の使用を容易にする統合 API を提供します。
最も一般的な使用例は、generateText を使用することです。 または streamText API。早速 Typescript で使ってみましょう。
まず、ターミナルで次のコマンドを実行して Vercel AI SDK をインポートします。
`npm i ai`
次に、generateText を使用できます。 API の例。 Vercel AI SDK は、OpenAI、Antropic、Google、Mistral などのいくつかの既知のモデル プロバイダーとの統合を提供します。この例では OpenAI を使用しますが、他の例は 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 は、開発者がチャット インターフェース、生成 AI コンポーネント、状態管理の作成などの追加機能を備えたインタラクティブなチャット、補完、アシスタント アプリケーションを構築できるように設計されたフレームワークに依存しないツールキットです。
最も一般的な使用例は useChat です。 と useCompletion フック。 useChat メッセージ、読み込み状態、エラーなど、必要なタイプの入力および出力の状態管理を抽象化することで、チャット メッセージのストリーミングを提供します。 useCompletion これにより、開発者は AI アプリケーション内でテキスト補完を管理し、チャット入力状態を処理し、プロバイダから新しい補完が到着すると UI を自動的に更新できます。
ここでは、useChat の使い方を見てみましょう。 AI SDK UI の例として簡単に説明します。
const { messages, input, handleInputChange, handleSubmit} =
useChat({
api: "api/chat",
initialMessages: […],
onResponse(response) {},
streamMode: "text",
}); ご覧のとおり、メッセージの送信時には API エンドポイントを呼び出し、応答の受信時には関数を呼び出し、状態自体を管理します。
AI SDK RSC
Vercel AI SDK のこの部分はサーバー側のレンダリング用です。 AI SDK RSC の目的は、React Server Components (RSC) を介して UI を生成し、サーバーからクライアントに直接ストリーミングするための大規模言語モデル (LLM) のサポートを提供することです。
AI SDK RSC には、サーバー側でレンダリングされた UI のストリーミング出力をサポートする複数の機能があります。これらの詳細については、Vercel AI SDK RSC ドキュメントを参照してください。このブログでは、1 つの関数だけを調べて、それがどのように機能するかを確認します。この目的のために、streamUI の使用方法を理解しましょう。 機能。
const result = await streamUI({
model: openai('gpt-4o'),
prompt: 'Get the weather for San Francisco',
text: ({ content }) => <div>{content}</div>,
tools: {},
});
ご覧のとおり、streamUI も AI SDK コア機能と同様に動作します。主な違いは、レンダリングされた UI をサーバーからストリーミングすることです。
つまり、Vercel AI SDK は、開発者がバックエンドからフロントエンドまでソフトウェア開発のあらゆる部分で AI アプリケーションを構築できるように支援します。
Redis をアップスタッシュ
AI アプリケーションでは、Upstash Redis は主に、API と LLM モデルの使用を保護するためのレート制限、キャッシュ目的、または AI チャットボット アプリケーションでのメッセージ履歴の保存に使用できます。
まず、Upstash コンソールで Redis データベースを作成する必要があります。
Redis データベースを作成したら、Redis をコードベースと統合して、キャッシュ データ、メッセージ履歴、会話状態などのデータの書き込みとクエリを行うことができます。そのためには、最初に Upstash Redis SDK をインストールする必要があります。
npm i @upstash/redis
次に、コードから Redis データベースに接続できます。
import { Redis } from '@upstash/redis'
const redis = new Redis({
url: <UPSTASH-REDIS-ENDPOINT>,
token: <UPSTASH-REDIS-TOKEN>,
})
const data = await redis.set('foo', 'bar'); レート制限に Redis を使用したい場合は、Upstash が提供するレート制限 SDK も使用できます。レート制限 SDK では、インストールされる依存関係が異なります。
npm install @upstash/ratelimit
次に、レート制限を実装します。
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 Vercel AI SDK で Upstash Redis と Vector を使用する
さて、上で説明したツールを使用すると何ができるでしょうか?たくさんのこと...
RAG チャットボットは、Vercel AI SDK と Upstash Vector データベースを使用して構築できる最も一般的な生成 AI アプリケーションです。検索拡張生成 (RAG) は、チャットボットやその他の会話型 AI システムの機能を大幅に強化する高度なフレームワークです。 2 つの重要なコンポーネント (検索と生成) を統合して、より正確で文脈に関連した有益な応答を提供します。 RAG チャットボットは、ベクトル データベースを取得手段として使用し、LLM モデルから次の応答を生成するために使用できる埋め込み形式でチャットの履歴を保存および提供します。このようにして、LLM モデルは会話のコンテキストに関連した応答を生成し、過去の会話から学習することができます。
この種のチャットボット アプリケーションにとって、Upstash Vector は検索の役割を果たす完璧なベクター データベースです。 Upstash Vector との統合に加えて、streamText を使用できます。 または streamObject バックエンド側の Vercel AI SDK コア コンポーネントの API は、OpenAI、Anthropic、Mistral などの LLM モデルからの応答を生成およびストリーミングします。フロントエンド側では、useChat を利用できます。 Vercel AI SDK UI コンポーネントのフック。チャット UI と状態管理を処理する強力なフレームワークです。 RAG アプリケーションの例は、DegreeGuru のブログ投稿でご覧いただけます。
Vercel AI SDK を使用して簡単に構築できる AI アプリケーション タイプのもう 1 つの一般的な例は、レコメンデーション システムです。レコメンデーション システムは、電子商取引プラットフォームの最も重要な機能の 1 つです。ユーザーの個人的な好みと履歴を使用してユーザーの興味を特定し、役立つ推奨事項を提供します。レコメンデーション システムを構築する際、Vercel AI SDK Core は、embed を使用してユーザー データのエンベディングを簡単に抽出するのに役立ちます。 機能。以下のコード例を見てみましょう。
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',
}); 実際には数値配列形式のセマンティック データである埋め込みを抽出した後、出力を Upstash Vector に保存できます。これらの埋め込みは、ユーザーの習慣に従ってクエリおよび分類でき、将来の推奨事項に使用できます。
embed Vercel AI SDK Core の入力からエンベディングを抽出する機能は、セマンティック検索、画像検索、コンテンツ要約など、あらゆる種類の機械学習アプリケーションで使用できます。開発者は、この関数によって抽出されたベクトル エンベディングを Upstash Vector データベースに挿入できるため、製品は、AI アルゴリズムには役に立たない生データを保存することなく、エンベディングに基づいて入力を分析できます。最後のアプリケーション例は、顧客レビューの AI サマリーです。このアプリケーション例では、製品の顧客レビューである特定のテキストから埋め込みを抽出し、ベクトル データベースに保存できます。その後、アナリストは Vercel AI SDK Core を再度使用して LLM モデルにプロンプトを表示することで、ベクトルを使用してデータの概要を取得できます。
このブログ投稿で説明できる最後の例は、詐欺/異常検出システムです。異常検出の非常に基本的な形式では、開発者は、異常な動きがあるかどうかを検出できるように、トランザクションまたはユーザーの行動を分類する必要があります。この目的のために、Upstash ベクトル データベースを使用して、n 次元空間に配置するベクトルを作成できます。 Upstash Vector にベクトルを保存することでユーザーのインタラクションが空間内で特定されると、アナライザー ツールは受信インタラクションとベクトル空間内のインタラクションの類似性を取得できます。これらの類似性スコアは、インタラクションが正常かどうかを識別するのに役立ちます。
上で説明したすべてのサンプル アプリケーションでは、テキストの生成、埋め込みを抽出するための AI モデルの呼び出しなど、あらゆる種類の負荷の高い操作に Upstash のレート制限機能を利用できます。レート制限のおかげで、トラフィックのバーストから操作を保護できます。それに加えて、Upstash Redis は、メッセージ履歴、LLM モデルに使用するプロンプトのキャッシュなど、アプリケーションの生のユーザー データを保存するのに最適な場所です。
結論
このブログ投稿では、Upstash Redis、Upstash Vector、Vercel AI SDK が高度な AI アプリケーションを構築するための貴重な組み合わせであることを発見しました。これらのツールは連携して効率的にデータを管理し、情報を処理し、AI モデルを展開します。提供された例は、さまざまな AI ソリューションを作成する際のこのテクノロジー スタックの多用途性を示しています。
その他の例については、Upstash ブログと Vercel テンプレートを確認してください。
-
Redis 分散ロックをマスターする:実証済みのパターン、一般的な落とし穴、および実用的なアプリケーション
はじめに 分散ロックは、運用環境で実際に依存するまでは単純に思えます。 1 つのプロセスにはリソースへの排他的アクセスが必要です。複数のサーバーが稼働しています。 Redisは真ん中に座っています。アイデアは単純明快です。Redis にロックを設定して次に進みます。 しばらくの間は、このアプローチがうまくいくようです。その後、プロセスがクラッシュしたり、ネットワーク遅延が発生したり、遅延が急増したりします。突然、2 つのプロセスが同じロックを要求したり、そのロックを所有するプロセスが存在しなかったり、ロックが解放されなかったりします。 Redis のロックの問題のほとんどは、Redis
-
リストの最初の要素を削除して返す方法– Redis LPOP | BLPOP
このチュートリアルでは、redisデータストアのキーに保存されているリスト値の最初の要素を削除して返す方法について学習します。このために、redis LPOPを使用します およびBLPOP コマンド。 LPOPコマンド このコマンドは、指定されたキーに格納されているリスト値の最初の要素を削除して返すために使用されます。キーが存在しない場合はNilが返され、キーは存在するがキーに格納されている値がリストデータ型ではない場合はエラーが返されます。 RedisLPOPコマンドの構文は次のとおりです:- 構文:- redis host:post> LPOP <keyname>