如何使用jinja语法对循环中的第一个元素进行特殊操作?

问题描述 投票:0回答:1

我正在尝试将以下 python 代码转换为 jinja 模板,以便我可以在 llama tokenizer 中使用我自己的聊天模板。但我是这个领域的新手,不知道该怎么办。

我的Python代码如下所示:

for i in range(len(messages)):
    if i == 0:
        do_something()
    else:
        do_other_things()

我尝试用变量标记第一个元素,该变量的值应该在循环内更改。但实际上变量保持不变,所以我的想法行不通。

我实际尝试过的聊天模板:

{% set is_first = "false" %}
{% for message in messages %}
    {% if message['role'] == 'system' %}
        {{ '<<SYS>>\\n' + message['content'].strip() + '\\n<</SYS>>\\n\\n'}}
        {% set is_first = "true" %}
    {% elif message['role'] == 'user' and is_first == "true" %}
        {% set is_first = "false" %}
        {{ message['content'].strip() + ' [/INST]' }}
    {% elif message['role'] == 'user' %}
        {{ '[INST] ' + message['content'].strip() + ' [/INST]' }}
    {% elif message['role'] == 'assistant' %}
        {{ message['content'].strip() }}
    {% endif %}
{% endfor %}"""

有没有办法让我的代码正常工作?顺便问一下,当对话框的顺序不是“系统 -> 用户 -> 助手 -> 用户 -> ...”时,有什么方法可以告诉 jinja 引发错误吗?

jinja2
1个回答
0
投票

此链接中找到了解决方案。使用

loop.index0
访问循环中的索引号。

© www.soinside.com 2019 - 2024. All rights reserved.