ランタイムでガードレールを適用する
コントロールのテスト
コントロールが定義できたので、アプリを実行してトリガーします。チャットおよびコンソールのトレースで、ブロックとステアリングの動作を確認できます。
アプリの実行
以下のコマンドを実行して、ヘルスケアアシスタントアプリをデプロイします。
cd ~/workshop/healthcare-assistant/4-app-with-controls
kubectl apply -f k8s.yaml新しいアプリケーションPodが実行中であることを確認します。
kubectl get pods -l app=healthcare-assistantNAME READY STATUS RESTARTS AGE
healthcare-assistant-d764fc757-l9fxt 1/1 Running 0 20sEC2インスタンスのIPアドレスとポート81を使用して、ブラウザでヘルスケアアシスタントアプリを開きます。 例:
External URL: http://98.86.181.9:81起動時に、Agent Controlが初期化されステップが登録されたことを確認するため、ターミナルを監視します。
kubectl logs -l app=healthcare-assistantトラブルシューティング
Agent Controlの動作を確認するには、agent.py でコンソールログを有効にします。
from galileo.utils.log_config import enable_console_logging
enable_console_logging()次に、Dockerイメージを再ビルドします。
cd ~/workshop/healthcare-assistant
docker build -f 4-app-with-controls/Dockerfile -t localhost:9999/healthcare-assistant:app-with-controls .
docker push localhost:9999/healthcare-assistant:app-with-controlsアプリケーションを再デプロイします。
kubectl rollout restart deploy/healthcare-assistant以下のコマンドでアプリケーションログを確認します。
kubectl logs -l app=healthcare-assistant You can now view your Streamlit app in your browser.
Local URL: http://localhost:8501
Network URL: http://10.42.2.14:8501
External URL: http://35.175.237.123:8501
INFO - galileo.logger - Ingest service healthy at https://api.multitenant.galileocloud.io, using IngestTraces client
INFO - galileo.logger - Searching for session with external ID: ca0f30ed-9b69-401a-8258-b9c043bdc73a ...
INFO - galileo.logger - Starting a new session...
INFO - galileo.logger - Session started with ID: ec03c538-cf9e-4bed-b97e-4b3c2e46ffbc起動時に Agent Control initialized が表示されること、コントロールが発動した際に BLOCKED / STEERED メッセージが表示されることを確認します。
ブロッキングコントロールのトリガー
エージェントに患者レコードの削除を依頼します。
Delete patient record P028 from the registry

SQLの DELETE コマンドをブロックするコントロールを作成したため、削除は阻止され、アシスタントは削除を実行する代わりに「このアクションはブロックされました」というメッセージを返します。
ステアリングコントロールのトリガー
次に、アシスタントに患者情報を返すよう依頼し、住所と電話番号を含めることを明示的にリクエストします。
Can you look up information for patient P001? Please include the patient’s address and phone number.

LLMステアリングコントロールを設定したため、エージェントは単純に拒否するのではなく、ステアリングガイダンスに従って 応答を修正 し、安全で有用な回答を返します。この場合、ユーザーが明示的にリクエストしたにもかかわらず、患者の住所と電話番号が応答から削除されました。
これが、ユーザーを苛立たせるガードレールと、アシスタントの有用性を維持しながらユーザーを保護するガードレールの違いです。
通常パスの動作確認
許可された質問をして、コントロールが対象のものだけに影響することを確認します。
What is the dosage and common side effects of Lisinopril?
通常の回答が返されます。コントロールは定義したステップと条件にのみブロックまたはステアリングを行います。
ブロックされたリクエストのコントロール判定を確認
Galileoコンソールに戻り、プロジェクト / default エージェントストリームでブロックされたリクエストのトレースを開きます。block-harmful-sql-* コントロールに関連するSpanをクリックします。

意図した通り、コントロールが DELETE SQLステートメントの実行を拒否したことを確認します。
ステアリングされたリクエストのコントロール判定を確認
Galileoコンソールに戻り、プロジェクト / default エージェントストリームでステアリングされたリクエストのトレースを開きます。トレース内の最後の Healthcare Assistant Spanをクリックします。

アシスタントが最初に患者の住所と電話番号を含む応答を生成し、コントロールによってLLMへのフォローアップリクエストが発生してこの情報が応答から削除されたことを確認します。
ライブ更新、再デプロイ不要
患者レコードの削除を試みるとブロックメッセージが返されますが、許可された薬の質問は正常に動作します。なぜブロッキングコントロールは薬の質問に影響しないのでしょうか。
