Docgent は、社内のチャットをもとにドキュメントを作成・更新して、同じことを 2 回答える必要がないようにするための AI エージェントです。
紹介記事:https://zenn.dev/kecy/articles/84509c63e76218
- SlackのスレッドをもとにしてGitHub上でドキュメントを作成
- GitHubのPull Requestでのコメントに基づいて編集内容を改善
- mainブランチに反映されると、AIエージェントの知識として蓄積
- Slackでの質問に対して、蓄積した知識をもとに回答
- Slack
- Slack Appが作成されていること
- ボットユーザーに以下のスコープの権限が付与されていること(Features > OAuth & Permissions で設定できます)
app_mentions:read
channels:history
chat:write
reactions:read
reactions:write
users:read
im:history
(DM で使いたいときだけ)groups:history
(プライベートチャンネルで使いたいときだけ)
- アプリがワークスペースにインストールされていること
- OAuth & Permissions で権限を選択した後に
Install to [ワークスペース名]
というボタンを押すとインストールできます
- OAuth & Permissions で権限を選択した後に
- アプリのEvent Subscriptionsが有効になっていること(Features > Event Subscriptions)
- アプリが以下のイベントを購読するよう設定されていること(Event Subscriptions > Subscribe to bot events)
app_mention
reaction_added
- ワークスペースに
doc_it
の名前で絵文字が登録されていること
- GitHub
- GitHub Appが作成されていること
- アプリは非公開でも問題ないはずですが、Organizationのリポジトリにインストールする場合はOrganizationの設定画面からアプリを作成してください
- アプリでWebhookが有効になっていること(General > Webhook)
- アプリに以下の権限がついていること(Permissions & events > Permissions)
- Metadata:
Read only
- Contents:
Read and write
- Issues:
Read and write
- Pull Requests:
Read and write
- Metadata:
- アプリが以下のイベントを購読していること(Permissions & events > Subscribe to events)
- Issue comment
- Push
- ドキュメント管理用のリポジトリが作成されていること
- 既存リポジトリでも動作しますが、試しに使ってみる場合は新規作成をおすすめします
- ドキュメント管理用のリポジトリに、上記で作成した GitHub App がインストールされていること
- GitHub App 管理画面の Install App から、自分が管理しているリポジトリにアプリをインストールできます
- GitHub Appが作成されていること
- Google Cloud
- プロジェクトが作成されていること
- 課金が有効になっていること
- Vertex AI API が有効になっていること
- Secret Manager APIが有効になっていること
- Cloud Runに割り当てるサービスアカウントにSecret Manager Secret Accessorのロールが付与されていること
環境変数をたくさん設定するように案内されます。以下を参考に設定してください。
変数名 | 説明 |
---|---|
SLACK_WORKSPACE_ID |
SlackのワークスペースID。こちらを参考にして確認してください |
GITHUB_APP_ID |
GitHubのApp ID。GitHub App で対象アプリ選択 > General > About に書いてあります |
GITHUB_OWNER |
GitHubリポジトリのオーナー名。リポジトリの URL(https://github.com/OWNER/REPO )から抜き出せます |
GITHUB_REPO |
GitHubリポジトリの名前。同上 |
GITHUB_DEFAULT_BRANCH |
GitHubリポジトリのデフォルトブランチ名。デフォルト値は main |
GITHUB_INSTALLATION_ID |
GitHubb AppのインストールID。対象リポジトリにインストール完了後、リポジトリの Settings > Integrations > GitHub Apps にある対象アプリの設定画面の URL にインストール ID が入っています e.g. https://github.com/apps/[アプリ名]/installations/[インストールID] |
VERTEXAI_PROJECT_ID |
Vertex AIを利用できるGoogle CloudプロジェクトのID。Cloud Runと同じプロジェクトにするのを推奨します |
VERTEXAI_LOCATION |
Vertex AIを利用するリージョン名。デフォルト値は us-central1 |
VERTEXAI_MODEL_NAME |
エージェント制御や回答生成のためのGeminiモデル名。デフォルト値は gemini-2.0-pro-exp-02-05 |
VERTEXAI_RAG_CORPUS_ID |
RAGコーパスのID。作成方法は後述。後回しにする場合は 0 をセットしてください(RAG 機能がオフになります) |
以下の機密情報は自動で環境変数として設定されないので、初回デプロイ後に Cloud Run のコンソールから シークレット として登録してください(新しいリビジョンの編集とデプロイ > コンテナの編集 > 変数とシークレット)。
変数名 | 説明 |
---|---|
SLACK_SIGNING_SECRET |
Slack AppのSigning Secret。Slack Appで対象アプリ選択 > Basic Information から取得できます |
SLACK_BOT_TOKEN |
Slack AppのBot User OAuth Token。OAuth & Permissions から取得できます |
GITHUB_WEBHOOK_SECRET |
GitHubのWebhookシークレット。GitHub App で対象アプリ選択 > General > Webhook から取得できます |
GITHUB_APP_PRIVATE_KEY |
GitHub Appからのアクセストークンリクエストに署名するための秘密鍵。General > Private Keys から生成・ダウンロードできます |
登録後は「デプロイ」ボタンを押して再デプロイしてください。
デプロイが完了したら、Cloud Run が決めてくれる URL を使って、Slack・GitHub の Webhook エンドポイントの設定を行ってください。
Slack Appでアプリを選択 > Features > Event Subscriptions から設定する
https://xxxxx.a.run.app/api/slack/events
GitHub Appでアプリを選択 > General > Webhook から設定する
https://xxxxx.a.run.app/api/github/events
以上でインストール完了です。Slackワークスペースを開き、任意のスレッドで :doc_it: リアクションをつけて、応答が返ってくればOKです(ドキュメントのファイルとPull Requestが作成されます)。
- Go v1.24.0
git clone git@github.com:kecbigmt/docgent.git
cd docgent
以下のように環境変数をセットしてください。
# Slack App設定
export SLACK_BOT_TOKEN=xoxb-123456789
export SLACK_SIGNING_SECRET=xxxxxxxxxxxx
# Slackワークスペース設定
export SLACK_WORKSPACE_ID=T0X0X0X0X
# GitHub App設定
export GITHUB_APP_PRIVATE_KEY=$(cat /path/to/private-key.pem)
export GITHUB_APP_ID=1234567
export GITHUB_WEBHOOK_SECRET=0x0x0x0x0x0x0x
# インストール先のGitHubリポジトリ
export GITHUB_OWNER=xxxxxx
export GITHUB_REPO=xxxxxx
export GITHUB_INSTALLATION_ID=123456789
# Vertex AIの設定
export VERTEXAI_PROJECT_ID=xxxxxx # Google CloudプロジェクトのID
export VERTEXAI_LOCATION=us-central1 #最新のモデルだとロケーションによっては使えないことがあるので us-central1 がおすすめです
export VERTEXAI_MODEL_NAME=gemini-2.0-flash # エージェントが安定しない場合はgemini-2.0-pro-exp-02-05を利用してください
export VERTEXAI_RAG_CORPUS_ID=123456789123456789 # 別途作成後にセット。作成するまでは記載しない
# Google Cloudの認証情報(上記のVertex AIを利用できる権限を持っていること)
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/application_default_credentials.json
go run ./cmd/server/*.go
注意
- セキュリティのため ngrok が発行する URL を外部に公開しないこと(Webhookエンドポイントに対するリクエストは検証されますが念のため)
- 動作確認が終わったら ngrok を終了すること
ngrok http 8080
払い出される URL を使って、Slack App と GitHub App にエンドポイントの設定をすると、Slack や GitHub でのイベントがローカルのサーバーに届いてアプリが動作します。
エージェントのRAG機能を利用するには、Vertex AIのRAG Engine APIを利用してRAGコーパスを作成する必要があります。
git clone した後に、以下のコマンドで CLI ツールを利用してください。コーパスの表示名は開発者にとってわかりやすければ何でも構いません。
go run cmd/ragtool/main.go corpus create \
--project-id <Google CloudプロジェクトID> \
--display-name <コーパスの表示名>
ロケーションのデフォルトは us-central1 です。 --locaiton
で他のロケーションも指定可能ですが、詳しい動作確認はしていません。
例えば東京リージョンを指定する場合は以下です。
--location asia-northeast1
--embedding-prediction-endpoint
でEmbeddingモデルを指定できます。
- Vertex AIで利用可能なモデルについてはこちらを参照してください
- モデルを指定しない場合、デフォルトで text-embedding-005 が使われます(Vertex AIの仕様により変わる可能性があります)
- 日本語のドキュメントを読ませたい場合は text-multilingual-embedding-002 がおすすめです
モデルの指定は以下のように行います。
--embedding-prediction-endpoint projects/<Google CloudプロジェクトID>/locations/us-central1/publishers/google/models/text-multilingual-embedding-002
作成できたら、コーパスの一覧を取得して ID を確認します。
go run cmd/ragtool/main.go corpus list \
--project-id <Google CloudプロジェクトID> \
--location <Googe Cloudのリージョン名>
name の最後に入っている数字の文字列(123456789123456789
の部分)がコーパスの ID です。
{
"name": "projects/xxxxxx/locations/us-central1/ragCorpora/123456789123456789",
"displayName": "xxxxxxxx",
"createTime": "2025-02-10T04:35:21.261097Z",
"updateTime": "2025-02-10T04:35:21.261097Z",
"corpusStatus": {
"state": "ACTIVE"
}
}
Cloud Run 上で動かしている場合は、コンソールから環境変数 VERTEXAI_RAG_CORPUS_ID
をセットして再デプロイしてください。
不要になったコーパスは以下のように ID を指定して削除できます。
go run cmd/ragtool/main.go corpus delete \
--project-id <Google CloudプロジェクトID> \
123456789123456789