3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【良書】「AIエージェント開発/運用入門」のハンズオンをやってみた

Last updated at Posted at 2025-10-20

はじめに

:thought_balloon: AIエージェントに興味があるけど、一から理解するの大変そう、、、。
:thought_balloon: いろいろ情報収集してみたけど、実際どうやって実装すればいいの、、、?

こんな気持ちで毎日モヤモヤしていたとき、1冊の本に出会いました。

そう、こちらです:point_down: (実は、発売前からネット予約してました。)
:orange_book: AIエージェント開発 / 運用入門 [生成AI深掘りガイド]

実際手にしてみると、かなり分厚いっ!笑

今回は本書のハンズオンをやってみて何が良かったか、気づいたことをまとめてみました!

ハンズオンをやってみた

なにが良かった? :grinning:

  • タイトルに "入門" とあるように、ハンズオンに入る前に出てきた用語の説明やハンズオンのコマンドまですべて丁寧に記載されています:sparkles:
     :arrow_right: 丁寧な説明があるため、本として読むだけでも十分価値がある!
     
  • ハンズオンとして実際にMastraやStrands Agentsを使って実装するものも含まれており、最近のトレンドもキャッチアップしつつ実装できちゃいます:sparkles:
     :arrow_right: 実際に手を動かして学べるから、身につきやすい!
     
  • GitHub Codespacesを利用したハンズオンになっているため、環境構築が不要で、すぐに動かすことができます:sparkles:
     :arrow_right: ハンズオンの一番のネックである環境構築がないのは嬉しすぎる!

勉強になったこと :pencil:

  • LangGraph における MCP サーバの使い方
    LangGraph では、MCP サーバを mcp_client として定義する。
    定義した mcp_clinet の get_tools 関数でツールを取得する。
    それを LLM の初期化のときに bind_tools 関数で指定する。
    そうすることで LLM が tools として MPC サーバを使えるようになる。
     
  • LangGraph におけるグラフの構築の仕方
    LangGraph では python コードで node と edge を以下のように定義してグラフを構築する。
builder.add_node("ノード名", node_name)
builder.add_edge("エッジ名", edge_name)

graph = builder.compile(name="ReAct Agent")
  • Human-in-the-Loopを実現するやり方
    Human-in-the-Loopを実現するために意図的に例外を発生させる。
    具体的には、Interrupt関数を呼び出す。
    そして、ユーザが承認した場合に、ToolCallインスタンスを返し処理を継続させる。
     
  • AIエージェントの構築だけではなくその評価方法(Langfuse、RAGAS)のハンズオンがある
    私個人的には、こちらがとても勉強になりました。:grinning:
    Langfuseは、LangChain/LangGraphのトレースデータを簡単に取得できる。
    トークン数、コストが確認でき、タイムラインでレイテンシ調査ができる。
    プロンプトをバージョン管理できる。
    さらに、
    Langfuseが提供するCallbackHandlerで推論の入出力の内容を自動的にLangfuseにトレースデータとしてアップロードしている。
    @observeデコレーターを付与することで関数の入出力をトレースデータとしてアップロードすることができる。
[]
@observe # @observeを追加するだけ
def XXX:
  • Bedrock Guardrailsのセーフガード
    どうやってプロンプトインジェクションを検知しているのか? その判断基準はなにか?
    モデル呼び出しの入力をチェックし、攻撃やリスクを検知した場合、対象データをブロックする。
    Bedrock Guardrailsが提供する5つのセーフガード
     :heavy_check_mark: コンテンツフィルタ
     :heavy_check_mark: 拒否トピック
     :heavy_check_mark: 単語フィルタ
     :heavy_check_mark: 機密情報フィルタ
     :heavy_check_mark: コンテキストグラウンディングチェック

気づいたこと :white_check_mark:

  • Amazon Bedrock モデルアクセスの有効化のやり方が変わった
    AWS の仕様でやり方が変わったみたいです。
    本書でも memo として記載があります。
    以前のように毎回申請する必要はなくなりました。

image.png

  • IAM Identity Center を使っている場合は、ちょっと追加作業がある
    .envに「AWS_SESSSION_TOKEN」を定義する必要があります。
.env
# AWS認証情報
AWS_ACCESS_KEY_ID=xxx
AWS_SECRET_ACCESS_KEY=xxx
AWS_DEFAULT_REGION=us-west-2

# IAM Identity Centerを使っている場合は以下を追加する。
AWS_SESSION_TOKEN=xxx

 そうしないと認証エラーになってしまいます。

 IAM Identity Center を利用している場合、AWS認証情報の取得は以下の赤枠の「アクセスキー」をクリックすると認証情報が表示されます。

image.png

 「オプション 3: AWS サービスクライアントで使っている、ご自身の設定値を使用する」から確認できます。

image.png

 また、IAM Identity Center を利用している場合は、認証に時限があります。
ハンズオン中に認証エラーとなった場合は再度 IAM Identity Center で .env の認証情報を更新する必要があります。

  • SNS トピックがus-east-2ではない場合
    ハンズオンの中で、SNS トピックを使うのですが、すでに ap-northeast-1 リージョンで作っている SNS トピックを使いたい場合は、以下のようにregion_name='ap-northeast-1'を追加する必要があります。
sns_client = boto3.client('sns', region_name='ap-northeast-1')
  • p.123 本書のコードと本書の GitHub リポジトリのコードとで一部異なる
    本書には以下の記載がありますが、GitHub リポジトリの方にはなかったです。
    (特にハンズオンに支障はないですが。)
if not isinstance(last_message, AIMessage):
	raise ValueError("「AIMessage」以外のメッセージです。遷移が不正な可能性があります。")
  • GitHub spaces のターミナル終了の仕方がわからない
    GitHub spacesのターミナルが「command + c」で終了しない...。
    いつも「ターミナルの終了」 → 「新規ターミナル」で対応してました。

2025/10/20
みのるんさんより「control + c」でできるとコメントいただき、できました!

  • p.163 誤字
    「.envファイルの取り扱いPoint」でファイルパスがおかしい。
    誤)mastra_practice/mastra_practice/.gitignore/.gitignore
    正)mastra_practice/.gitignore
     
  • p.274 誤字
    requirements.txt作成時のコマンドのパスが合っていない。
    誤)cd /workspaces/agent-handson/backend
    正)cd /workspaces/agent-handson/chapter6/backend

おわりに

1周目はハンズオンを中心に要点だけを読んでいましたが、より理解を深めるために2周目はじっくりと読みたいと思います。
 
理解ができればその応用も可能かな、と思います。こうしたらどうだろう? とか こういうことできないかな? というのが出てくるように日々試行錯誤していきたいと思います。
 
この記事が、どなたかのAIエージェントライフにちょっとでも役立てば嬉しいです。

3
3
2

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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?