dify 工作流程,当高亮显示一个项目时,复制一个项目,而不是另一个项目,会复制高亮显示的项目,而不是另一个项目,

piztneat  于 2个月前  发布在  其他
关注(0)|答案(3)|浏览(38)

自检

  • 这仅用于提交错误报告,如果您想提问,请前往 Discussions
  • 我已在 search for existing issues 中搜索了现有问题,包括已关闭的问题。
  • 我确认我使用英文提交此报告(我已阅读并同意 Language Policy )。
  • [对于中文用户] 请务必使用英文提交问题,否则会被关闭。谢谢!:)
  • 请不要修改此模板 :) 并填写所有必需的字段。

Dify版本

0.6.13

云或自托管

重现步骤

转到工作流

✔️ 预期行为

LLM被复制

❌ 实际行为

变量聚合器被复制

3lxsmp7m

3lxsmp7m1#

您遇到的问题可能与 handleNodesCopyhandleNodesPaste 函数中确定哪个节点被复制粘贴的特定条件有关。以下是一些需要考虑的关键点:

  1. 捆绑节点: handleNodesCopy 函数优先复制捆绑的节点,而不是类型为 BlockEnum.Start 或处于迭代中的节点。如果存在捆绑节点,它将被复制,而不是选定的节点。
const bundledNodes = nodes.filter(node => node.data._isBundled && node.data.type !== BlockEnum.Start && !node.data.isInIteration);
if (bundledNodes.length) {
  setClipboardElements(bundledNodes);
  return;
}
  1. 选定节点:如果没有找到捆绑节点,函数将复制类型不是 BlockEnum.Start 的选定节点。
const selectedNode = nodes.find(node => node.data.selected && node.data.type !== BlockEnum.Start);
if (selectedNode)
  setClipboardElements([selectedNode]);
  1. 剪贴板元素: handleNodesPaste 函数从剪贴板粘贴节点,并调整它们的位置。
if (clipboardElements.length) {
  const { x, y } = getTopLeftNodePosition(clipboardElements);
  const { screenToFlowPosition } = reactflow;
  const currentPosition = screenToFlowPosition({ x: mousePosition.pageX, y: mousePosition.pageY });
  const offsetX = currentPosition.x - x;
  const offsetY = currentPosition.y - y;
  clipboardElements.forEach((nodeToPaste, index) => {
    const nodeType = nodeToPaste.data.type;

这些条件可能导致错误地复制或粘贴节点类型,特别是如果节点选择或捆绑逻辑与用户的预期不一致 1(https://github.com/langgenius/dify/blob/main/web/app/components/workflow/hooks/use-nodes-interactions.ts)。
此外,最近在版本 0.6.13 中的更改可能会影响复制功能。已更新 useKeyPress 钩子以确保在按下 Ctrl+DCmd+D 键盘快捷键时调用 handleNodesDuplicate 函数。
要解决此问题,您可能需要审查 handleNodesCopyhandleNodesPaste 函数中的逻辑,以确保根据用户的选择正确地复制和粘贴节点。

  • 要继续与 Dosu 交谈,请提及 @dosu。*
vmjh9lq9

vmjh9lq92#

您遇到的问题可能与 handleNodesCopyhandleNodesPaste 函数中确定哪个节点被复制粘贴的特定条件有关。以下是一些需要考虑的关键点:

  1. 捆绑节点: handleNodesCopy 函数优先复制捆绑且类型不是 BlockEnum.Start 或处于迭代中的节点。如果存在捆绑节点,它将被复制而不是选定的节点。
const bundledNodes = nodes.filter(node => node.data._isBundled && node.data.type !== BlockEnum.Start && !node.data.isInIteration);
if (bundledNodes.length) {
  setClipboardElements(bundledNodes);
  return;
}
  1. 选定节点:如果没有找到捆绑节点,函数将复制类型不是 BlockEnum.Start 的选定节点。
const selectedNode = nodes.find(node => node.data.selected && node.data.type !== BlockEnum.Start);
if (selectedNode)
  setClipboardElements([selectedNode]);
  1. 剪贴板元素: handleNodesPaste 函数从剪贴板粘贴节点并调整它们的位置。
if (clipboardElements.length) {
  const { x, y } = getTopLeftNodePosition(clipboardElements);
  const { screenToFlowPosition } = reactflow;
  const currentPosition = screenToFlowPosition({ x: mousePosition.pageX, y: mousePosition.pageY });
  const offsetX = currentPosition.x - x;
  const offsetY = currentPosition.y - y;
  clipboardElements.forEach((nodeToPaste, index) => {
    const nodeType = nodeToPaste.data.type;

这些条件可能导致错误地复制或粘贴节点类型的情况,特别是如果节点选择或捆绑逻辑与用户的预期不一致。此外,版本 0.6.13 中的最近更改可能会影响复制功能。已更新 useKeyPress 钩子以确保在按下 Ctrl+DCmd+D 键盘快捷键时调用 handleNodesDuplicate 函数。
要解决此问题,您可能需要审查 handleNodesCopyhandleNodesPaste 函数中的逻辑,以确保根据用户的选择正确地复制和粘贴节点。

  • 要继续与 Dosu 交谈,请提及 @dosu。*

官方 Dify 也存在同样的问题

dbf7pr2w

dbf7pr2w3#

您在节点复制方面遇到的问题可能是由于handleNodesCopyhandleNodesPaste函数中的逻辑。具体来说,handleNodesCopy函数优先复制捆绑节点而不是选定的节点。如果存在捆绑节点,它们将被复制而不是选定的节点。
以下是关键点:

  1. 捆绑节点:函数检查捆绑节点并在找到时复制它们。
const bundledNodes = nodes.filter(node => node.data._isBundled && node.data.type !== BlockEnum.Start && !node.data.isInIteration);
if (bundledNodes.length) {
  setClipboardElements(bundledNodes);
  return;
}
  1. 选定节点:如果没有找到捆绑节点,函数将复制选定的节点。
const selectedNode = nodes.find(node => node.data.selected && node.data.type !== BlockEnum.Start);
if (selectedNode)
  setClipboardElements([selectedNode]);
  1. 剪贴板元素:handleNodesPaste函数从剪贴板粘贴节点并调整它们的位置。
if (clipboardElements.length) {
  const { x, y } = getTopLeftNodePosition(clipboardElements);
  const { screenToFlowPosition } = reactflow;
  const currentPosition = screenToFlowPosition({ x: mousePosition.pageX, y: mousePosition.pageY });
  const offsetX = currentPosition.x - x;
  const offsetY = currentPosition.y - y;
  clipboardElements.forEach((nodeToPaste, index) => {
    const nodeType = nodeToPaste.data.type;

这些条件可能导致错误地复制或粘贴节点的情况,特别是如果节点选择或捆绑逻辑与用户的预期不一致。
此外,最近版本0.6.13中的更改可能影响了复制功能。已更新用于复制功能的useKeyPress钩子,以确保在按下Ctrl+DCmd+D键盘快捷键时调用handleNodesDuplicate函数。
要解决此问题,您可能需要审查handleNodesCopyhandleNodesPaste函数中的逻辑,以确保根据用户的选择正确地复制和粘贴节点。

  • 要继续与Dosu交谈,请提及@dosu。*

相关问题