自检
- 仅用于提交错误报告,如果您想提问,请访问 Discussions 。
- 我已在现有问题中搜索 search for existing issues (包括已关闭的问题)。
- 我确认我使用英文提交此报告(我已阅读并同意 Language Policy )。
- 请务必使用英文提交问题,否则会被关闭。谢谢!:)
- 请不要修改此模板 :) 并填写所有必填字段。
Dify版本
0.6.13
云或自托管
自托管(Docker)
重现步骤
在使用代理调用多个工具时,我遇到了Openrouter模型的问题。问题表现为工具名称拼接错误。这意味着,当尝试顺序或同时调用多个工具时,工具名称会被拼接或错误识别。然而,当调用单个工具时,它似乎可以正常工作。
- 配置代理以使用Openrouter的模型。
- 尝试调用多个工具,例如
current_time
和searxng_search
。 - 观察工具识别错误,其中工具名称出现拼接或错误识别(例如,
current_time;searxng_search
)。
4条答案
按热度按时间wf82jlnq1#
fv2wmkja2#
根据我的调试跟踪,我发现Open路由器的模型实际上有两个工具调用响应,但只有一个被记录。
bis0qfac3#
我没有时间继续追踪断点。我希望熟悉这个领域的人能修复这个bug。非常感谢!
yvfmudvl4#
要解决在Dify 0.6.13版本中,通过代理调用多个工具时工具名称拼接错误的问题,需要确保每个工具都能正确识别和单独调用。
ToolEngine
类的agent_invoke
方法负责处理工具调用。以下是agent_invoke
方法的一个代码片段,展示了如何调用工具以及如何处理错误:class ToolEngine:
"""
Tool runtime engine take care of the tool executions.
"""
@staticmethod
def agent_invoke(
tool: Tool, tool_parameters: Union[str, dict],
user_id: str, tenant_id: str, message: Message, invoke_from: InvokeFrom,
agent_tool_callback: DifyAgentCallbackHandler,
trace_manager: Optional[TraceQueueManager] = None
) -> tuple[str, list[tuple[MessageFile, bool]], ToolInvokeMeta]:
"""
Agent invokes the tool with the given arguments.
"""
# check if arguments is a string
if isinstance(tool_parameters, str):
# check if this tool has only one parameter
parameters = [
parameter for parameter in tool.get_runtime_parameters()
if parameter.form == ToolParameter.ToolParameterForm.LLM
]
if parameters and len(parameters) == 1:
tool_parameters = {
parameters[0].name: tool_parameters
}
else:
raise ValueError(f"tool_parameters should be a dict, but got a string: {tool_parameters}")
此外,
DifyAgentCallbackHandler
类提供了处理工具启动、结束和错误事件的方法,这有助于调试并确保每个工具都能正确识别和单独调用。以下是DifyAgentCallbackHandler
类中的一个相关代码片段:class DifyAgentCallbackHandler(BaseModel):
"""Callback Handler that prints to std out."""
color: Optional[str] = ''
current_loop: int = 1
为了确保每个工具都能正确识别和单独调用,你应该:
tool_parameters
以字典的形式正确格式化。DifyAgentCallbackHandler
来处理每个工具调用的启动、结束和错误事件。ToolProviderCredentialValidationError
、ToolNotFoundError
、ToolParameterValidationError
等,以确保正在调用正确的工具,并准确报告任何问题。AgentService
类中的get_agent_logs
方法来调试和验证工具调用及其参数。遵循这些步骤,你可以解决工具名称拼接错误的问题,并确保每个工具都能正确识别和单独调用。