🕶️

第1回AI Agent hackasonの振り返り(今更)

に公開

寝かせていた記事を今更発掘したので。。。
4ヶ月前くらいに初めてハッカソンに参加したので、振り返りをやっていきたいと思います!
ほぼ自分用メモです!(すいません)
今第2回が開催されていますが、第1回です!

うまくできたこと

最初に選んだテーマがぶれなかった

地味に一番難しかったのですが、生成AIと壁打ちを繰り返して、ハッカソンのお題に沿う+自分の興味が出るものを数日かけて選択できました。
テーマを生成AIに数十個出させて、自分の琴線に合うものを掘り下げて、その場合に構築するために必要な技術を確認して、、、の繰り返しで最初にしっかりとテーマを選べたのが良かったです。

技術選定~実装までが早かった

最低限の形でGoogle Cloud上に実装できたのは開始2週間ほどで、生成AIもGoogle Cloudも初めて触った割にはうまくいきました。
上記の手順で、自分のできそうな技術で設計できたのが良かった気がします。難しい技術は必須の部分に採用せず、モジュールを分けて、必要に応じてOptionalで拡張できるように設計できました。(結果、難しい技術はタイパが悪いとあまり手を出さなかったのは反省。。。)

動画を最小限の時間で作れた

googleのtext-to-speechに助けられました。
動画編集は字幕に相当時間がかかる経験があったのでやばいなと思っていたのですが、これなら動画に音声ファイルぶち込むだけで形になります。youtubeなら自動字幕も利用できますし。(自分でナレーションを入れるとひどいことになるのは黒歴史で学んでます。。。)

改善点

フロントエンド技術はやっぱり必要

時間のうち結構をchainlitで思うとおりの画面が実装できないかに使ってしまいました。。。
対話しているようにロゴを都度変えられないか、設定もいじれるようにできないかなど考えたのですが、結局うまいことはまらず、多くを標準機能でリリースすることになりました。
最近はpythonで気軽にUIを組めるフレームワークも多いですが、やはり画面を思い通りに作るにはフロントエンドの技術がいりますね。

(自分には難しいけど)デザイナー能力はやっぱり必要

上記とセットですが、逆に思い通りに組めるとなったとき、逆にじゃあどういう画面が良いかということになります。
自分はここを考えるのが絶望的に下手なので、個人開発をしたいなら精進必要だと思いました。
ここまで考えると、自分で何でも習得するよりはチームが必要かもしれません。

terraformで組みたかった

今回の設計なら、多分半日~1日あればterraform組めると思ったのですが、必須ではないと思って実装しませんでした。
考えれば、リポジトリが審査対象に入る以上は実装して損なかったと思いますし、目的の大部分は練習なので、実装しておけばよかったなと反省です。

生成AIのプロンプトを改善する体系的方法

プロンプト直す⇒出力見る⇒プロンプト直すを繰り返していたのですが、議論をするAIエージェントという性質上、何となくしか向上していきません。。。
最初を考えれば明らかに質は上がったのですが、ここが定量化できないと質を向上させるためのパイプラインが組めません。
これは時間が無かったというより、どうしたらよいかわからなかったので、今後の勉強課題です。
これに付随して、VertexAIをもう少し使いたかったのですが、geminiAPI in vertex AIを利用するにとどまってしまいました。

Tips

参考にした書籍、LangGraphが良かった(特に入門編に)

下記の書籍でまず勉強を始めたのですが、かなり良かったです。
生成AIの教科書的実装パターン、実装方法などなど体系的にまとめられています。
生成AI開発が初でも、実装前に論理構成イメージが湧いたのはこの本のおかげです。
LangGraphも直感的に実装するには非常によく、ブラックボックスが生成AIの回答部分だけなので、入門編にもかなり良く感じます。
https://www.amazon.co.jp/LangChainとLangGraphによるRAG・AIエージェント[実践]入門-エンジニア選書-西見-公宏/dp/4297145308/ref=pd_lpo_d_sccl_1/358-8764565-2944356?pd_rd_w=sLXD8&content-id=amzn1.sym.855d8f70-df76-4181-80b0-56e48ae3bb9b&pf_rd_p=855d8f70-df76-4181-80b0-56e48ae3bb9b&pf_rd_r=2DE7EYMYWR1815EVR256&pd_rd_wg=wiRnt&pd_rd_r=19716f79-f24f-4991-a2c2-7acc0af208a6&pd_rd_i=4297145308&psc=1

PydanticOutputParserがマスト

(TypedDictでも良いですが)個人的にはマストの技術でした。
生成AIの不安定さを解消するのにこれほど相性の良いものもない気がしますし、Fieldで定義すればそれも踏まえて生成AIが回答してくれるので、プロンプト管理も楽になります。
実装もかなり簡単で、出力したいPydanticModelを指定して、プロンプトに与えて、最後parserにparseするだけです。

CloudRunが神?

まさかwebsocket通信に実質対応しているとは。。。
最初は最近Kubernetes勉強したし、GKEかなと思っていたのですが、こちらで実装しました。
マネコンから新しいサービスをデプロイするのも超直感的です。
AWSだと対抗馬がECS-Fargateになりそうですが、設置の簡単さは比較になりません。

IAPはちょっとムズイ

IAPによる認証を簡単に実装できると思っていたのですが、思いのほか苦戦しました。。。
スクラップには詰まった点を書いたので、時間のある時にドキュメント化しようと思います。

Discussion