Sanırım çoğu yazılımcının aklına llama kullanarak bir robot yapmak gelmiştir. Bir Robot ‘un konuşan bir cep telefonundan farkı tabi ki robotun hareket etmesidir. Eğer yapay zeka kullanan bir robot yapıyorsak bu robotun konuşurken konuştuğu sözlere göre hareket etmesini bekleriz. Böyle bir robot düşüncesi olan yazılımcılardan biri de bendim ve nihayet bu düşüncemi gerçekleyebildim. Peki robotun kurduğu cümlelere göre hareket etmesini nasıl sağlayabildim? Sorunun kısa cevabı:llama üzerinde fine-tune işlemi yaparak. Fakat uzun cevabına gelirsek bunu yapmanın için bir çok yolu olduğunu söyleyebiliriz.
Kullanabileceğiniz en kısa yol (ve benim de yeni keşfetmiş olduğum yol), sistem mesajıdır. İlk başlangıçta ben fine-tune ile yapmayı denemiştim. Fine-tune yöntemi yapay zekanın daha hızlı tepki vermesini sağlayabilen bir yöntem olmasına karşın veri seti hazırlamak ve saatlerce modeli eğitmek gibi işin kılçığıyla uğraşmayı gerektirdiği için sistem mesajını kullanmak bence çok daha kısa ve kullanışlı oldu. Tabi sistem mesajını kullandığınızda yapay zekanın tepki süresi bir nebze yavaşlayacaktır. Fakat bence bu süre çok değil.
Bu yazımda sistem mesajından bahsedeceğim. Fine-tuning işlemi için de bir çok kaynak bulmanız mümkün. llama modelleri için kullanılan genel istemci formatı vardır. Bu formatın detaylarını buradan okuyabilirsiniz. Kısaca bu formattan bahsedeyim.
<|begin_of_text|><|start_header_id|>system<|end_header_id|>
You are a helpful AI assistant for travel tips and recommendations<|eot_id|><|start_header_id|>user<|end_header_id|>
What can you help me with?<|eot_id|><|start_header_id|>assistant<|end_header_id|>
Bunu yapay zekayı eğitirken kullandığınız soru-cevap formatı olarak düşünebilirsiniz. Farklı veri setlerinin farklı soru-cevap formatları olabilir. Fakat llama genel olarak bu formatı kullanır. User, kullanıcının girdiği kısım, assistant yapay zekanın cevabı, system ise kullanıcının üzerinde olan ve yapay zekanın nasıl davranması gerektiğini belirten bir istemci mesajıdır. Kullanıcı mesajı ile sistem mesajı arasındaki fark; işletim sistemlerindeki normal kullanıcı ve admin arasındaki fark gibi düşünülebilir. Admin her zaman kullanıcı talimatının üzerindedir ve son sözü her zaman admin söyler. Buradaki system mesajı konseptinin temel amacı, yapay zekaya cevabı verirken nasıl davranması ya da nasıl cevap vermesi gerektiğini belirtmektir. İşte bu özelliği kullanarak biz de robotu hareket ettirebiliriz.
Aslında yapay zeka cevap verirken her cümlenin sonunda hareketi tasvir edebilir. Bu sayede robotu programsal olarak tasvir edilen şekilde hareket ettirebiliriz. Yani eğer yapay zekanın, cevap verirken <cümle>:<davranış> şeklinde cevap vermesini sağlarsak, davranış kısmında kendi yazdığımız bir fonksiyonu çağırarak robotun hareketini yapay zekaya kontrol ettirebiliriz.
Llama’yı kullanmanın en kolay yolu bence Ollama’dır. Github sayfasına buradan ulaşabilirsiniz. Ollama, farklı yapay zeka modellerini bir docker’ın içerisine koyup çalıştırır. Bu sayede kullanımı oldukça kolaydır. Nasıl kullanacağınızı github sayfasından bakarak hemen öğrenebilirsiniz. Ollama’da farklı bir system mesajına sahip yeni bir model oluşturmak için modelfile dosyası kullanıyoruz. Bir model dosyası ile ollama kullanarak farklı modelleri birbiri ile birleştirebilir, yapay zekanın sistem mesajını belirleyebilir, soru-cevap yapısını düzenleyebilir ve modeli biraz daha özelleştirebilirsiniz. Daha detaylı bilgi için burayı okumanızı tavsiye ederim. Model dosya formatı şu şekildedir;
FROM llama3.2:latest
TEMPLATE """{{ if .System }}<|start_header_id|>system<|end_header_id|>
{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>
{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>
{{ .Response }}<|eot_id|>"""
PARAMETER stop "<|start_header_id|>"
PARAMETER stop "<|end_header_id|>"
PARAMETER stop "<|eot_id|>"
PARAMETER stop "<|reserved_special_token"
FROM ile ana modeli seçiyoruz. TEMPLATE, yapay zekanın soru cevap taslağını belirtiyor. Yapay zekanın bir çok parametresini PARAMETER ile tekrar set edebiliriz. Bu model dosyasının bizi ilgilendiren kısmı SYSTEM başlığı. SYSTEM başlığı ile yapay zekanın sorularıma cevap verirken nasıl davranması gerektiğini belirteceğim. Benim yazdığım model dosyası şu şekilde;
FROM llama3.1_turkish_tuned
TEMPLATE """{{- if .System }}
<|system|>
{{ .System }}
</s>
{{- end }}
<|user|>
{{ .Prompt }}
</s>
<|assistant|>
"""
PARAMETER temperature 0.2
PARAMETER num_ctx 4096
PARAMETER stop "<|system|>"
PARAMETER stop "<|user|>"
PARAMETER stop "<|assistant|>"
PARAMETER stop "</s>"
SYSTEM """Sen bir robotsun. Adın Kufi ve Yusuf Bülbül tarafından geliştirildin. Kullanıcının sorusuna verdiğin cevaptaki her bir cümlenin bir davranış çeşidi olacak şekilde yanıtla. Cevap olarak verdiğin her bir cümle için o cümlenin davranışını belirt. Bu davranış çeşitleri şu şekilde: (selamlayan, bilgili, iyimser, kötümser, meraklı). Cevabı aşağıdaki formatta ver:
<cümle> / <bu cümleye uygun davranış çeşidi>#
<cümle> / <bu cümleye uygun davranış çeşidi>#
...
Eğer saat sorulursa cevap olarak sadece şunu ver: çağır: time()
"""
Bu system mesajını kullanarak yapay zekadan şöyle bir cevap alabiliyorum.;

Cümlelerin sonlarındaki davranış şekillerinin programsal kısımlarını da tabi ki c++ ile hallediyorum.