はじめに
本記事はハンズオンではなく、AIエージェントを学び1か月で構築することが出来たアプリケーションの説明、大変だった点、そしてこだわった点などを紹介します。
一部の技術に関しては技術的要素を組み込みますが、全体を通して構築するわけではないことをご理解いただければと思います。
開発のきっかけ
友人がマーケティング系の会社で勤務しており、その際、PRしたい商品をインフルエンサーにお願いすることもあると言っていました。
またその検索自体、自身でYoutubeやInstagramを検索することでリストアップを行っているということを聞き、AIエージェントの介入の余地はないかを考え出したことがきっかけです。
構成
認証基盤:PJでの活用経験より、知見のあったAuth0を利用しました。
画面UI:Streamlitでの実装に加え、Streamlit Community Cloudでのデプロイを実施しました。
バックエンド:Strands Agents・AgentCoreによりバックエンド処理を実装しました。
Strands Agentsの実装
各種ツールはAPIやスクレイピングにより実装を行いました。
なお、ツールの呼び出し、デプロイ(bedrock-agentcore-starter-toolkit)については下記の記事を参考に行っております。
Toolの呼び出し
前回まででエージェントと各ツールの呼び出し方は勉強していたので、今回は特に実装の形態を変えることなくすんなり実装が出来ました。
良かったら私の記事を参考に皆さんもAIエージェントに取り組んでみてください。
メモリの活用
ただ検索するだけではもったいないと思い、AgentCore Memoryを活用することにしました。
メモリの活用により、「前回リストアップしてくれたYoutuberは〇〇の観点でよかったから、もう少し〇〇の観点に寄せて検索してほしい」といった過去のリストアップに対するフィードバックを踏まえて実装できるようになります。
下記の記事にはメモリの使い方や短期記憶、長期記憶の違い、また長期記憶でもその使い分けなどの詳細が記載されており、非常に参考になりました。
Auth0とStreamlitの統合
下記のQiita記事を参考に、ローカルでの実装を行いました。
記載のなかったポイントとして2点、備忘もかねて記載します。
1: ローカル端末での実装 - secrets.tomlの配置場所
配置場所は下記の通り、画面を動かすPythonファイル(ここではapp.py)と同列に.streamlitフォルダを配置し、secres.tomlファイルを配置することで動作するようになりました。
/ルートディレクトリ
/app.py
/.streamlit
/secrets.toml
2: Streamlit Community Cloudでの実装
Streamlit Community Cloudにデプロイするためには、パブリックリポジトリの設定が必要です。
パブリックリポジトリにsecrets.tomlなどの秘密情報をコミットすることは非常に危険のため、そのままデプロイするのは危険です。
下記コミュニティクラウドのダッシュボードから対象アプリケーションの「Settings」を開き、Secretsにsecrets.tomlの内容をべた張りすることで可能です。
その際、auth設定のredirect_uriはStreamlit Community CloudでのURLへ書き換えるようにしてください。

Streamlit Appのデプロイ
下記の記事を参考にしました。
アプリケーションのデプロイ自体は比較的簡単にできると思いますので、ぜひ試してみてください。
使ってみる
URLへアクセスすると、Auth0画面へリダイレクトされます。
架空のキャンプ商品を売りたいという前提で、AIエージェントに調査をしてもらいます。

下記の通り検索したインフルエンサーの概要と、PR戦略まで提案してくれるようになりました。

最後に
今後実施していきたいことは下記です。
- AgentCoreで利用するAPIキーなどの秘密情報の管理を、現状は環境変数で行っているため、AgentCore Identityと統合していきたい
- 過去のセッションで何を話したのかが分からないので、サイドバーに過去のチャットをさかのぼれるように追加していきたい
- ツールが増えた際に現状だとAgentCore側での実装によっているため、一つバグが発生したら全ツールが影響を受ける。各ツールをLambdaへ移行し、疎結合な構成にしていきたい
まだ1か月ですが、AgentCoreは知れば知るほど学ぶべき側面が広がり、面白いなと思います。
今後も新しいツールを活用し、発信していきたいと思います。
ここまで見てくださり、ありがとうございました。



