Skip to content

第五章:Middleware(中间件模式)关于Tool的调用链顺序 #1538

@mancanghai

Description

@mancanghai

文档中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
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions