From 9af0bb554fdce1c30bb69334a5085db9533dbaca Mon Sep 17 00:00:00 2001 From: shown Date: Wed, 14 Jan 2026 23:27:50 +0800 Subject: [PATCH] Refine language and formatting in hooks.md Updated the hooks.md file to improve clarity and consistency in the text, including punctuation adjustments and formatting changes. --- .../agent-framework/tutorials/hooks.md | 150 +++++++++--------- 1 file changed, 75 insertions(+), 75 deletions(-) diff --git a/docs/frameworks/agent-framework/tutorials/hooks.md b/docs/frameworks/agent-framework/tutorials/hooks.md index 0bbdfda2..297da444 100644 --- a/docs/frameworks/agent-framework/tutorials/hooks.md +++ b/docs/frameworks/agent-framework/tutorials/hooks.md @@ -6,7 +6,7 @@ keywords: [Hooks, Interceptors, Agent控制, 监控, 重试, 回退, 日志, 护 # Hooks 和 Interceptors -> 让开发者在每个步骤控制和自定义 Agent 执行 +> 让开发者在每个步骤控制和自定义 Agent 执行。 Hooks 和 Interceptors 提供了一种更精细控制 Agent 内部行为的方式。 @@ -18,10 +18,10 @@ Hooks 和 Interceptors 在这些步骤的前后暴露了钩子点,允许你: reactagent -- **监控**: 通过日志、分析和调试跟踪 Agent 行为 -- **修改**: 转换提示、工具选择和输出格式 -- **控制**: 添加重试、回退和提前终止逻辑 -- **强制执行**: 应用速率限制、护栏和 PII 检测 +- **监控**: 通过日志、分析和调试跟踪 Agent 行为; +- **修改**: 转换提示、工具选择和输出格式; +- **控制**: 添加重试、回退和提前终止逻辑; +- **强制执行**: 应用速率限制、护栏和 PII 检测。 通过将它们传递给 `ReactAgent.builder()` 来添加 Hooks 和 Interceptors: @@ -44,13 +44,13 @@ ReactAgent agent = ReactAgent.builder() ## Hooks 和 Interceptors 能做什么? -* 监控。使用日志、分析和调试跟踪 Agent 行为。 +* 监控:使用日志、分析和调试跟踪 Agent 行为; -* 修改。转换提示、工具选择和输出格式。 +* 修改:转换提示、工具选择和输出格式; -* 控制。添加重试、回退和提前终止逻辑。 +* 控制:添加重试、回退和提前终止逻辑; -* 强制执行。应用速率限制、护栏和 PII 检测。 +* 强制执行:应用速率限制、护栏和 PII 检测。 ## 内置实现 @@ -61,9 +61,9 @@ Spring AI Alibaba 为常见用例提供了预构建的 Hooks 和 Interceptors 当接近 token 限制时自动压缩对话历史。 **适用场景**: -* 超出上下文窗口的长期对话 -* 具有大量历史记录的多轮对话 -* 需要保留完整对话上下文的应用程序 +* 超出上下文窗口的长期对话; +* 具有大量历史记录的多轮对话; +* 需要保留完整对话上下文的应用程序。 **配置选项**: -- `model`: 用于生成摘要的 ChatModel -- `maxTokensBeforeSummary`: 触发摘要之前的最大 token 数 -- `messagesToKeep`: 摘要后保留的最新消息数 +- `model`: 用于生成摘要的 ChatModel; +- `maxTokensBeforeSummary`: 触发摘要之前的最大 token 数; +- `messagesToKeep`: 摘要后保留的最新消息数。 ### Human-in-the-Loop(人机协同) 暂停 Agent 执行以获得人工批准、编辑或拒绝工具调用。 **适用场景**: -* 需要人工批准的高风险操作(数据库写入、金融交易) -* 人工监督是强制性的合规工作流程 -* 长期对话,使用人工反馈引导 Agent +* 需要人工批准的高风险操作(数据库写入、金融交易); +* 人工监督是强制性的合规工作流程; +* 长期对话,使用人工反馈引导 Agent。 **使用场景**: -- 根据用户权限动态添加或移除工具 -- 根据对话上下文临时启用特定工具 -- 实现工具的动态加载和卸载 -- 在特定条件下限制可用的工具集 +- 根据用户权限动态添加或移除工具; +- 根据对话上下文临时启用特定工具; +- 实现工具的动态加载和卸载; +- 在特定条件下限制可用的工具集。 ### ToolInterceptor @@ -894,10 +894,10 @@ public class ToolMonitoringInterceptor extends ToolInterceptor { `RunnableConfig` 提供了一个 `context()` 方法,允许你在同一个执行流程中的多个 Hook 调用、多轮模型或工具调用之间共享数据。这对于实现计数器、累积统计信息或跨多次调用维护状态非常有用。 **适用场景**: -* 跟踪模型或工具调用次数 -* 累积性能指标(总耗时、平均响应时间等) -* 在 before/after Hook 之间传递临时数据 -* 实现基于计数的限流或断路器 +* 跟踪模型或工具调用次数; +* 累积性能指标(总耗时、平均响应时间等); +* 在 before/after Hook 之间传递临时数据; +* 实现基于计数的限流或断路器。 **示例:使用 RunnableConfig.context() 实现调用计数器** @@ -1055,10 +1055,10 @@ public class ModelCallLimiterHook extends ModelHook { **关键要点**: -* **context() 是共享的**: 同一个执行流程中的所有 Hook 共享同一个 context -* **数据持久性**: context 中的数据在整个 Agent 执行期间保持有效 -* **类型安全**: 需要自己管理 context 中数据的类型转换 -* **命名约定**: 建议使用双下划线前缀命名 context key(如 `__model_call_count__`)以避免与用户数据冲突 +* **context() 是共享的**: 同一个执行流程中的所有 Hook 共享同一个 context; +* **数据持久性**: context 中的数据在整个 Agent 执行期间保持有效; +* **类型安全**: 需要自己管理 context 中数据的类型转换; +* **命名约定**: 建议使用双下划线前缀命名 context key(如 `__model_call_count__`)以避免与用户数据冲突。 ## 执行顺序 @@ -1345,11 +1345,11 @@ ReactAgent agent = ReactAgent.builder() Hooks 和 Interceptors 提供了强大的机制来控制和自定义 Agent 的执行流程: -- **Hooks**: 在 Agent 执行的关键点插入自定义逻辑(before/after) -- **Interceptors**: 拦截和修改模型调用和工具执行 -- **灵活组合**: 可以组合多个 Hooks 和 Interceptors -- **执行顺序**: 理解执行顺序对于构建正确的功能至关重要 -- **跳转控制**: 支持提前退出和条件跳转 +- **Hooks**: 在 Agent 执行的关键点插入自定义逻辑(before/after); +- **Interceptors**: 拦截和修改模型调用和工具执行; +- **灵活组合**: 可以组合多个 Hooks 和 Interceptors; +- **执行顺序**: 理解执行顺序对于构建正确的功能至关重要; +- **跳转控制**: 支持提前退出和条件跳转。 通过合理使用这些机制,你可以构建具有监控、安全、性能优化等高级功能的生产级 Agent 应用。