自检
- 这仅用于报告错误,如果您想提问,请转到 Discussions 。
- 我已搜索现有问题 search for existing issues ,包括已关闭的问题。
- 我确认我使用英语提交此报告(我已阅读并同意 Language Policy )。
- 请不要修改此模板 :) 并填写所有必需的字段。
Dify版本
0.6.10
云或自托管
云,自托管(Docker),自托管(源代码)
重现步骤
- 在Agent模式下使用Google Gemini 1.5模型提供程序。
- 观察模型可以同时输出两个相同的工具调用。
您可以使用以下Gemini 1.5 Pro的DSL轻松复制此过程:
app:
description: ''
icon: scream
icon_background: '#FFEAD5'
mode: agent-chat
name: POC
model_config:
agent_mode:
enabled: true
max_iteration: 5
strategy: function_call
tools:
- enabled: true
isDeleted: false
notAuthor: false
provider_id: jina
provider_name: jina
provider_type: builtin
tool_label: JinaReader
tool_name: jina_reader
tool_parameters:
summary: ''
target_selector: ''
url: ''
wait_for_selector: ''
annotation_reply:
enabled: false
chat_prompt_config: {}
completion_prompt_config: {}
dataset_configs:
datasets:
datasets: []
retrieval_model: single
dataset_query_variable: ''
external_data_tools: []
file_upload:
image:
detail: high
enabled: false
number_limits: 3
transfer_methods:
- remote_url
- local_file
model:
completion_params:
stop: []
mode: chat
name: gemini-1.5-pro-latest
provider: google
more_like_this:
enabled: false
opening_statement: What would you like to do?
pre_prompt: 'Please follow the tasks below:
### Tasks:
1. Use the jina_reader tool to gather relevant information about the latest news
from the url: "https://www.cnn.com/".
2. Use the jina_reader tool to gather relevant information about the latest news
from the url: "https://www.bbc.com/".
3. After the two tool calls are returned, answer the user''s query to the best
of your abilities. '
prompt_type: simple
retriever_resource:
enabled: true
sensitive_word_avoidance:
configs: []
enabled: false
type: ''
speech_to_text:
enabled: false
suggested_questions:
- Please perform the tasks.
suggested_questions_after_answer:
enabled: true
text_to_speech:
enabled: false
language: ''
voice: ''
user_input_form: []
✔️预期行为
- 工具调用结果应正常执行,与OpenAI提供程序一样(见截图)。
❌实际行为
api\core\agent\fc_agent_runner.py
无法正确处理函数调用并保存代理思维。- 前端仅显示后一个调用并遇到错误(通过PR fix: front end error when same tool is called twice at once #5068修复)。
- 函数调用结果正确传递给LLM,但保存的思维不正确。
附加信息:
- 问题在于
FunctionCallAgentRunner(BaseAgentRunner)
类,具体来说是run()
函数。 - 修复此问题需要重大重构、清理和重新组织
run()
函数的逻辑。
建议:
我很乐意提交PR来解决此问题,但我认为最好由Dify团队成员处理。
请让我知道您需要任何进一步的信息或协助。
1条答案
按热度按时间tkclm6bt1#
要解决Dify版本0.6.10中Google Gemini提供程序的问题,即在同一时间调用同一个工具两次会导致错误,您需要确保工具运行时正确管理以处理并发调用。实现锁定机制或使用异步调用可以帮助管理并发工具调用。
以下是使用线程锁来确保工具不会并发调用的可行方法:
此代码引入了一个线程锁(
_lock
)以确保GoogleSearchTool
不会被并发调用。with self._lock
语句确保该代码块一次只由一个线程执行,从而防止并发调用 1(https://github.com/langgenius/dify/blob/main/api/core/tools/provider/builtin/google/google.py) 。