開発者ガイド(上級) - CrewAI によるマルチエージェント アカウントリサーチ

ライブのエンタープライズデータをクエリし、アカウントの健全性を分析し、エグゼクティブブリーフを生成するマルチエージェント AI Crew を構築します。 このガイドでは、CrewAI のマルチエージェントオーケストレーションCData Connect AI を組み合わせて、3 つの専門エージェントでアカウントリサーチを自動化する Python アプリケーションの作成方法を説明します。

注意: このガイドでは Google スプレッドシートをデータソースとして使用していますが、CData Connect AI がサポートする 350 以上のデータソースのいずれにも同じ原則が適用されます。

このガイドを完了すると、以下の機能を持つアプリケーションが完成します:

  • CData Connect AI を通じて 300 以上のエンタープライズデータソースに CrewAI エージェントから接続
  • それぞれ異なる役割、目標、ツールを持つ専門エージェントの定義
  • crewai.tools@tool デコレータを使用した MCP ツールラッパーの構築
  • コンテキスト依存関係を持つタスクの連鎖による順次データパイプラインの作成
  • リサーチからレポートまでのワークフローをオーケストレーションする Crew の組み立て
  • 1 つの CLI コマンドで構造化された Markdown アカウントブリーフを生成

アーキテクチャの概要

このアプリケーションは、Model Context Protocol(MCP)を使用して CrewAI エージェントとエンタープライズデータソースを橋渡しします:

┌─────────────────┐     ┌──────────────────┐     ┌─────────────────┐
│                 │     │                  │     │                 │
│  CrewAI Agents  │---->│  CData Connect   │---->│  データソース    │
│  (3 エージェント) │     │  AI MCP サーバー  │     │  (350 種類以上)  │
│                 │<----│                  │<----│                 │
└─────────────────┘     └──────────────────┘     └─────────────────┘
        |                        |
        |    ツールの検出         |
        |    & 実行              |
        v                        |
┌─────────────────┐              |
│                 │              |
│  OpenAI API     │--------------┘
│  (GPT-4o)       │   自然言語から
│                 │   SQL への変換
└─────────────────┘

仕組み:

  1. Python アプリケーションが CData Connect AI に接続
  2. CData Connect AI の MCP がデータ検出とクエリ用のツールを公開
  3. CrewAI エージェントがこれらのツールを使用してライブデータソースに対して SQL クエリを実行
  4. 各エージェントが担当するデータ領域を処理し、結果を下流に渡す
  5. 最終エージェントがフォーマットされた Markdown エグゼクティブブリーフを出力

前提条件

このガイドには以下が必要です:

  • システムにインストールされた Python 3.10+Python のダウンロード)(CrewAI は 3.10 以降が必要です)
  • pip パッケージインストーラー(Python 3.4+ に同梱)。pip --version で確認できます
  • OpenAI API キー(有料アカウントが必要)
  • CData Connect AI アカウント(無料トライアル利用可能)
  • サンプル Google スプレッドシートデータ用の Google アカウント
  • リポジトリのクローン用に Git

はじめに

概要

手順の概要は以下の通りです:

  1. Google スプレッドシートでサンプルデータをセットアップ
  2. CData Connect AI を設定し、パーソナルアクセストークンを作成
  3. Python プロジェクトをセットアップし、依存関係をインストール
  4. コードアーキテクチャを理解
  5. Crew アプリケーションを構築して実行

ステップ 1: Google スプレッドシートでサンプルデータをセットアップ

機能をデモンストレーションするために、顧客データを含むサンプル Google スプレッドシートを使用します。 このデータセットには、アカウント、販売機会、サポートチケット、使用状況メトリクスが含まれています。

  1. サンプル顧客ヘルススプレッドシートに移動します
  2. ファイル > コピーを作成をクリックして、Google ドライブに保存します
  3. わかりやすい名前を付けます(例:「demo_organization」)。この名前は後で接続を設定する際に必要になります。

スプレッドシートには 4 つのシートが含まれています:

  • account: 会社情報(名前、業界、収益、従業員数)
  • opportunity: 販売パイプラインデータ(ステージ、金額、確率)
  • tickets: サポートチケット(優先度、ステータス、説明)
  • usage: 製品使用状況メトリクス(ジョブ実行回数、処理レコード数)

ステップ 2: CData Connect AI の設定

2.1 サインアップまたはログイン

  1. https://jp.cdata.com/ai/signup/ で新規アカウントを作成するか、 https://cloud.cdata.com/ でログインします
  2. 新規アカウントを作成する場合は、登録プロセスを完了します

