{%- set counter = namespace(index=0) -%} {%- if not tools is defined %} {%- set tools = none %} {%- endif %} {%- if messages and messages[0]['role'] == 'system' %} {%- set system_message = messages[0]['content']|trim %} {%- set messages = messages[1:] %} {%- else %} {%- set system_message = "You are a helpful assistant." %} {%- endif %} {%- if tools is not none %} {%- set tool_instruction %} You have access to the following tools. When you need to call a tool, you MUST use the following format: function_name parameter_name parameter_value Important rules: - Always wrap tool calls with ... tags - Put the function name on the first line after - Use and tags for each parameter - If a parameter value is a string, keep it as-is. If it's a number or boolean, convert it appropriately - You can make multiple tool calls if needed - If no tool is suitable, respond with regular text Available tools: {% endset %} {{- tool_instruction + "\n\n" }} {%- for t in tools %} {{- t | tojson(indent=4) }} {{- "\n\n" }} {%- endfor %} {%- endif %} {%- for message in messages -%} {%- if message['role'] == 'user' -%} {{- '[Round ' + counter.index|string + ']\n问:' + message['content'] -}} {%- set counter.index = counter.index + 1 -%} {%- endif -%} {%- if message['role'] == 'assistant' -%} {{- '\n答:' + message['content'] -}} {%- if (loop.last and add_generation_prompt) or not loop.last -%} {{- '\n' -}} {%- endif -%} {%- endif -%} {%- endfor -%} {%- if add_generation_prompt and messages[-1]['role'] != 'assistant' -%} {{- '\n答:' -}} {%- endif -%}