你正在尝试做什么?
当前的提示渲染假设只有一个系统消息。有了 Command-R model from Cohere AI ,可以有多个系统消息:https://docs.cohere.com/docs/prompting-command-r#structured-prompt-templates。没有办法解决这个问题。
考虑以下消息:
{Role: "system", Content: "Preambles"},
{Role: "user", Content: "i'm user"},
{Role: "system", Content: "Tool output"},
{Role: "system", Content: "---Instructions---"},
以及模板:
<BOS_TOKEN>
{{ if .System }}<|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|>{{ .System }}<|END_OF_TURN_TOKEN|>{{ end }}
{{ if .Prompt }}<|START_OF_TURN_TOKEN|><|USER_TOKEN|>{{ .Prompt }}<|END_OF_TURN_TOKEN|>{{ end }}<|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|>{{ .Response }}
我们得到
<BOS_TOKEN>
<|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|>Preambles<|END_OF_TURN_TOKEN|>
<|START_OF_TURN_TOKEN|><|USER_TOKEN|>i'm user<|END_OF_TURN_TOKEN|>
<|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|><BOS_TOKEN>
<|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|>Tool output<|END_OF_TURN_TOKEN|>
<|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|><BOS_TOKEN>
<|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|>---Instructions---<|END_OF_TURN_TOKEN|>
<|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|>
然而,期望的输出是:
<BOS_TOKEN>
<|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|>Preambles<|END_OF_TURN_TOKEN|>
<|START_OF_TURN_TOKEN|><|USER_TOKEN|>i'm user<|END_OF_TURN_TOKEN|>
<|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|><BOS_TOKEN>
<|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|>Tool output<|END_OF_TURN_TOKEN|>
<|START_OF_TURN_TOKEN|><|SYSTEM_TOKEN|>---Instructions---<|END_OF_TURN_TOKEN|>
<|START_OF_TURN_TOKEN|><|CHATBOT_TOKEN|>
我们应该如何解决这个问题?
为了使这个向后兼容,我建议我们引入一个新版本的模板,将每个消息格式化原样。这样更容易控制期望的输出。
渲染提示的代码应该检测到新模板是否存在,并使用它代替。最好逐渐淘汰旧模板。
不解决这个问题会有什么影响?
似乎没有一种向后兼容的方法来解决这个问题。引入新模板会增加复杂性,尤其是对于新用户。但似乎没有更好的方法。
还有其他问题吗?
- 无响应*
2条答案
按热度按时间sxissh061#
也许我们可以引入一个“原始”模式,让用户跳过模板?这将很难使用,但也是最大灵活性,涵盖所有情况。
更新:我意识到在这种模式下,它主要是
/api/generate
端点。6rqinv9w2#
嘿,@jackielii ,抱歉回复较慢。实际上,
/api/generate
有一个原始模式,如果你查看API文档的话。我们一直在尝试重新思考模板的工作原理,但到目前为止还没有找到任何理想的解决方案。