Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The journey of using Aider to modularize and co...

onhrs
October 08, 2024
71

The journey of using Aider to modularize and convert dormant notebooks from in-house data analysis projects and Kaggle models into APIs

onhrs

October 08, 2024
Tweet

Transcript

  1. Confidential Copyright © MILIZE Inc. All rights reserved 2024年10月04日 ©MILIZE

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

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

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

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

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

    • 引き継ぎ等で担当者不在の中、機能改善があった場合を想定 • 機能改善の対象コードがどこかわからない場合Aiderを活用 ボーナスアップのコードどこにある???
  7. Copyright © MILIZE Inc. All rights reserved Confidential その他のできること 9

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

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

    自社開発 受託開発 自社開発 導入開発 AIプラットフォームの導入開発プロジェクト AIプラットフォームアプリ ニーズ調査→モデル開発→FE/BE・インフラ開発→販売改善PDCAサイクル etc…
  10. Copyright © MILIZE Inc. All rights reserved Confidential 〇〇さんがスクレイピン グした処理を既存プロダ

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

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

    ※図Mapifyを使用して作成 Tips | aide https://aider.chat/docs/usage/tips.html
  13. 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テストの実装(必要に応じて)
  14. Copyright © MILIZE Inc. All rights reserved Confidential 今回目指すワークフロー 20

    ※Napkin AI を使用して作成 サービング • モニタリング • CI/CD • デプロイメント • スケーラビリティ • …
  15. 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だとトークン数を 節約
  16. Copyright © MILIZE Inc. All rights reserved Confidential Aiderのコード生成方法 22

    トークンエラーになる事象については巻末を参考 複数ファイルで扱いやすいようにメ ソッドを整理してください /add ファイル名 .py ファイルをチャットに追加して、 aider が編集や詳細なレビューを行えるよう にする(複数ファイル選択可能)
  17. 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 作成されたコード名 良ければ追加 作成されたコードの実行をして良いか(失敗した場合は再度修正が入る )
  18. Copyright © MILIZE Inc. All rights reserved Confidential 環境変数の設定 24

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

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

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

    プロジェクトのセットアップ方法、起動方法、 テスト方法を含む詳細な`README.md`を 作成してください。 README.mdについて、どのような裏側で データ加工、学習しているのか、また、apiの 構成(エンドポイントや返り値など)など詳細 に記入してください
  23. 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でダッシュボード化
  24. 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の勉強会についてまとめて」
  25. Copyright © MILIZE Inc. All rights reserved Confidential 今後について 31

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

    • POCでもKaggleでもモデリング後に再利用するケースは必ずある ◦ Kaggleの類似タスクや類似のデータクレンジング時など ◦ 仮想通貨案件 ◦ 新規スクレイピングAPI ◦ などなど • Aiderを実際に触ってみて、何もAPI前提知識がない人が開発するのは厳し そうであるが、一通りのことをやった人であれば凄まじいほどの効率化につ ながる
  27. 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と同じ階層に置く