mcpField
C
Convex Agents Fundamentals

Convex Agents Fundamentals

github.com/sstoboエージェントワークフロー24198 回インストール40 週間前に更新
リポジトリ

Convex Agents Fundamentals について

Convex Agents Fundamentals は、Convex でエージェントを構築する開発者向けのセットアップガイドです。エージェント設定、会話スレッド、テキストや構造化 LLM 応答を扱い、メッセージ履歴をコンテキストに含める方法を説明します。

主な機能

  1. 01エージェントとモデルの設定
  2. 02スレッドの作成と継続
  3. 03テキストまたは構造化応答の生成
  4. 04メッセージの自動保存
  5. 05直近の履歴をコンテキストに追加

活用シーン

  1. 01最初の Convex エージェントの設定
  2. 02ユーザーごとの会話管理
  3. 03履歴付きチャット画面の構築
  4. 04構造化 JSON 応答の生成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sstobo/convex-skills --skill convex-agents-fundamentals

インストール後、Claude Code で/convex-agents-fundamentalsを入力して読み込まれたか確認します。

詳細

目的

Convex エージェントのセットアップ、会話スレッドの管理、LLM レスポンスの生成に関する主要なパターンを説明します。これは、ほかのすべてのエージェント機能の基盤となります。

このスキルを使用する場面

  • プロジェクトで初めて Convex エージェントをセットアップする
  • ユーザーとの会話スレッドを作成または続行する
  • LLM からテキストレスポンスや構造化された JSON オブジェクトを生成する
  • エージェントのデフォルト設定(システムプロンプト、チャットモデル、埋め込みモデル)を構成する
  • メッセージ履歴が必要な基本的なチャットインターフェースを構築する

使用方法

1. インストールと構成

エージェントコンポーネントを convex.config.ts に追加します。

// convex/convex.config.ts
import { defineApp } from "convex/server";
import agent from "@convex-dev/agent/convex.config";

const app = defineApp();
app.use(agent);

export default app;

npx convex dev を実行して、必要なコードを生成します。

2. エージェントを定義する

チャットモデルを使用して、エージェントのインスタンスを作成します。

// convex/agents/myAgent.ts
import { components } from "../_generated/api";
import { Agent } from "@convex-dev/agent";
import { openai } from "@ai-sdk/openai";

export const myAgent = new Agent(components.agent, {
  name: "My Assistant",
  languageModel: openai.chat("gpt-4o-mini"),
  instructions: "You are a helpful assistant.", // Optional: default system prompt
});
3. スレッドを作成する

会話履歴を管理するために、ユーザー用のスレッドを作成します。

// convex/threads.ts
import { action } from "../_generated/server";
import { v } from "convex/values";
import { myAgent } from "./agents/myAgent";

export const createNewThread = action({
  args: { userId: v.string() },
  handler: async (ctx, { userId }) => {
    const { thread } = await myAgent.createThread(ctx, {
      userId,
      title: "New Conversation",
    });
    return { threadId: thread.getMetadata().threadId };
  },
});
4. レスポンスを生成する

スレッド内でテキストまたは構造化レスポンスを生成します。

// convex/generation.ts
export const generateReply = action({
  args: { threadId: v.string(), prompt: v.string() },
  handler: async (ctx, { threadId, prompt }) => {
    const { thread } = await myAgent.continueThread(ctx, { threadId });
    const result = await thread.generateText({ prompt });
    return result.text;
  },
});

重要な原則

  • スレッドの分離:各ユーザー/会話に専用のスレッドを割り当て、履歴を個別に管理します
  • メッセージの自動保存:生成されたレスポンスはスレッドに自動的に保存されます
  • デフォルトのコンテキスト:生成のたびに、最近のメッセージ履歴が自動的に含まれます
  • 非同期処理に対応:LLM の呼び出しにはアクションを、トランザクション書き込みにはミューテーションを使用します
  • 型安全性:循環参照エラーを避けるため、常に明示的な戻り値の型を指定します

よくあるパターン

  • ユーザーごとの管理:スレッドを作成する際は、必ず userId を含めます
  • メッセージ履歴:LLM のコンテキストに自動的に含まれます
  • スレッドの再利用:同じスレッドを複数のエージェントで使用できます

次のステップ

  • スレッドを管理する:会話の管理については threads スキルを参照してください
  • メッセージを扱う:保存と取得については messages スキルを参照してください
  • ツールを追加する:エージェントがアクションを実行できるようにするには tools スキルを参照してください

コメント