はじめに

はじめまして!

東海大学情報理工学部コンピュータ応用工学科4年の有馬勇人です。私は2025年7月2日から一ヶ月間「CA Tech JOB」というインターンシップにバックエンドエンジニアとして参加しました。

 

インターン期間中の目標

今回のインターンシップでは下記の三つの目標を立てました。

 

1、実務で使用したことのないGo言語を使った開発

2、トレーナーや先輩エンジニアと会話を重ねる中で自分の考えや役割、今やるべきことを整理する能力を養う。

3、限られた期間の中で最大限の成果を出し、チームに技術的な面で貢献していくこと

 

配属部署

私は今回のインターンシップでAbemaTV BD本部開発局のDX_Groupに配属されました。この部署では、ABEMAの広告配信などや広告入稿などの広告に関することを扱っています。

 

開発目標

インターンでは、施策開発としてABEMAの広告プランニング(広告配信シミュレーション)を自然言語から作成するためのAIエージェントの作成を設計から行いました。

この開発の最終的な目標として、自然言語から具体的なプランニングの提案とプランニング改善提案を行えるようにして、プランニングシートとして保存できるようにする機能の作成を行いました。

 

使用した技術スタック

使用した言語:Go言語

API通信:gRPC

インフラ:GoogleCloud

AIエージェント:VertexAI、VertexAIAgentBuilder

LLMモデル:Gemini-2.5-flash、Gemini-2.5-pro

データストア:CloudSQL、CloudStorage、BigQuery

 

開発フロー

 

 

設計

まず始めにAIエージェントシステムを作る上での設計の部分から始めました。

実際に設計から開発をする際に先輩エンジニアからレビューをもらい、下記の3点を意識して設計を行いました。

・一方向依存

 各層が「外側から内側へ」だけ依存し、循環参照を絶対に起こさないようにした

・責務の明確化(SRP)

 モジュール/クラスは「変更理由」を一つに絞るようにした

・抽象と実装の分離(DIP)

 ビジネスロジックはインターフェイスにのみ依存し、具体実装は外部層のみにした

 

 JOB中に書いた設計に関するテックブログ:https://qiita.com/Shake_Retr0/items/e94a7ec65c3a52a57580

 

AIエージェントシステムの開発

 

マルチエージェントアーキテクチャの採用

まずは、広告プランニングという複雑なタスクに対して、一つのモデルで全ての専門知識をカバーすることが難しく、多岐にわたる専門領域の知識を単一のモデルにする必要があり、現実的ではありませんでした。

次に、処理の不透明性の問題です。ブラックボックス的な処理では、なぜそのようなプランニングが生成されたのか、クライアントに対する提案の根拠を明確に説明する必要がありました。

そのため、この課題を解決するために私は3つの専門特化したAIエージェントを協調させるマルチエージェントアプローチを採用しました。

 

システムのシーケンス図

下の図は今回のシステム内でどのようにして、プランニングを生成しているのかを表したものになります。

 

VertexAIとVertexAIAgentBuilderの活用

 

VertexAIプラットフォームの特徴と機能

GoogleCloudのVertexAIは、システムの中核を担う統合型のAI/MLプラットフォームです。Gemini2.5モデルの強力な言語能力と推論能力を活用することで、高品質な広告プランニングの自動生成を実現しています。

また詳細なプランニングを作成する際に、今回は意図的にFunctionCallingと呼ばれるLLMがプログラムの関数を呼び出す機能を使用しませんでした。理由として、改善提案を行う際にFunctionCallingを使用すると毎回関数全体を呼び出すのに対して、今回作成したスキーマベースでプランニングを作成して差分ベースで改善案をマージする場合だと差分のみをLLMに処理させるため、トークンの量を少なくすることができ、スキーマで厳密に定義されているため、より正確な情報が返ってくるからです。

 

AgentBuilderによる専門性特化エージェントの構築

