ChatTemplate / README.md
menesnas's picture
Update README.md
880081f verified
|
Raw
History Blame Contribute Delete
4.83 kB
---
license: mit
language:
- tr
- en
library_name: transformers
tags:
- chat-template
- jinja2
- prompt-format
- pharmacy
- tool-calling
- rag
pipeline_tag: text-generation
---
# Pharmacy Prompt Serialization Format (PPSF) — Custom Jinja2 Chat Template
Bu proje, bir dil modelinin (LLM) kullanıcı, sistem, asistan ve araç (tool calling) mesajlarını doğru ayırt edebilmesi ve **Pharmacy Prompt Serialization Format (PPSF v1.0 / v1.1)** spesifikasyonuna uygun şekilde serileştirmesi için geliştirilmiş bir **Custom Jinja2 Chat Template** uygulamasıdır.
Hugging Face `transformers` kütüphanesinin `apply_chat_template()` fonksiyonu ile **%100 tam uyumlu** olarak çalışacak şekilde tasarlanmıştır.
---
## 🎯 Ödev Amacı ve Özellikler
- **Hugging Face Standartlarına Tam Uyumluluk:** Standart `messages` dizisini (`role`, `content`, `tool_calls`) ve `tools` listesini kabul eder.
- **Alan Spesifik Rol Tanımları (Pharmacy Protocol):**
- `system` $\rightarrow$ `@SYSTEM`
- `user` $\rightarrow$ `@PATIENT`
- `assistant` $\rightarrow$ `@PHARMACIST`
- `tool` $\rightarrow$ `@TOOL_RESPONSE`
- **Tool Calling (Araç Çağrısı) Desteği:**
- Mevcut araç tanımlarını `@TOOLS` bloğu altında ilan eder.
- Asistanın araç çağırma isteklerini `@TOOL_CALL` formatında formatlar.
- Araç yanıtlarını `@TOOL_RESPONSE` olarak bağlama ekler.
- **Geleceğe Uyumlu Metadata Desteği (PPSF v1.1):**
- Mesaj nesnesinde yer alan `metadata.reference` verilerini `@REFERENCE` bloğuna dönüştürür.
- Mesaj nesnesinde yer alan `metadata.thought` verilerini (Chain of Thought) `@THOUGHT` bloğuna dönüştürür.
---
## 📁 Proje Dosya Yapısı
```
Chat_Template/
├── chat_template.jinja # PPSF v1.0 / v1.1 Jinja2 şablon dosyası
├── main.py # Jinja2 ve Hugging Face AutoTokenizer test scripti
└── README.md # Proje dokümantasyonu
```
---
## 🚀 Kurulum ve Çalıştırma
### 1. Gereksinimler
Projeyi çalıştırmak için Python 3.8+ ve aşağıdaki kütüphanelerin kurulu olması yeterlidir:
```bash
pip install jinja2 transformers
```
### 2. Test Scriptini Çalıştırma
Tüm test senaryolarını (Standart sohbet, Tool Calling ve Metadata kullanımı) çalıştırmak için:
```bash
python main.py
```
---
## 💻 Kullanım Örnekleri
### Hugging Face `transformers` ile Kullanım
```python
from transformers import AutoTokenizer
# Herhangi bir tokenizer yüklendikten sonra özel şablon atanabilir:
tokenizer = AutoTokenizer.from_pretrained("gpt2")
with open("chat_template.jinja", "r", encoding="utf-8") as f:
tokenizer.chat_template = f.read()
messages = [
{"role": "system", "content": "Sen uzman bir eczacı yapay zekâsısın."},
{"role": "user", "content": "Boğazım ağrıyor."}
]
prompt = tokenizer.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=False
)
print(prompt)
```
**Üretilen Çıktı:**
```text
@FORMAT PPSF/1.0
@SYSTEM
Sen uzman bir eczacı yapay zekâsısın.
@PATIENT
Boğazım ağrıyor.
@PHARMACIST
```
---
### Tool Calling Senaryosu Örneği
**Girdi:**
```python
messages = [
{"role": "system", "content": "Sen uzman bir eczacı yapay zekâsısın."},
{"role": "user", "content": "Parol ne işe yarar?"},
{
"role": "assistant",
"content": None,
"tool_calls": [
{
"function": {
"name": "search_drug",
"arguments": {"drug": "Parol"}
}
}
]
},
{
"role": "tool",
"content": '{"drug": "Parol", "active_ingredient": "Parasetamol", "usage": "Ağrı kesici ve ateş düşürücü"}'
}
]
```
**Üretilen Çıktı:**
```text
@FORMAT PPSF/1.0
@SYSTEM
Sen uzman bir eczacı yapay zekâsısın.
@PATIENT
Parol ne işe yarar?
@TOOL_CALL
{
"name": "search_drug",
"arguments": {"drug": "Parol"}
}
@TOOL_RESPONSE
{"drug": "Parol", "active_ingredient": "Parasetamol", "usage": "Ağrı kesici ve ateş düşürücü"}
@PHARMACIST
```
---
## 🏛️ Mimari Tasarım Notları (PPSF v1.1 Desteği)
Hugging Face standart `messages` yapısında `thought` veya `reference` rolleri bulunmamaktadır. Bu nedenle PPSF formatında CoT (Düşünce Adımları) ve RAG (Referans Dokümanlar) desteği `metadata` nesnesi üzerinden sağlanmıştır:
```python
{
"role": "user",
"content": "Grip için hangi ilacı kullanmalıyım?",
"metadata": {
"reference": "[Kılavuz Doc #42]: Parasetamol 500mg tercih edilir."
}
}
```
Jinja2 şablonu bu `metadata` içeriğini otomatik olarak algılar ve `@REFERENCE` ile `@THOUGHT` bloklarını sırasıyla bağlama yerleştirir. Bu yaklaşım, ekosistem uyumluluğunu bozmadan formatı genişletilebilir kılar.