2.2 Google スプレッドシート接続を追加

  1. ログイン後、左側のナビゲーションメニューでSourcesをクリックし、Add Connectionをクリックします
  2. Add Connection パネルからGoogle Sheetsを選択します
  3. 接続を設定します:
    • Spreadsheet プロパティに、コピーしたシートの名前を設定します(例:「demo_organization」)
    • Sign inをクリックして Google OAuth で認証します
  4. 認証後、Permissionsタブに移動し、ユーザーがアクセス権を持っていることを確認します

2.3 パーソナルアクセストークンの作成

Python アプリケーションは、パーソナルアクセストークン(PAT)を使用して Connect AI と認証します。

  1. 右上の歯車アイコンをクリックして設定を開きます
  2. Access Tokensセクションに移動します
  3. Create PATをクリックします
  4. トークンに名前を付け(例:「CrewAI Account Research」)、Createをクリックします
  5. 重要: トークンはすぐにコピーしてください。一度しか表示されません!

ステップ 3: Python プロジェクトのセットアップ

3.1 GitHub からクローン(推奨)

すべてのソースファイルを含む完全なプロジェクトをクローンします:

git clone https://github.com/CDataSoftware/connectai-crewai-account-research.git cd connectai-crewai-account-research pip install -r requirements.txt

3.2 代替方法: ゼロから作成

新しいプロジェクトディレクトリを作成し、依存関係をインストールします:

mkdir connectai-crewai-account-research cd connectai-crewai-account-research pip install crewai crewai-tools langchain langchain-openai python-dotenv requests

次に、ステップ 4 と 5 で説明するソースファイルを作成します。

3.3 環境変数の設定

プロジェクトルートに .env ファイルを作成します:

cp .env.example .env

.env をテキストエディタで開き、認証情報を入力します:

# OpenAI Configuration (required for CrewAI) OPENAI_API_KEY=sk-proj-... # CData Connect AI Configuration [email protected] CDATA_ACCESS_TOKEN=your-personal-access-token-here

プレースホルダーの値を実際の認証情報に置き換えてください。


ステップ 4: コードアーキテクチャの理解

プロジェクトは、連携して動作する 6 つの Python モジュールで構成されています:

4.1 Config クラス

設定と認証情報の管理を処理します:

from dataclasses import dataclass import os import base64 from dotenv import load_dotenv load_dotenv() @dataclass class Config: """Configuration for the Connect AI CrewAI Account Research crew.""" openai_api_key: str cdata_email: str cdata_access_token: str openai_model: str = "gpt-4o" mcp_server_url: str = "https://mcp.cloud.cdata.com/mcp" @classmethod def from_env(cls) -> "Config": """Create configuration from environment variables.""" openai_api_key = os.getenv("OPENAI_API_KEY") cdata_email = os.getenv("CDATA_EMAIL") cdata_access_token = os.getenv("CDATA_ACCESS_TOKEN") missing = [] if not openai_api_key: missing.append("OPENAI_API_KEY") if not cdata_email: missing.append("CDATA_EMAIL") if not cdata_access_token: missing.append("CDATA_ACCESS_TOKEN") if missing: raise ValueError( f"Missing required environment variables: {', '.join(missing)} " "Please set these in your .env file or environment. " "See .env.example for a template." ) return cls( openai_api_key=openai_api_key, cdata_email=cdata_email, cdata_access_token=cdata_access_token, openai_model=os.getenv("OPENAI_MODEL", "gpt-4o"), mcp_server_url=os.getenv( "MCP_SERVER_URL", "https://mcp.cloud.cdata.com/mcp" ), ) def get_auth_header(self) -> str: """Generate Base64 authentication header.""" credentials = f"{self.cdata_email}:{self.cdata_access_token}" return base64.b64encode(credentials.encode()).decode()

Config クラスは @dataclass を使用して環境変数から認証情報を読み込み・検証し、MCP サーバー用の Base64 エンコードされた Basic Auth ヘッダーを生成します。

4.2 MCP Client

CData Connect AI MCP サーバーとの HTTP 通信を処理します:

