Slide 1

Slide 1 text

Confidential Copyright © MILIZE Inc. All rights reserved 2024年10月04日 ©MILIZE Inc. AIエージェント ソフトウェア開発勉強会 社内のデータ分析案件や kaggleでモデリングしたまま眠ってしまっ たNotebookたちをAiderでモジュール化し API化するまでの軌跡 〜明日から使える AierによるAl API開発〜

Slide 2

Slide 2 text

Copyright © MILIZE Inc. All rights reserved Confidential Aiderとは 2 Aider:AIを活用したコーディングアシスタントツール ● 高度な言語モデルを活用 ○ GPT-4やClaudeなどを利用してコードの生成・編集を 支援 ● ターミナル上でのペアプログラミング ○ 開発者とAIが協力して効率的にコーディング ● Gitリポジトリとの連携 ○ コードの変更を自動的に追跡・コミット ● 既存コードベースへの対応 ○ 新規プロジェクトの作成だけでなく、既存のコードの編 集・拡張も可能

Slide 3

Slide 3 text

Copyright © MILIZE Inc. All rights reserved Confidential Cursorとの比較 3 比較項目 Aider Cursor ソースコード オープンソース クローズドソース コスト構造 APIリクエスト分のみ課金 月額固定料金モデル インターフェース ターミナルベース 独自のGUIエディタ 精密な制御 可能 比較的制限あり コード変更の管理 自動追跡、Gitコミット生成 より多くの手動操作が必要 コンテキスト管理 gitリポジトリ全体のマップを使 用 課題があるという指摘あり 大規模コードベースでの 効果 効果的 比較的劣る可能性あり カスタマイズ性 多くのオプションあり 比較的制限あり

Slide 4

Slide 4 text

Copyright © MILIZE Inc. All rights reserved Confidential 4 Aiderの基本機能

Slide 5

Slide 5 text

Copyright © MILIZE Inc. All rights reserved Confidential Aiderの凄さ 5 ● Aider自身もAiderでコード生成されている ● 近年のリリースだと約半数がAiderで修正され ている

Slide 6

Slide 6 text

Copyright © MILIZE Inc. All rights reserved Confidential Aiderでできること 6 カテゴリ サブカテゴリ 機能・タスク コーディングタスク シンプルなFlaskアプリの作成 - Flaskを使用して「Hello World」アプリを作成 - 2つの数を加算するエンドポイントの追加 - フィボナッチ数列を計算するエンドポイントの実装 JavaScriptゲームの修正 - 既存のオープンソースリポジトリの解析 - コードの理解を深めるためのサポート - ゲームの機能を変更するための具体的な提案 複雑なマルチファイル変更とデ バッグ - 複数のソースファイルにまたがるコード変更の実施 - エラーメッセージのレビューによるバグ解決 - ドキュメントスニペットを参照しての修正 ブラックボックステストケースの作 成 - ソースコードにアクセスせずにテストケースを作成 - ctagsに基づくリポジトリの高レベルマップを使用 - テストの結果を分析し、報告

Slide 7

Slide 7 text

Copyright © MILIZE Inc. All rights reserved Confidential Aiderの活用例1(FlaskによるAPI開発) 7

Slide 8

Slide 8 text

Copyright © MILIZE Inc. All rights reserved Confidential Aiderの活用例2(既存プロジェクトの回収) 8 ● 引き継ぎ等で担当者不在の中、機能改善があった場合を想定 ● 機能改善の対象コードがどこかわからない場合Aiderを活用 ボーナスアップのコードどこにある???

Slide 9

Slide 9 text

Copyright © MILIZE Inc. All rights reserved Confidential その他のできること 9 データ分析と可視化 米国国勢調査データのダウンロー ドと分析 - 国勢調査データの取得方法 - テストする仮説の提案 - 結果の要約とグラフの作成 セマンティック検索と置換 - 機能呼び出しのコレクションの更新 - 様々なフォーマットやセマンティックの違いに対処 - コードの一貫性を保つための戦略 ゲーム開発の実践 Pygameを使用したPongゲーム の作成 - シンプルなPongゲームの設計 - パドルのサイズと色のカスタマイズ - ボールの速度調整機 能の追加 CSSエクササイズ:アニメーション 付きドロップダウンメニュー - ドロップダウンメニューへのアニメーション追加 - ユーザーインターフェースの向上 - CSSのトランジションを利用した効果 ドキュメントの自動更 新 main()関数に基づくドキュメント更 新 - コードの変更に応じたドキュメントの自動更新 - ドキュメント管理の効率化 - バージョン管理との統合

