ollama 允许系统消息独立存在

2lpgd968  于 6个月前  发布在  其他
关注(0)|答案(2)|浏览(58)

你正在尝试做什么?
当前的提示渲染假设只有一个系统消息。有了 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|>

我们应该如何解决这个问题?

为了使这个向后兼容,我建议我们引入一个新版本的模板,将每个消息格式化原样。这样更容易控制期望的输出。
渲染提示的代码应该检测到新模板是否存在,并使用它代替。最好逐渐淘汰旧模板。

不解决这个问题会有什么影响?

似乎没有一种向后兼容的方法来解决这个问题。引入新模板会增加复杂性,尤其是对于新用户。但似乎没有更好的方法。

还有其他问题吗?

  • 无响应*
sxissh06

sxissh061#

也许我们可以引入一个“原始”模式,让用户跳过模板?这将很难使用,但也是最大灵活性,涵盖所有情况。

更新:我意识到在这种模式下,它主要是/api/generate端点。

6rqinv9w

6rqinv9w2#

嘿,@jackielii ,抱歉回复较慢。实际上,/api/generate有一个原始模式,如果你查看API文档的话。我们一直在尝试重新思考模板的工作原理,但到目前为止还没有找到任何理想的解决方案。

相关问题