import json import sys import requests from config import Config class MCPClient: """HTTP client for CData Connect AI MCP server.""" def __init__(self, config: Config): self.config = config self._tools = [] self.session = requests.Session() self.session.headers.update({ "Content-Type": "application/json", "Accept": "application/json, text/event-stream", "Authorization": f"Basic {config.get_auth_header()}", "User-Agent": ( "CDataConnectAI-CrewAIAgent " f"(Python/{sys.version_info.major}.{sys.version_info.minor})" ), }) @staticmethod def _parse_sse_response(response_text: str) -> dict: """Parse Server-Sent Events response.""" for line in response_text.split(" "): line = line.strip() if line.startswith("data: "): return json.loads(line[6:]) raise ValueError(f"No data found in SSE response: {response_text[:200]}") def list_tools(self) -> list: """Discover available tools from the MCP server.""" response = self.session.post( self.config.mcp_server_url, json={"jsonrpc": "2.0", "method": "tools/list", "params": {}, "id": 1}, ) response.raise_for_status() result = self._parse_sse_response(response.text) self._tools = result.get("result", {}).get("tools", []) return self._tools def call_tool(self, tool_name: str, arguments: dict) -> dict: """Execute a tool on the MCP server.""" response = self.session.post( self.config.mcp_server_url, json={ "jsonrpc": "2.0", "method": "tools/call", "params": {"name": tool_name, "arguments": arguments}, "id": 2, }, ) response.raise_for_status() result = self._parse_sse_response(response.text) return result.get("result", {}) def get_catalogs(self): """List available data source connections.""" return self.call_tool("getCatalogs", {}) def get_schemas(self, catalog_name: str): """Get schemas for a catalog.""" return self.call_tool("getSchemas", {"catalogName": catalog_name}) def get_tables(self, catalog_name: str, schema_name: str): """Get tables for a schema.""" return self.call_tool("getTables", { "catalogName": catalog_name, "schemaName": schema_name }) def get_columns(self, catalog_name: str, schema_name: str, table_name: str): """Get columns for a table.""" return self.call_tool("getColumns", { "catalogName": catalog_name, "schemaName": schema_name, "tableName": table_name, }) def query_data(self, query: str): """Execute a SQL query.""" return self.call_tool("queryData", {"query": query})

MCPClient は JSON-RPC 2.0 で通信し、Server-Sent Events(SSE)レスポンスを解析します。一般的な MCP 操作用の便利なメソッドも提供しています。

4.3 ツールラッパー

各関数は CData Connect AI の MCP 呼び出しをラップし、CrewAI エージェントがエンタープライズデータをクエリできるようにします:

from crewai.tools import tool from config import Config from mcp_client import MCPClient # Shared client instance - created once, reused across all tool calls _config = Config.from_env() _client = MCPClient(_config) # Connection identifiers - update these to match the Connect AI setup CATALOG = "GoogleSheets1" SCHEMA = "GoogleSheets" @tool("get_account_info") def get_account_info(account_name: str): """Query the account table for company profile information. Returns account details including name, industry, annual_revenue, employee_count, and region. """ query = ( f"SELECT * FROM [{CATALOG}].[{SCHEMA}].[demo_organization_account] " f"WHERE [Name] = '{account_name}'" ) return _client.query_data(query) @tool("get_opportunities") def get_opportunities(account_name: str): """Query the opportunity table for active sales pipeline data. Returns open opportunities including stage, amount, probability, and expected close_date for the given account. """ query = ( f"SELECT * FROM [{CATALOG}].[{SCHEMA}].[demo_organization_opportunity] " f"WHERE [AccountId] IN " f"(SELECT [Id1] FROM [{CATALOG}].[{SCHEMA}].[demo_organization_account] " f"WHERE [Name] = '{account_name}')" ) return _client.query_data(query) @tool("get_support_tickets") def get_support_tickets(account_name: str): """Query the tickets table for open support requests. Returns ticket details including priority, status, subject, and created_date for the given account. """ query = ( f"SELECT * FROM [{CATALOG}].[{SCHEMA}].[demo_organization_tickets] " f"WHERE [AccountId] IN " f"(SELECT [Id1] FROM [{CATALOG}].[{SCHEMA}].[demo_organization_account] " f"WHERE [Name] = '{account_name}')" ) return _client.query_data(query) @tool("get_usage_metrics") def get_usage_metrics(account_name: str): """Query the usage table for product adoption metrics. Returns usage data including date, jobs_run, and records_processed for the given account. """ query = ( f"SELECT * FROM [{CATALOG}].[{SCHEMA}].[demo_organization_usage] " f"WHERE [ACCOUNT_ID] IN " f"(SELECT [Id1] FROM [{CATALOG}].[{SCHEMA}].[demo_organization_account] " f"WHERE [Name] = '{account_name}')" ) return _client.query_data(query)

