LangChain4j 保障 Tools 稳定不出错的完整机制
LangChain4j 从事前约束、事中校验、事后容错、循环保护、上层防护五层做全链路防错,覆盖模型幻觉、参数错误、工具执行异常、无限循环、非法输出所有场景。
一、事前:强制标准化工具定义,从源头减少错误
1. @Tool 注解自动生成标准 JSON Schema
开发者只需在方法上加 @Tool,框架自动解析参数类型、必填、描述,生成标准工具规范(ToolSpecification)传给大模型:
- 自动标记必填参数、参数数据类型(字符串/数字/布尔)
- 模型拿到严格Schema,大幅降低参数漏传、类型错乱概率
- 支持自定义参数描述,减少模型理解偏差
2. 系统提示词自动注入工具约束
框架自动把所有可用工具列表、参数规范塞进System Prompt,强制模型:
- 只能调用已注册工具,禁止编造不存在工具名
- 严格按照Schema格式输出JSON参数,禁止自由文本
3. Guardrails 输入护栏拦截非法请求
InputGuardrail 在调用LLM之前校验用户输入:
- 拦截超出业务范围的提问,直接拒绝调用工具
- 过滤敏感词、恶意注入,避免触发危险工具逻辑
二、事中:三层实时校验,拦截三类工具调用错误
LangChain4j 内置三套独立错误处理器,分别处理工具名幻觉、参数解析失败、工具执行报错,全部可自定义容错逻辑。
1. 工具名幻觉拦截:hallucinatedToolNameStrategy
问题:模型脑补不存在的工具名称(幻觉)
- 默认行为:抛出异常中断流程
- 自定义容错:把「不存在该工具+当前可用工具清单」包装成消息返回给LLM,让模型重新选择正确工具,自动重试
2. 参数JSON解析校验:toolArgumentsErrorHandler
问题:模型输出JSON格式错乱、字段缺失、类型错误(字符串传数字)
- 框架自动解析校验JSON Schema,捕获所有参数校验异常
- 容错方案:返回清晰错误信息(缺失字段/类型错误)丢回对话上下文,LLM读取错误后重新生成合法参数,无需人工介入
3. 工具业务执行异常捕获:toolExecutionErrorHandler
问题:工具内部代码报错(数据库超时、接口404、参数业务非法、网络异常)
- 默认:捕获工具抛出的所有Exception,提取错误消息封装为工具结果消息返回LLM
- 自定义:可过滤敏感内部堆栈、统一错误码、区分可重试/不可重试错误
java
// 示例:自定义工具执行错误处理
AiServices.builder(MyAgent.class)
.chatModel(model)
.tools(new OrderTool())
.toolExecutionErrorHandler((error, ctx) -> {
// 屏蔽数据库堆栈,只返回业务提示
return ToolErrorHandlerResult.text("查询订单失败:"+error.getMessage());
})
.build();
三、事后:自动重试、限流熔断,处理网络/瞬时故障
1. 内置重试工具 RetryUtils
对工具网络超时、模型限流、瞬时5xx错误提供指数退避重试:
- 可配置最大重试次数、间隔、抖动策略
- 区分异常类型:业务参数错误不重试,网络波动自动重试
2. 集成 Resilience4j 熔断器(生产级)
- 连续多次工具失败后触发熔断,短时间不再调用工具,保护下游数据库/接口
- 半开状态自动探测恢复,避免雪崩
四、循环保护:防止无限工具调用死循环
模型可能反复调用同一个工具无限循环,LangChain4j 提供硬限制:
java
AiServices.builder(Agent.class)
.maxSequentialToolsInvocations(10) // 最多连续调用10次工具,超出强制终止
.build();
相当于给工具调用装上安全刹车,杜绝资源耗尽。
五、输出护栏 OutputGuardrails:二次兜底校验工具返回值
工具执行完成后,OutputGuardrail 校验工具返回结果:
- 校验返回数据格式、字段完整性
- 识别工具返回的无效/空数据
- 支持两种处理:
retry():把错误结果反馈给LLM,重新调用工具获取数据fatal():直接终止流程返回错误给用户
六、完整容错流程(一条用户请求的防错链路)
- 用户提问 → InputGuardrail 预检,非法直接拦截
- 送入LLM,系统Prompt携带完整工具Schema约束
- LLM输出工具调用请求:
- 工具名不存在 → hallucinatedToolNameStrategy 返回错误,LLM重试
- 参数JSON非法 → toolArgumentsErrorHandler 返回校验错误,LLM重生成参数
- 参数合法,执行@Tool工具方法:
- 工具网络超时 → RetryUtils指数退避重试;连续失败触发熔断器
- 工具业务代码抛异常 → toolExecutionErrorHandler 包装错误返回LLM
- 工具返回结果 → OutputGuardrail 校验结果合法性,非法则重试工具调用
- 全程监控连续工具调用次数,达到上限强制终止,避免死循环
七、核心优势
LangChain4j 通过 Schema强约束前置减少错误 + 三类错误处理器自动纠错重试 + 护栏二次校验 + 循环上限保护 + 重试熔断治理瞬时故障,形成闭环容错,大幅降低Tools调用失败概率,生产环境稳定可靠。
需要我给你一份可直接复制的生产级AI Service完整容错配置代码(包含三类错误处理器、最大工具调用次数、Guardrail示例)吗?