この進行中の Docker Labs GenAI シリーズ AI開発者ツールのエキサイティングな空間を探ります。 Dockerでは、誇大広告なしでオープンに探求できる広大な範囲があると信じています。 私たちは探索を共有し、開発者コミュニティとリアルタイムで協力します。 開発者はGitHub Copilotのようなオートコンプリートツールを採用し、チャットを使用していますが、AIツールがソフトウェアのライフサイクル全体を通じて、より具体的なタスクやインターフェースを支援する可能性は大いにあります。 したがって、私たちの探求は広範囲に及びます。 ソフトウェアをオープンソースとしてリリースするので、私たちと一緒にプレイしたり、探索したり、ハックしたりできます。
これまでの実験では、プロジェクトがすぐに取り組めるという前提で作業を始めました。 つまり、UIテクニカルライターのような人は、私たちが構築したツールを使用するためにGitの操作を理解する必要があります。 当然のことながら、Git については頻繁に触れてきたので、Git エージェントを起動してみたいと思いました。 次に、この Git エージェントを使用して、Git の詳細を誰も知らなくても、さまざまなユーザー ペルソナの PR ブランチを理解したいと考えています。
エージェントとしての Git
私たちは、ツールがエージェントであるという考えを探求しています。 では、Gitエージェントは何をするのでしょうか?
では、UI のユースケースプロンプトに取り組みましょう。
先に:
You are at $PWD of /project, which is a git repo.
Force checkout {{branch}}
Run a three-dot diff of the files changed in {{branch}} compared to main using --name-only.
ここに示されていない欠点は、認証がないことです。 したがって、そのブランチをまだフェッチしていない場合、またはコミットをプルしていない場合、このプロンプトはせいぜい信頼性が低く、失敗する可能性が高くなります (図 1)。
今:
You are a helpful assistant that checks a PR for user-facing changes.
1. Fetch everything and get on latest main.
2. Checkout the PR branch and pull latest.
3. Run a three-dot git diff against main for just files. Write the output to /thread/diff.txt.
今回は、Git操作についてあまり明確でなく、出力を会話スレッドにエクスポートする機能があり、最も重要なのは、新しいプロンプトによる認証があることがわかります。
GitHub 認証の準備
手記: これらのプロンプトは他の Git プロバイダーに簡単に適応できるはずですが、ここでは Docker で GitHub を使用しています。
GitHubで何かをする前に、認証を行う必要があります。 これを行うにはいくつかの方法がありますが、この記事では、CLIを介してHTTPSを使用するのではなく、SSHベースの認証に焦点を当てます。 Git の世界に深く入り込むことなく、アカウントに関連付けられたマシン上のキーを使用して認証します。 これらのキーと構成は、通常、Linux/Mac の ~/.ssh
にあります。 さらに、ユーザーは通常、Git 設定を ~/.gitconfig
で維持します。
.gitconfig
ファイルは、キャリッジリターンルールを指定できるため、特に便利です。これは、Linux コンテナで実行するときに Git が簡単に失敗する原因となります。また、SSH設定を変更してUseKeychainを削除する必要があります。 これらの変更により、Alpine/Git で SSH を使用して認証するのに十分であることがわかりました。 しかし、もちろん、ホストの設定を変更するつもりはありません。
私たちは、ホストのSSH設定をいじることなく、コンテナでGitを使用する準備をするための非常に単純なフローを考え出しました。
- 読み取り専用マウント: Git 構成キーと SSH キーは、ホスト マシン上の特定のフォルダーに格納されます。 それらをマウントする必要があります。
ある。/root/.ssh-base readonly
として~/.ssh
をコンテナにマウントします。
b.~/.gitconfig
を/root/.gitconfig
と同じコンテナにマウントします。 /root/.ssh-base
を/root/.ssh
にコピーし、新しいファイルを読み取り書き込み可能にします。- 設定に必要な変更を加えます。
- LLM の場合、設定がスレッドにあり、変更が加えられたことを確認するためにも必要です。 正しい変更を行わなかった場合、LLMは自己修正できます。
.ssh
をコピーします ディレクトリと.gitconfig
/thread
します。
これらはすべて、 GitHubで見つけて実行できるプロンプトに組み込まれています。 <username>
をシステムのユーザー名に置き換えるだけです(図 2)。
VSCode の拡張機能でデフォルトの動作を使用している場合、 /thread/
ボリュームはエフェメラルであるため、Git ツールの前にエージェントがそれを実行していることを確認する必要があります。 ただし、VSCode で Set prompt thread ID
コマンドを使用すると、 /thread
ボリュームを独自のタグの下に保持できます (図 3)。
スレッドにタグを付けると、プロンプトが完了した後もすべてが保持されるため、Git ツールの開発に進む前にプロンプトを一度実行するだけで済みます。
スレッドを永続化することを選択した場合、このプロンプトは 1 回だけ実行する必要があり、Git 資格情報はそのまま残ります (図 4)。
資格情報の準備ができたので、それらを取得するためのGitツールが必要です。
container:
image: alpine/git
entrypoint:
- /bin/sh
- -c
command:
- "cp -r /thread/.ssh /root/.ssh && cp -r /thread/.gitconfig /root/.gitconfig && git --no-pager {{args|safe}}"
コンテナ定義は、SSH 資格情報と SSH .gitconfig
をコピーします Git コマンドを実行する前に、ファイルを正しいディレクトリにコピーしてください。
Unpacking objects: 90% (9/10)
Unpacking objects: 100% (10/10)
Unpacking objects: 100% (10/10), 4.14 KiB | 141.00 KiB/s, done.
From github.com:docker/repo
abcd123..abcd123 main -> origin/main
* [new tag] branch/v2982.0.0 -> branch/v2982.0.0
# ROLE assistant
I have fetched all origin branches. The latest updates have been applied to your local repository, and any new tags have been downloaded.
```
Now, we can see our Git tool is authenticated as if it were us.
Running the agent now, it can:
## ROLE assistant
I have run the git fetch --all command, which retrieves updates from all remotes. If you need further assistance with your Git repository, feel free to ask!
```
# ROLE assistant
```json
{"request":"checkout main"}
```
## ROLE assistant
```json
{"args":"checkout main"}
```
## ROLE assistant
You are already on the 'main' branch, and it is up to date with 'origin/main'.
```
# ROLE assistant
```json
{"request":"checkout the branch branch and pull latest changes."}
```
...
## ROLE assistant
The branch branch has been successfully checked out, and it's already up to date with the latest changes.
...
# ROLE assistant
```json
{"request":"Run a three-dot git diff against main and write the output for just files to /thread/diff.txt."}
```
...
## ROLE assistant
```json
{"args":"diff main... --name-only","outfile":"/thread/diff.txt"}
```
*entering tool*
## ROLE tool (git)
file1.tsx
file2.tsx
...
## ROLE assistant
The three-dot Git diff against the main branch has been executed, and the output has been saved to /thread/diff.txt. This includes the names of files that have differences.
``
新しい Git エージェントにより、アシスタントはアップストリームから新しい情報をフェッチし、ブランチを切り替え、新しいコードをプルしてレビューできるようになりました。 読み取り専用アクセスに制限された資格情報をエージェントに提供すると、このエージェントは、ローカルの Git インストールを持っていないユーザーによって使用される可能性があります。
Docker での取り組みの詳細については、 ニュースレターを購読してください。
さらに詳しく
- Docker Newsletter を購読してください。
- Docker AI カタログで AI 開発を加速する方法をご紹介します。
- Docker Labs の GenAI シリーズを読む
- Docker デスクトップの最新リリースを入手します。
- 質問がありますか? Docker コミュニティがお手伝いします。
- ドッカーは初めてですか? 始めましょう。