我觉得这个是正确的。试试看。{% if tools %}
{{ <|im_start|>system
}}
{% if messages[0].role == system %}
{{ messages[0].content +
}}
{% endif %}
{{ " 工具
你可以调用一个或多个函数来辅助处理用户查询。
在 <tools></tools> XML 标签内为你提供了函数签名:
<tools>" }}
{% for tool in tools %}
{{ "
" }}
{{ tool | tojson }}
{% endfor %}
{{ "
</tools>
对于每次函数调用,在 <tool_call></tool_call> XML 标签内返回一个包含函数名和参数的 JSON 对象:
<tool_call>
{"name": <函数名>, "arguments": <参数 JSON 对象>}
</tool_call><|im_end|>
" }}
{% else %}
{% if messages[0].role == system %}
{{ <|im_start|>system
+ messages[0].content + <|im_end|>
}}
{% endif %}
{% endif %}
{% set ns = namespace(multi_step_tool=true, last_query_index=messages|length 1) %}
{% for forward_message in messages %}
{% set index = (messages|length 1) loop.index0 %}
{% set message = messages[index] %}
{% set current_content = message.content if message.content is defined and message.content is not none else %}
{% set tool_start = <tool_response> %}
{% set tool_start_length = tool_start|length %}
{% set start_of_message = current_content[:tool_start_length] %}
{% set tool_end = </tool_response> %}
{% set tool_end_length = tool_end|length %}
{% set start_pos = (current_content|length) tool_end_length %}
{% if start_pos < 0 %}
{% set start_pos = 0 %}
{% endif %}
{% set end_of_message = current_content[start_pos:] %}
{% if ns.multi_step_tool and message.role == "user" and not(start_of_message == tool_start and end_of_message == tool_end) %}
{% set ns.multi_step_tool = false %}
{% set ns.last_query_index = index %}
{% endif %}
{% endfor %}
{% for message in messages %}
{% if (message.role == "user") or (message.role == "system" and not loop.first) %}
{{ <|im_start|> + message.role +
+ message.content + <|im_end|> +
}}
{% elif message.role == "assistant" %}
{% set m_content = message.content if message.content is defined and message.content is not none else %}
{% set content = m_content %}
{% set reasoning_content = %}
{% if message.reasoning_content is defined and message.reasoning_content is not none %}
{% set reasoning_content = message.reasoning_content %}
{% else %}
{% if </think> in m_content %}
{% set content = (m_content.split(</think>)|last).lstrip(
) %}
{% set reasoning_content = (m_content.split(</think>)|first).rstrip(
) %}
{% set reasoning_content = (reasoning_content.split(<think>)|last).lstrip(
) %}
{% endif %}
{% endif %}
{% if loop.index0 > ns.last_query_index %}
{% if loop.last or (not loop.last and (not reasoning_content.strip() == )) %}
{{ <|im_start|> + message.role +
<think>
+ reasoning_content.strip(
) +
</think>
+ content.lstrip(
) }}
{% else %}
{{ <|im_start|> + message.role +
+ content }}
{% endif %}
{% else %}
{{ <|im_start|> + message.role +
+ content }}
{% endif %}
{% if message.tool_calls %}
{% for tool_call in message.tool_calls %}
{% if (loop.first and content) or (not loop.first) %}
{{
}}
{% endif %}
{% if tool_call.function %}
{% set tool_call = tool_call.function %}
{% endif %}
{{ <tool_call>
{"name": " }}
{{ tool_call.name }}
{{ ", "arguments": }}
{% if tool_call.arguments is string %}
{{ tool_call.arguments }}
{% else %}
{{ tool_call.arguments | tojson }}
{% endif %}
{{ }
</tool_call> }}
{% endfor %}
{% endif %}
{{ <|im_end|>
}}
{% elif message.role == "tool" %}
{% if loop.first or (messages[loop.index0 1].role != "tool") %}
{{ <|im_start|>user }}
{% endif %}
{{
<tool_response>
}}
{{ message.content }}
{{
</tool_response> }}
{% if loop.last or (messages[loop.index0 + 1].role != "tool") %}
{{ <|im_end|>
}}
{% endif %}
{% endif %}
{% endfor %}
{% if add_generation_prompt %}
{{ <|im_start|>assistant
}}
{% if enable_thinking is defined and enable_thinking is false %}
{{ <think>
</think>
}}
{% endif %}
{% endif %} |