文档中Middleware 执行顺序部分关于Tool的描述如下:
对于 Tool 调用的执行顺序:
请求 → A.Wrap → B.Wrap → C.Wrap → 实际 Tool 执行 → C返回 → B返回 → A返回 → 响应
但是我如下测试代码的输出结果却是:toolMiddleware2前置toolMiddleware1前置toolMiddleware1后置toolMiddleware2后置,感觉和文档描述的顺序相反
agent, err := deep.New(ctx, &deep.Config{
...
Handlers: []adk.ChatModelAgentMiddleware{
&toolMiddleware1{},
&toolMiddleware2{},
},
})
func (m *toolMiddleware1) WrapInvokableToolCall(
_ context.Context,
endpoint adk.InvokableToolCallEndpoint,
_ *adk.ToolContext,
) (adk.InvokableToolCallEndpoint, error) {
return func(ctx context.Context, args string, opts ...tool.Option) (string, error) {
print("toolMiddleware1前置")
result, err := endpoint(ctx, args, opts...)
print("toolMiddleware1后置")
return result, err
}, nil
}
func (m *toolMiddleware2) WrapInvokableToolCall(
_ context.Context,
endpoint adk.InvokableToolCallEndpoint,
_ *adk.ToolContext,
) (adk.InvokableToolCallEndpoint, error) {
return func(ctx context.Context, args string, opts ...tool.Option) (string, error) {
print("toolMiddleware2前置")
result, err := endpoint(ctx, args, opts...)
print("toolMiddleware2后置")
return result, err
}, nil
}
文档中Middleware 执行顺序部分关于Tool的描述如下:
对于 Tool 调用的执行顺序:
请求 → A.Wrap → B.Wrap → C.Wrap → 实际 Tool 执行 → C返回 → B返回 → A返回 → 响应
但是我如下测试代码的输出结果却是:toolMiddleware2前置toolMiddleware1前置toolMiddleware1后置toolMiddleware2后置,感觉和文档描述的顺序相反
agent, err := deep.New(ctx, &deep.Config{
...
Handlers: []adk.ChatModelAgentMiddleware{
&toolMiddleware1{},
&toolMiddleware2{},
},
})
func (m *toolMiddleware1) WrapInvokableToolCall(
_ context.Context,
endpoint adk.InvokableToolCallEndpoint,
_ *adk.ToolContext,
) (adk.InvokableToolCallEndpoint, error) {
return func(ctx context.Context, args string, opts ...tool.Option) (string, error) {
print("toolMiddleware1前置")
result, err := endpoint(ctx, args, opts...)
print("toolMiddleware1后置")
return result, err
}, nil
}
func (m *toolMiddleware2) WrapInvokableToolCall(
_ context.Context,
endpoint adk.InvokableToolCallEndpoint,
_ *adk.ToolContext,
) (adk.InvokableToolCallEndpoint, error) {
return func(ctx context.Context, args string, opts ...tool.Option) (string, error) {
print("toolMiddleware2前置")
result, err := endpoint(ctx, args, opts...)
print("toolMiddleware2后置")
return result, err
}, nil
}