VertexAIAgentBuilderは、通常のVertexAIとは異なり、特定のビジネスニーズに特化したエージェントを構築するためのローコードプラットフォームです。私はこのAgentBuilderを使用して、2つの専門特化型エージェントを構築しました。

下の図が、 今回作成したAgentBuilderを使用したAIエージェントの詳細になります。

 

 

 

 

 

 

 

 

 

 

 

 

まず提案エージェントは、ABEMAの広告商品に特化した戦略的パートナーとして設計されています。このエージェントには、ABEMAの広告商品に関する詳細な知識が含まれています。このエージェントの役割として、上記のVertexAIで生成されたプランニングに対して、専門的な知識を使用してプランニングの改善提案を促すことです。また、AgentBuilderにおけるFunctionCallingは、直感的にコンソールで設定できるため、正確な形のデータを簡単に出力することが可能になっています。

 

(オプション機能)

次にReActエージェントの説明になります。このエージェントは反復的な最適化に特化しています。このAIエージェントは単純な一回の推論ではなく、Resoning-Action-Observationのループを通じて、AIの思考プロセスの透明性が大幅に向上することです。しかし、今回この機能をオプションとしたのは、データ量が膨大でDataStoreへの接続コストがかかりすぎるため、十分な精度向上を見込めないと判断したからです。

 

 

 

 

 

 

 

 

 

 

 

 

データストア連携による知識の拡張

AgentBuilderの強力な能力の一つである、専用データストアとの連携です。データストアIDやCloudSQL、CloudStorage、BigQueryと連携を行うことで、過去の成功事例やプランニングなどの情報を使用して、より専門性の高いエージェントとして情報提供を行うことができます。今回はデータを使用するリソースの関係で最終的な実装まで辿り着くことができませんでした。

 

実装画面とプランニングの出力

実際に自然言語からVertexAIを使用して、下の画像のようなプランニングシートの作成を実装できました。

 

 

 

 

 

 

 

 

 

 

また、プランニング作成と同時にAgentBuilderを使用して、プランニングの評価や改善提案を行う機能の実装を行いました。

 

 

 

 

 

 

 

 

 

 

 

 

発展課題への取り組み

トークンの使用量を可視化

現在、トークン使用率のモニタリングを行い、パーセント表示を行った。

Geminiのマックストークンである100万トークンに対して、80%の制限を設けて、安全マージンを設定した。

欠点として、日本語・英語の文字数からトークンを算出する際に独自でアルゴリズムを使用している為、信憑性が少し低くなってしまっている。

 

今回のインターンシップで学んだ事

この一ヶ月の施策開発を通じて、技術と業務を行う上での姿勢の両面で多くのことを学びました。インターン期間中の目標を振り返ると

実務でのGo言語開発については、クリーンアーキテクチャの設計思想をGoのインターフェースでどう表現するのか、コードを書きながら深く理解することができました。

対話を通じた思考整理の面では、トレーナーや先輩エンジニアの方のレスポンスの早さとフィードバックによりコードや設計の改善をすぐに落とし込むことができ、思考の整理とタスクの進行を効率的に行えました。

チームへの技術的貢献という点では、マルチエージェントやVertexAI、VertexAIAgentBuilderの導入を行ったことや、施策開発の根幹に関わるデモを完成させられたことが、チームに貢献できたという実感と共に、大きな自信に繋がりました。

 

加えて、今回のシステムの核であるマルチエージェントの自動プランニングシステム開発を通じて、複雑なタスクを分割統治する設計思想とエージェント間の連携を設計する重要性を学び、AIアプリケーションを構築する上での深い知見を得ることができました。

 

終わりに

一ヶ月という短い期間でしたが、このインターンシップは私のエンジニアとしての価値観を大きく広げる、非常に密度の濃い経験となりました。

トレーナーの浜谷さんと様々な面で助けてくださったBDエンジニアの皆さんには、本当にお世話になりました。ありがとうございました。