eino
eino copied to clipboard
adk 调用 tool 在参数为空情况下报错
如图,非 stream 没测试,但是有参数的 tool 没有报错。只有不需要传参的工具有问题(tool 是个 mcp,应该没关系)
我用了ToolArgumentsHandler捕获参数为空然后补上{}会出现新的错误,但是工具已经有返回了
工具getfieldpod返回: {"content":[{"type":"text","text":"{"code":200,"msg":"test_cluster","data":[{"namespace":"crane-system","pod":"fadvisor-86cccdfcc7-n658q"}]}"}]}
Agent: 测试 ,Error: [NodeRunError] error, status code: 400, status: 400 Bad Request, message: 3 validation errors for ValidatorIterator
0.ChatCompletionMessageFunctionToolCallParam.function.arguments
Field required [type=missing, input_value={'name': 'getfieldpod'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
0.ChatCompletionMessageCustomToolCallParam.custom
Field required [type=missing, input_value={'index': 0, 'id': 'chatc...{'name': 'getfieldpod'}}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
0.ChatCompletionMessageCustomToolCallParam.type
Input should be 'custom' [type=literal_error, input_value='function', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error None
node path: [ChatModel]
用的什么模型,哪个 eino-ext 组件?这个报错是模型侧的报错,建议先裸调模型调试
Qwen3-VL-235B-A22B 同样的模型用 Host Multi-Agent 是可以的
应该只是在流式输出有问题,下面两个图都事用adk的效果除了EnableStreaming其他都是一样的代码 同样的Qwen3-VL-235B-A22B模型 这是非流式的
这个是流式的
临时的办法就是mcp加一个参数,工具的逻辑不用这个参数
我也遇到了同样的问题,原因是调用大模型时,如何不填入参。会导致大模型调用时没有arguments参数,解决办法是在调用openAI API前,对arguments 入参添加一个默认参数 “{}”。例如:
for i := range toolCalls {
toolCall := toolCalls[i]
if toolCall.Function.Arguments == "" {
toolCall.Function.Arguments = "{}"
}
ret[i] = openai.ToolCall{
Index: toolCall.Index,
ID: toolCall.ID,
Type: openai.ToolTypeFunction,
Function: openai.FunctionCall{
Name: toolCall.Function.Name,
Arguments: toolCall.Function.Arguments,
},
}
}