@tool デコレータは、通常の Python 関数を CrewAI エージェントが使用できる BaseTool インスタンスに変換します。docstring がツール選択のガイドとして機能します。

CrewAI のツールについて詳しくはこちら

4.4 エージェント定義

それぞれ異なる役割を持つ 3 つの専門エージェントを定義します:

from crewai import Agent from tools import ( get_account_info, get_opportunities, get_support_tickets, get_usage_metrics, ) # Agent 1: Researcher - gathers raw account & opportunity data researcher = Agent( role="Account Researcher", goal="Gather comprehensive account data from CRM", backstory=( "You are an expert at finding all relevant customer information " "from CRM systems. You excel at retrieving account profiles and " "sales pipeline data. You always present data in a clear, " "structured format so other team members can quickly understand " "the account landscape." ), tools=[get_account_info, get_opportunities], verbose=True, allow_delegation=False, ) # Agent 2: Analyst - assesses health signals and risk analyst = Agent( role="Health Analyst", goal="Assess account health and identify risk signals", backstory=( "You are skilled at analyzing customer health metrics. You " "identify patterns in support tickets and usage data to determine " "account risk levels. You classify risk as LOW, MEDIUM, or HIGH " "and always back up your assessment with specific metrics." ), tools=[get_support_tickets, get_usage_metrics], verbose=True, allow_delegation=False, ) # Agent 3: Writer - produces the final executive brief writer = Agent( role="Brief Writer", goal="Create concise executive summaries", backstory=( "You are a clear communicator who distills complex customer " "insights into actionable executive briefs. You excel at " "identifying key metrics and recommending next steps. Your " "documents follow a consistent structure: executive summary, " "key metrics, risk assessment, and recommended actions." ), tools=[], # No tools - synthesizes other agents' work verbose=True, allow_delegation=False, )

各エージェントには、CrewAI の基盤 LLM がタスクにどのようにアプローチするかを導く rolegoalbackstory が設定されています。Researcher が CRM データを収集し、Analyst が健全性シグナルを評価し、Writer がすべてを成果物としてまとめます。

CrewAI のエージェントについて詳しくはこちら

4.5 コンテキスト連鎖を使ったタスク定義

タスクは各エージェントの処理内容と、エージェント間のデータの流れを定義します:

from crewai import Task from agents import researcher, analyst, writer # Task 1: Research - gather account profile + opportunities research_task = Task( description=( "Research the account named {account_name}. " "Gather: " "- Account profile (name, industry, revenue, employees, region) " "- Active opportunities and total pipeline value " "Provide a comprehensive account profile with all available data." ), agent=researcher, expected_output="Complete account profile with opportunity summary", ) # Task 2: Analysis - assess health signals and risk analysis_task = Task( description=( "Analyze health signals for {account_name}. " "Assess: " "- Support ticket volume and severity " "- Product usage trends and license utilization " "- Overall risk level (LOW / MEDIUM / HIGH) " "Provide a risk assessment with supporting metrics." ), agent=analyst, expected_output="Risk assessment with key health metrics", context=[research_task], # Receives Researcher's output ) # Task 3: Writing - produce the final executive brief writing_task = Task( description=( "Create an executive brief for {account_name}. " "Include: " "- Executive summary (2-3 sentences) " "- Key metrics (ARR, usage, support health) " "- Risk assessment " "- 3-5 recommended actions (prioritized) " "Format the output as a clean Markdown document. " "Use clear, concise language suitable for executives. " "IMPORTANT: Output raw markdown only. Do NOT wrap your response " "in ```markdown code blocks." ), agent=writer, expected_output="Formatted markdown document", context=[research_task, analysis_task], # Receives both outputs output_file="output/{account_name}-brief.md", )

context パラメータでタスクを連鎖させています。Analyst は Researcher の出力を受け取り、Writer は両方の出力を受け取ります。{account_name} プレースホルダーは、crew.kickoff() の実行時に置き換えられます。

CrewAI のタスクについて詳しくはこちら

コンテキスト連鎖の流れ:

research_task (no context)
    ↓
analysis_task (context: [research_task])
    ↓
writing_task (context: [research_task, analysis_task])
    ↓
output/{account_name}-brief.md

ステップ 5: アプリケーションの構築

メインのエントリポイントでエージェントとタスクを Crew に組み立て、CLI インターフェースを提供します:

