2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GenU を使って AgentCore CLI で作ったAIエージェントを10分で社内展開する

2
Posted at

Amazon Bedrock AgentCore を使うと簡単に高度なエージェントを構築することができます。AgentCore Starter Toolkit CLI を使えばたった数行のコードとコマンドでエージェントを AgentCore Runtime にデプロイし利用することができます。

AgnetCore Runtime はアプリケーションから呼び出すことができ自社の社内アプリケーションやプロダクトに組み込んで自由度高く統合できる一方、UI は提供されていないため自前で構築する必要があります。

そこで利用できるのが、GenU です。

image.png

GenU(Generative AI Use Cases)は、AWS 有志で開発している OSS の生成AIの業務活用アプリケーションで、UI・認証 (SAML)・デプロイ基盤が揃っており、デプロイされた AgentCore を簡単に紐付けて利用することができるため、AgentCore でデプロイされた多数の社内のエージェントのハブとなるエージェントプラットフォームとして利用することができます。

OSS なのでもちろんライセンスコストはかからず Bedrock と AgentCore Runtime の完全従量課金制なので、スモールスタートの PoC でも、1万人以上の組織においても手軽に利用することができます。

実践:5ステップで社内展開

Step 1: エージェント開発(5分)

普通にAgentCore CLIでエージェントを書きます。

# agent.py
from strands import Agent, tool
from strands.models import BedrockModel
from bedrock_agentcore.runtime import BedrockAgentCoreApp
import boto3
import json

app = BedrockAgentCoreApp()

@tool
def search_docs(keyword: str) -> str:
    """社内ドキュメントを検索"""
    # 実際はS3やElasticsearchと連携
    return f"{keyword}」に関する社内文書を3件見つけました"

@app.entrypoint
async def entrypoint(payload):
    messages = payload.get("messages", [])
    prompt = payload.get("prompt", [])
    model_id = payload.get("model", {}).get("modelId", "global.anthropic.claude-sonnet-4-5-20250929-v1:0")
    model_region = payload.get("model", {}).get("region", "us-east-1")
    
    session = boto3.Session(region_name=model_region)
    model = BedrockModel(model_id=model_id, boto_session=session)
    agent = Agent(messages=messages, model=model, tools=[search_docs])
    
    async for msg in agent.stream_async(prompt):
        if "event" in msg:
            yield msg

if __name__ == "__main__":
    app.run()
# requirements.txt
strands-agents
strands-agents-tools
uv
boto3
bedrock-agentcore<=0.1.5
bedrock-agentcore-starter-toolkit==0.1.14

ポイント:

  • (必須): AgentCore Runtime はレスポンスの型に制約がありませんが、GenU は Strands の Stream Response を受け取ることを期待しているため async for msg in agent.stream_async(message): の結果を yield msg する必要があります
  • (オプション) GenUからは payload.get("model", {}).get("modelId") でモデルが渡ってくるので、これを使えばUI上でモデル切り替え可能になります。

Step 2: デプロイ(3分)

# 初回のみ設定
agentcore configure --entrypoint agent.py

# デプロイ
agentcore launch

デプロイ完了後、ARNが表示されます:

Agent ARN: arn:aws:bedrock-agentcore:us-west-2:123456789:runtime/agent-abc123

Step 3: GenU設定(1分)

parameter.ts に追加するだけ:

const envs: Record<string, Partial<StackInput>> = {
  '': {
    agentCoreRegion: 'us-west-2',
    agentCoreExternalRuntimes: [
      {
        name: '社内文書検索エージェント',
        arn: 'arn:aws:bedrock-agentcore:us-west-2:123456789:runtime/agent-abc123',
      },
    ],
  },
};

Step 4: GenUデプロイ(1分 + 待ち時間)

npm run cdk:deploy:quick

Step 5: 完成

GenU の UI にアクセスすると、AgentCoreメニューに「社内文書検索エージェント」が表示されます。

もう使えます。

image.png

何が嬉しいのか?

1. UI開発ゼロ

GenUが提供するチャットUIがそのまま使えます。

  • Web アプリ
  • ストリーミング表示
  • 会話履歴
  • モデル切り替え
  • レスポンシブ対応

2. 認証が標準装備

  • Cognito認証
  • SAMLフェデレーション(EntraID等)対応
  • ユーザー管理機能
  • アクセスログ

社内システムとのSSO連携も簡単です。

3. 複数エージェントの管理

agentCoreExternalRuntimes: [
  { name: '文書検索', arn: 'arn:...' },
  { name: 'データ分析', arn: 'arn:...' },
  { name: 'コード生成', arn: 'arn:...' },
]

用途別にエージェントを分けて、ユーザーが選択できます。

実際のユースケース

社内ヘルプデスクエージェント

@tool
def search_faq(question: str) -> str:
    """FAQを検索"""
    # Pinecone等のベクトルDBで社内FAQを検索
    
@tool
def create_ticket(title: str, description: str) -> str:
    """問い合わせチケット作成"""
    # Jira/ServiceNow API連携

データ分析エージェント

@tool
def query_redshift(sql: str) -> str:
    """社内DWHに問い合わせ"""
    # Redshift Data APIで安全にクエリ実行
    
@tool
def generate_chart(data: dict) -> str:
    """グラフ生成"""
    # S3に画像保存してURLを返す

コードレビューエージェント

@tool
def get_pr_diff(pr_number: int) -> str:
    """PRの差分取得"""
    # GitHub API連携
    
@tool
def analyze_security(code: str) -> str:
    """セキュリティチェック"""
    # Semgrep等のツール連携

コスト

Agent 推論(Bedrock + AgentCore Runtime): 
約 $0.002~$0.1 / リクエスト (モデルやタスクにより異なります) 
x 1人平均1日5回 x 50 人 x 20 営業日 = 約 $10~500 / 月

GenU基盤 (推論以外、RAG などは立てない): 
約$5/月(全体)

---

合計: 50 人で約 $15~505 / 月 => 一人当たり $0.3~$10 / 月

アプリ自体や AgentCore Runtime にほぼコストはかからずモデルの消費トークンが支配的な構図です。

Agent の実行コストに幅があるのはタスクの種類によってトークン消費量が異なるのとモデルの単価が異なるためです。具体的には上記の試算では Nova 2 Light の入力 2K / 出力 1K ~ Claude Sonnet 4.5 の入力 10K / 出力 5K でのざっくり計算です。多数の Agent をスケールさせるためにはモデル自体の単価でコストが 10 倍以上変わってくるため特に利用者数や実行数が多い場合はモデルの選定が重要です。

まとめ

AgentCore + GenUの組み合わせで:

  • 開発: エージェントロジックだけに集中
  • デプロイ: agentcore launch 一発
  • 社内展開: parameter.ts に1行追加
  • 運用: UI・認証・ログ全部込み

フロントエンド開発に時間を使わず、エージェントの中身に集中できます。

AIエージェントの社内展開の仕方に迷ったらGenUで展開、というのも選択肢としてありなのではないでしょうか?

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?