eino icon indicating copy to clipboard operation
eino copied to clipboard

adk 调用 tool 在参数为空情况下报错

Open yangzinan opened this issue 2 months ago • 5 comments

如图,非 stream 没测试,但是有参数的 tool 没有报错。只有不需要传参的工具有问题(tool 是个 mcp,应该没关系) Image

yangzinan avatar Oct 17 '25 13:10 yangzinan

我用了ToolArgumentsHandler捕获参数为空然后补上{}会出现新的错误,但是工具已经有返回了 Image 工具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]

yangzinan avatar Oct 20 '25 05:10 yangzinan

用的什么模型,哪个 eino-ext 组件?这个报错是模型侧的报错,建议先裸调模型调试

shentongmartin avatar Oct 21 '25 02:10 shentongmartin

Qwen3-VL-235B-A22B 同样的模型用 Host Multi-Agent 是可以的

yangzinan avatar Oct 21 '25 05:10 yangzinan

应该只是在流式输出有问题,下面两个图都事用adk的效果除了EnableStreaming其他都是一样的代码 同样的Qwen3-VL-235B-A22B模型 这是非流式的

Image

这个是流式的

Image

yangzinan avatar Oct 21 '25 06:10 yangzinan

临时的办法就是mcp加一个参数,工具的逻辑不用这个参数

yangzinan avatar Oct 21 '25 06:10 yangzinan

我也遇到了同样的问题,原因是调用大模型时,如何不填入参。会导致大模型调用时没有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,
			},
		}
	}

1059027178 avatar Dec 04 '25 09:12 1059027178