google / google/adk-python

sample: Model Armor tool-output screening via after_tool_callback

未关闭
#6,964 1 条评论 0 个 reaction 已指派 1 人 已被 @sanketpatil06 认领 在 GitHub 查看
needs review tools
主要语言
Python
星标
21.5k
派生
4k
平均合并
1 天 22 小时
30 天内合并 PR
31

描述

### Is your feature request related to a specific problem?

The first-party `ModelArmorPlugin` documents that **tool output is not screened**:

https://github.com/google/adk-python/blob/main/docs/guides/integrations/model_armor/index.md#limitations

Tool results arrive as `user` content whose only part is a `function_response`, which the plugin does not send to Model Armor. Agentic pipelines that ingest external text via tools (issues, email, web search, MCP) often need screening on **tool output**, not just user prompts and model replies.

### Describe the Solution You'd Like

Add a minimal sample under `contributing/samples/integrations/model_armor_tool_output/` demonstrating a companion plugin on `after_tool_callback` that stringifies tool results and calls Model Armor's `SanitizeUserPrompt` API, registered alongside `ModelArmorPlugin` on the same `App`.

### Impact on your work

We run a multi-tool agent control plane where the primary injection vector is hostile content returned as tool output. We use a custom `after_tool_callback` plugin today; a first-party sample would reduce unsafe copy-paste from older adk-samples safety-plugins code.

No critical deadline.

### Willingness to contribute

Yes

### Describe Alternatives You've Considered

- Using `ModelArmorSafetyFilterPlugin` from adk-samples: older callback shapes; not the ADK 2.8 first-party integration path.
- Waiting for core plugin extension: larger API design (tracked separately as a follow-up feature request).

### Proposed API / Implementation

```python
class ToolOutputModelArmorPlugin(BasePlugin):
async def after_tool_callback(
self, *, tool, tool_args, tool_context, result, **kwargs
):
text = stringify(result)
if not text:
return None
# Call modelarmor SanitizeUserPrompt on text; return error dict if MATCH_FOUND
```

Sample registers `[ModelArmorPlugin(...), ToolOutputModelArmorPlugin(...)]` on one `App`.

### Additional context

- The limitation is documented in the adk-python integration guide under **Limitations**.
- I will open a PR referencing this issue the same day if maintainers are open to the approach.

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。