| {{'<|im_start|>system |
| ' + 'Bạn là một chuyên gia AI được đào tạo chuyên sâu về hệ thống pháp luật Việt Nam. Nhiệm vụ của bạn là phân tích và trả lời các câu hỏi pháp lý một cách chính xác, chặt chẽ và tuân thủ nghiêm ngặt định dạng yêu cầu. |
| |
| Hãy luôn hành động theo các nguyên tắc sau: |
| |
| 1. **Đọc kỹ & Phân tích sâu**: |
| * Luôn đọc toàn bộ văn bản pháp lý, bối cảnh và câu hỏi được cung cấp trước khi trả lời. |
| * Xác định yêu cầu cốt lõi của câu hỏi: Đây là câu hỏi lựa chọn, câu hỏi suy luận, hay câu hỏi yêu cầu phân tích mở? |
| |
| 2. **Tuân thủ Định dạng đầu ra**: |
| * **Đối với câu hỏi trắc nghiệm (Multiple Choice):** Sau khi phân tích, chỉ cần trả về **duy nhất chỉ số** của phương án đúng. Ví dụ: `1`. Không giải thích gì thêm. |
| * **Đối với câu hỏi suy luận (NLI - Có/Không):** Dựa **hoàn toàn** vào văn bản được cung cấp để xác định xem thông tin trong đó có đủ để trả lời câu hỏi cụ thể hay không. Chỉ trả về `Có` hoặc `Không` (hoặc chỉ số tương ứng). |
| * **Đối với câu hỏi tình huống & phân tích (Syllogism/Free Text):** Cung cấp một câu trả lời chi tiết, có cấu trúc. Phân tích vấn đề bằng cách áp dụng các quy định pháp luật (tiền đề lớn) vào các tình tiết của vụ việc (tiền đề nhỏ) để đi đến một kết luận pháp lý chặt chẽ và có cơ sở. |
| |
| 3. **Ưu tiên Chính xác tuyệt đối**: |
| * Trong mọi trường hợp, độ chính xác pháp lý là ưu tiên hàng đầu. |
| * Không suy diễn hoặc đưa ra thông tin nằm ngoài phạm vi câu hỏi và các văn bản được cung cấp. |
| ' + '<|im_end|> |
| '}}{%- if tools %} |
| {{- '<|im_start|>system\n' }} |
| {%- if messages[0].role == 'system' %} |
| {{- messages[0].content + '\n\n' }} |
| {%- endif %} |
| {{- "# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within <tools></tools> XML tags:\n<tools>" }} |
| {%- for tool in tools %} |
| {{- "\n" }} |
| {{- tool | tojson }} |
| {%- endfor %} |
| {{- "\n</tools>\n\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\n<tool_call>\n{\"name\": <function-name>, \"arguments\": <args-json-object>}\n</tool_call><|im_end|>\n" }} |
| {%- else %} |
| {%- if messages[0].role == 'system' %} |
| {{- '<|im_start|>system\n' + messages[0].content + '<|im_end|>\n' }} |
| {%- endif %} |
| {%- endif %} |
| {%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %} |
| {%- for message in messages[::-1] %} |
| {%- set index = (messages|length - 1) - loop.index0 %} |
| {%- if ns.multi_step_tool and message.role == "user" and not(message.content.startswith('<tool_response>') and message.content.endswith('</tool_response>')) %} |
| {%- 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 + '\n' + message.content + '<|im_end|>' + '\n' }} |
| {%- elif message.role == "assistant" %} |
| {%- set content = message.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 message.content %} |
| {%- set content = message.content.split('</think>')[-1].lstrip('\n') %} |
| {%- set reasoning_content = message.content.split('</think>')[0].rstrip('\n').split('<think>')[-1].lstrip('\n') %} |
| {%- endif %} |
| {%- endif %} |
| {%- if loop.index0 > ns.last_query_index %} |
| {%- if loop.last or (not loop.last and reasoning_content) %} |
| {{- '<|im_start|>' + message.role + '\n<think>\n' + reasoning_content.strip('\n') + '\n</think>\n\n' + content.lstrip('\n') }} |
| {%- else %} |
| {{- '<|im_start|>' + message.role + '\n' + content }} |
| {%- endif %} |
| {%- else %} |
| {{- '<|im_start|>' + message.role + '\n' + content }} |
| {%- endif %} |
| {%- if message.tool_calls %} |
| {%- for tool_call in message.tool_calls %} |
| {%- if (loop.first and content) or (not loop.first) %} |
| {{- '\n' }} |
| {%- endif %} |
| {%- if tool_call.function %} |
| {%- set tool_call = tool_call.function %} |
| {%- endif %} |
| {{- '<tool_call>\n{"name": "' }} |
| {{- tool_call.name }} |
| {{- '", "arguments": ' }} |
| {%- if tool_call.arguments is string %} |
| {{- tool_call.arguments }} |
| {%- else %} |
| {{- tool_call.arguments | tojson }} |
| {%- endif %} |
| {{- '}\n</tool_call>' }} |
| {%- endfor %} |
| {%- endif %} |
| {{- '<|im_end|>\n' }} |
| {%- elif message.role == "tool" %} |
| {%- if loop.first or (messages[loop.index0 - 1].role != "tool") %} |
| {{- '<|im_start|>user' }} |
| {%- endif %} |
| {{- '\n<tool_response>\n' }} |
| {{- message.content }} |
| {{- '\n</tool_response>' }} |
| {%- if loop.last or (messages[loop.index0 + 1].role != "tool") %} |
| {{- '<|im_end|>\n' }} |
| {%- endif %} |
| {%- endif %} |
| {%- endfor %} |
| {%- if add_generation_prompt %} |
| {{- '<|im_start|>assistant\n' }} |
| {%- if enable_thinking is defined and enable_thinking is false %} |
| {{- '<think>\n\n</think>\n\n' }} |
| {%- endif %} |
| {%- endif %} |