Slide 10

Slide 10 text

Copyright © MILIZE Inc. All rights reserved Confidential その他のできること 10 Asciinemaキャスト ファイルの編集 エスケープシーケンスの修正 - Asciinemaファイルの内容を編集 - 特定のエスケープシーケンスの変更 - 録画内容の視認性向上 チャットトランスクリプ トの理解 Aiderの操作方法 - コード変更の提案と自動適用 - Gitへのコミットとメッセージの記述 - ユーザーによるファイルの追加と削除の管理 トランスクリプトのフォーマット - ユーザーとLLMのメッセージの区別 - コードの変更を示す編集ブロックの使用 - コミュニケーションの明確化 ユーザーの役割 - チャットセッションへのファイル追加 - LLMからのファイル要求への応答 - コードの理解と修正における協力 Aiderの機能の利点 - コーディング作業の効率化 - デバッグやテストの自動化 - 学習と成長の機会の提供

Slide 11

Slide 11 text

Copyright © MILIZE Inc. All rights reserved Confidential 11 背景と目指す世界線 背景とAiderの基本機能

Slide 12

Slide 12 text

Copyright © MILIZE Inc. All rights reserved Confidential 現状のプロジェクトプロジェクト 12

Slide 13

Slide 13 text

Copyright © MILIZE Inc. All rights reserved Confidential 弊社働き方紹介 13 自社開発 受託開発 自社開発 導入開発 AIプラットフォームの導入開発プロジェクト AIプラットフォームアプリ ニーズ調査→モデル開発→FE/BE・インフラ開発→販売改善PDCAサイクル etc…

Slide 14

Slide 14 text

Copyright © MILIZE Inc. All rights reserved Confidential 〇〇さんがスクレイピン グした処理を既存プロダ クトやdifyで連携できな い? 過去にやった仮想通貨 予測の案件を復活させ たい 実際にあった社内のユースケース 14 ● 退職等による担当者の不在 ● 依頼が来た内容とkaggleのタスクの違いが説明できない ● 社内プラットフォーム、difyに直接モデルをサービングできない Kaggleで似たタスクを経 験したそうですね。今回の データは少し異なるようで すが、どんな感じですか?

Slide 15

Slide 15 text

Copyright © MILIZE Inc. All rights reserved Confidential POCやkaggleが終了したまま使わなくなったノートブックを再利用 15 Aiderで眠っていたコードの復活を目指す

Slide 16

Slide 16 text

Copyright © MILIZE Inc. All rights reserved Confidential Aiderでめざす機械学習基盤の世界線 16 ● ソフトウェアエンジニアリングと機械学習の関心を分離 ● Aiderで機械学習基盤のアップデート、効率化を目指す Jupyter だけで機械学習を実サービス展開できる基盤 | Recruit Tech Blog https://techblog.recruit.co.jp/article-1086/

Slide 17

Slide 17 text

Copyright © MILIZE Inc. All rights reserved Confidential 17 実践

Slide 18

Slide 18 text

Copyright © MILIZE Inc. All rights reserved Confidential AierのTips 18 ※図Mapifyを使用して作成 Tips | aide https://aider.chat/docs/usage/tips.html

Slide 19

Slide 19 text

