AmberSecurity

Results 2 comments of AmberSecurity

> 现在qwen-agent默认的就是parallel_tool_calls哈,不需要传参数 我有遇到开启并行后会干扰模型执行流程的情况,所以有禁用这个参数的需求,请问如何配置呢?

> 我的环境:使用DeepSeekChatFormatter(),调用deepseek chat官方模型 遇到同样的问题,做了些调试,发现: - 是finish_function_pre_print_hook在将generate_response作为工具调用时的tool_use块替换为text内容造成的 - 但问题的根因疑似是`_json_loads_with_repair`中的`repair_json(json_str)`方法尝试修复json字符串导致的([mangiucugna/json_repair](https://github.com/mangiucugna/json_repair/tree/main)) 下面是完整调试过程: 我在异常触发处拿到了具体的exception错误,是因为generate_response的tool_use块的block["input"]格式是列表而非字典,导致get时异常:`'list' object has no attribute 'get'` 而此时block["input"],也就是generate_response的tool_use块的传参长这样: 显然我这边generate_response的tool_use参数数据是列表格式而非dict,第二个值是空字典. ~~不知道和这里的kwargs有无关系:~~ 同kwargs无关,已注释掉kwargs相关逻辑仍是列表格式 于是我进一步对generate_response的参数做了些改动,以测试block["input"]的实际格式: 如下图,我给generate_response加了一个未使用的mode参数,并prompt其值固定 此时仍能复现出同样的异常,且此时的block["input"]仍是list: 因此我怀疑tool_use块是否在生成时就已经出现了问题,也即在_openai_model.py的_parse_openai_stream_response方法中,给_json_loads_with_repair的`tool_call["input"]`的原始json字符串有问题、或是_json_loads_with_repair本身的处理有问题。 于是我将`tool_call["input"]`的值,以及`_json_loads_with_repair`的返回json,全部dump出来,发现了问题: - 首先,`_json...repair`返回的值,就已经是错误的list格式了: - 另外,`tool_call["input"]`的原始参数json字符串,并非list格式,而是response的value部分被截断的不完整内容 因此推测,是否是`_json_loads_with_repair`方法在积极尝试修复tool调用参数的原始json字符串的过程中,会导致修复的结果变成list。于是我做了验证,dump了`_json_loads_with_repair`中`repair_json(json_str)`返回的修复后的json字符串: 如图所示,果然是修复后变成了list格式的json字符串,基本定位到问题应该是出在`_json_loads_with_repair`中的`repair_json(json_str)`方法...