Convex Agents RAG について
Convex Agents RAGは、エージェントが独自コンテンツを検索して回答に活用するためのスキルです。根拠に基づく検索や応答を構築する開発者向けで、ハイブリッド検索とユーザー・チーム単位の名前空間に対応します。
主な機能
- 01名前空間へのドキュメント登録
- 02コンテンツのセマンティック検索
- 03テキスト検索とベクトル検索の併用
- 04ドキュメント名による絞り込み
- 05ユーザーやチームのデータ分離
活用シーン
- 01製品ドキュメントに基づく回答
- 02ポリシーやサポート情報の検索
- 03FAQやドキュメント検索の構築
- 04ユーザーやチームごとの知識の分離
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ sstobo/ convex-skills --skill convex-agents-ragインストール後、Claude Code で/convex-agents-ragを入力して読み込まれたか確認します。
詳細
目的
エージェントがカスタムコンテンツやナレッジベースを検索し、正確でコンテキストに基づいた回答を提供できるようにします。RAG は LLM の機能とセマンティック検索を組み合わせます。
このスキルを使用する場面
- エージェントがナレッジベースやドキュメントコレクションを参照する必要がある場合
- 特定のデータ(ポリシー、製品ドキュメントなど)に基づいて回答する場合
- カスタムコンテンツを横断してセマンティック検索する場合
- 検索と生成を組み合わせたシステム(FAQ、ドキュメント、サポート)を構築する場合
- 既知の情報に回答を限定して、ハルシネーションを減らす場合
- ユーザー別またはチーム別のナレッジ名前空間を管理する場合
セットアップ
convex.config.ts で RAG をインストールして設定します。
import { defineApp } from "convex/server";
import agent from "@convex-dev/agent/convex.config";
import rag from "@convex-dev/rag/convex.config";
const app = defineApp();
app.use(agent);
app.use(rag);
export default app;
コンテンツの追加
ドキュメントを名前空間に取り込みます。
import { rag } from "@convex-dev/rag";
export const addContent = action({
args: { userId: v.string(), key: v.string(), text: v.string() },
handler: async (ctx, { userId, key, text }) => {
const namespace = `user:${userId}`;
await rag.addContent(ctx, components.rag, {
namespace,
key,
text,
filters: { filterNames: [filename] },
});
},
});
検索と生成
エージェントで RAG を使用します。
export const answerWithContext = action({
args: { threadId: v.string(), userId: v.string(), question: v.string() },
handler: async (ctx, { threadId, userId, question }) => {
const { thread } = await myAgent.continueThread(ctx, { threadId });
const context = await rag.search(ctx, components.rag, {
namespace: `user:${userId}`,
query: question,
limit: 10,
});
const augmentedPrompt = `# Context:\n\n${context.text}\n\n# Question:\n\n${question}`;
const result = await thread.generateText({ prompt: augmentedPrompt });
return result.text;
},
});
主な原則
- 名前空間でデータを分離:マルチテナントの安全性を確保するため、
user:userIdまたはteam:teamIdを使用します - ハイブリッド検索:テキスト検索とベクトル検索を組み合わせて、より良い結果を得ます
- フィルタリング:特定のドキュメントを対象にするには
filterNamesを使用します
次のステップ
- 基本的なエージェントのセットアップについては、fundamentals を参照してください
- 高度なコンテキストのカスタマイズについては、context を参照してください
コメント
Markdown 対応