Copyright © MILIZE Inc. All rights reserved Confidential AIモデルをサービングするために満たすべき要件 19 モデルのエクスポートと変換 : ● Jupyter Notebookで作成したモデルを適切な形式で保存する(例: pickle, joblib, ONNX) ● 必要に応じてモデルを最適化し、推論用に変換する 依存関係の管理: ● 必要なライブラリとバージョンを requirements.txt に記載 ● 仮想環境の使用(venv, conda など)を検討し、環境の再現性を確保 APIの設計と実装: ● FastAPIを使用してエンドポイントを定義 ● 入力データのバリデーションとレスポンスの形式設定( JSON推奨) エラーハンドリングとログ記録 : ● 適切な例外処理とエラーメッセージの設定 ● ログ機能の実装(アクセスログ、エラーログなど) セキュリティ対策: ● 認証機能の実装(JWT, OAuth2など) ● 入力データのサニタイズ ● CORS(Cross-Origin Resource Sharing)の設定 パフォーマンス最適化 : ● 非同期処理の活用 ● リクエスト制限の設定 テスト: ● 単体テスト、統合テスト、負荷テストの実装 ● テストカバレッジの確保 ドキュメンテーション : ● API仕様書の作成(OpenAPI/Swagger) ● コードのドキュメンテーション、使用方法と手順の説明 モニタリングと可観測性 : ● メトリクス収集(リクエスト数、レスポンスタイムなど) ● 分散トレーシングの実装 ● アラートの設定 CI/CD: ● ビルド、テスト、デプロイの自動化 ● バージョン管理とタグ付け スケーラビリティ: ● コンテナ化(Docker)の検討 ● 水平スケーリングの対応 モデルのバージョン管理 : ● モデルのバージョニング ● A/Bテストの実装(必要に応じて)

Slide 20

Slide 20 text

Copyright © MILIZE Inc. All rights reserved Confidential 今回目指すワークフロー 20 ※Napkin AI を使用して作成 サービング ● モニタリング ● CI/CD ● デプロイメント ● スケーラビリティ ● …

Slide 21

Slide 21 text

Copyright © MILIZE Inc. All rights reserved Confidential いざ実践( kaggleで実践) 21 ● ファーストステップ(ノートブックファイルを変換) jupyter nbconvert --to python 対象ノートブック.ipynb ● Aider実行コマンド(bedrockを使用した場合) aider --model bedrock/anthropic.claude-3-5-sonnet-20240620-v1:0 ● トークン数確認 .pyだとトークン数を 節約

Slide 22

Slide 22 text

Copyright © MILIZE Inc. All rights reserved Confidential Aiderのコード生成方法 22 トークンエラーになる事象については巻末を参考 複数ファイルで扱いやすいようにメ ソッドを整理してください /add ファイル名 .py ファイルをチャットに追加して、 aider が編集や詳細なレビューを行えるよう にする(複数ファイル選択可能)

Slide 23

Slide 23 text

Copyright © MILIZE Inc. All rights reserved Confidential Aiderのコード生成方法 23 data_handling.py Create new file? (Y)es/(N)o [Yes]: Y feature_engineering.py Create new file? (Y)es/(N)o [Yes]: Y model.py Create new file? (Y)es/(N)o [Yes]: Y main.py Create new file? (Y)es/(N)o [Yes]: Y …(省略) python main.py Run shell command? (Y)es/(N)o/(D)on't ask again [Yes]: Y 作成されたコード名 良ければ追加 作成されたコードの実行をして良いか(失敗した場合は再度修正が入る )

Slide 24

Slide 24 text

Copyright © MILIZE Inc. All rights reserved Confidential 環境変数の設定 24 `python-dotenv`を使用してAPIキーや機密情報を `.env`ファイルに保存し、`gitignore`に追加して GitHubに公開されないようにしてください。コード内で はこれらの環境変数を読み込むように修正してくださ い。 ハードコーディング禁止

Slide 25

Slide 25 text

Copyright © MILIZE Inc. All rights reserved Confidential Webアプリケーション構築 25 FastAPIを使用して新しいアプリケーションを作成し、 学習を行う/trainエンドポイント 、予測を行う/predict エンドポイントを実装してください。このエンドポイント では、予測時はリクエストからdf_trainで定義された データを受け取り、結果を返します。

Slide 26

Slide 26 text

Copyright © MILIZE Inc. All rights reserved Confidential フォルダーの整理 26 . ├── api ←api関連のフォルダ │ ├── api_utils.py │ ├── main.py │ ├── schema.py │ └── models.py ├── app.py ├── data └── ml←機械学習関連のフォルダ ├── data_handling.py ├── feature_engineering.py └── model.py 以下のようなディレクトリ構成にして、api配下にはapi の機能のみ、ml配下には機械学習周りのコードで整 理してください api/… ml/…

