GitHub Issue TriageをAIに任せる
GitHubリポジトリの管理は大変です。新しいIssueは、タイトルが曖昧だったり、再現手順が記載されていなかったりすることがよくあります。ラベル付け、重複の確認、詳細情報の要求といった作業に一日が費やされてしまいます。こうした作業は、本来コードを書くために使いたい時間を奪ってしまいます。
2024年の調査によると、オープンソースのメンテナーの60%が辞めることを考えたことがあると回答しています。Issueの管理は大きな負担なのです。
私は、一次対応を行うためのボットを作成しました。これはGitHub Actions上で動作し、言語モデルを使用します。次のようなタスクを実行します:
- ルールに基づいたラベルの適用
- 重複の可能性があるもののフラグ立て
- 内容の薄い説明に対して、不足している詳細情報の要求
このボットは、固定されたスクリプトではなく「エージェント」です。モデルに一連のツールを与えると、どのツールをどの順番で使うかをモデル自身が判断します。整理されたIssueならツールは1つで済みますが、整理されていないIssueなら3つ必要になるかもしれません。
初期のバージョンは「おしゃべり」すぎました。すべてのIssueにコメントを投稿してしまい、それがノイズとなっていました。ノイズが増えると、人はボットを無視するようになります。
私はシステムプロンプトにたった一行加えることで、これを解決しました。「何もしないこと」をモデルに許可したのです。「沈黙こそが最善の答えである場合が多い」と伝えたところ、コードを修正するよりも劇的に挙動が改善されました。
LiteLLMを使用しているため、ボットはClaude、GPT、Geminiのいずれでも動作します。ボットはfunction callingを利用してIssueに対してアクションを実行します。
実環境でのテストにより、主に3つの課題が明らかになりました:
- GitHubのセキュリティにより、ボットはプルリクエスト内のシークレット(機密情報)を見ることができない。
- 信頼できないテキストをモデルに入力する場合、prompt injectionのリスクがある。
- 権限やAPIエラーのデバッグが混乱を招く可能性がある。
また、ボットに一つのルールを設けました。それは「セキュリティリスクのみをチェックし、コードの品質は評価しない」というものです。ボットが設計を判断するようになると、コントリビューターは離れていってしまいます。そうした判断は人間に任せるべきです。
もしIssueの事務作業に疲れ果てているなら、この仕組みが役立つはずです。繰り返しの作業をボットに任せ、重要な判断はあなた自身が行うことができます。
Source: https://dev.to/jescalada/putting-an-ai-agent-in-charge-of-github-issue-triage-3085
Optional learning community: https://t.me/GyaanSetuAi
