はじめに
Devinちょっと高いけど、Devinっぽいことしたいな...
ということで、OSSのOpenHandsを試してみましょう。
OpenHandsは旧名がOpenDevinなこともあり、OSSのDevinを目指してた雰囲気はありますね。
なお、筆者はDevin動かしたことがないので、完全に代替できるかは、すみませんが分かりません。
また、OpenHandsには今のところ、Slackでやりとりする機能は標準ではありません。
この記事の内容を設定するとGitHub上で
AIにPullRequestでコードをつくってもらうことが出来ます。
GitHub Actionsでの設定方法
OpenHandsをGitHub Actionsで動かすのはとても簡単です。
(最後に書いてありますが、GitHubのプランによって一部制限があります)
ワークフローファイルの作成
これぐらいの記述を.github/workflows/openhands-resolver.yml
に書きます。
name: Resolve Issue with OpenHands
on:
issues:
types: [labeled]
pull_request:
types: [labeled]
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
pull_request_review:
types: [submitted]
permissions:
contents: write
pull-requests: write
issues: write
jobs:
call-openhands-resolver:
uses: All-Hands-AI/OpenHands/.github/workflows/openhands-resolver.yml@0.22.0
with:
macro: ${{ vars.OPENHANDS_MACRO || '@openhands-agent' }}
max_iterations: ${{ fromJson(vars.OPENHANDS_MAX_ITER || 50) }}
base_container_image: ${{ vars.OPENHANDS_BASE_CONTAINER_IMAGE || '' }}
LLM_MODEL: ${{ vars.LLM_MODEL || 'anthropic/claude-3-5-sonnet-20241022' }}
secrets:
PAT_TOKEN: ${{ secrets.PAT_TOKEN }}
PAT_USERNAME: ${{ secrets.PAT_USERNAME }}
LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
LLM_BASE_URL: ${{ secrets.LLM_BASE_URL }}
参考URL:
https://docs.all-hands.dev/modules/usage/how-to/github-action
環境変数の設定
あとは、環境変数周りを設定していきます。
GitHubActionsのsecretsにLLM_API_KEYを設定します。初期のモデル設定がanthropicなので、そのキーをいれると良いでしょう。
この手のAPI利用でよくあるlimit制限を突破するためにOpenRouterを使いたいところですが、GitHubActionsモードでうまくモデルを切り替えることが私はできませんでした。
リポジトリの権限設定
Settings -> Actions -> General -> Workflow permissions に移動
"Read and write permissions" を選択
"Allow Github Actions to create and approve pull requests" を有効化
⚠️ "Read and write permissions" オプションがグレーアウトしている場合の注意点:
まず、組織レベルで権限を設定する必要があるかどうかを確認
組織レベルでもグレーアウトしている場合は、Enterprise ポリシー設定で権限を設定が必要
もう少し細かい制御がした場合はPAT_TOKENに
GitHub上で設定したPersonal Access Tokenをセットします。
使用方法
GitHub Issueにfix-meラベルをつけるか @openhands-agent と書くとGitHub Actionsがトリガーされて動き始めます。
あとは、コードレビューをして良ければ取り込み
ダメならPRに @openhands-agent からコメントをして修正事項を依頼します。
憶測ですが、仕組みとしてはDocker上で環境を作ってClineみたいな事してるんだと思いますね。
利用制限について
Draft Pull Requestの作成機能は、以下の場合のみ利用可能です:
- GitHub Free を使用している公開リポジトリ
- GitHub Free for organizations を使用している公開リポジトリ
- GitHub Pro(公開リポジトリのみ)
- GitHub Team(公開および非公開リポジトリ)
- GitHub Enterprise Cloud(公開および非公開リポジトリ)
この情報は、GitHub APIの公式ドキュメントに明確に記載されています。
つまるところ、OpenHandsの内部的にはPull RequestがDraftで出るので
その機能が使えないと、Pull Requestに失敗するようです。
その場合は、ブランチは作成された状態になりますので
手動でPull Requestを作成することは可能です。
私は、GitHub Teamに課金して使っています。