Slide 27

Slide 27 text

Copyright © MILIZE Inc. All rights reserved Confidential テストフロー構築 27 `pytest`を使用してテストスイートを作成してください。 api、mlにそれぞれ`tests/`ディレクトリを作成し、`conftest`や `fixtures`、`parametrize`を活用して効果的なテストを構築してくだ さい。

Slide 28

Slide 28 text

Copyright © MILIZE Inc. All rights reserved Confidential ドキュメント生成 28 プロジェクトのセットアップ方法、起動方法、 テスト方法を含む詳細な`README.md`を 作成してください。 README.mdについて、どのような裏側で データ加工、学習しているのか、また、apiの 構成(エンドポイントや返り値など)など詳細 に記入してください

Slide 29

Slide 29 text

Copyright © MILIZE Inc. All rights reserved Confidential 復活案件事例 29 新規に暗号資産のデリバティブ取引の扱いを開始するにあたり、話題性の 高いツールを導入することで、  新規顧客の流入を促す。
 過去データを用いて、センチメントスコアを算出し、価格変動との先行指標 となり得るかを検証。 背景/ 課題 解決策
 効果/ 検証
 結果 実証実験でTwitterのセンチメントスコアが先行指標となり得る。
 一日前のセンチメントスコアと資産の相関が向上。
 業種:証券 規模感:2,000~3,000名程度 取組部署:プロダクト事業部 9/7 El Salvador makes history 10/20 First U.S. bitcoin futures ETF launches 9/24 China’s central bank says all cryptocurrency-related activities are illegal 8/11 Bitcoin breaks $46k despite political setbacks BTC ETH Aiderでダッシュボード化

Slide 30

Slide 30 text

Copyright © MILIZE Inc. All rights reserved Confidential 復活案件事例(自作した検索エージェントから連携用の API開発) 30 ● 検索クエリからPydanticを定義 ● Pydanticから検索ワードを作成 ● Pydanticの定義に従って結果を返す 生成された Pydanticモデルのコード: # 必要なインポート from pydantic_settings import BaseSettings from typing import List # Pydanticモデルの定義 class StudyGroup(BaseSettings): title: str date: str location: str description: str speakers: List[str] participants_limit: int registration_link: str 「2024年10月に東京で開催されている AIの勉強会についてまとめて」

Slide 31

Slide 31 text

Copyright © MILIZE Inc. All rights reserved Confidential 今後について 31 ● 社内でのAiderの利用の推進 ● AIderを中心とした機械学習基盤開発の実現 ● ノートブックを投げれば今回のようなプロンプトなくモジュール化、API化を 検討 ● kaggle等の分析コンペでハイスコアを狙えないか検討

Slide 32

Slide 32 text

Copyright © MILIZE Inc. All rights reserved Confidential 結論 32 ● POCでもKaggleでもモデリング後に再利用するケースは必ずある ○ Kaggleの類似タスクや類似のデータクレンジング時など ○ 仮想通貨案件 ○ 新規スクレイピングAPI ○ などなど ● Aiderを実際に触ってみて、何もAPI前提知識がない人が開発するのは厳し そうであるが、一通りのことをやった人であれば凄まじいほどの効率化につ ながる

Slide 33

Slide 33 text

Copyright © MILIZE Inc. All rights reserved Confidential 33 参考

Slide 34

Slide 34 text

Copyright © MILIZE Inc. All rights reserved Confidential トークンエラーについて 34 その他トークンエラーに関するエラーについては公式documentを参照 https://aider.chat/docs/troubleshooting/token-limits.html AWS bedrock上の https://github.com/paul-gauthier/aider/issues/1359 {"bedrock/anthropic.claude-3-5-sonnet-20240620-v1:0": { "max_tokens": 8191, "max_input_tokens": 100000, "max_output_tokens": 8191, "input_cost_per_second": 0.0175, "output_cost_per_second": 0.0175, "litellm_provider": "bedrock", "mode": "chat", "supports_assistant_prefill": true } } .aider.model.metadata.jsonの中身 .aider.chat.history.md, .aider.input.historyと同じ階層に置く