import argparse import sys from crewai import Crew, Process from agents import researcher, analyst, writer from tasks import research_task, analysis_task, writing_task def create_crew() -> Crew: """Create the account research crew.""" crew = Crew( agents=[researcher, analyst, writer], tasks=[research_task, analysis_task, writing_task], process=Process.sequential, # Run tasks in order verbose=True, ) return crew def main(): """Parse CLI arguments and run the crew.""" parser = argparse.ArgumentParser( description="Automated Account Research with CrewAI + CData Connect AI" ) parser.add_argument( "--account", required=True, help="Account name to research (e.g. 'Acme Corp')", ) args = parser.parse_args() print(f" {'='*60}") print(f" Account Research Crew") print(f" Target: {args.account}") print(f"{'='*60} ") crew = create_crew() try: result = crew.kickoff(inputs={"account_name": args.account}) except Exception as exc: print(f" [ERROR] Crew execution failed: {exc}", file=sys.stderr) sys.exit(1) print(f" {'='*60}") print(f" Account brief generated: output/{args.account}-brief.md") print(f"{'='*60} ") print(result) if __name__ == "__main__": main()

Process.sequential によりタスクが順番に実行され、crew.kickoff(inputs={"account_name": ...}) がすべてのタスク記述のプレースホルダーを置き換えます。

CrewAI のプロセスについて詳しくはこちら


ステップ 6: アプリケーションの実行

すべての設定が完了したら、Crew を実行します:

python src/crew.py --account "Acme Corp"

以下のような出力が表示されます:

============================================================
  Account Research Crew
  Target: Acme Corp
============================================================

[Researcher Agent]: Gathering account data...
  ✓ Account: Acme Corp
  ✓ ARR: $450K
  ✓ Industry: Manufacturing
  ✓ Open opportunities: $180K

[Analyst Agent]: Analyzing health signals...
  ✓ Support tickets: 12 open (3 high priority)
  ✓ Product usage: 94% license utilization
  ⚠️ Risk score: MEDIUM

[Writer Agent]: Creating account brief...
  ✓ Executive summary written
  ✓ Key metrics compiled
  ✓ Action items identified

============================================================
  Account brief generated: output/Acme Corp-brief.md
============================================================

注意: verbose=True を設定すると、コンソール出力にエージェントの詳細な推論と思考の連鎖が含まれます。 上記の出力は、各エージェントが生成する内容の簡略化されたサマリーです。


ステップ 7: 実行例

さまざまなアカウントに対して Crew を実行してみましょう:

python src/crew.py --account "Acme Corp" python src/crew.py --account "TechStart Inc" python src/crew.py --account "Global Manufacturing Ltd"

生成されるブリーフの例

出力ファイルは以下の構造に従います(完全な例は output/sample_briefs/acme-corp-brief.md を参照してください):

# Acme Corp - Account Health Brief
**Generated**: 2025-02-02 | **Risk Level**: MEDIUM

## Executive Summary
Acme Corp is a $450K manufacturing customer showing strong product
adoption but concerning support trends. Immediate attention required
on escalated tickets before renewal discussion.

## Key Metrics
- ARR: $450,000
- Contract Renewal: 45 days
- Support Health: ⚠️ 3 P1 tickets
- Usage: ✅ 94% license utilization
- Pipeline: $180K expansion opportunity

## Risk Assessment
**Overall Risk**: MEDIUM

## Recommended Actions
1. **[HIGH]** Schedule technical review for P1 tickets
2. **[MEDIUM]** Executive business review within 2 weeks
3. **[LOW]** Qualify expansion opportunity

ステップ 8: 利用可能な MCP ツール

CData Connect AI MCP サーバーは以下のツールを公開しています:

ツール説明
getCatalogs利用可能なデータソース接続を一覧表示
getSchemas特定のカタログのスキーマを取得
getTablesスキーマ内のテーブルを取得
getColumnsテーブルのカラムメタデータを取得
queryDataSQL クエリを実行
getProceduresストアドプロシージャを一覧表示
getProcedureParametersプロシージャのパラメータ詳細を取得
executeProcedureストアドプロシージャを実行

本プロジェクトの 4 つの CrewAI ツールラッパーは、以下のように各エージェントにマッピングされています:

CrewAI ツール使用する MCP ツール割り当て先データ領域
get_account_infoqueryDataResearcherアカウントプロファイル
get_opportunitiesqueryDataResearcher販売パイプライン
get_support_ticketsqueryDataAnalystサポートリクエスト
get_usage_metricsqueryDataAnalyst製品使用状況

ステップ 9: SQL クエリの形式

データをクエリする際は、完全修飾テーブル名を使用します:

SELECT [column1], [column2] FROM [CatalogName].[SchemaName].[TableName] WHERE [column1] = 'value' ORDER BY [column2]

例えば、account テーブルをクエリするには:

SELECT [Name], [annual_revenue], [industry] FROM [GoogleSheets1].[GoogleSheets].[demo_organization_account] ORDER BY [annual_revenue] DESC

サブクエリを使用して関連テーブルをクエリするには:

SELECT * FROM [GoogleSheets1].[GoogleSheets].[demo_organization_opportunity] WHERE [AccountId] IN ( SELECT [Id1] FROM [GoogleSheets1].[GoogleSheets].[demo_organization_account] WHERE [Name] = 'Acme Corp' )

ヒント: カタログ名とスキーマ名をプログラムで検出するには:

from config import Config from mcp_client import MCPClient config = Config.from_env() client = MCPClient(config) print(client.get_catalogs()) print(client.get_schemas("GoogleSheets1")) print(client.get_tables("GoogleSheets1", "GoogleSheets"))

トラブルシューティング

CrewAI のインストールエラー

CrewAI は Python 3.10 以降が必要です。インストールされているバージョンを確認してください:

python --version

古いバージョンの場合は、Python 3.10+ をインストールし、新しい仮想環境を作成してください。

OpenAI API エラー

  • OPENAI_API_KEY が有効で、利用可能なクレジットがあることを確認してください。
  • CrewAI は GPT-4o で最も効果的に動作します。別のモデルは OPENAI_MODEL 環境変数で設定できます。

認証エラー

  • .env の CData メールアドレスと PAT が正しいことを確認してください。
  • PAT が期限切れになっていないことを確認してください。
  • Connect AI アカウントがアクティブであることを確認してください。

ツールが利用できない

  • Connect AI に少なくとも 1 つのデータソースが接続されていることを確認してください。
  • ユーザーが接続にアクセスする権限を持っていることを確認してください。

ツール呼び出しの失敗

  • CData Connect AI インスタンスに少なくとも 1 つのアクティブなデータソースが接続されていることを確認してください。
  • 完全修飾テーブル名を使用してください: [Catalog].[Schema].[Table]
  • src/tools.py のカタログ名とスキーマ名が Connect AI の設定と一致していることを確認してください。
  • client.get_columns() でカラム名が存在することを確認してください。
  • verbose 出力を確認し、Connect AI MCP サーバーからの具体的なエラーメッセージを確認してください。

出力ファイルが生成されない

  • output/ ディレクトリが存在することを確認してください(git clone で作成されます)。
  • output/ ディレクトリのファイル権限を確認してください。
  • エージェントの verbose 出力を確認してください。上流のタスクが失敗すると、下流のタスクが実行されない場合があります。

次のステップ

マルチエージェント Crew が動作するようになったら、次のことを試してみましょう:

  • エージェントを追加: src/agents.py のパターンに従って、追加の専門エージェント(競合インテリジェンス、財務アナリストなど)を作成できます。
  • より多くのデータソースを接続: CData Connect AI ダッシュボードから、Salesforce、HubSpot、Snowflake など 350 以上のサポートされたソースを追加できます。
  • プロセスタイプの変更: 独立したタスクの場合は、Process.sequential から Process.parallel に変更してみてください。
  • 出力フォーマットの変更: Writer タスクの記述を変更して、Markdown の代わりに JSON を出力させることもできます。
  • メモリとキャッシュの追加: マルチセッションリサーチ向けに、CrewAI のメモリ機能を活用してみてください。
  • 高度なパターンを探索: CrewAI ドキュメントでは、委任、階層型プロセス、Human-in-the-Loop ワークフローについて詳しく解説されています。

リソース


CData Connect AI を始めよう

AI 搭載のデータアプリケーションを構築する準備はできましたか?CData Connect AI は、AI アプリケーションから 350 以上のエンタープライズデータソースへのガバナンスされたセキュアなアクセスを提供します。 マルチエージェント Crew から、Salesforce、Snowflake、HubSpot、Google スプレッドシート、データベースなどのライブビジネスデータを、単一の MCP インターフェースを通じてクエリできます。

無料トライアルにサインアップして、今日からインテリジェントなマルチエージェント Crew の構築を始めましょう!