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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for onhrs onhrs
October 08, 2024
150

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

Avatar for onhrs

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と同じ階層に置く