【AI学习笔记】解决Coze智能体把用户的输入回复一遍再传递给工作流的问题

背景前摇:

最近搭建了一个智能体,功能是接收同学们的问题生成回复,主要起一个辅助答疑的效果。
预期是问题发给智能体——智能体调用工作流——生成回答并把问答记录写入多维表格——回复答案并结束。
然而,就这么简单的智能体和工作流,出现了一个奇葩问题。
调度智能体的大模型,每次在收到用户输入的时候,都得先自己把问题回答一遍,然后再传给工作流。

正文:

解决过程:

用我自己搭着玩的一个问答游戏工作流示例:
每个智能体页面上都有一个可选的大模型选项,下图我红框圈出的位置就是调度这个智能体的大模型,可以理解为智能体的指挥大脑,由TA来判断智能体调用什么工具来响应用户。在这里插入图片描述
大家如果给大模型输入内容,看到右边“调试”这个扳手一样的按钮单击展开,发现最先就会调用这个调度大模型,其后才是我们的插件。
在这里插入图片描述在这里插入图片描述
一般来说,这个不会有什么问题,但是偏偏,我的答疑智能体就出现了下面这个情况:
用户输入:你好,请问1+1等于多少?
预期是智能体把这问题给我的答疑工作流,工作流里面的大模型生成回复“同学你好,1+1等于2”,然后写入飞书表格,并且返回给智能体回答。

然而,出 bug 的实际效果是:
用户输入:你好,请问1+1等于多少?
这个调度智能体先生成了一个答案:同学,1+1等于2噢,这个是数学问题。
然后把TA自己回复的这句话,即“同学,1+1等于2噢,这个是数学问题。”喂给了后续的工作流,这样以来,工作流内部的大模型节点就一脸懵逼了呀,这是啥问题啊?要我干啥啊??
于是就开始响应莫名其妙的答案:“你好同学,看起来似乎你在帮其他同学解答数学问题…”

诡异的地方在于,这个bug很难定位,因为工作流内部运行完全是正确的,但是一到智能体就报错,因为工作流没有这个调度模型横插一脚,那肯定是对的。

让智能体不错误响应的解决方法:

1.精简提示词:

之前的提示词除了告诉智能体,在收到用户的内容时调用这个引用的工作流,并且限制不允许自行回答用户问题,必须交给工作流处理之外,还不够。
还必须删去一些提示词里过多的背景知识,比如这个场景下的常见操作,项目背景等,把这个提示词变得很简单直白,甚至很傻瓜,就告诉智能体一件事——》用户的输入来了,你给我调用工作流解决,其他的你啥也不要想!!!
一位大佬给了一段参考提示词,他的功能比我的还复杂一些,我这个就只有纯调用工作流一项功能,大佬说,一般他给智能体的身份是《工作流调用机器人》,也是为了避免外面这个调度智能体的影响——TA会先接收到用户这句话,然后根据提示词看看下一步该怎么做,调用工具还是直接回复。
在这里插入图片描述

2.工作流描述增添参数说明:

之前大家创建工作流的时候,是不是这里的描述都是瞎写意思意思的?巧了么,我也一样,看挺多B站UP也很随意。在这里插入图片描述
但这其实不是个好习惯,因为调度大模型会参考这个描述,来理解这个工具是做啥的,从而决定什么时候用到这个工作流。
所以,工作流的描述千万要准确明了,不要瞎写,但这只是基本操作,还不够解决我们这个诡异的bug。
在这里,要对工作流里要传入的参数给调度模型做一个说明,告诉TA你希望TA《把什么东西给这个工作流的什么参数》。在这里插入图片描述在这里插入图片描述
这样才彻底解决了这个调度智能体横生枝节,添油加醋的问题。

3.飞书聊天清空上下文:

