在lanchain中,常常用中间件函数来实现对提示词动态修改,对消息进行裁剪,对工具函数的异常进行捕获等炒作,这里介绍常见的中间件.
befer_model
生效场景
在模型调用前会被调用.假如在一次对话中模型和工具之间交互了5次,则该函数会被执行5次.
使用场景
可以在模型调用前进行消息裁剪;
简要示例
from langchain.agents import create_agent, AgentState
from langchain.agents.middleware import before_model
@before_model
def trim_messages(state: AgentState, runtime: Runtime) ->str:
return "before model"
agent = create_agent(
"gpt-5-nano",
tools=[],
middleware=[trim_messages]
)
after_model
生效场景
在模型调用后会被调用.假如在一次对话中模型和工具之间交互了5次,则该函数会被执行5次.
使用场景
可以在模型调用后对之前对话里给的敏感消息进行过滤去除
简要示例
参考befer_model
wrap_tool_call
生效场景
工具函数在被调用前执行,需要在该函数内去调用工具
使用场景
进行工具的异常捕捉
简要示例
from langchain.agent.middleware import wrap_tool_call
from langchain.messages import ToolMessage
@wrap_tool_call
def tool_errors(request, handler):
try:
return handler(request)
execpt Execption as e:
return ToolMessage(
content="工具处理异常",
tool_call_id=request.tool_call['id']
)
agent = create_agent(model, middleware=[tool_errors])