在 Coze 中,系统提示(system_prompt)和用户提示(user_prompt)有以下区别:
需要注意的是,在 Coze 处理多 Agent 跳转时,系统提示词包含多个部分,如 INSTRUCTION(指令,包含角色设定和简要任务描述)、AGENTS / BOTS LIST(候选的 Agent 列表)、CONSTRAINT(限制条件)、PREVIOUS CONVERSATION HISTORY(之前的对话历史)等。而用户提示词则是用户自定义设置的特定输入。
请注意,在Bot中所提到的“人设与回复逻辑”功能,实质上指的是system_prompt。这一功能是指定Bot如何根据设定的角色和逻辑进行回答,从而确保其回复符合预设的人物特性和行为逻辑。而“提示词”是user_prompt。请大家一定不要搞混,这个东西很基础,也很关键!
当用户在【引导】节点输入“开始游戏”之后,Coze会执行如下流程(图5):图5用户输入“开始游戏”触发的执行流程我们先来看一下第一次LLM调用的输入(图5):忽略其他参数,我们关注messages列表。列表中只有一条消息,它的内容是:这是一段系统提示词,这就是Coze用来处理多Agent跳转的关键。提示词有5个部分:INSTRUCTION,是一段指令,包含角色设定和简要的任务描述。注意,这段提示词给LLM描述的任务是“根据用户需求和最新的聊天记录,从以下Agent列表中选择最合适的Agent”。AGENTS / BOTS LIST,是候选的Agent列表。agent_id是一个序号,供LLM选择。agent_name就是你给Agent节点设置的名字。condition就是你在Agent节点设置的适用场景(Scenarios)(图6)。USER REQUEST,就是你在【切换节点设置】界面设置的自定义提示词(见图7)。至于我为什么在这里写了一段有些奇怪的提示词,我下面马上会解释。CONSTRAINT,是一些限制条件。这里还告诉LLM,在没有合适的Agent时,要输出0,表示不跳转。PREVIOUS CONVERSATION HISTORY,是之前的对话历史。Coze提供了一个选项,可以控制这个传给跳转模型的对话记录的长度(见图7),但是这个选项并没有效果(应该是Bug)。图6适用场景图7自定义提示词前面说Coze的多Agent跳转总是不可靠,我们从这段短短的提示词中就可以找到几个导致不稳定的因素:
如果我有一个任务,比如说我试图从事实文件中提取信息,我可能会给它一些听起来像儿童故事的例子。另外,我个人也不太喜欢「把话塞进模型嘴里」的方式。我不会用few-shot learning来让模型照搬我的示例。我觉得这种思路有点像是在依赖预训练模型的模式,而实际上现在的RLHF模型已经有所不同了。所以是的,我认为这些就是其中的一些区别。David Hershey:我想补充一下,在进行一些日常对话的提示词迭代时,我会反复调整,直到某次结果是对的。而企业提示的情况就完全不一样了,它可能要被用上百万、上千万次,甚至上亿次。所以你在设计提示时,必须考虑得非常周全,确保它在各种输入情况下都能适用。所以对于企业提示词来说,考虑全边缘情况非常重要。不过好的提示,在两种情况下都应该表现得很好。不管是你为自己调试,还是为企业项目设计,它们都应该达到一样的高标准。