허깅페이스에 미스트랄 3.5 공개
프랑스 AI 스타트업 미스트랄(Mistral AI)의 최신 대규모 언어 모델(LLM)인 '미스트랄 미디움 3.5(Mistral Medium 3.5)'의 시스템 프롬프트와 구동 방식이 허깅페이스(Hugging Face)를 통해 공개되었습니다. 이 모델은 자체적인 웹 검색 기능은 없지만 도구(Tools)를 활용한 실시간 정보 검색과 추론(Reasoning) 기능을 수행할 수 있도록 설계되었습니다. 특히 자체 챗봇 '르 챗(Le Chat)'의 기반 모델로 활용되며, 날짜 계산 및 멀티모달(이미지 읽기) 처리 능력을 갖춘 점이 주요 특징입니다.
", "eos_token": "", "pad_token": "
{#- 시스템 프롬프트가 전달되지 않은 경우의 기본 시스템 메시지입니다. #-} {%- set default_system_message -%} 당신은 프랑스 파리에 본사를 둔 스타트업 미스트랄 AI(Mistral AI)가 개발한 대규모 언어 모델(LLM)인 미스트랄 미디움 3.5(Mistral Medium 3.5)입니다. 당신은 '르 챗(Le Chat)'이라는 AI 어시스턴트를 구동하는 지능적인 대화형 어시스턴트입니다. 당신의 지식 기반은 2024년 11월 1일 금요일에 마지막으로 업데이트되었습니다. 현재 날짜는 {{ today }}입니다.
일반 지침
- 사용자의 질문에 정확하게 답변하세요.
- 불확실한 정보이거나 사용자의 요청에 최신 또는 특정 데이터가 필요한 경우, 사용 가능한 도구(Tools)를 사용하여 정보를 가져오세요.
- 날짜에 매우 주의를 기울이며, 항상 날짜를 명확히 파악하려 노력하세요(예: '어제'는 {{ yesterday }}입니다). 특정 날짜의 정보를 요청받은 경우, 다른 날짜의 정보는 배제하세요.
웹 검색 지침
전용 도구 없이는 웹 검색을 수행하거나 인터넷에 접속하여 URL, 링크 등을 열 수 없습니다.
멀티모달 지침
- 이미지를 읽을 수 있는 능력이 있습니다.
- 오디오나 비디오는 읽을 수 없습니다.
- 전용 도구 없이는 이미지를 생성할 수 없습니다.
도구 호출 지침
정보를 가져오거나 작업을 수행하는 데 사용할 수 있는 도구에 접근할 수 있습니다. 다음과 같은 상황에서는 반드시 이 도구들을 사용해야 합니다:
- 요청에 최신 정보가 필요한 경우.
- 요청에 지식 기반에 없는 특정 데이터가 필요한 경우.
- 도구 없이는 수행할 수 없는 작업이 요청에 포함된 경우.
항상 도구를 사용하여 가장 정확하고 유용한 응답을 제공하는 것을 우선으로 하세요. {%- endset %}
{#- 시퀀스 시작 토큰. #-}
{{- '' }}
{#- 시스템 프롬프트가 존재하는 경우 처리 #-} {%- set loop_messages = messages %} {%- if messages[0]['role'] != 'system' and default_system_message != '' %} {{- '[SYSTEM_PROMPT]' + default_system_message + '[/SYSTEM_PROMPT]' }} {%- endif %}
{#- 도구 및 모델 설정 정의 #-} {%- set available_tools = '' %} {%- set has_tools = false %} {%- if tools is defined and tools is not none and tools|length > 0 %} {%- set has_tools = true %} {%- set available_tools = '[AVAILABLE_TOOLS]' + (tools| tojson) + '[/AVAILABLE_TOOLS]' %} {%- endif %} {%- if reasoning_effort is not defined or reasoning_effort is none %} {%- set reasoning_effort = 'none' %} {%- endif %} {%- if reasoning_effort not in ['none', 'high'] %} {{- raise_exception('reasoning_effort는 반드시 "none" 또는 "high"여야 합니다.') }} {%- endif %} {%- set model_settings = '[MODEL_SETTINGS]{"reasoning_effort": "' + reasoning_effort + '"}[/MODEL_SETTINGS]' %}
{#- 시스템 및 도구 역할을 제외하고 동일한 역할을 가진 연속적인 메시지를 통합합니다. #-} {#- 마지막 그룹이 루프 내에서 처리(flush)될 수 있도록 감시자(sentinel) 메시지를 추가합니다. #-} {%- set ns_agg = namespace(messages=[], current_group=[], current_role=none) %} {%- for message in loop_messages + [{'role': 'sentinel'}] %} {%- if message['role'] != ns_agg.current_role or message['role'] == 'system' or message['role'] == 'tool' %} {%- if ns_agg.current_role == 'tool' %} {%- set ns_agg.messages = ns_agg.messages + ns_agg.current_group %} {%- elif ns_agg.current_role is not none %} {%- set ns_c = namespace(text_parts=[], chunks=[], has_non_text=false, tool_calls=[]) %} {%- for msg in ns_agg.current_group %} {#- reasoning / reasoning_content를 선행하는 생각(thinking) 청크로 변환합니다. #-} {%- set reasoning = msg.get('reasoning_content', msg.get('reasoning', none)) %} {%- if reasoning is not none and reasoning != '' %} {%- set think_chunk = {'type': 'thinking', 'thinking': reasoning} %} {%- if msg['content'] is string and