上下文也会影响智能体的发挥,不仅仅是调试编辑页面,就连飞书聊天的上下文也会影响智能体的输出效果。
所以在更新智能体以后,务必在飞书跟智能体的聊天框中输入“/clear”命令,(注意必须得是小写,不然识别不了)
把过去的聊天记录上下文清空,否则,即便是工作流、智能体都调好了,飞书中的聊天机器人可能还是那副本性难移的死相。
Coze的官方文档也有对清空上下文的描述:在这里插入图片描述

出现这个问题的可能原因:

可能是Coze平台的Function Call功能不够完善,比较少遇到这种需要把用户的输入原封不动送给工作流执行的情况,加上工作流本身可能也搭建得比较思路清奇,所以阴差阳错就触发了这个诡异的Bug。

一些试了没有用不会解决问题的办法:

有建议我试试把模型换为DeepSeekV3,试了,这个不解决问题。

其他相关知识:

使用快捷指令的时候,有一个选项“直接使用插件、工作流”,如果勾选该选项,则意味着不经过调度大模型的判断,在收到指令之后就直接启动工具。
如果没勾选的话,结果也大概率还是会调用工具,只是中间多了一层调度大模型这个头脑的判断。在这里插入图片描述

智能体调用工作流的条件和场景通常取决于任务的复杂性、所需资源的分布以及执行过程中的协作需求。以下是一些需要调用工作流的情况和不需要调用工作流的情况: ### 需要调用工作流的情况 1. **任务复杂且多步骤**:当一个任务需要多个步骤完成,并且这些步骤之间存在依赖关系时,智能体需要调用工作流来管理这些步骤的执行顺序。例如,一个自动化测试流程可能包括代码编译、测试用例执行、结果分析等多个阶段[^1]。 2. **多智能体协作**:在多智能体系统中,当一个智能体无法独立完成任务,需要与其他智能体协作时,通常会通过工作流来协调不同智能体之间的交互和数据传递。 3. **资源受限或分布广泛**:如果任务所需的资源(如计算能力、存储空间等)分布在不同的节点上,或者某些资源是有限的,则需要通过工作流来调度这些资源,确保任务能够顺利执行。 4. **需要监控和管理**:对于需要长时间运行的任务,或是需要实时监控其状态的任务,工作流提供了对任务进度的可视化以及异常处理机制,从而使得任务更易于管理和维护。 5. **涉及外部服务调用**:当任务涉及到调用外部服务或API时,工作流可以帮助组织这些调用,并处理可能出现的服务不可用或响应延迟等问题。 ### 不需要调用工作流的情况 1. **简单任务**:对于简单的一次性任务,不需要复杂的流程控制,可以直接由智能体执行而无需调用工作流。 2. **即时响应需求**:某些任务要求快速响应,比如实时数据处理或即时决策,这类任务通常不涉及多个步骤或长时间运行,因此不适合使用工作流。 3. **独立操作**:如果任务完全由单个智能体独立完成,并且不依赖于其他智能体或外部系统的参与,则没有必要引入工作流。 4. **临时性实验**:在进行快速原型设计或临时性实验时,为了提高效率,可能会选择绕过正式的工作流定义,直接执行相关操作。 综上所述,是否需要调用工作流取决于具体的应用场景和任务需求。工作流为复杂任务提供了结构化的管理和执行框架,但在适当的情况下简化流程可以提升效率和灵活性。 ```python # 示例代码:判断是否需要调用工作流 def should_invoke_workflow(task_complexity, requires_collaboration, resource_distribution, needs_monitoring): if task_complexity > 3 or requires_collaboration or resource_distribution != "local" or needs_monitoring: return True else: return False # 假设的任务参数 task_complexity = 4 # 复杂度评分,4表示较复杂 requires_collaboration = True # 是否需要与其他智能体协作 resource_distribution = "distributed" # 资源分布情况 needs_monitoring = True # 是否需要监控 # 判断是否应该调用工作流 invoke_workflow = should_invoke_workflow(task_complexity, requires_collaboration, resource_distribution, needs_monitoring) print(f"Should the agent invoke a workflow? {invoke_workflow}") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值