やりたいこと
データを読み込むだけで、以下が自動で行われる仕組みを構築したい。
- 読み込んだデータがElasticsearchに自動登録される
- データと指示内容がGeminiに渡され、PlaybookやTool/Schemaが自動生成される
- 生成された内容が自動でPlaybookやToolに反映され、管理用エージェントと紐づいて構成される
前回の調査日記
目次
Agentbuilderの既存playbookを編集するpythonコードを作成する
- やりたいこと
- 下記の Python クライアントライブラリドキュメントを参考にして、既存playbookを編集するpythonコードを作成したい
- 現状
- 現状のコードだとplaybookの名前は変更可能だが、Toolの参照設定をWeb UIで事前に削除しないと400エラーが発生するという問題があるため修正する。
参考ドキュメント
現状のコード
import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
# --- 設定情報(必要に応じて入力してください) ---
PROJECT_ID = 'your-gcp-project-id'
LOCATION_ID = 'your-location-id' # 例: 'global' や 'us-central1'
AGENT_ID = 'your-agent-id'
PLAYBOOK_ID = 'your-playbook-id'
# --- 更新内容の例 ---
NEW_DISPLAY_NAME = 'Updated Playbook Name'
NEW_DESCRIPTION = 'Updated description for this playbook.'
def update_dialogflow_cx_playbook(project_id, location_id, agent_id, playbook_id, new_display_name=None, new_description=None):
"""
Dialogflow CXのPlaybookを部分更新します。
Args:
project_id (str): GCPのプロジェクトID。
location_id (str): Dialogflow CXエージェントのロケーション。
agent_id (str): エージェントID。
playbook_id (str): 更新対象のプレイブックID。
new_display_name (str): 新しい表示名(任意)。
new_description (str): 新しい説明文(任意)。
"""
try:
# 認証情報の取得
credentials, _ = google.auth.default()
# Dialogflow CX API v3beta1 クライアントの作成
dialogflow_service = build('dialogflow', 'v3beta1', credentials=credentials)
# 対象Playbookのリソース名
playbook_name = f'projects/{project_id}/locations/{location_id}/agents/{agent_id}/playbooks/{playbook_id}'
update_body = {}
update_mask_parts = []
if new_display_name:
update_body['displayName'] = new_display_name
update_mask_parts.append('displayName')
if new_description:
update_body['description'] = new_description
update_mask_parts.append('description')
if not update_mask_parts:
print("更新対象のフィールドがありません。")
return
update_mask = ','.join(update_mask_parts)
# PATCHリクエストの実行
request = dialogflow_service.projects().locations().agents().playbooks().patch(
name=playbook_name,
updateMask=update_mask,
body=update_body
)
response = request.execute()
print("プレイブックの更新に成功しました:")
print(f" 表示名: {response.get('displayName')}")
print(f" 説明: {response.get('description')}")
except HttpError as e:
print(f"HTTPエラーが発生しました: {e}")
print(f"ステータスコード: {e.resp.status}")
if e.content:
print(f"エラー詳細: {e.content.decode()}")
except Exception as e:
print(f"予期しないエラーが発生しました: {e}")
# --- 実行例 ---
if __name__ == '__main__':
update_dialogflow_cx_playbook(
project_id=PROJECT_ID,
location_id=LOCATION_ID,
agent_id=AGENT_ID,
playbook_id=PLAYBOOK_ID,
new_display_name=NEW_DISPLAY_NAME,
new_description=NEW_DESCRIPTION
)