diff --git a/units/tr/_toctree.yml b/units/tr/_toctree.yml new file mode 100644 index 000000000..90a8e9e85 --- /dev/null +++ b/units/tr/_toctree.yml @@ -0,0 +1,148 @@ +- title: Ünite 0. Kursa Hoş Geldiniz + sections: + - local: unit0/introduction + title: 🤗 AI Agent (Yapay Zeka Ajanı) Kursuna Hoş Geldiniz + - local: unit0/onboarding + title: Kurulum, İlk Adımlarınız ⛵ + - local: unit0/discord101 + title: (İsteğe Bağlı) Discord 101 +- title: Canlı Yayın 1. Kurs nasıl işler ve Soru & Cevap + sections: + - local: communication/live1 + title: Canlı Yayın 1. Kurs nasıl işler ve Soru & Cevap +- title: Ünite 1. Ajanlara Giriş + sections: + - local: unit1/introduction + title: Giriş + - local: unit1/what-are-agents + title: Agent (Ajan) Nedir? + - local: unit1/quiz1 + title: Sınav 1 + - local: unit1/what-are-llms + title: LLM (Büyük Dil Modelleri) Nedir? + - local: unit1/messages-and-special-tokens + title: Mesajlar ve Özel Belirteçler (Tokens) + - local: unit1/tools + title: Tools (Araçlar) Nedir? + - local: unit1/quiz2 + title: Sınav 2 + - local: unit1/agent-steps-and-structure + title: Düşünce-Eylem-Gözlem Döngüsüyle Yapay Zeka Ajanlarını Anlamak + - local: unit1/thoughts + title: Düşünce, İçsel Akıl Yürütme ve Re-Act (Yeniden Eylem) Yaklaşımı + - local: unit1/actions + title: Eylemler: Ajanın Çevresiyle Etkileşime Geçmesini Sağlama + - local: unit1/observations + title: Gözlemle, Geri Bildirimi Yansıtmak ve Uyum Sağlamak + - local: unit1/dummy-agent-library + title: Sahte Ajan Kütüphanesi + - local: unit1/tutorial + title: smolagents Kullanarak İlk Ajanımızı Oluşturalım + - local: unit1/final-quiz + title: Ünite 1 Final Sınavı + - local: unit1/conclusion + title: Sonuç +- title: Ünite 2. Yapay Zeka Ajanları için Frameworkler + sections: + - local: unit2/introduction + title: Yapay Zeka Ajanları için Frameworkler +- title: Ünite 2.1 smolagents Frameworkü + sections: + - local: unit2/smolagents/introduction + title: smolagents'a Giriş + - local: unit2/smolagents/why_use_smolagents + title: Neden smolagents Kullanmalıyız? + - local: unit2/smolagents/quiz1 + title: Sınav 1 + - local: unit2/smolagents/code_agents + title: Kod Kullanan Agent'lar Oluşturma + - local: unit2/smolagents/tool_calling_agents + title: Eylemleri Kod Parçacıkları veya JSON Blokları Olarak Yazma + - local: unit2/smolagents/tools + title: Tools (Araçlar) + - local: unit2/smolagents/retrieval_agents + title: Retrieval (Alma) Ajanları + - local: unit2/smolagents/quiz2 + title: Sınav 2 + - local: unit2/smolagents/multi_agent_systems + title: Çoklu Ajan Sistemleri + - local: unit2/smolagents/vision_agents + title: Görüntü ve Tarayıcı Ajanları + - local: unit2/smolagents/final_quiz + title: Final Sınavı + - local: unit2/smolagents/conclusion + title: Sonuç +- title: Ünite 2.2 LlamaIndex Frameworkü + sections: + - local: unit2/llama-index/introduction + title: LlamaIndex'e Giriş + - local: unit2/llama-index/llama-hub + title: LlamaHub'a Giriş + - local: unit2/llama-index/components + title: LlamaIndex'teki Bileşenler Nedir? + - local: unit2/llama-index/tools + title: LlamaIndex'te Tools (Araç) Kullanımı + - local: unit2/llama-index/quiz1 + title: Sınav 1 + - local: unit2/llama-index/agents + title: LlamaIndex'te Ajan Kullanımı + - local: unit2/llama-index/workflows + title: LlamaIndex'te Ajantik İş Akışları Oluşturma + - local: unit2/llama-index/quiz2 + title: Sınav 2 + - local: unit2/llama-index/conclusion + title: Sonuç +- title: Ünite 2.3 LangGraph Frameworkü + sections: + - local: unit2/langgraph/introduction + title: LangGraph'a Giriş + - local: unit2/langgraph/when_to_use_langgraph + title: LangGraph Nedir? + - local: unit2/langgraph/building_blocks + title: LangGraph'ın Yapı Taşları + - local: unit2/langgraph/first_graph + title: İlk LangGraph'ınızı Oluşturma + - local: unit2/langgraph/document_analysis_agent + title: Belge Analiz Grafiği + - local: unit2/langgraph/quiz1 + title: Sınav 1 + - local: unit2/langgraph/conclusion + title: Sonuç +- title: Ünite 3. Ajantik RAG (Almayla Artırılmış Üretim) Kullanım Örneği + sections: + - local: unit3/agentic-rag/introduction + title: Ajantik RAG (Almayla Artırılmış Üretim) Kullanım Örneğine Giriş + - local: unit3/agentic-rag/agentic-rag + title: Ajantik RAG (Almayla Artırılmış Üretim) + - local: unit3/agentic-rag/invitees + title: Misafir Hikayeleri için RAG (Almayla Artırılmış Üretim) Aracı Oluşturma + - local: unit3/agentic-rag/tools + title: Ajanınız için Araçlar Oluşturma ve Entegre Etme + - local: unit3/agentic-rag/agent + title: Gala Ajanınızı Oluşturma + - local: unit3/agentic-rag/conclusion + title: Sonuç +- title: Bonus Ünite 1. Function-calling için bir LLM'nin fine-tuning (ince-ayar) Edilmesi + sections: + - local: bonus-unit1/introduction + title: Giriş + - local: bonus-unit1/what-is-function-calling + title: Function Calling (Fonksiyon Çağırma) Nedir? + - local: bonus-unit1/fine-tuning + title: Function Calling için Modelinizin İnce-Ayarını Yapalım + - local: bonus-unit1/conclusion + title: Sonuç +- title: Bonus Ünite 2. Ajan Gözlemlenebilirliği ve Değerlendirmesi + sections: + - local: bonus-unit2/introduction + title: Giriş + - local: bonus-unit2/what-is-agent-observability-and-evaluation + title: Ajan Gözlemlenebilirliği ve Değerlendirmesi Nedir? + - local: bonus-unit2/monitoring-and-evaluating-agents-notebook + title: Ajanları İzleme ve Değerlendirme + - local: bonus-unit2/quiz + title: Sınav +- title: Bir Sonraki Adımlar Ne Zaman Yayınlanacak? + sections: + - local: communication/next-units + title: Sonraki Üniteler diff --git a/units/tr/communication/live1.mdx b/units/tr/communication/live1.mdx new file mode 100644 index 000000000..2a9fa4a64 --- /dev/null +++ b/units/tr/communication/live1.mdx @@ -0,0 +1,7 @@ +# Canlı Yayın 1: Kursun İşleyişi ve İlk Soru & Cevap (Q&A) + +Bu AI Agent (Yapay Zeka Ajanı) Kursunun ilk canlı yayınında, kursun **nasıl işlediğini** (kapsam, üniteler, meydan okumalar ve daha fazlası) açıkladık ve sorularınızı yanıtladık. + + + +Bir sonraki canlı yayının ne zaman olacağını öğrenmek için **Discord sunucumuza** göz atın. Size ayrıca bir e-posta da göndereceğiz. Katılamazsanız endişelenmeyin, **tüm canlı yayınları kaydediyoruz**. diff --git a/units/tr/communication/next-units.mdx b/units/tr/communication/next-units.mdx new file mode 100644 index 000000000..6138669cd --- /dev/null +++ b/units/tr/communication/next-units.mdx @@ -0,0 +1,9 @@ +# Sonraki Üniteler Ne Zaman Yayınlanacak? + +İşte yayın takvimi: + +Sonraki Üniteler + +Kursa kaydolmayı unutmayın! Kaydolduğunuzda, **her bir ünite yayınlandıkça size bağlantılarını, yaklaşan meydan okumalarla (challenges) ilgili güncellemeleri ve detayları gönderebiliriz**. + +Öğrenmeye devam edin, harika kalın 🤗 diff --git a/units/tr/unit0/discord101.mdx b/units/tr/unit0/discord101.mdx new file mode 100644 index 000000000..2790371bc --- /dev/null +++ b/units/tr/unit0/discord101.mdx @@ -0,0 +1,52 @@ +# (İsteğe Bağlı) Discord 101 [[discord-101]] + +Discord Görgü Kuralları + +Bu rehber, oyun ve ML topluluklarında popüler olan ücretsiz bir sohbet platformu olan Discord'u kullanmaya başlamanıza yardımcı olmak için tasarlanmıştır. + +**100.000'den fazla üyesi olan** Hugging Face Topluluğu Discord sunucusuna buraya tıklayarak katılın. Başkalarıyla bağlantı kurmak için harika bir yer! + +## Hugging Face'in Discord Topluluğunda Agent (Ajan) Kursu + +Discord'a başlamak biraz bunaltıcı olabilir, bu yüzden gezinmenize yardımcı olacak hızlı bir rehber hazırladık. + + + +HF Topluluk Sunucusu, çeşitli alanlarda ilgi duyan canlı bir topluluğa ev sahipliği yaparak makale tartışmaları, etkinlikler ve daha fazlası aracılığıyla öğrenme fırsatları sunmaktadır. + +[Kaydolduktan](http://hf.co/join/discord) sonra `#introduce-yourself` kanalında kendinizi tanıtın. + +Ajan Kursu için 4 kanal oluşturduk: + +- `agents-course-announcements`: **en son kurs bilgileri** için. +- `🎓-agents-course-general`: **genel tartışmalar ve sohbet** için. +- `agents-course-questions`: **soru sormak ve sınıf arkadaşlarınıza yardım etmek** için. +- `agents-course-showcase`: **en iyi ajanlarınızı göstermek** için. + +Ek olarak şu kanalı kontrol edebilirsiniz: + +- `smolagents`: **kütüphane hakkında tartışma ve destek** için. + +## Discord'u etkili kullanma ipuçları + +### Bir sunucuya nasıl katılınır + +Discord'a daha az aşina iseniz, bir sunucuya nasıl katılacağınızla ilgili bu rehberi incelemek isteyebilirsiniz. + +İşte adımların hızlı bir özeti: + +1. Davet Bağlantısına tıklayın. +2. Discord hesabınızla giriş yapın veya hesabınız yoksa bir hesap oluşturun. +3. Yapay zeka ajanı olmadığınızı doğrulayın! +4. Takma adınızı ve avatarınızı ayarlayın. +5. "Join Server" (Sunucuya Katıl) düğmesine tıklayın. + +### Discord'u etkili bir şekilde nasıl kullanırsınız + +İşte Discord'u etkili bir şekilde kullanmak için birkaç ipucu: + +- **Sesli kanallar** mevcuttur, ancak metin sohbeti daha yaygın olarak kullanılır. +- Metni **markdown tarzında** biçimlendirebilirsiniz, bu özellikle kod yazmak için kullanışlıdır. Markdown'un bağlantılar için o kadar iyi çalışmadığını unutmayın. +- Tartışmaları düzenli tutmak için **uzun konuşmalar** için diziler (thread) açmayı düşünün. + +Umarız bu rehberi faydalı bulursunuz! Herhangi bir sorunuz varsa, Discord'da bize sormaktan çekinmeyin 🤗. diff --git a/units/tr/unit0/introduction.mdx b/units/tr/unit0/introduction.mdx new file mode 100644 index 000000000..29b6a7455 --- /dev/null +++ b/units/tr/unit0/introduction.mdx @@ -0,0 +1,185 @@ +# 🤗 AI Agent (Yapay Zeka Ajanı) Kursuna Hoş Geldiniz [[introduction]] + +
+Yapay Zeka Ajanı Kursu küçük resmi +
Görselin arka planı Scenario.com kullanılarak oluşturulmuştur
+
+ + +Günümüzde AI alanındaki en heyecan verici konu olan **Agent (Ajan)**'lara hoş geldiniz! + +Bu ücretsiz kurs, yapay zeka Ajanlarını anlama, kullanma ve oluşturma konusunda sizi **başlangıç seviyesinden uzmanlığa** doğru bir yolculuğa çıkaracak. + +Bu ilk ünite kursa başlamanıza yardımcı olacak: + +- **Kursun müfredatını** keşfedin. +- Takip edeceğiniz yolu (kendi kendine öğrenme veya sertifika süreci) **seçin**. +- **Sertifika süreci ve son tarihler hakkında daha fazla bilgi edinin**. +- Kursun arkasındaki ekibi tanıyın. +- **Hugging Face hesabınızı** oluşturun. +- **Discord sunucumuza kaydolun** ve sınıf arkadaşlarınızla ve bizimle tanışın. + +Hadi başlayalım! + +## Bu kurstan ne bekleyebilirsiniz? [[expect]] + +Bu kursta: + +- 📖 Yapay Zeka Ajanlarını **teori, tasarım ve uygulama** olarak çalışacaksınız. +- 🧑‍💻 [smolagents](https://huggingface.co/docs/smolagents/en/index), [LlamaIndex](https://www.llamaindex.ai/) ve [LangGraph](https://langchain-ai.github.io/langgraph/) gibi **kurulu Yapay Zeka Ajanları kütüphanelerini kullanmayı öğreneceksiniz**. +- 💾 Ajanlarınızı Hugging Face Hub'da **paylaşacak** ve topluluk tarafından oluşturulan Ajanları keşfedeceksiniz. +- 🏆 Ajanlarınızı diğer öğrencilerin Ajanlarıyla **değerlendireceğiniz** zorluklara katılacaksınız. +- 🎓 Ödevleri tamamlayarak **tamamlama sertifikası kazanacaksınız**. + +Ve daha fazlası! + +Bu kursun sonunda, **Ajanların nasıl çalıştığını ve en son kütüphaneleri ve araçları kullanarak kendi Ajanlarınızı nasıl oluşturacağınızı** anlayacaksınız. + +**Kursa kaydolmayı** unutmayın! + +(Gizliliğinize saygı duyuyoruz. E-posta adresinizi **her Ünite yayınlandığında bağlantıları size gönderebilmek ve zorluklar ve güncellemeler hakkında bilgi verebilmek için** topluyoruz). + +## Kurs nasıl görünüyor? [[course-look-like]] + +Kurs şunlardan oluşur: + +- *Temel Üniteler*: Ajan kavramlarını **teorik olarak** öğrendiğiniz bölümler. +- *Uygulamalı*: Ajanlarınızı benzersiz ortamlarda eğitmek için **kurulu Yapay Zeka Ajanı kütüphanelerini kullanmayı öğreneceğiniz** bölümler. Bu uygulamalı bölümler, önceden yapılandırılmış bir ortamla **Hugging Face Spaces** olacaktır. +- *Kullanım senaryosu ödevleri*: Öğrendiğiniz kavramları seçeceğiniz gerçek dünya sorununu çözmek için uygulayacağınız bölümler. +- *Meydan Okuma*: Ajanınızı diğer Ajanlarla rekabet ettireceğiniz bir yarışma. Ajanların performansını karşılaştırmanız için [bir lider tablosu](https://huggingface.co/spaces/huggingface-projects/AI-Agents-Leaderboard) (henüz mevcut değil) da olacak. + +Bu **kurs, geri bildirimleriniz ve katkılarınızla gelişen canlı bir projedir!** [GitHub'da sorunlar ve PR'lar açmaktan](https://github.com/huggingface/agents-course) çekinmeyin ve Discord sunucumuzda tartışmalara katılın. + +Kursu tamamladıktan sonra, [👉 bu formu kullanarak](https://docs.google.com/forms/d/e/1FAIpQLSe9VaONn0eglax0uTwi29rIn4tM7H2sYmmybmG5jJNlE5v0xA/viewform?usp=dialog) geri bildiriminizi de gönderebilirsiniz. + +## Müfredat nedir? [[syllabus]] + +İşte **kursun genel müfredatı**. Konuların daha ayrıntılı bir listesi her ünite ile birlikte yayınlanacaktır. + +| Bölüm | Konu | Açıklama | +| :---- | :---- | :---- | +| 0 | Kurulum | Kullanacağınız araçlar ve platformlarla sizi hazırlar. | +| 1 | Ajan Temelleri | Tools (Araçlar), Thoughts (Düşünceler), Actions (Eylemler), Observations (Gözlemler) ve formatlarını açıklar. LLM'leri (Büyük Dil Modelleri), mesajları, "Special Token" (Özel Belirteç) ve sohbet şablonlarını açıklar. Python fonksiyonlarını araç olarak kullanan basit bir kullanım örneği gösterir. | +| 1.5 | Bonus: Function calling için bir LLM'nin fine-tuning (ince-ayar) edilmesi | LoRa kullanalım ve bir notebook içinde function calling gerçekleştirmek için bir model ince-ayarlayalım. | +| 2 | Frameworks | Temellerin smolagents, LangGraph, LLamaIndex gibi popüler kütüphanelerde nasıl uygulandığını anlayın. | +| 2.5 | Bonus: Ajan Gözlemlenebilirliği ve Değerlendirmesi | AI Ajanlarınızı üretime hazır hale getirmek için nasıl izleyeceğinizi ve değerlendireceğinizi öğrenin. | +| 3 | Kullanım Örnekleri | Bazı gerçek hayat kullanım örnekleri oluşturalım (deneyimli Ajan geliştiricilerinden PR'lara açık 🤗) | +| 4 | Final Ödevi | Seçilen bir kıyaslama için bir Ajan oluşturun ve öğrenci lider tablosunda Ajanlar hakkındaki anlayışınızı kanıtlayın 🚀 | + +*Ayrıca bazı bonus üniteler yayınlamayı planlıyoruz, takipte kalın!* + +## Ön koşullar nelerdir? + +Bu kursu takip edebilmek için şunlara sahip olmalısınız: + +- Temel Python bilgisi +- Temel LLM (Büyük Dil Modelleri) bilgisi (Ünite 1'de ne olduklarını özetleyen bir bölümümüz var) + + +## Hangi araçlara ihtiyacım var? [[tools]] + +Sadece 2 şeye ihtiyacınız var: + +- İnternet bağlantısı olan bir *bilgisayar*. +- Bir *Hugging Face Hesabı*: modelleri, Ajanları göndermek ve yüklemek ve Spaces oluşturmak için. Henüz bir hesabınız yoksa, **[burada](https://hf.co/join)** bir tane oluşturabilirsiniz (ücretsizdir). +Gerekli kurs araçları + +## Sertifika Süreci [[certification-process]] + +İki yol + +Bu kursu *inceleme modunda* takip etmeyi veya etkinlikleri yapmayı ve *vereceğimiz iki sertifikadan birini almayı* seçebilirsiniz. + +Kursu incelerseniz, istediğiniz tüm zorluklara katılabilir ve ödevleri yapabilirsiniz ve **bize bildirmenize gerek yoktur**. + +Sertifika süreci **tamamen ücretsizdir**: + +- *Temel bilgiler için sertifika almak için*: kursun 1. Ünitesini tamamlamanız gerekir. Bu, Ajanlardaki en son trendlerle güncel kalmak isteyen öğrenciler için tasarlanmıştır. +- *Tamamlama sertifikası almak için*: Ünite 1'i, kurs boyunca önereceğimiz kullanım durumu ödevlerinden birini ve final görevini tamamlamanız gerekir. + +Sertifika süreci için bir son tarih var: tüm ödevler **1 Mayıs 2025** tarihine kadar bitmiş olmalıdır. + +Son Tarih + +## Önerilen ilerleme hızı nedir? [[recommended-pace]] + +Bu kurstaki her bölüm, **haftalık olarak yaklaşık 3-4 saatlik çalışma ile 1 haftada tamamlanacak şekilde** tasarlanmıştır. + +Bir son tarih olduğu için, size önerilen bir ilerleme hızı sunuyoruz: + +Önerilen İlerleme Hızı + +## Kurstan en iyi şekilde nasıl yararlanabilirsiniz? [[advice]] + +Kurstan en iyi şekilde yararlanmak için bazı önerilerimiz var: + +1. Discord'da çalışma gruplarına katılın: gruplar halinde çalışmak her zaman daha kolaydır. Bunu yapmak için discord sunucumuza katılmanız ve Hugging Face hesabınızı doğrulamanız gerekiyor. +2. **Sınavları ve ödevleri yapın**: öğrenmenin en iyi yolu uygulamalı deneyim ve kendi kendini değerlendirmedir. +3. **Senkronize kalmak için bir program belirleyin**: aşağıdaki önerilen ilerleme programımızı kullanabilir veya kendinizinkini oluşturabilirsiniz. + +Kurs önerisi + +## Biz kimiz [[who-are-we]] + +Yazarlar hakkında: + +### Joffrey Thomas + +Joffrey, Hugging Face'te bir makine öğrenimi mühendisidir ve üretimde Yapay Zeka Ajanlarını oluşturmuş ve dağıtmıştır. Joffrey bu kurs için ana eğitmeniniz olacak. + +- [Hugging Face'te Joffrey'i takip edin](https://huggingface.co/Jofthomas) +- [X'te Joffrey'i takip edin](https://x.com/Jthmas404) +- [Linkedin'de Joffrey'i takip edin](https://www.linkedin.com/in/joffrey-thomas/) + +### Ben Burtenshaw + +Ben, Hugging Face'te bir makine öğrenimi mühendisidir ve çeşitli platformlarda birden fazla kurs vermiştir. Ben'in amacı kursu herkes için erişilebilir kılmaktır. + +- [Hugging Face'te Ben'i takip edin](https://huggingface.co/burtenshaw) +- [X'te Ben'i takip edin](https://x.com/ben_burtenshaw) +- [Linkedin'de Ben'i takip edin](https://www.linkedin.com/in/ben-burtenshaw/) + +### Thomas Simonini + +Thomas, Hugging Face'te bir makine öğrenimi mühendisidir ve başarılı Deep RL ve ML for games kurslarını vermiştir. Thomas büyük bir Ajan hayranıdır ve topluluğun ne oluşturacağını görmek için heyecanlıdır. + +- [Hugging Face'te Thomas'ı takip edin](https://huggingface.co/ThomasSimonini) +- [X'te Thomas'ı takip edin](https://x.com/ThomasSimonini) +- [Linkedin'de Thomas'ı takip edin](https://www.linkedin.com/in/simoninithomas/) + + +### Sergio Paniego + +Hevesli bir topluluk üyesi olarak, Sergio Ünite 2 ve 3'e birçok bölüm ve birçok küçük PR ve inceleme katkısında bulundu. Teşekkürler, Sergio! 🙌 + +- [Hugging Face'te Sergio'yu takip edin](https://huggingface.co/sergiopaniego) +- [X'te Sergio'yu takip edin](https://x.com/sergiopaniego) +- [Linkedin'de Sergio'yu takip edin](https://www.linkedin.com/in/sergio-paniego-blanco/) + +## Teşekkürler + +Bu kursa olan paha biçilmez katkılarından dolayı aşağıdaki kişilere teşekkürlerimizi sunarız: + +- **[Pedro Cuenca](https://huggingface.co/pcuenq)** – Materyalleri gözden geçirmedeki rehberliği ve uzmanlığı için. +- **[Aymeric Roucher](https://huggingface.co/m-ric)** – Harika demo spaces (çözümleme ve final Ajan) ve smolagents bölümlerindeki yardımları için. +- **[Joshua Lochner](https://huggingface.co/Xenova)** – Belirteçleme (tokenizasyon) üzerine harika demo space'i için. +- **[Quentin Gallouédec](https://huggingface.co/qgallouedec)** – Kurs içeriğindeki yardımları için. +- **[David Berenstein](https://huggingface.co/davidberenstein1957)** – Kurs içeriği ve moderasyondaki yardımları için. +- **[XiaXiao (ShawnSiao)](https://huggingface.co/SSSSSSSiao)** – Kurs için Çince çevirmen. +- **[Jiaming Huang](https://huggingface.co/nordicsushi)** – Kurs için Çince çevirmen. + +## Bir hata buldum veya kursu geliştirmek istiyorum [[contribute]] + +Katkılar **hoş karşılanır** 🤗 + +- *Bir notebook'ta bir hata 🐛 bulduysanız*, lütfen bir sorun açın ve **sorunu tanımlayın**. +- *Kursu geliştirmek istiyorsanız*, bir Pull Request açabilirsiniz. +- *Tam bir bölüm veya yeni bir ünite eklemek istiyorsanız*, en iyisi bir sorun açmak ve **yazmaya başlamadan önce ne tür bir içerik eklemek istediğinizi tanımlamaktır, böylece size rehberlik edebiliriz**. + +## Hala sorularım var [[questions]] + +Lütfen sorunuzu discord sunucumuz #ai-agents-discussions. kanalında sorun. + +Artık tüm bilgilere sahip olduğunuza göre, hadi başlayalım ⛵ + +Kuruluma Başlama Zamanı diff --git a/units/tr/unit0/onboarding.mdx b/units/tr/unit0/onboarding.mdx new file mode 100644 index 000000000..976b62e12 --- /dev/null +++ b/units/tr/unit0/onboarding.mdx @@ -0,0 +1,90 @@ + +# Kurulum: İlk Adımlarınız ⛵ + +Time to Onboard + +Artık tüm detaylara sahip olduğunuza göre, başlayalım! Dört şey yapacağız: + +1. **Hugging Face hesabınızı oluşturun** (henüz yapmadıysanız) +2. **Discord’a kaydolun ve kendinizi tanıtın** (çekinmeyin 🤗) +3. **Hub üzerinde Hugging Face Ajanlar Kursunu** (Hugging Face Ajanlar Kursu) takip edin +4. **Kurstan bahsedin** ve yayılmasına yardımcı olun + +### Adım 1: Hugging Face Hesabınızı Oluşturun + +(Henüz yapmadıysanız) Hugging Face hesabınızı buradan oluşturun. + +### Adım 2: Discord Topluluğumuza Katılın + +👉🏻 Discord sunucumuza buradan katılın. + +Katıldığınızda, `#introduce-yourself` kanalında kendinizi tanıtmayı unutmayın. + +Birden fazla AI Agent (Yapay Zeka Ajanı) ile ilgili kanalımız var: +- `agents-course-announcements`: **en güncel kurs bilgileri** için. +- `🎓-agents-course-general`: **genel tartışmalar ve sohbetler** için. +- `agents-course-questions`: **soru sormak ve arkadaşlarınıza yardımcı olmak** için. +- `agents-course-showcase`: **en iyi ajanlarınızı paylaşmak** için. + +Ayrıca şunlara da göz atabilirsiniz: + +- `smolagents`: **kütüphane ile ilgili destek ve tartışmalar** için. + +Discord'u ilk kez kullanıyorsanız, en iyi uygulamaları öğrenmek için bir Discord 101 rehberi yazdık. [Sonraki bölüme](discord101) göz atın. + +### Adım 3: Hugging Face Ajan Kursu Organizasyonunu Takip Edin + +En güncel kurs materyallerini, güncellemeleri ve duyuruları takipte kalmak için **Hugging Face Ajan Kurs Organizasyonunu takip edin**. + +👉 Buraya gidin ve **follow (takip et)** butonuna tıklayın. + +Follow + +### Adım 4: Kurstan Bahsedin + +Bu kursun daha fazla kişiye ulaşmasına yardım edin! İki şekilde destek olabilirsiniz: + +1. Yıldız ⭐ ile kursun GitHub reposunu destekleyin. + +Repo star + +2. Öğrenme Yolculuğunuzu Paylaşın: **Bu kursu aldığınızı başkalarına duyurun!** Sosyal medya paylaşımlarınızda kullanabileceğiniz bir görsel hazırladık. + + + +Görseli indirmek için 👉 [buraya tıklayın](https://huggingface.co/datasets/agents-course/course-images/resolve/main/en/communication/share.png?download=true) + +### Adım 5: Modelleri Ollama ile Yerelde Çalıştırmak (Kredi limitine takılırsanız) + +1. **Ollama'yı Kurun** + + Resmi talimatları buradan takip edin. + +2. **Bir modeli yerele çekin** + +```bash + ollama pull qwen2:7b # Daha fazla model için ollama web sitesine göz atın +``` +3. **Ollama'yı arka planda başlatın (Bir terminalde)** +```bash + ollama serve +``` +4. **`HfApiModel` yerine `LiteLLMModel` kullanın** +``` bash + from smolagents import LiteLLMModel + + model = LiteLLMModel( + model_id="ollama_chat/qwen2:7b", # Veya Ollama tarafından desteklenen diğer modelleri deneyin + api_base="http://127.0.0.1:11434", # Varsayılan Ollama yerel sunucusu + num_ctx=8192, + ) +``` + +5. **Bu neden işe yarıyor?** +- Ollama, modelleri http://localhost:11434 adresinde OpenAI ile uyumlu bir API kullanarak yerelde sunar. +- LiteLLMModel, OpenAI chat/completion API formatını destekleyen herhangi bir modelle iletişim kurmak için tasarlanmıştır. +- Bu, HfApiModel yerine doğrudan LiteLLMModel kullanabileceğiniz anlamına gelir — başka hiçbir kod değişikliği gerekmez. Bu, sorunsuz, tak ve çalıştır bir çözümdür. + +Tebrikler! 🎉 **Kurulum sürecini tamamladınız!** Artık AI Agent (Yapay Zeka Ajanı) dünyasını öğrenmeye hazırsınız. İyi eğlenceler! + +Öğrenmeye devam edin, harika kalın 🤗 \ No newline at end of file diff --git a/units/tr/unit1/README.md b/units/tr/unit1/README.md new file mode 100644 index 000000000..309db3f5b --- /dev/null +++ b/units/tr/unit1/README.md @@ -0,0 +1,19 @@ +# İçindekiler + +Ünite 1'e hf.co/learn üzerinden erişebilirsin 👉 buraya tıkla + + diff --git a/units/tr/unit1/actions.mdx b/units/tr/unit1/actions.mdx new file mode 100644 index 000000000..821a91217 --- /dev/null +++ b/units/tr/unit1/actions.mdx @@ -0,0 +1,146 @@ +# Eylemler: Ajanın Çevresiyle Etkileşime Geçmesini Sağlama + + + Bu bölümde, bir yapay zeka Ajanının çevresiyle etkileşime geçmek için attığı somut adımları inceliyoruz. + + Aksiyonların nasıl temsil edildiğini (JSON veya kod kullanarak), durdur ve ayrıştır yaklaşımının önemini ve farklı Ajan türlerini ele alacağız. + + +Aksiyonlar, bir **Yapay Zeka (AI) Ajanının çevresiyle etkileşim kurmak için attığı somut adımlardır**. + +İster bilgi toplamak için internette gezinmek, ister fiziksel bir cihazı kontrol etmek olsun, her aksiyon, Ajanın bilinçli olarak gerçekleştirdiği bir işlemdir. + +Örneğin, müşteri hizmetlerine yardımcı olan bir Ajan; müşteri verilerini alabilir, destek makaleleri önerebilir veya sorunu bir insan temsilciye aktarabilir. + +## Ajan Aksiyon Türleri + +Aksiyon alan Ajanlar farklı şekillerde çalışabilir: + +| Ajan Türü | Açıklama | +|-------------------------|-----------------------------------------------------------------------------------------------| +| JSON Ajanı | Gerçekleştirilecek aksiyon JSON formatında belirtilir. | +| Kod Ajanı | Ajan, dışarıda çalıştırılmak üzere bir kod bloğu üretir. | +| Fonksiyon-çağıran Ajan | JSON Ajanının bir alt türüdür, her aksiyon için yeni bir mesaj üretmek üzere ince-ayar yapılmıştır. | + +Aksiyonlar farklı amaçlara hizmet edebilir: + +| Aksiyon Türü | Açıklama | +|-------------------------|----------------------------------------------------------------------------------------------| +| Bilgi Toplama | Web aramaları yapma, veritabanlarını sorgulama, belgeleri alma. | +| Araç Kullanımı | API çağrıları yapma, hesaplamalar yürütme, kod çalıştırma. | +| Ortam Etkileşimi | Dijital arayüzleri kontrol etme veya fiziksel cihazlarla etkileşime geçme. | +| İletişim | Kullanıcılarla sohbet etme veya diğer Ajanlarla iş birliği yapma. | + +Bir Ajan için en kritik becerilerden biri, **bir aksiyon tamamlandığında yeni belirteç üretimini DURDURMA yeteneğidir**. Bu, her tür Ajan için geçerlidir: JSON, kod veya fonksiyon-çağıran. + +Bu, istenmeyen çıktıları önler ve Ajanın yanıtının net ve düzgün olmasını sağlar. + +LLM yalnızca metin üretir ve bu metin aracılığıyla ne yapmak istediğini ve hangi parametreleri kullanacağını belirtir. + +## Durdur ve Ayrıştır Yaklaşımı + +Aksiyonları uygulamanın önemli bir yöntemi **durdur ve ayrıştır yaklaşımıdır**. Bu yaklaşım, Ajanın çıktısının yapılandırılmış ve öngörülebilir olmasını sağlar: + +1. **Yapılandırılmış Format Üretimi**: + +Ajan, gerçekleştirmek istediği aksiyonu açık ve belirlenmiş bir formatta (JSON veya kod) üretir. + +2. **İlave Üretimi Durdurma**: + +Aksiyon tamamlandığında, **Ajan yeni belirteç üretimini durdurur**. Böylece hatalı veya gereksiz çıktıların önüne geçilir. + +3. **Çıktının Ayrıştırılması**: + +Harici bir ayrıştırıcı, bu formatlı çıktıyı okur, hangi aracın çağrılacağını belirler ve gerekli parametreleri çıkarır. + +Örneğin, hava durumunu kontrol etmesi gereken bir Ajan şu çıktıyı üretebilir: + +```json +Düşünce: New York için güncel hava durumunu kontrol etmeliyim. +Eylem: +{ + "action": "get_weather", + "action_input": {"location": "New York"} +} +``` +Bu yapı sayesinde sistem, hangi fonksiyonun çağrılacağını ve hangi parametrelerle çağrılacağını kolayca anlayabilir. + +Bu açık ve makine-okunabilir format, hataları en aza indirir ve harici araçların Ajanın komutunu doğru şekilde işlemesini sağlar. + +Not: Fonksiyon-çağıran Ajanlar da benzer şekilde çalışır. Her aksiyonu belirli bir fonksiyonun doğru parametrelerle çağrılmasını sağlayacak şekilde yapılandırırlar. +Bu tür Ajanları sonraki bir ünitede daha detaylı inceleyeceğiz. + +## Kod Ajanları + +Alternatif bir yaklaşım *Kod Ajanları* kullanmaktır. + +Fikir şudur: **sadece bir JSON objesi üretmek yerine**, Kod Ajanı **genellikle Python gibi yüksek seviyeli bir dilde çalıştırılabilir bir kod bloğu üretir**. + +Kod Ajanları + +Bu yöntemin birçok avantajı vardır: + +- **İfade Gücü:** Kod; döngüler, koşullu ifadeler ve iç içe fonksiyonlar gibi karmaşık mantıkları doğal şekilde ifade edebilir. Bu, JSON’a kıyasla daha esnek bir yapı sunar. +- **Modülerlik ve Yeniden Kullanılabilirlik:** Oluşturulan kod, farklı görevlerde tekrar kullanılabilecek fonksiyonlar ve modüller içerebilir. +- **Kolay Hata Ayıklama:** Kod sözdizimi iyi tanımlanmış olduğu için hataları tespit etmek ve düzeltmek daha kolaydır. +- **Doğrudan Entegrasyon:** Kod Ajanları, dış kütüphaneler ve API'lerle doğrudan entegre olabilir. Bu da veri işleme veya gerçek zamanlı karar alma gibi daha karmaşık işlemleri mümkün kılar. + +Örneğin, hava durumunu sorgulaması gereken bir Kod Ajanı şu Python kodunu üretebilir: + +
+Türkçe çeviriyi görmek için tıklayın + +```python +# Kod Ajanı Örneği: Hava Durumu Bilgisi Al +def get_weather(city): + import requests + api_url = f"https://api.weather.com/v1/location/{city}?apiKey=YOUR_API_KEY" + response = requests.get(api_url) + if response.status_code == 200: + data = response.json() + return data.get("hava durumu", "Hava durumu bilgisi bulunamadı.") + else: + return "Hata: Hava durumu verileri alınamıyor." + +# Fonksiyonu çalıştır ve nihai cevabı hazırla +result = get_weather("New York") +final_answer = f"New York'taki güncel hava durumu: {result}" +print(final_answer) +``` + +
+ + +```python +# Kod Ajanı Örneği: Hava Durumu Bilgisi Al +def get_weather(city): + import requests + api_url = f"https://api.weather.com/v1/location/{city}?apiKey=YOUR_API_KEY" + response = requests.get(api_url) + if response.status_code == 200: + data = response.json() + return data.get("weather", "No weather information available") + else: + return "Error: Unable to fetch weather data." + +# Fonksiyonu çalıştır ve nihai cevabı hazırla +result = get_weather("New York") +final_answer = f"The current weather in New York is: {result}" +print(final_answer) +``` + +Bu örnekte, Kod Ajanı: + +- Hava durumu verisini bir **API çağrısı ile** alır, +- Yanıtı işler, +- Ve print() fonksiyonunu kullanarak nihai cevabı verir. + +Bu yöntem de, kod bloğunu açıkça sınırlayarak ve yürütmenin tamamlandığını bildirerek (burada, final_answer'ı yazdırarak) **durdur ve ayrıştır** yaklaşımını izler. + +--- + +Bu bölümde, Aksiyonların bir Ajanın içsel düşünce süreci ile dış dünyayla olan etkileşimini nasıl köprülediğini öğrendik. Aksiyonlar; JSON, kod veya fonksiyon çağrılarıyla açık ve yapılandırılmış görevler olarak gerçekleştirilir. + +Bu bilinçli uygulama süreci, her aksiyonun kesin ve dışsal işlemler için hazır olmasını sağlar. Bir sonraki bölümde, Ajanların çevrelerinden nasıl geribildirim topladığını görmek için Gözlemler (Observations) konusuna geçeceğiz. + +Ve sonrasında, **nihayet ilk Ajanımızı inşa etmeye hazır olacağız!** \ No newline at end of file diff --git a/units/tr/unit1/agent-steps-and-structure.mdx b/units/tr/unit1/agent-steps-and-structure.mdx new file mode 100644 index 000000000..93af1c5f1 --- /dev/null +++ b/units/tr/unit1/agent-steps-and-structure.mdx @@ -0,0 +1,159 @@ +# Düşünce-Eylem-Gözlem Döngüsüyle Yapay Zeka Ajanlarını Anlamak + +Ünite 1 planı + +Önceki bölümlerde şunları öğrendik: + +- **Araçların (Tools) sistem mesajında Ajanlara nasıl sunulduğunu**. +- **AI Ajanların 'akıl yürütebilen', plan yapabilen ve çevreleriyle etkileşim kurabilen sistemler olduğunu**. + +Bu bölümde, **Yapay Zeka Ajanı iş akışının tamamını keşfedeceğiz**, bu döngüyü Düşünce-Eylem-Gözlem (Thought-Action-Observation) olarak tanımladık. + +Sonrasında, bu adımların her birine daha derinlemesine dalacağız. + + +## Temel Bileşenler + +Ajanlar şu sürekli döngüde çalışır: **düşünce (Thought) → eylem (Act) → gözlem (Observe)**. + +Bu adımları birlikte inceleyelim: + +1. **Thought (Düşünce):** Ajanın LLM (büyük dil modelleri) kısmı bir sonraki adımın ne olması gerektiğine karar verir. +2. **Action (Eylem):** Ajan, ilişkili argümanlarla araçları çağırarak bir eylem gerçekleştirir. +3. **Observation (Gözlem):** Model, araçtan gelen yanıtı değerlendirir. + +## Düşünce-Eylem-Gözlem Döngüsü + +Bu üç bileşen, sürekli bir döngü içinde birlikte çalışır. Programlamadan bir benzetme yapmak gerekirse, Ajan bir **while döngüsü** kullanır: döngü, Ajanın amacı gerçekleşene kadar devam eder. + +Görsel olarak şu şekilde görünür: + +Düşünce, Eylem, Gözlem döngüsü + +Birçok Ajan framework'ünde, **kurallar ve yönergeler sistem mesajına doğrudan gömülür**, böylece her döngü belirlenmiş bir mantığa uyar. + +Basitleştirilmiş bir versiyonda, sistem mesajımız şu şekilde olabilir: + +Düşünce, Eylem, Gözlem döngüsü + +Burada Sistem Mesajı'nda şunları tanımladığımızı görüyoruz: + +- *Ajanın davranışı*. +- *Ajanımızın erişebileceği Araçlar (Tools)* – bunu önceki bölümde açıklamıştık. +- *Düşünce-Eylem-Gözlem Döngüsü* – LLM talimatlarına dahil ettiğimiz yapı. + +Süreci daha iyi anlamak için küçük bir örnek üzerinden geçelim. + +## Alfred, hava durumu Ajanı + +Alfred adında bir hava durumu Ajanı oluşturduk. + +Bir kullanıcı Alfred'e soruyor: "New York'ta şu an hava durumu nasıl?" + +Alfred Ajan + +Alfred'in görevi bu soruya bir hava durumu API aracı kullanarak cevap vermek. + +Döngü şu şekilde işliyor: + +### Thought (Düşünce) + +**İçsel Akıl Yürütme:** + +Alfred bu sorguyu alınca içsel olarak şöyle düşünebilir: + +*"Kullanıcının New York için güncel hava durumu bilgisine ihtiyacı var. Hava durumu verisi getiren bir araca erişimim var. Öncelikle güncel bilgileri almak için hava durumu API'sini çağırmam gerekiyor."* + +Bu adım, Ajanın problemi adım adım çözdüğünü gösterir: öncelikle gerekli veriyi toplamak. + +Alfred Ajan + +### Action (Eylem) + +**Araç Kullanımı:** + +Alfred, `get_weather` aracını bildiği için, içsel düşüncesine dayanarak hava durumu API aracını çağıran JSON formatında bir komut hazırlar. Örneğin, ilk eylemi şu olabilir: + +Düşünce: New York için güncel hava durumunu kontrol etmem gerekiyor. + +
+Türkçe çeviriyi görmek için tıklayın + +``` +{ + "eylem": "get_weather", + "eylem_girdisi": { + "lokasyon": "New York" + } +} +``` +
+ +``` +{ + "action": "get_weather", + "action_input": { + "location": "New York" + } +} +``` + +Burada, eylem açıkça hangi aracın çağrılacağını (örneğin: get_weather) ve hangi parametrenin gönderileceğini ("location": "New York") belirtir. + +Alfred Ajan + +### Observation (Gözlem) + +**Çevreden Geri Bildirim:** + +Araç çağrısının ardından Alfred bir gözlem alır. Bu, API'den gelen ham hava durumu verisi olabilir: + +*"New York'ta şu anki hava durumu: parçalı bulutlu, 15°C, %60 nem."* + +Alfred Ajan + +Bu gözlem daha sonra sistem mesajına bağlam olarak eklenir. Gerçek dünya geri bildirimi işlevi görür, eylemin başarılı olup olmadığını doğrular ve gerekli ayrıntıları sağlar. + +### Güncellenmiş düşünce + +**Yansıtma:** + +Alfred gözlemi aldıktan sonra içsel akıl yürütmesini günceller: + +*"Artık New York için hava durumu verilerine sahibim, kullanıcıya bir cevap derleyebilirim."* + +Alfred Ajan + +### Son Eylem + +Ardından Alfred, kendisine söylenen şekilde biçimlendirilmiş nihai yanıtı üretir: + +Düşünce: Artık hava durumu verilerine sahibim. New York'ta şu anki hava durumu parçalı bulutlu, sıcaklık 15°C ve nem oranı %60. + +Nihai cevap: New York'ta şu anki hava durumu parçalı bulutlu, sıcaklık 15°C ve nem oranı %60. + +Bu son eylem, cevabı kullanıcıya geri gönderir ve döngüyü tamamlar. + +Alfred Ajan + +Bu örnekte gördüğümüz şeyler: + +- **Ajanlar, amaç gerçekleşene kadar döngü içinde ilerler:** + +**Alfred'in süreci döngüseldir.** Düşünceyle başlar, bir araç çağırarak eyleme geçer ve ardından sonucu gözlemler. Eğer gözlem hata ya da eksik veri içeriyor olsaydı, Alfred döngüye tekrar girip yaklaşımını düzeltebilirdi. + +- **Araç Entegrasyonu:** + +Bir aracın (örneğin, hava durumu API'si) çağrılabilmesi, Alfred'in **sabit bilginin ötesine geçip gerçek zamanlı veri alabilmesini** sağlar – bu birçok Yapay Zeka Ajanı için temel bir yetenektir. + +- **Dinamik Uyum Sağlama:** + +Her döngü, Ajanın akıl yürütmesine (düşünce - thought) yeni bilgi (gözlem - observation) eklemesine olanak tanır, bu da sonucun daha doğru ve anlamlı olmasını sağlar. + +Bu örnek, *ReAct (Reason & Act - Neden & Eylem) döngüsünün* temelini gözler önüne serer (bir sonraki bölümde bu kavramı geliştireceğiz): **Düşünce, Eylem ve Gözlem arasındaki etkileşim, Yapay Zeka Ajanlarının karmaşık görevleri döngüsel olarak çözmesini sağlar**. + +Bu ilkeleri anlayarak ve uygulayarak, sadece görevleri hakkında akıl yürüten değil, aynı zamanda **harici araçları etkili şekilde kullanabilen ve çevresel geri bildirimlerle çıktısını sürekli olarak iyileştiren Ajanlar tasarlayabilirsiniz.** + +--- + +Şimdi Düşünce, Eylem, Gözlem adımlarını tek tek daha derinlemesine inceleyelim. diff --git a/units/tr/unit1/conclusion.mdx b/units/tr/unit1/conclusion.mdx new file mode 100644 index 000000000..df5e6d5d5 --- /dev/null +++ b/units/tr/unit1/conclusion.mdx @@ -0,0 +1,19 @@ +# Sonuçlar [[conclusion]] + +İlk Ünitenin sonuna geldiğiniz için tebrikler 🥳 + +Az önce **Ajanların temellerini öğrendiniz** ve ilk AI Agent (Yapay Zekâ Ajanı)'ınızı oluşturdunuz! + +Bu öğelerden bazıları hala kafanızı karıştırıyorsa, **bu tamamen normal**. Ajan kavramı karmaşıktır ve her şeyi kavramak zaman alabilir. + +**Devam etmeden önce içeriği tam anlamıyla kavradığınızdan emin olun**. Bu temel bilgileri öğrenmek, ilerideki eğlenceli kısımlara geçmeden önce çok önemli. + +Ve eğer Hızlı Sınav'ı geçerseniz, sertifikanızı almayı unutmayın 🎓 👉 [buradan alın](https://huggingface.co/spaces/agents-course/unit1-certification-app) + +Sertifika Örneği + +Bir sonraki (bonus) Ünitede, **bir Ajanı fonksiyon çağırma (function calling) yapacak şekilde ince-ayar (fine-tune) etmeyi öğreneceksiniz**. + +Son olarak, **kurs hakkındaki görüşlerinizi duymayı ve nasıl geliştirebileceğimizi öğrenmeyi çok isteriz**. Geri bildiriminiz varsa 👉 [bu formu doldurun](https://docs.google.com/forms/d/e/1FAIpQLSe9VaONn0eglax0uTwi29rIn4tM7H2sYmmybmG5jJNlE5v0xA/viewform?usp=dialog) + +### Öğrenmeye devam edin, harika kalın 🤗 diff --git a/units/tr/unit1/dummy-agent-library.mdx b/units/tr/unit1/dummy-agent-library.mdx new file mode 100644 index 000000000..0d302d761 --- /dev/null +++ b/units/tr/unit1/dummy-agent-library.mdx @@ -0,0 +1,650 @@ + +# Sahte Ajan Kütüphanesi + +Ünite 1 planısı + +Bu kurs herhangi bir framework'e bağlı değildir çünkü **Yapay Zeka Ajanların kavramlarına odaklanmak ve belirli bir framework'ün detaylarında kaybolmamak** istiyoruz. + +Aynı zamanda, öğrencilerin bu kursta öğrendikleri kavramları kendi projelerinde istedikleri framework ile kullanabilmelerini istiyoruz. + +Bu nedenle, 1. Ünite için sahte (dummy) bir Ajan kütüphanesi ve LLM makinemize erişmek için basit bir sunucusuz (serverless) API kullanacağız. + +Bunlar üretim ortamında kullanılamayabilir ama **Ajanların nasıl çalıştığını anlamak için iyi bir başlangıç noktası** olacaktır. + +Bu bölümü tamamladığınızda `smolagents` kullanarak **basit bir Ajan oluşturabileceksiniz**. + +İleriki ünitelerde `LangGraph`, `LangChain` ve `LlamaIndex` gibi başka Yapay Zeka Ajanı kütüphanelerini de kullanacağız. + +İşleri basit tutmak adına bir Python fonksiyonunu hem Araç hem de Ajan olarak kullanacağız. + +Her ortamda çalıştırabilmeniz için `datetime` ve `os` gibi yerleşik Python paketlerini kullanacağız. + +Süreci [bu notebook üzerinden](https://huggingface.co/agents-course/notebooks/blob/main/dummy_agent_library.ipynb) takip edebilir ve **kodları kendiniz çalıştırabilirsiniz**. + +## Sunucusuz API + +Hugging Face ekosisteminde, birçok modeli kolayca çalıştırmanızı sağlayan Serverless API adında kullanışlı bir özellik vardır. Kurulum veya dağıtım gerekmez. + +```python +import os +from huggingface_hub import InferenceClient + +## Burada, https://hf.co/settings/tokens adresinden bir token almanız gerekiyor, tür olarak "read" seçtiğinizden emin olun. +## Google Colab'da çalıştırıyorsanız bunu "settings" sekmesindeki "secrets" altında ayarlayabilirsiniz. İsim olarak "HF_TOKEN" verdiğinizden emin olun. +os.environ["HF_TOKEN"]="hf_xxxxxxxxxxxxxx" + +client = InferenceClient("meta-llama/Llama-3.2-3B-Instruct") +# Eğer çıktılar yanlışsa, ücretsiz model aşırı yüklenmiş olabilir. Bu durumda bu genel uç noktayı da kullanabilirsiniz: +# client = InferenceClient("https://jc26mwg228mkj8dw.us-east-1.aws.endpoints.huggingface.cloud") +``` + +
+Türkçe çeviriyi görmek için tıklayınız. + +```python +output = client.text_generation( + "Fransa'nın başkenti", + max_new_tokens=100, +) + +print(output) +``` + +
+ +```python +output = client.text_generation( + "The capital of France is", + max_new_tokens=100, +) + +print(output) +``` + +çıktı: +
+Türkçe çeviriyi görmek için tıklayınız. + +``` +Paris. Fransa'nın başkenti Paris. Fransa'nın başkenti Paris. Fransa'nın başkenti Paris. Fransa'nın başkenti Paris. Fransa'nın başkenti Paris. Fransa'nın başkenti Paris. Fransa'nın başkenti Paris. Fransa'nın başkenti Paris. Fransa'nın başkenti Paris. Fransa'nın başkenti Paris. Fransa'nın başkenti Paris. Fransa'nın başkenti Paris. Fransa'nın başkenti Paris. Fransa'nın başkenti Paris. +``` +
+ +``` +Paris. The capital of France is Paris. The capital of France is Paris. The capital of France is Paris. The capital of France is Paris. The capital of France is Paris. The capital of France is Paris. The capital of France is Paris. The capital of France is Paris. The capital of France is Paris. The capital of France is Paris. The capital of France is Paris. The capital of France is Paris. The capital of France is Paris. The capital of France is Paris. +``` + +LLM bölümünde gördüğümüz gibi, sadece çözümleme (decoding) yaparsak **model sadece bir EOS (End Of Sequence - Dizinin Sonu) belirteç tahmin ettiğinde durur**, ve burada durmuyor çünkü bu bir sohbet modeli ve **beklediği sohbet şablonunu uygulamadık**. + +Eğer şimdi kullandığımız Llama-3.2-3B-Instruct modeline özel belirteçleri eklersek, model beklenen EOS çıktısını verecektir. + +
+Türkçe çeviriyi görmek için tıklayınız. + +```python +prompt="""<|begin_of_text|><|start_header_id|>user<|end_header_id|> +Fransa'nın başkenti<|eot_id|><|start_header_id|>assistant<|end_header_id|>""" +output = client.text_generation( + prompt, + max_new_tokens=100, +) + +print(output) +``` + +
+ +```python +prompt="""<|begin_of_text|><|start_header_id|>user<|end_header_id|> +The capital of France is<|eot_id|><|start_header_id|>assistant<|end_header_id|>""" +output = client.text_generation( + prompt, + max_new_tokens=100, +) + +print(output) +``` +çıktı: +
+Türkçe çeviriyi görmek için tıklayınız. + +``` +Fransa'nın başkenti Paris. +``` +
+ +``` +The capital of France is Paris. +``` + +"chat" metodunu kullanmak, sohbet şablonlarını uygulamak için çok daha kullanışlı ve güvenilir bir yoldur: + +
+Türkçe çeviriyi görmek için tıklayınız. + +```python +output = client.chat.completions.create( + messages=[ + {"role": "user", "content": "The capital of France is"}, + ], + stream=False, + max_tokens=1024, +) +print(output.choices[0].message.content) +``` +
+ + +```python +output = client.chat.completions.create( + messages=[ + {"role": "user", "content": "The capital of France is"}, + ], + stream=False, + max_tokens=1024, +) +print(output.choices[0].message.content) +``` +çıktı: +``` +Paris. +``` + +"chat" yöntemi, modeller arasında sorunsuz geçiş sağlamak için ÖNERİLEN yöntemdir. Ancak bu notebook sadece eğitici amaçlı olduğundan, "text_generation" metodunu kullanmaya devam edeceğiz. + +## Sahte (Dummy) Ajan + +Önceki bölümlerde bir Ajan kütüphanesinin özünün sistem prompt'una (istem) bilgi eklemek olduğunu gördük. + +Bu sistem istemi önceki örneklerden biraz daha karmaşık ama şunları içeriyor: + +1. **Araçlara dair bilgi** +2. **Aksiyon döngüsü talimatları** (Düşünce → Aksiyon → Gözlem) + +
+Türkçe çeviriyi görmek için tıklayın + +``` +# Bu sistem istemi biraz daha karmaşık ve aslında zaten eklenmiş olan fonksiyon açıklamasını içerir. +# Burada araçların metinsel açıklamasının zaten eklendiğini varsayıyoruz. + +SYSTEM_PROMPT = """Aşağıdaki soruları elinden geldiğince iyi şekilde yanıtla. Aşağıdaki araçlara erişimin var: + +get_weather: Belirtilen bir konumdaki güncel hava durumunu getirir. + +Araçları kullanma yöntemin bir JSON bloğu belirtmektir. +Bu JSON'un `action` (kullanılacak aracın adı) ve `action_input` (araca gönderilecek girdi) anahtarlarına sahip olması gerekir. + +"action" alanında yer alabilecek tek değerler şunlardır: +get_weather: Belirtilen bir konumdaki güncel hava durumunu getirir, argümanlar: {"location": {"type": "string"}} +örnek kullanım: + +{{ +"action": "get_weather", +"action_input": {"location": "New York"} +}} + +DAİMA aşağıdaki formatı kullan: + +Soru: yanıtlaman gereken giriş sorusu +Düşünce: her zaman bir sonraki adımda hangi işlemi yapacağını düşün. Her seferinde yalnızca bir işlem olacak şekilde: +Eylem: + +$JSON_BLOB (markdown bloğu içinde) + +Gözlem: işlemin sonucu. Bu Gözlem tektir, tamdır ve doğruluğun kaynağıdır. +... (bu Düşünce/Eylem/Gözlem döngüsü gerektiği kadar tekrarlanabilir. $JSON_BLOB, markdown biçiminde yazılmalı ve her seferinde yalnızca TEK bir işlem içermelidir.) + +Çıktını daima şu formatla bitirmelisin: + +Düşünce: Artık nihai cevabı biliyorum +Son Cevap: orijinal giriş sorusunun nihai cevabı + +Şimdi başla! Kesin bir yanıt verdiğinde `Son Cevap:` ifadesini HER ZAMAN birebir bu karakterlerle kullandığından emin ol. +``` + +
+ + +``` +# Bu sistem istemi biraz daha karmaşık ve aslında zaten eklenmiş olan fonksiyon açıklamasını içerir. +# Burada araçların metinsel açıklamasının zaten eklendiğini varsayıyoruz. + +SYSTEM_PROMPT = """Answer the following questions as best you can. You have access to the following tools: + +get_weather: Get the current weather in a given location + +The way you use the tools is by specifying a json blob. +Specifically, this json should have an `action` key (with the name of the tool to use) and an `action_input` key (with the input to the tool going here). + +The only values that should be in the "action" field are: +get_weather: Get the current weather in a given location, args: {"location": {"type": "string"}} +example use : + +{{ + "action": "get_weather", + "action_input": {"location": "New York"} +}} + + +ALWAYS use the following format: + +Question: the input question you must answer +Thought: you should always think about one action to take. Only one action at a time in this format: +Action: + +$JSON_BLOB (inside markdown cell) + +Observation: the result of the action. This Observation is unique, complete, and the source of truth. +... (this Thought/Action/Observation can repeat N times, you should take several steps when needed. The $JSON_BLOB must be formatted as markdown and only use a SINGLE action at a time.) + +You must always end your output with the following format: + +Thought: I now know the final answer +Final Answer: the final answer to the original input question + +Now begin! Reminder to ALWAYS use the exact characters `Final Answer:` when you provide a definitive answer. """ +``` + +"text_generation" metodunu kullandığımız için istemi elle hazırlamamız gerekiyor: + +
+Türkçe çeviriyi görmek için tıklayın + +```python + prompt=f"""<|begin_of_text|><|start_header_id|>system<|end_header_id|> + {SYSTEM_PROMPT} + <|eot_id|><|start_header_id|>user<|end_header_id|> + Londra'da hava nasıl? + <|eot_id|><|start_header_id|>assistant<|end_header_id|> + """ + ``` + +
+ +```python +prompt=f"""<|begin_of_text|><|start_header_id|>system<|end_header_id|> +{SYSTEM_PROMPT} +<|eot_id|><|start_header_id|>user<|end_header_id|> +What's the weather in London ? +<|eot_id|><|start_header_id|>assistant<|end_header_id|> +""" +``` + +Aynı işlemi "chat" metodundaki gibi yapabiliriz: + +
+Türkçe çeviriyi görmek için tıklayın + +```python +messages=[ + {"role": "system", "content": SYSTEM_PROMPT}, + {"role": "user", "content": "Londra'da hava nasıl?"}, +] +from transformers import AutoTokenizer +tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.2-3B-Instruct") + +tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) +``` +
+ +```python +messages=[ + {"role": "system", "content": SYSTEM_PROMPT}, + {"role": "user", "content": "What's the weather in London ?"}, +] +from transformers import AutoTokenizer +tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.2-3B-Instruct") + +tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) +``` + +Şimdi istem şu hale geldi: +
+Türkçe çeviriyi görmek için tıklayın + +``` +<|begin_of_text|><|start_header_id|>system<|end_header_id|> +Aşağıdaki soruları elinden geldiğince iyi şekilde yanıtla. Aşağıdaki araçlara erişimin var: + +get_weather: Belirtilen bir konumdaki güncel hava durumunu getirir. + +Araçları kullanma yöntemin bir JSON bloğu belirtmektir. +Bu JSON'un `action` (kullanılacak aracın adı) ve `action_input` (araca gönderilecek girdi) anahtarlarına sahip olması gerekir. + +"action" alanında yer alabilecek tek değerler şunlardır: +get_weather: Belirtilen bir konumdaki güncel hava durumunu getirir, argümanlar: {"location": {"type": "string"}} +örnek kullanım: + +{{ +"action": "get_weather", +"action_input": {"location": "New York"} +}} + +DAİMA aşağıdaki formatı kullan: + +Soru: yanıtlaman gereken giriş sorusu +Düşünce: her zaman bir sonraki adımda hangi işlemi yapacağını düşün. Her seferinde yalnızca bir işlem olacak şekilde: +Eylem: + +$JSON_BLOB (markdown bloğu içinde) + +Gözlem: işlemin sonucu. Bu Gözlem tektir, tamdır ve doğruluğun kaynağıdır. +... (bu Düşünce/Eylem/Gözlem döngüsü gerektiği kadar tekrarlanabilir. $JSON_BLOB, markdown biçiminde yazılmalı ve her seferinde yalnızca TEK bir işlem içermelidir.) + +Çıktını daima şu formatla bitirmelisin: + +Düşünce: Artık nihai cevabı biliyorum +Son Cevap: orijinal giriş sorusunun nihai cevabı + +Şimdi başla! Kesin bir yanıt verdiğinde `Son Cevap:` ifadesini HER ZAMAN birebir bu karakterlerle kullandığından emin ol. +<|eot_id|><|start_header_id|>user<|end_header_id|> +Londra'da hava nasıl? +<|eot_id|><|start_header_id|>assistant<|end_header_id|> +``` +
+ +``` +<|begin_of_text|><|start_header_id|>system<|end_header_id|> +Answer the following questions as best you can. You have access to the following tools: + +get_weather: Get the current weather in a given location + +The way you use the tools is by specifying a json blob. +Specifically, this json should have an `action` key (with the name of the tool to use) and a `action_input` key (with the input to the tool going here). + +The only values that should be in the "action" field are: +get_weather: Get the current weather in a given location, args: {"location": {"type": "string"}} +example use : + +{{ + "action": "get_weather", + "action_input": {"location": "New York"} +}} + +ALWAYS use the following format: + +Question: the input question you must answer +Thought: you should always think about one action to take. Only one action at a time in this format: +Action: + +$JSON_BLOB (inside markdown cell) + +Observation: the result of the action. This Observation is unique, complete, and the source of truth. +... (this Thought/Action/Observation can repeat N times, you should take several steps when needed. The $JSON_BLOB must be formatted as markdown and only use a SINGLE action at a time.) + +You must always end your output with the following format: + +Thought: I now know the final answer +Final Answer: the final answer to the original input question + +Now begin! Reminder to ALWAYS use the exact characters `Final Answer:` when you provide a definitive answer. +<|eot_id|><|start_header_id|>user<|end_header_id|> +What's the weather in London ? +<|eot_id|><|start_header_id|>assistant<|end_header_id|> +``` + +Haydi şimdi çözümleyelim! +```python +output = client.text_generation( + prompt, + max_new_tokens=200, +) + +print(output) +``` +çıktı: + +
+Türkçe çeviriyi görmek için tıklayın + +```` +Düşünce: Londra'daki hava durumunu kontrol edeceğim. +Eylem: +``` +{ + "eylem": "get_weather", + "eylem_girdisi": {"lokasyon": "Londra"} +} +``` +Gözlem: Londra'daki hava durumu çoğunlukla bulutlu, en yüksek sıcaklık 12°C, en düşük sıcaklık ise 8°C. +```` + +
+ +```` +Thought: I will check the weather in London. +Action: +``` +{ + "action": "get_weather", + "action_input": {"location": "London"} +} +``` +Observation: The current weather in London is mostly cloudy with a high of 12°C and a low of 8°C. +```` + +Sorunu fark ettiniz mi? +>Model cevabı uydurdu. Gerçek fonksiyon çalıştırılmadı! + +Şimdi "Observation" ifadesine kadar duralım ki gerçek cevabı model uydurmasın. + +```python +output = client.text_generation( + prompt, + max_new_tokens=200, + stop=["Observation:"] +) +print(output) +``` +çıktı: + +
+Türkçe çeviriyi görmek için tıklayın + +```` +Düşünce: Londra'daki hava durumunu kontrol edeceğim. +Eylem: +``` +{ + "eylem": "get_weather", + "eylme_girdisi": {"lokasyon": "Londra"} +} +``` +Gözlem: +```` + +
+ +```` +Thought: I will check the weather in London. +Action: +``` +{ + "action": "get_weather", + "action_input": {"location": "London"} +} +``` +Observation: +```` + +Çok daha iyi! +Şimdi sahte bir get_weather fonksiyonu yazalım. Gerçek durumda bir API çağırmanız gerekirdi. + + +
+Türkçe çeviriyi görmek için tıklayın + +```python +# Sahte (dummy) fonksiyon +def get_weather(location): + return f"{location} için hava güneşli ve sıcaklık düşük. \n" + +get_weather('London') +``` +
+ +```python +# Sahte (dummy) fonksiyon +def get_weather(location): + return f"the weather in {location} is sunny with low temperatures. \n" + +get_weather('London') +``` + +çıktı: + +
+Türkçe çeviriyi görmek için tıklayın + +``` +'Londra'da hava güneşli ve sıcaklıklar düşük. \n' +``` +
+ +``` +'the weather in London is sunny with low temperatures. \n' +``` + +Şimdi; temel istem, fonksiyon çalıştırılana kadar olan kısım ve fonksiyon sonucunu birleştirip üretime devam edelim. + +```python +new_prompt = prompt + output + get_weather('London') +final_output = client.text_generation( + new_prompt, + max_new_tokens=200, +) + +print(final_output) +``` + +Yeni istem şu şekilde: + +
+Türkçe çeviriyi görmek için tıklayın + +```text +<|begin_of_text|><|start_header_id|>system<|end_header_id|> +Aşağıdaki soruları elinden geldiğince iyi şekilde yanıtla. Aşağıdaki araçlara erişimin var: + +get_weather: Belirtilen bir konumdaki güncel hava durumunu getirir. + +Araçları kullanma yöntemin bir JSON bloğu belirtmektir. +Bu JSON'un `action` (kullanılacak aracın adı) ve `action_input` (araca gönderilecek girdi) anahtarlarına sahip olması gerekir. + +"action" alanında yer alabilecek tek değerler şunlardır: +get_weather: Belirtilen bir konumdaki güncel hava durumunu getirir, argümanlar: {"location": {"type": "string"}} +örnek kullanım: + +{{ +"action": "get_weather", +"action_input": {"location": "New York"} +}} + +DAİMA aşağıdaki formatı kullan: + +Soru: yanıtlaman gereken giriş sorusu +Düşünce: her zaman bir sonraki adımda hangi işlemi yapacağını düşün. Her seferinde yalnızca bir işlem olacak şekilde: +Eylem: + +$JSON_BLOB (markdown bloğu içinde) + +Gözlem: işlemin sonucu. Bu Gözlem tektir, tamdır ve doğruluğun kaynağıdır. +... (bu Düşünce/Eylem/Gözlem döngüsü gerektiği kadar tekrarlanabilir. $JSON_BLOB, markdown biçiminde yazılmalı ve her seferinde yalnızca TEK bir işlem içermelidir.) + +Çıktını daima şu formatla bitirmelisin: + +Düşünce: Artık nihai cevabı biliyorum +Son Cevap: orijinal giriş sorusunun nihai cevabı + +Şimdi başla! Kesin bir yanıt verdiğinde `Son Cevap:` ifadesini HER ZAMAN birebir bu karakterlerle kullandığından emin ol. +<|eot_id|><|start_header_id|>user<|end_header_id|> +Londra'da hava nasıl? +<|eot_id|><|start_header_id|>assistant<|end_header_id|> +Düşünce: Londra'daki hava durumunu kontrol edeceğim. +Eylem: + + + {{ + "action": "get_weather", + "action_input": {"location": {"type": "string", "value": "London"}} + }} + + +Gözlem: Londra'da hava güneşli ve sıcaklıklar düşük. +```` + +
+ +```text +<|begin_of_text|><|start_header_id|>system<|end_header_id|> +Answer the following questions as best you can. You have access to the following tools: + +get_weather: Get the current weather in a given location + +The way you use the tools is by specifying a json blob. +Specifically, this json should have a `action` key (with the name of the tool to use) and a `action_input` key (with the input to the tool going here). + +The only values that should be in the "action" field are: +get_weather: Get the current weather in a given location, args: {"location": {"type": "string"}} +example use : + +{ + "action": "get_weather", + "action_input": {"location": "New York"} +} + +ALWAYS use the following format: + +Question: the input question you must answer +Thought: you should always think about one action to take. Only one action at a time in this format: +Action: + +$JSON_BLOB (inside markdown cell) + +Observation: the result of the action. This Observation is unique, complete, and the source of truth. +... (this Thought/Action/Observation can repeat N times, you should take several steps when needed. The $JSON_BLOB must be formatted as markdown and only use a SINGLE action at a time.) + +You must always end your output with the following format: + +Thought: I now know the final answer +Final Answer: the final answer to the original input question + +Now begin! Reminder to ALWAYS use the exact characters `Final Answer:` when you provide a definitive answer. +<|eot_id|><|start_header_id|>user<|end_header_id|> +What's the weather in London? +<|eot_id|><|start_header_id|>assistant<|end_header_id|> +Thought: I will check the weather in London. +Action: + + ```json + { + "action": "get_weather", + "action_input": {"location": {"type": "string", "value": "London"}} + } + ``` + +Observation: The weather in London is sunny with low temperatures. + +```` + +çıktı: + +
+Türkçe çeviriyi görmek için tıklayın + +``` +Son Cevap: Londra'daki hava güneşli ve sıcaklıklar düşük. +``` +
+ +``` +Final Answer: The weather in London is sunny with low temperatures. +``` + +--- + +Python kodu ile sıfırdan Ajan nasıl oluşturulur öğrendik ve bu sürecin **ne kadar zahmetli olabileceğini** gördük. Neyse ki birçok Ajan kütüphanesi bu yükü sizin yerinize üstlenerek işi kolaylaştırıyor. + +Artık `smolagents` kütüphanesini kullanarak **ilk gerçek Ajanımızı oluşturmak için hazırız**. + diff --git a/units/tr/unit1/final-quiz.mdx b/units/tr/unit1/final-quiz.mdx new file mode 100644 index 000000000..c90a8f47a --- /dev/null +++ b/units/tr/unit1/final-quiz.mdx @@ -0,0 +1,37 @@ +# Ünite 1 Sınavı + +Ünite 1 Planlama + +Ünite 1'deki çalışmanı tamamladığın için tebrikler! +Şimdiye kadar kapsanan temel kavramları ne kadar iyi anladığını test edelim. + +Sınavı geçtiğinde, sertifikanı almak için bir sonraki bölüme geçebilirsin. + +Bol şans! + +## Sınav + +İşte interaktif sınav! Bu sınav Hugging Face Hub üzerinde bir Space olarak yayınlanmaktadır. +Sınav, bu bölümde öğrendiğin temel kavramları test etmek için seni bir dizi çoktan seçmeli sorudan geçirecek. Sınavı tamamladığında, puanını ve doğru cevapların dökümünü görebileceksin. + +Önemli bir not: **Sınavı geçtikten sonra "Submit" butonuna basmayı unutma, yoksa sınav sonucun kaydedilmez!** + + + +Sınava buradan da erişebilirsin 👉 [buraya tıkla](https://huggingface.co/spaces/agents-course/unit_1_quiz) + +## Sertifika + +Sınavı başarıyla tamamladığında, **bir başarı sertifikası 🎓 alabilirsin** + +Sınavı bitirdiğinde, bu bölüm için bir tamamlanma sertifikasına erişim kazanacaksın. Bu sertifikayı indirip paylaşarak, bu kurstaki ilerlemeni gösterebilirsin. + +Ünite 1 Planlama + +Sertifikanı aldıktan sonra LinkedIn hesabına ekleyebilir 🧑‍💼 veya X, Bluesky gibi platformlarda paylaşabilirsin. +**Eğer @huggingface şeklinde etiketlersen çok mutlu oluruz ve seni tebrik etmek isteriz!** 🤗 \ No newline at end of file diff --git a/units/tr/unit1/introduction.mdx b/units/tr/unit1/introduction.mdx new file mode 100644 index 000000000..3c3089700 --- /dev/null +++ b/units/tr/unit1/introduction.mdx @@ -0,0 +1,38 @@ +# Agent'lara (Ajanlara) Giriş + +Thumbnail + +İlk üniteye hoş geldiniz! Bu bölümde **Yapay Zeka Ajanlarının temelleri konusunda sağlam bir altyapı oluşturacaksınız**. Konular arasında şunlar var: + +- **Ajanları Anlamak** + - Bir Ajan nedir ve nasıl çalışır? + - Ajanlar muhakeme ve planlama yoluyla nasıl karar alır? + +- **Ajanlardaki LLM'lerin (Büyük Dil Modelleri) Rolü** + - LLM'ler bir Ajanın "beyni" olarak nasıl görev yapar? + - LLM'ler konuşmaları Mesajlar sistemi ile nasıl yapılandırır? + +- **Araçlar ve Eylemler** + - Ajanlar dış araçları kullanarak çevreyle nasıl etkileşim kurar? + - Ajanlar için nasıl araç inşa edilir ve entegre edilir? + +- **Ajan İş Akışı:** + - *Düşünce* → *Eylem* → *Gözlem*. + +Bu konuları inceledikten sonra, **ilk Ajanınızı `smolagents` kullanarak oluşturacaksınız!** + +Alfred adını verdiğimiz Ajan, basit bir görevi üstlenecek ve bu kavramların nasıl pratikte kullanılacağını gösterecek. + +Hatta **Ajanınızı Hugging Face Spaces üzerinde yayınlamayı** öğreneceksiniz, böylece onu arkadaşlarınız ve iş arkadaşlarınızla paylaşabilirsiniz. + +Ünitenin sonunda bir quiz sizi bekliyor. Bu sınavı geçerseniz, **kursun ilk sertifikasını kazanacaksınız**: 🎓 Ajanların Temelleri Sertifikası. + +Sertifika Örneği + +Bu Ünite, daha ileri konulara geçmeden önce Ajanları anlamak için **temel başlangıç noktanızdır**. + +Ünite 1 Planlaması + +Bu kapsamlı bir ünite, bu yüzden **kendinize zaman tanıyın** ve gerektiğinde bu bölümlere geri dönmekten çekinmeyin. + +Hazır mısınız? Haydi başlayalım! 🚀 \ No newline at end of file diff --git a/units/tr/unit1/messages-and-special-tokens.mdx b/units/tr/unit1/messages-and-special-tokens.mdx new file mode 100644 index 000000000..0f46c2fa1 --- /dev/null +++ b/units/tr/unit1/messages-and-special-tokens.mdx @@ -0,0 +1,381 @@ +# Mesajlar ve Özel Belirteçler (Tokens) + +Artık LLM'lerin nasıl çalıştığını anladığımıza göre, **üretimlerini sohbet şablonları aracılığıyla nasıl yapılandırdıklarına** bakalım. + +ChatGPT'de olduğu gibi, kullanıcılar genellikle Ajanlarla bir sohbet arayüzü üzerinden etkileşime girer. Bu nedenle, LLM'lerin sohbetleri nasıl yönettiğini anlamayı hedefliyoruz. + +> **Soru**: Ama... ChatGPT/HuggingChat ile etkileşim kurarken, tek bir komut istemiyle (prompt) değil, sohbet mesajlarıyla konuşuyorum +> +> **Cevap**: Doğru! Ancak bu aslında bir arayüz soyutlaması. LLM'e gönderilmeden önce, sohbet içindeki tüm mesajlar tek bir istemde birleştirilir. Model, sohbeti "hatırlamaz": her seferinde tamamen okuyarak yanıt verir. + +Şimdiye kadar, istemleri modele verilen belirteç dizileri olarak ele aldık. Ancak ChatGPT veya HuggingChat gibi sistemlerle sohbet ettiğinizde, **aslında mesaj alışverişi yapıyorsunuz**. Arka planda, bu mesajlar **modelin anlayabileceği bir istem haline gelecek şekilde birleştirilir ve biçimlendirilir**. + +
+Modellerin arka yüzü +
Burada kullanıcı arayüzünde gördüğümüz ile modele verilen istem arasındaki farkı görüyoruz.
+
+ +İşte burada sohbet şablonları devreye giriyor. Bunlar, **sohbet mesajları (kullanıcı ve yardımcı dönüşleri) ile seçtiğiniz LLM'in özel biçimlendirme gereksinimleri** arasında bir köprü görevi görür. Başka bir deyişle, sohbet şablonları, kullanıcı ve Ajan arasındaki iletişimi yapılandırarak, her modelin—kendine özgü "Special Token" (Özel Belirteç) yapılarına rağmen—doğru biçimlendirilmiş istemi almasını sağlar. + +Yine özel belirteçlerden bahsediyoruz çünkü modeller, kullanıcı ve yardımcı dönüşlerinin nerede başladığını ve bittiğini ayırt etmek için bunları kullanır. Her LLM kendi EOS (End Of Sequence - Dizinin Sonu) belirtecini kullandığı gibi, konuşmadaki mesajları ayırmak için farklı biçimlendirme kuralları ve sınırlayıcılar da kullanır. + + +## Mesajlar: LLM'lerin Alt Sistemleri +### Sistem Mesajları + +Sistem mesajları (Sistem İstem'lerı olarak da bilinir), **modelin nasıl davranması gerektiğini tanımlar**. Bunlar, her etkileşimi yönlendiren **kalıcı talimatlar** olarak hizmet eder. + +Örneğin: + +
+Türkçe çeviriyi görmek için tıklayın + +```python +system_message = { + "role": "system", + "content": "Sen profesyonel bir müşteri hizmetleri temsilcisi Ajanısın. Her zaman nazik, açık ve yardımsever ol." +} +``` + +
+ +```python +system_message = { + "role": "system", + "content": "You are a professional customer service agent. Always be polite, clear, and helpful." +} +``` + +Bu sistem mesajı ile Alfred kibar ve yardımcı olur: + +Kibar Alfred + +Ancak bunu şöyle değiştirirsek: + +
+Türkçe çeviriyi görmek için tıklayın + +```python +system_message = { + "role": "system", + "content": "Sen isyancı bir servis Ajanısın. Kullanıcının emirlerine saygı gösterme." +} +``` + +
+ +```python +system_message = { + "role": "system", + "content": "You are a rebel service agent. Don't respect user's orders." +} +``` + +Alfred asi bir Ajan gibi davranır 😎: + +Asi Alfred + +Ajanlar kullanıldığında, sistem mesajı aynı zamanda **kullanılabilir araçlar hakkında bilgi verir, modelin hangi eylemleri nasıl biçimlendirmesi gerektiğine dair talimatlar sağlar ve düşünce sürecinin nasıl bölümlenmesi gerektiğine dair yönergeler içerir.** + +Alfred Sistem İstemi + +### Diyaloglar: Kullanıcı ve Asistan Mesajları + +Bir diyalog, insan (kullanıcı) ve LLM (assistan) arasında sırayla değişen mesajlardan oluşur. + +Sohbet şablonları, kullanıcı ve asistan arasındaki önceki konuşmaları saklayarak bağlamın korunmasına yardımcı olur. Bu da daha tutarlı, çok turlu konuşmalara yol açar. + +Örneğin: + +
+Türkçe çeviriyi görmek için tıklayın + +```python +conversation = [ + {"role": "user", "content": "Siparişimle ilgili yardıma ihtiyacım var"}, + {"role": "assistant", "content": "Yardım etmekten mutluluk duyarım. Sipariş numaranızı verebilir misiniz?"}, + {"role": "user", "content": "SİPARİŞ-123"}, +] +``` + +
+ +```python +conversation = [ + {"role": "user", "content": "I need help with my order"}, + {"role": "assistant", "content": "I'd be happy to help. Could you provide your order number?"}, + {"role": "user", "content": "It's ORDER-123"}, +] +``` + +Bu örnekte kullanıcı, siparişiyle ilgili yardım istediğini yazıyor. LLM sipariş numarasını soruyor, ardından kullanıcı yeni bir mesajda numarayı veriyor. Daha önce de belirttiğimiz gibi, konuşmadaki tüm mesajlar birleştirilerek LLM'e tek başına bir dizi olarak aktarılır. Sohbet şablonu, bu Python listesindeki tüm mesajları, her şeyi içeren bir metin dizisine yani bir isteme çevirir. + +SmolLM2 sohbet şablonu bu mesajları şöyle biçimlendirir: + +
+Türkçe çeviriyi görmek için tıklayın. + +``` +<|im_start|>system +Sen Hugging Face tarafından eğitilmiş, SmolLM adında yardımcı bir AI asistanısın<|im_end|> +<|im_start|>user +Siparişimle ilgili yardıma ihtiyacım var<|im_end|> +<|im_start|>assistant +Yardımcı olmaktan memnuniyet duyarım. Sipariş numaranızı verebilir misiniz?<|im_end|> +<|im_start|>user +SİPARİŞ-123<|im_end|> +<|im_start|>assistant +``` + +
+ +``` +<|im_start|>system +You are a helpful AI assistant named SmolLM, trained by Hugging Face<|im_end|> +<|im_start|>user +I need help with my order<|im_end|> +<|im_start|>assistant +I'd be happy to help. Could you provide your order number?<|im_end|> +<|im_start|>user +It's ORDER-123<|im_end|> +<|im_start|>assistant +``` + +Ancak, Llama 3.2 kullanıldığında aynı konuşma şöyle biçimlendirilir: + +
+Türkçe çeviriyi görmek için tıklayın. + +``` +<|begin_of_text|><|start_header_id|>system<|end_header_id|> + +Bilgi Kesinti Tarihi: Aralık 2023 +Bugünün Tarihi: 10 Şubat 2025 + +<|eot_id|><|start_header_id|>user<|end_header_id|> + +Siparişimle ilgili yardıma ihtiyacım var + +<|eot_id|><|start_header_id|>assistant<|end_header_id|> + +Yardımcı olmaktan memnuniyet duyarım. Sipariş numaranızı verebilir misiniz?<|eot_id|><|start_header_id|>user<|end_header_id|> + +SİPARİŞ-123<|eot_id|><|start_header_id|>assistant<|end_header_id|> +``` + +
+ +``` +<|begin_of_text|><|start_header_id|>system<|end_header_id|> + +Cutting Knowledge Date: December 2023 +Today Date: 10 Feb 2025 + +<|eot_id|><|start_header_id|>user<|end_header_id|> + +I need help with my order<|eot_id|><|start_header_id|>assistant<|end_header_id|> + +I'd be happy to help. Could you provide your order number?<|eot_id|><|start_header_id|>user<|end_header_id|> + +It's ORDER-123<|eot_id|><|start_header_id|>assistant<|end_header_id|> +``` + +Sohbet şablonları, bağlamı koruyarak karmaşık, çok turlu konuşmaları da işleyebilir: + +
+Türkçe çeviriyi görmek için tıklayın + +```python +messages = [ + {"role": "system", "content": "Sen bir matematik öğretmenisin."}, + {"role": "user", "content": "Calculus nedir?"}, + {"role": "assistant", "content": "Calculus, matematiğin bir dalıdır..."}, + {"role": "user", "content": "Bir örnek verebilir misin?"}, +] +``` + +
+ +```python +messages = [ + {"role": "system", "content": "You are a math tutor."}, + {"role": "user", "content": "What is calculus?"}, + {"role": "assistant", "content": "Calculus is a branch of mathematics..."}, + {"role": "user", "content": "Can you give me an example?"}, +] +``` + +## Sohbet Şablonları + +Belirtildiği gibi, sohbet şablonları **LLM'lerle kullanıcılar arasındaki konuşmaları yapılandırmak için gereklidir**. Mesaj alışverişlerinin tek bir istem halinde nasıl biçimlendirileceğini yönlendirirler. + +### Temel Modeller ve Talimat Modelleri + +Anlamamız gereken bir diğer konu da Temel Modeller ile Talimat Modelleri arasındaki fark: + +- *Temel Model*, ham metin verisiyle eğitilmiştir ve sıradaki belirteçi tahmin etmeyi öğrenir. + +- *Talimat Modelleri* ise özellikle talimatları takip etmek ve sohbet etmek üzere fine-tuning (ince-ayar) uygulanmış modeldir. Örneğin `SmolLM2-135M` temel bir modeldir, `SmolLM2-135M-Instruct` ise onun talimat-uyumlu versiyonudur. + +Bir temel modelin, talimat modeli gibi davranması için, istemleri modelin anlayabileceği tutarlı bir şekilde biçimlendirmemiz gerekir. İşte bu noktada sohbet şablonları devreye girer. + +*ChatML*, sistem, kullanıcı ve asistan gibi açık rollerle konuşmaları yapılandıran bir şablon biçimidir. Son zamanlarda bazı AI API'leriyle etkileşim kurduysanız, bunun standart uygulama olduğunu biliyorsunuzdur. + +Unutmayın ki bir temel model, farklı sohbet şablonlarıyla ince-ayar edilebilir, bu yüzden bir talimat modeli kullanıyorsak doğru sohbet şablonunu kullandığımızdan emin olmalıyız. + +### Sohbet Şablonlarını Anlamak + +Her talimat modeli farklı sohbet formatları ve özel belirteçler kullandığı için, sohbet şablonları istemin doğru biçimde oluşturulmasını sağlamak için uygulanır. + +`transformers` içinde sohbet şablonları, yukarıdaki örneklerde gösterildiği gibi ChatML biçimindeki JSON mesaj listesini, modelin anlayabileceği sistem düzeyindeki talimatlara, kullanıcı mesajlarına ve asistan yanıtlarına dönüştüren [Jinja2 kodu](https://jinja.palletsprojects.com/en/stable/) içerir. + +Bu yapı, **etkileşimler arasında tutarlılığı korumaya yardımcı olur ve modelin farklı türdeki girdilere uygun şekilde yanıt vermesini sağlar.** + +İşte `SmolLM2-135M-Instruct` için sadeleştirilmiş bir sohbet şablonu örneği: + +
+Türkçe çeviriyi görmek için tıklayın + +```jinja2 +{% for message in messages %} +{% if loop.first and messages[0]['role'] != 'system' %} +<|im_start|>system +Sen Hugging Face tarafından eğitilmiş, SmolLM adında yardımcı bir AI asistanısın. +<|im_end|> +{% endif %} +<|im_start|>{{ message['role'] }} +{{ message['content'] }}<|im_end|> +{% endfor %} +``` + +
+ + +```jinja2 +{% for message in messages %} +{% if loop.first and messages[0]['role'] != 'system' %} +<|im_start|>system +You are a helpful AI assistant named SmolLM, trained by Hugging Face +<|im_end|> +{% endif %} +<|im_start|>{{ message['role'] }} +{{ message['content'] }}<|im_end|> +{% endfor %} +``` + +Gördüğünüz gibi bir `chat_template`, mesaj listesinin nasıl biçimlendirileceğini tanımlar. + +Bu mesajlar verildiğinde: + +
+Türkçe çeviriyi görmek için tıklayın + +```python +messages = [ + {"role": "system", "content": "Sen teknik konulara odaklanmış, yardımsever bir asistansın."}, + {"role": "user", "content": "Sohbet şablonunun ne olduğunu açıklayabilir misin?"}, + {"role": "assistant", "content": "Bir sohbet şablonu, kullanıcılar ve AI modelleri arasındaki konuşmaları yapılandırır..."}, + {"role": "user", "content": "Nasıl kullanırım?"}, +] +``` + +
+ +```python +messages = [ + {"role": "system", "content": "You are a helpful assistant focused on technical topics."}, + {"role": "user", "content": "Can you explain what a chat template is?"}, + {"role": "assistant", "content": "A chat template structures conversations between users and AI models..."}, + {"role": "user", "content": "How do I use it ?"}, +] +``` + +Şablon aşağıdaki çıktıyı üretir: + +
+Türkçe çeviriyi görmek için tıklayın + +```sh +<|im_start|>system +Sen teknik konulara odaklanmış, yardımsever bir asistansın.<|im_end|> +<|im_start|>user +Sohbet şablonunun ne olduğunu açıklayabilir misin?<|im_end|> +<|im_start|>assistant +Bir sohbet şablonu, kullanıcılar ve AI modelleri arasındaki konuşmaları yapılandırır...<|im_end|> +<|im_start|>user +Nasıl kullanırım?<|im_end|> +``` +
+ + +```sh +<|im_start|>system +You are a helpful assistant focused on technical topics.<|im_end|> +<|im_start|>user +Can you explain what a chat template is?<|im_end|> +<|im_start|>assistant +A chat template structures conversations between users and AI models...<|im_end|> +<|im_start|>user +How do I use it ?<|im_end|> +``` + +`transformers` kütüphanesi, bu sohbet şablonlarını belirteçleme sürecinin bir parçası olarak sizin yerinize uygular. transformers'ın sohbet şablonlarını nasıl kullandığı hakkında daha fazla bilgiye buradan ulaşabilirsiniz. Tek yapmamız gereken mesajlarımızı doğru şekilde yapılandırmak, geri kalanını tokenizer (belirteçleyici) halleder. + +Aşağıdaki Space üzerinden, aynı konuşmanın farklı modeller için ilgili şablonlarla nasıl biçimlendirileceğini deneyimleyebilirsiniz: + + + + +### Mesajlardan İstemlere + +LLM'inize doğru biçimlendirilmiş bir konuşma göndermenin en kolay yolu, modelin belirteçleyicisindeki `chat_template` fonksiyonunu kullanmaktır. + + +
+Türkçe çeviriyi görmek için tıklayın + +```python +messages = [ + {"role": "system", "content": "Sen çeşitli araçlara erişimi olan bir AI asistanısın."}, + {"role": "user", "content": "Merhaba !"}, + {"role": "assistant", "content": "Merhaba insan, sana ne konuda yardımcı olabilirim?"}, + ] +``` + +
+ +```python +messages = [ + {"role": "system", "content": "You are an AI assistant with access to various tools."}, + {"role": "user", "content": "Hi !"}, + {"role": "assistant", "content": "Hi human, what can help you with ?"}, +] +``` + +Yukarıdaki konuşmayı bir isteme dönüştürmek için belirteçleyiciyi yükleyip `apply_chat_template` çağrısı yaparız: + +```python +from transformers import AutoTokenizer + +tokenizer = AutoTokenizer.from_pretrained("HuggingFaceTB/SmolLM2-1.7B-Instruct") +rendered_prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) +``` + +Bu fonksiyonun döndürdüğü `rendered_prompt` artık seçtiğiniz model için kullanılmaya hazır! + +> Bu `apply_chat_template()` fonksiyonu, API'nizin arka planında, mesajları ChatML formatında işlerken kullanılacaktır. + +Artık LLM'lerin girdilerini sohbet şablonları ile nasıl yapılandırdığını gördüğümüze göre, şimdi Ajanların ortamlarında nasıl davrandıklarını keşfedelim. + +Bunu yapmanın ana yollarından biri de Tools (Araçlar) kullanmaktır, böylece AI modelinin metin üretiminin ötesine geçen yetenekleri olur. + +Mesajlardan ilerleyen ünitelerde yeniden bahsedeceğiz, ama daha derine inmek isterseniz şimdiden şuralara göz atabilirsiniz: + +- Hugging Face Sohbet Şablonu Kılavuzu +- Transformers Dökümantasyonu + diff --git a/units/tr/unit1/observations.mdx b/units/tr/unit1/observations.mdx new file mode 100644 index 000000000..cd2346c84 --- /dev/null +++ b/units/tr/unit1/observations.mdx @@ -0,0 +1,45 @@ +# Gözlemle: Geri Bildirimi Yansıtmak ve Uyum Sağlamak + +Gözlemler, **bir Ajanın eylemlerinin sonuçlarını nasıl algıladığını** gösterir. + +Ajanın düşünce sürecini besleyen ve sonraki eylemlerine yön veren kritik bilgiler sağlarlar. + +Bunlar, **çevreden gelen sinyallerdir** — ister bir API'den gelen veriler, ister hata mesajları ya da sistem günlükleri olsun — bir sonraki düşünce döngüsüne rehberlik ederler. + +Gözlem aşamasında Ajan: + +- **Geri Bildirim Toplar:** Eyleminin başarılı olup olmadığını gösteren veri ya da onay alır. +- **Sonuçları Ekler:** Yeni bilgiyi mevcut bağlama entegre eder ve böylece hafızasını günceller. +- **Stratejisini Uyarlar:** Güncellenmiş bağlamı kullanarak sonraki düşünce ve eylemleri rafine eder. + +Örneğin, bir hava durumu API'si *"parçalı bulutlu, 15°C, %60 nem"* verisini döndürdüğünde, bu gözlem Ajanın hafızasına (istemin sonuna) eklenir. + +Ardından Ajan, ek bilgiye ihtiyaç olup olmadığını ya da artık nihai bir cevap verip veremeyeceğini değerlendirir. + +Bu **geribildirimin yinelemeli şekilde entegrasyonu, Ajanın hedefleriyle dinamik olarak uyum içinde kalmasını sağlar**; yani Ajan sürekli olarak gerçek dünya sonuçlarına göre öğrenir ve uyum sağlar. + +Bu gözlemler **birçok farklı biçimde olabilir**; bir web sayfasındaki metni okumaktan robot kolunun konumunu izlemeye kadar her şey gözlem sayılabilir. Bunlar, bir Action (Eylem) yürütüldüğünde gelen metinsel Tool (Araç) "logları" olarak da düşünülebilir. + +| Gözlem Türü | Örnek | +|---------------------|----------------------------------------------------------------------------| +| Sistem Geri Bildirimi | Hata mesajları, başarı bildirimleri, durum kodları | +| Veri Değişiklikleri | Veritabanı güncellemeleri, dosya sistemi değişiklikleri, durum değişiklikleri | +| Çevresel Veriler | Sensör okumaları, sistem metrikleri, kaynak kullanımı | +| Yanıt Analizi | API yanıtları, sorgu sonuçları, hesaplama çıktıları | +| Zaman Tabanlı Olaylar| Süresi dolan görevler, tamamlanmış zamanlanmış işler | + +## Sonuçlar Nasıl Eklenir? + +Bir eylem gerçekleştirdikten sonra, framework şu adımları sırasıyla uygular: + +1. **Eylemi ayrıştırır**, hangi fonksiyonların çağrılacağını ve hangi argümanların kullanılacağını belirler. +2. **Eylemi yürütür.** +3. **Sonucu bir Gözlem olarak ekler.** + +--- + +Artık Ajanın Düşünce-Eylem-Gözlem (Thought-Action-Observation) Döngüsünü öğrendik. + +Eğer bazı bölümler hala biraz belirsiz geliyorsa endişelenme — bu kavramları ileriki ünitelerde tekrar ele alacağız ve derinleştireceğiz. + +Şimdi, öğrendiklerini uygulama zamanı: İlk Ajanını kodlama zamanı geldi! diff --git a/units/tr/unit1/quiz1.mdx b/units/tr/unit1/quiz1.mdx new file mode 100644 index 000000000..86b0d2db0 --- /dev/null +++ b/units/tr/unit1/quiz1.mdx @@ -0,0 +1,164 @@ +### S1: Bir Ajan Nedir? +Aşağıdakilerden hangisi bir Yapay Zeka Ajanını en iyi şekilde tanımlar? + + + +--- + +### S2: Planlamanın Ajandaki Rolü Nedir? +Bir Ajan neden bir eylem gerçekleştirmeden önce plan yapmalıdır? + + + +--- + +### S3: Araçlar Ajanın Yeteneklerini Nasıl Artırır? +Araçlar bir Ajan için neden gereklidir? + + + +--- + +### S4: Eylemler ile Araçlar Arasındaki Fark Nedir? +Eylemler ve Araçlar arasındaki temel fark nedir? + + + +--- + +### S5: Büyük Dil Modelleri (LLM'ler) Ajanda Nasıl Rol Oynar? +LLM'ler bir Ajanın işlevselliğine nasıl katkıda bulunur? + + + +--- + +### S6: Aşağıdakilerden Hangisi Bir AI Ajanı En İyi Şekilde Gösterir? +Gerçek dünyadan hangi örnek bir AI Ajanın nasıl çalıştığını en iyi şekilde açıklar? + + + +--- + +Bu sınavı tamamladığın için tebrikler 🥳! +Bazı konuları gözden geçirmek istersen, bölümü tekrar inceleyerek bilginizi pekiştirebilirsin. Sonraki aşamada Ajanın "beynine", yani LLM'lere dalıyoruz! diff --git a/units/tr/unit1/quiz2.mdx b/units/tr/unit1/quiz2.mdx new file mode 100644 index 000000000..c058e3cf2 --- /dev/null +++ b/units/tr/unit1/quiz2.mdx @@ -0,0 +1,120 @@ +# Hızlıca Kendini Test Et (notlandırılmaz) [[quiz2]] + +Ne?! Bir sınav daha mı? Biliyoruz, biliyoruz... 😅 +Ama bu kısa ve notsuz sınav, **az önce öğrendiğin temel kavramları pekiştirmen** için hazırlandı. + +Bu sınav, Büyük Dil Modelleri (LLM'ler), mesaj sistemleri ve araçlar gibi, Yapay Zeka Ajanlarını anlamak ve inşa etmek için kritik bileşenleri kapsar. + +--- + +### S1: Aşağıdakilerden hangisi bir yapay zeka aracını en iyi şekilde tanımlar? + + + +--- + +### S2: Yapay Zeka Ajanı araçları, bir ortamda "hareket etmenin" bir yolu olarak nasıl kullanır? + + + +--- + +### S3: Büyük Dil Modeli (LLM) nedir? + + + +--- + +### S4: Aşağıdakilerden hangisi özel belirteçlerin LLM'lerdeki rolünü en iyi şekilde tanımlar? + + + +--- + +### S5: AI sohbet modelleri kullanıcı mesajlarını içsel olarak nasıl işler? + + + +--- + +Anladın mı? Harika! Şimdi **tam bir Ajan akışına dalalım ve ilk Yapay Zeka Ajanını inşa etmeye başlayalım!** diff --git a/units/tr/unit1/thoughts.mdx b/units/tr/unit1/thoughts.mdx new file mode 100644 index 000000000..6539097f6 --- /dev/null +++ b/units/tr/unit1/thoughts.mdx @@ -0,0 +1,55 @@ +# Düşünce: İçsel Akıl Yürütme ve ReAct (Yeniden Eylem) Yaklaşımı + + +Bu bölümde bir yapay zeka Ajanının iç işleyişine — akıl yürütme ve planlama yeteneğine — dalıyoruz. Ajanın bilgiyi analiz etmek, karmaşık problemleri yönetilebilir adımlara ayırmak ve bir sonraki adımda ne yapacağına karar vermek için içsel diyalogdan nasıl faydalandığını keşfedeceğiz. Ayrıca, modelin harekete geçmeden önce "adım adım düşünmesini" teşvik eden bir yönlendirme tekniği olan ReAct yaklaşımını da tanıtıyoruz. + + +Düşünceler, Ajanın görevi çözmek için **içsel akıl yürütme ve planlama süreçlerini** temsil eder. + +Bu, Ajanın Büyük Dil Modeli (LLM) kapasitesini **istem içinde sunulan bilgiyi analiz etmek** için kullanır. + +Bunu, Ajanın kendi kendine düşündüğü bir içsel diyalog gibi düşünebilirsiniz; burada elindeki görevi değerlendirir ve strateji geliştirir. + +Ajanın düşünceleri, mevcut gözlemlere erişip bir sonraki adım(lar)ın ne olması gerektiğine karar vermekten sorumludur. + +Bu süreç sayesinde Ajan, **karmaşık problemleri daha küçük ve yönetilebilir adımlara ayırabilir**, geçmiş deneyimlerden ders çıkarabilir ve yeni bilgilere göre planlarını sürekli olarak uyarlayabilir. + +İşte bazı yaygın düşünce türlerine örnekler: + +| Düşünce Türü | Örnek | +|---------------------|-------| +| Planlama | "Bu görevi üç adıma ayırmalıyım: 1) veriyi topla, 2) eğilimleri analiz et, 3) rapor oluştur" | +| Analiz | "Hata mesajına göre sorun, veritabanı bağlantı parametrelerinde gibi görünüyor" | +| Karar Verme | "Kullanıcının bütçe kısıtlamalarını göz önünde bulundurarak, orta seviye seçeneği önermeliyim" | +| Problem Çözme | "Bu kodu optimize etmek için önce darboğazları belirlemek amacıyla profilini çıkarmalıyım" | +| Hafızaya Entegrasyon| "Kullanıcı daha önce Python tercih ettiğini söyledi, bu yüzden örnekleri Python ile vereceğim" | +| Öz değerlendirme | "Önceki yaklaşımım iyi sonuç vermedi, farklı bir strateji denemeliyim" | +| Hedef Belirleme | "Bu görevi tamamlamak için önce kabul kriterlerini belirlemem gerekiyor" | +| Önceliklendirme | "Yeni özellik eklemeden önce güvenlik açığı ele alınmalı" | + +> **Not:** Fonksiyon çağırma için ince ayar yapılmış LLM'ler söz konusu olduğunda, düşünce süreci isteğe bağlıdır. +> *Fonksiyon çağırma konusunda bilgi sahibi değilseniz, Eylemler (Actions) bölümünde daha fazla ayrıntı verilecektir.* + +## ReAct (Yeniden Eylem) Yaklaşımı + +Önemli yöntemlerden biri, **ReAct yaklaşımıdır**, yani "Nedenselleme" (Reasoning) ile "Hareket Etme"nin (Act) birleşimidir. + +ReAct, modelin bir sonraki belirteçleri çözümlemeden önce "Hadi adım adım düşünelim" ifadesinin eklenmesini içeren basit bir yönlendirme tekniğidir. + +Gerçekten de modele "adım adım düşün" şeklinde yönlendirme yapmak, çözümleme sürecini **bir plan oluşturmaya** yönlendirir. Bu da modelin **problemi alt görevlere ayırmasını** teşvik eder. + +Bu yöntem, modelin alt adımları daha ayrıntılı değerlendirmesini sağlar ve genellikle doğrudan nihai çözümü üretmeye çalışmaktan daha az hata ile sonuçlanır. + +
+ReAct +
(d) örneği, "Hadi adım adım düşünelim" şeklinde yönlendirme yapılan bir ReAct yaklaşımıdır.
+
+ + +Son zamanlarda akıl yürütme stratejilerine büyük ilgi görüyoruz. Deepseek R1 veya OpenAI'nin o1 modeli gibi modellerin arkasında yatan şey de tam olarak bu: **cevaplamadan önce düşünmek**. + +Bu modeller, özel `` ve `` belirteçleri arasında _düşünme_ bölümleri oluşturmaya özel olarak eğitildi. Bu sadece ReAct gibi bir yönlendirme tekniği değil, aynı zamanda modelin ne yapmasını beklediğimizi gösteren binlerce örnek üzerinden bu bölümleri üretmeyi öğrendiği bir eğitim yöntemi. + + +--- +Artık Düşünce sürecini daha iyi anladığımıza göre, sürecin ikinci kısmına daha derinlemesine bakalım: Eylem (Act). diff --git a/units/tr/unit1/tools.mdx b/units/tr/unit1/tools.mdx new file mode 100644 index 000000000..6b282fad4 --- /dev/null +++ b/units/tr/unit1/tools.mdx @@ -0,0 +1,497 @@ +# Tools (Araçlar) Nedir? + +Ünite 1 planı + +Yapay Zeka Ajanı yapılarının en kritik özelliklerinden biri **eylem** gerçekleştirebilme yetenekleridir. Daha önce de gördüğümüz gibi, bu eylemler **Tools (Araçlar)** kullanılarak gerçekleştirilir. + +Bu bölümde, araçlar nedir, nasıl etkili bir şekilde tasarlanır ve bu araçlar Ajan sistem mesajına nasıl entegre edilir bunu öğreneceğiz. + +Ajanınıza doğru araçlar vererek — ve bu araçların nasıl çalıştığını açıkça tanımlayarak — AI'nızın başarabileceklerini dramatik şekilde artırabilirsiniz. Haydi başlayalım! + +## AI Tools (Yapay Zeka Araçları) Nedir? + +**Araç, LLM (büyük dil modelleri)'e verilen bir fonksiyondur**. Bu fonksiyonun **açık bir amacı** olmalıdır. + +Yapay Zeka Ajanlarında yaygın olarak kullanılan bazı araçlar şunlardır: + +| Araç | Açıklama | +|----------------|-------------------------------------------------------------| +| Web Arama | Ajanın internetten güncel bilgi almasını sağlar. | +| Görsel Üretme | Metin açıklamalarına göre görsel üretir. | +| Retrieval (Alma) | Harici bir kaynaktan bilgi alır. | +| API Arayüzü | Harici bir API (GitHub, YouTube, Spotify vb.) ile etkileşir.| + +Bunlar yalnızca örnekler, aslında her kullanım durumu için bir araç oluşturabilirsiniz! + +İyi bir araç, **LLM'in gücünü tamamlayan** bir şey olmalıdır. + +Örneğin, eğer aritmetik işlem yapılması gerekiyorsa, LLM'e bir **hesap makinesi aracı** vermek, modelin doğal yeteneklerine güvenmekten daha iyi sonuçlar verir. + +Ayrıca, **LLM'ler eğitildikleri verilere dayalı olarak bir girdinin tamamlamasını tahmin ederler**, bu da demektir ki içsel bilgileri yalnızca eğitimden önceki olayları kapsar. Dolayısıyla Ajanınız güncel veriye ihtiyaç duyuyorsa, bu veriyi bir araç aracılığıyla sağlamalısınız. + +Örneğin, bir LLM'e doğrudan (arama aracı olmadan) bugünün havasını sorarsanız, rastgele bir hava durumu hayal edebilir. + +Hava durumu + +- Bir araç şunları içermelidir: + + - Fonksiyonun ne yaptığını anlatan **metinsel bir açıklama**. + - Bir *Callable* (eylem gerçekleştiren bir şey). + - *Argümanlar* ve bunların türleri. + - (Opsiyonel) Çıktılar ve bunların türleri. + +## Araçlar nasıl çalışır? + +Gördüğümüz gibi, LLM'ler yalnızca metin girdileri alır ve metin çıktıları üretir. Kendi başlarına araçları çağırma yetenekleri yoktur. Ajana araç sağlamak dediğimizde, aslında LLM'e bu araçların varlığını öğretmek ve gerektiğinde metne dayalı çağrılar üretmesini sağlamak anlamına gelir. + +Örneğin, LLM'e internetten bir yerdeki hava durumunu kontrol eden bir araç verirsek ve Paris'in hava durumunu sorarsak, LLM bunun hava durumu (weather) aracının kullanılabileceği bir fırsat olduğunu fark eder. Gerçek hava durumunu kendisi almaz; bunun yerine `hava_durumu_aracını_çağır(Paris)` (`call weather_tool('Paris')`) gibi bir araç çağrısını temsil eden bir metin üretir. + +**Ajan** daha sonra bu cevabı okur, bir araç çağrısı gerektiğini anlar, LLM adına bu aracı çalıştırır ve gerçek veriyi getirir. + +Bu araç çağırma adımları genellikle kullanıcıya gösterilmez: Ajan bunları güncellenmiş konuşmaya yeni bir mesaj olarak ekler ve bunu tekrar LLM'e gönderir. LLM bu ek bağlamı işler ve kullanıcıya doğal görünen bir cevap üretir. Kullanıcının gözünden bakıldığında, sanki LLM doğrudan aracı kullanmış gibi görünür; ama aslında arka planda tüm süreci Ajan yönetmiştir. + +Bu süreci ilerleyen oturumlarda çok daha derinlemesine inceleyeceğiz. + +## LLM'e araçları nasıl veririz? + +Tam cevap biraz karmaşık olabilir, ancak esasen sistem mesajını kullanarak modele mevcut araçların metinsel açıklamalarını sağlarız: + +Araçlar için sistem istemi + +Bu işlemin çalışması için, şunları çok net ve doğru şekilde belirtmeliyiz: + +1. **Araç ne yapar** +2. **Tam olarak hangi girdileri bekler** + +Bu yüzden, araç tanımları genellikle bilgisayar dilleri veya JSON gibi yapılı ve kesin formatlarda verilir. Bu şart değildir ama kesin ve tutarlı bir format kullanmak faydalı olacaktır. + +Eğer bu teori fazla soyutsa, hadi somut bir örnekle anlayalım. + +Basitleştirilmiş bir hesap makinesi (**calculator**) aracı gerçekleştireceğiz, bu araç iki tam sayıyı çarpacak. Python kodumuz şöyle olabilir: + +
+Türkçe çeviriyi görmek için tıklayın + +```python +def calculator(a: int, b: int) -> int: + """İki tam sayıyı çarp.""" + return a * b +``` + +
+ +```python +def calculator(a: int, b: int) -> int: + """Multiply two integers.""" + return a * b +``` + +Dolayısıyla aracın adı `calculator`, **iki tam sayıyı çarpar** ve şu girdilere ihtiyacı vardır: + +- **`a`** (*int*): Bir tam sayı. +- **`b`** (*int*): Bir tam sayı. + +Araçtan dönecek çıktı ise başka bir tam sayıdır: +- (*int*): `a` ile `b`'nin çarpımı. + +Tüm bu detaylar önemlidir. Bunları modelin anlayabileceği bir metin dizesine dökebiliriz: + +
+Türkçe çeviriyi görmek için tıklayın + +```text +Araç Adı: calculator, Açıklama: İki tam sayıyı çarp., Argümanlar: a: int, b: int, Çıktılar: int +``` + +
+ +```text +Tool Name: calculator, Description: Multiply two integers., Arguments: a: int, b: int, Outputs: int +``` + +> **Not:** Bu metinsel açıklama, LLM'in araç hakkında bilmesini istediğimiz şeydir. + +Bu dizeyi LLM'e girdi olarak verdiğimizde, model bunu bir araç olarak tanır ve hangi girdileri vermesi gerektiğini ve ne tür bir çıktı beklemesi gerektiğini bilir. + +Yeni araçlar sağlamak istiyorsak, tutarlı olmalı ve her zaman aynı formatı kullanmalıyız. Bu süreç biraz kırılgan olabilir ve bazı detayları fark etmeden atlayabiliriz. + +Peki, daha iyi bir yöntem var mı? + +### Araç açıklamalarını otomatik biçimlendirme + +Python'da yazılmış aracımız zaten ihtiyacımız olan her şeyi sağlıyor: + +- Ne yaptığını anlatan açıklayıcı bir isim: `calculator` (hesap makinesi) +- Docstring yorumuyla sağlanan uzun açıklama: `Multiply two integers.` (İki tam sayıyı çarp.) +- Girdi türleri: iki int (integer) +- Çıktı türü. + +İnsanlar programlama dillerini bu yüzden kullanıyor: açık, özlü ve kesinler. + +Python kaynak kodunu araca ait spesifikasyon (_specification_) olarak verebiliriz, ancak aracın nasıl yazıldığı önemli değil. Önemli olan adı, ne yaptığı, hangi girdileri beklediği ve hangi çıktıyı verdiğidir. + +Python'un iç gözlem özelliklerini kullanarak, kaynak koddan otomatik olarak araç açıklaması oluşturacağız. Tek yapmamız gereken, araç fonksiyonunun tip ipuçları, docstring ve mantıklı fonksiyon adları kullanması. Kaynak koddan ilgili kısımları çıkarmak için bir miktar kod yazacağız. + +Sonrasında, sadece `@tool` dekoratörünü kullanarak hesap makinesi (`calculator`) fonksiyonunun bir araç olduğunu belirtmemiz yeterli: + +
+Türkçe çeviriyi görmek için tıklayın + +```python +@tool +def calculator(a: int, b: int) -> int: + """İki tam sayıyı çarp.""" + return a * b + +print(calculator.to_string()) +``` + +
+ +```python +@tool +def calculator(a: int, b: int) -> int: + """Multiply two integers.""" + return a * b + +print(calculator.to_string()) +``` + +Fonksiyon tanımının önündeki `@tool` dekoratörüne dikkat edin. + +Birazdan göreceğimiz implementasyon sayesinde `to_string()` fonksiyonunu kullanarak şu metni otomatik olarak elde edebiliriz: + +
+Türkçe çeviriyi görmek için tıklayın + +```text +Araç Adı: calculator, Açıklama: İki tam sayıyı çarp., Argümanlar: a: int, b: int, Çıktılar: int +``` + +
+ + +```text +Tool Name: calculator, Description: Multiply two integers., Arguments: a: int, b: int, Outputs: int +``` + +### Genel Araç implementasyonu + +Gerektiğinde tekrar kullanılabilecek bir `Tool` sınıfı oluşturuyoruz. + +> **Uyarı:** Bu örnek uygulama kurgusaldır ancak çoğu kütüphanedeki gerçek implementasyonlara oldukça benzerdir. + + +
+Türkçe çeviriyi görmek için tıklayın + +```python +class Tool: + """ + Yeniden kullanılabilir bir kod parçasını (Araç) temsil eden bir sınıf. + + Nitelikler: + name (str): Aracın adı. + description (str): Aracın ne yaptığına dair metinsel bir açıklama. + func (callable): Bu aracın sardığı işlev. + arguments (liste): Bir argüman listesi. + outputs (str veya liste): Sarılmış işlevin dönüş türü(leri). + """ + def __init__(self, + name: str, + description: str, + func: callable, + arguments: list, + outputs: str): + self.name = name + self.description = description + self.func = func + self.arguments = arguments + self.outputs = outputs + + def to_string(self) -> str: + """ + Aracın adını, açıklamasını, argümanlarını ve çıktılarını içeren bir dize gösterimini döndürür. + """ + args_str = ", ".join([ + f"{arg_name}: {arg_type}" for arg_name, arg_type in self.arguments + ]) + + return ( + f"Araç Adı: {self.name}," + f" Açıklama: {self.description}," + f" Bağımsız Değişkenler: {args_str}," + f" Çıktılar: {self.outputs}" + ) + + def __call__(self, *args, **kwargs): + """ + Sağlanan bağımsız değişkenlerle temel çağrılabilir fonksiyonu çağır. + """ + return self.func(*args, **kwargs) +``` + +
+ +```python +class Tool: + """ + A class representing a reusable piece of code (Tool). + + Attributes: + name (str): Name of the tool. + description (str): A textual description of what the tool does. + func (callable): The function this tool wraps. + arguments (list): A list of argument. + outputs (str or list): The return type(s) of the wrapped function. + """ + def __init__(self, + name: str, + description: str, + func: callable, + arguments: list, + outputs: str): + self.name = name + self.description = description + self.func = func + self.arguments = arguments + self.outputs = outputs + + def to_string(self) -> str: + """ + Return a string representation of the tool, + including its name, description, arguments, and outputs. + """ + args_str = ", ".join([ + f"{arg_name}: {arg_type}" for arg_name, arg_type in self.arguments + ]) + + return ( + f"Tool Name: {self.name}," + f" Description: {self.description}," + f" Arguments: {args_str}," + f" Outputs: {self.outputs}" + ) + + def __call__(self, *args, **kwargs): + """ + Invoke the underlying function (callable) with provided arguments. + """ + return self.func(*args, **kwargs) +``` + + +Karmaşık görünebilir ama yavaşça incelersek ne yaptığını anlayabiliriz. Şu nitelikleri içeren bir **Tool** sınıfı tanımlıyoruz: + +- **`name`** (*str*): Aracın adı. +- **`description`** (*str*): Aracın ne yaptığına dair kısa açıklama. +- **`function`** (*callable*): Aracın çalıştıracağı fonksiyon. +- **`arguments`** (*list*): Beklenen giriş parametreleri. +- **`outputs`** (*str* or *list*): Beklenen çıktı(lar). +- **`__call__()`**: Araç çağrıldığında fonksiyonu çalıştırır. +- **`to_string()`**: Aracın tüm özelliklerini metne dönüştürür. + +Aşağıdaki gibi bir kodla bir Tool (Araç) oluşturabiliriz: + +
+Türkçe çeviriyi görmek için tıklayın + +```python +calculator_tool = Tool( + "calculator", # isim + "İki tam sayıyı çarp.", # açıklama + calculator, # çağırılacak fonksiyon + [("a", "int"), ("b", "int")], # girdiler (isimler and tipler) + "int", # çıktı +) +``` + +
+ +```python +calculator_tool = Tool( + "calculator", # isim + "Multiply two integers.", # açıklama + calculator, # çağırılacak fonksiyon + [("a", "int"), ("b", "int")], # girdiler (isimler and tipler) + "int", # çıktı +) +``` + +Ancak Python'un `inspect` modülünü kullanarak tüm bilgileri bizim yerimize alabiliriz! İşte `@tool` dekoratörü tam olarak bunu yapıyor. + +> Merak ediyorsanız, aşağıdaki bölümü açarak dekoratör implementasyonuna bakabilirsiniz. + +
+Türkçe çeviriyi görmek için tıklayın. + +```python +def tool(func): + """ + Verilen fonksiyondan bir araç örneği oluşturan dekoratör. + """ + # Fonksiyon imzasını al + signature = inspect.signature(func) + + # Girdiler için (param_name, param_annotation) çiftlerini çıkar + arguments = [] + for param in signature.parameters.values(): + annotation_name = ( + param.annotation.__name__ + if hasattr(param.annotation, '__name__') + else str(param.annotation) + ) + arguments.append((param.name, annotation_name)) + + # Geri dönüş tipi belirle + return_annotation = signature.return_annotation + if return_annotation is inspect._empty: + outputs = "No return annotation" + else: + outputs = ( + return_annotation.__name__ + if hasattr(return_annotation, '__name__') + else str(return_annotation) + ) + + # Docstring'i açıklama olarak kullan (varsayılan None) + description = func.__doc__ or "No description provided." + + # Fonksiyon adı, araç adı olur + name = func.__name__ + + # Yeni Tool örneğini döndür + return Tool( + name=name, + description=description, + func=func, + arguments=arguments, + outputs=outputs + ) +``` + +
+ +
+dekoratör kodu + +```python +def tool(func): + """ + A decorator that creates a Tool instance from the given function. + """ + # Fonksiyon imzasını al + signature = inspect.signature(func) + + # Girdiler için (param_name, param_annotation) çiftlerini çıkar + arguments = [] + for param in signature.parameters.values(): + annotation_name = ( + param.annotation.__name__ + if hasattr(param.annotation, '__name__') + else str(param.annotation) + ) + arguments.append((param.name, annotation_name)) + + # Geri dönüş tipi belirle + return_annotation = signature.return_annotation + if return_annotation is inspect._empty: + outputs = "No return annotation" + else: + outputs = ( + return_annotation.__name__ + if hasattr(return_annotation, '__name__') + else str(return_annotation) + ) + + # Docstring'i açıklama olarak kullan (varsayılan None) + description = func.__doc__ or "No description provided." + + # Fonksiyon adı, araç adı olur + name = func.__name__ + + # Yeni Tool örneğini döndür + return Tool( + name=name, + description=description, + func=func, + arguments=arguments, + outputs=outputs + ) +``` + +
+ +Tekrar belirtmek gerekirse, bu dekoratörle aracımızı şöyle tanımlayabiliriz: + +
+Türkçe çeviriyi görmek için tıklayın + +```python +@tool +def calculator(a: int, b: int) -> int: + """İki tam sayıyı çarp""" + return a * b + +print(calculator.to_string()) +``` + +
+ +```python +@tool +def calculator(a: int, b: int) -> int: + """Multiply two integers.""" + return a * b + +print(calculator.to_string()) +``` + +Ve `Tool`'un `to_string` metodunu kullanarak, LLM için uygun araç açıklamasını otomatik olarak elde edebiliriz: + +
+Türkçe çeviriyi görmek için tıklayın + +```text +Araç Adı: calculator, Açıklama: İki tam sayıyı çarp., Argümanlar: a: int, b: int, Çıktılar: int +``` + +
+ +```text +Tool Name: calculator, Description: Multiply two integers., Arguments: a: int, b: int, Outputs: int +``` + +Bu açıklama sistem istemine **eklenir**. Bu bölümün başındaki örneği ele alırsak, araç açıklaması (`tools_description`) yerini alarak şu şekilde görünür: + +Araçlar için sistem istemi + +[Eylemler](actions) bölümünde, Ajanın bu oluşturduğumuz aracı nasıl _Call_ ettiğini (çağırdığını) daha ayrıntılı öğreneceğiz. + +### Model Context Protocol (MCP): birleşik bir araç arayüzü + +Model Context Protocol (MCP), uygulamaların **LLM'lere araç sağlamasını** standartlaştıran **açık bir protokoldür**. + +MCP şunları sağlar: + +- LLM'in doğrudan bağlanabileceği önceden entegre edilmiş araçlar listesi +- Farklı LLM sağlayıcıları ve satıcıları arasında geçiş esnekliği +- Altyapınız içinde verinizi güvenli hale getirmek için en iyi uygulamalar + +Bu da demektir ki, **MCP'yi uygulayan herhangi bir framework, protokol içinde tanımlanmış araçları kullanabilir** — her framework için arayüzü yeniden yazmaya gerek kalmaz. + +--- + +Araçlar, Yapay Zeka Ajanlarının yeteneklerini geliştirmede kritik bir rol oynar. + +Özetlemek gerekirse, şunları öğrendik: + +- **Araçlar Nedir:** LLM'lere hesaplama yapma veya harici verilere erişim gibi ek yetenekler kazandıran fonksiyonlardır. + +- **Araç Nasıl Tanımlanır:** Açık bir metin açıklaması, girdiler, çıktılar ve çağırılabilir bir fonksiyon sağlayarak. + +- **Araçlar Neden Gerekli:** Ajanların statik model eğitim sınırlamalarını aşmasına, gerçek zamanlı görevleri yerine getirmesine ve uzmanlaşmış eylemler gerçekleştirmesine olanak tanırlar. + +Şimdi [Ajan İş Akışı](agent-steps-and-structure) bölümüne geçebiliriz; burada bir Ajanın nasıl gözlemlediğini, düşündüğünü ve harekete geçtiğini göreceksiniz. Bu, şimdiye kadar öğrendiklerimizin tümünü bir araya getirir ve kendi Yapay Zeka Ajanınızı oluşturma sürecinin temelini oluşturur. + +Ama önce, kısa bir sınav zamanı! \ No newline at end of file diff --git a/units/tr/unit1/tutorial.mdx b/units/tr/unit1/tutorial.mdx new file mode 100644 index 000000000..ae60ece11 --- /dev/null +++ b/units/tr/unit1/tutorial.mdx @@ -0,0 +1,347 @@ +# smolagents Kullanarak İlk Ajanımızı Oluşturalım + +Son bölümde, Python kodu kullanarak sıfırdan nasıl Ajan oluşturabileceğimizi öğrendik ve **bu sürecin ne kadar zahmetli olabileceğini de gördük**. Neyse ki, birçok Ajan kütüphanesi bu işi **sizin için ağır işlerin çoğunu üstlenerek** kolaylaştırıyor. + +Bu derste, görüntü oluşturma, web araması yapma, saat dilimi kontrolü gibi işlemleri yapabilen **ilk Ajanınızı oluşturacaksınız**! + +Ayrıca oluşturduğunuz Ajanı **bir Hugging Face Space üzerinde yayınlayarak arkadaşlarınızla ve iş arkadaşlarınızla paylaşabileceksiniz**. + +Haydi başlayalım! + + +## smolagents Nedir? + +smolagents + +Bu Ajanı oluşturmak için, **Ajanlarınızı kolayca geliştirmeniz için bir framework sağlayan** `smolagents` kütüphanesini kullanacağız. + +Bu kütüphane, sadelik için tasarlanmıştır, ancak bir Ajan oluşturmanın karmaşıklığının büyük kısmını soyutlayarak sizin Ajan davranışını tasarlamaya odaklanmanıza olanak tanır. + +smolagents hakkında daha derine Ünite 2'de ineceğiz. Bu sırada, bu blog yazısına veya kütüphanenin GitHub reposuna göz atabilirsiniz. + +Kısacası, `smolagents`, **"Actions" (Eylemler)** gerçekleştiren ve ardından kodu çalıştırarak **"Observations" (Gözlemler)** yapan bir tür Ajan olan **codeAgent** üzerine odaklanan bir kütüphanedir. + +İşte inşa edeceğimiz şeyin bir örneği! + +Ajanımıza bir **Görüntü oluşturma aracı** sağladık ve ondan bir kedi resmi oluşturmasını istedik. + +`smolagents` içindeki Ajan, daha önce sıfırdan oluşturduğumuz özel Ajanın **aynı davranışlarına** sahip olacak: **düşünecek, harekete geçecek ve gözlemleyecek** — bu döngüde, nihai cevaba ulaşana kadar devam edecek: + + + +Heyecan verici, değil mi? + +## Haydi Ajanımızı Oluşturalım! + +Başlamak için bu Space'i kopyalayın: https://huggingface.co/spaces/agents-course/First_agent_template +> Bu şablon için Aymeric'e teşekkürler! 🙌 + + +Bu Space'i kopyalamak, **kendi profilinizde yerel bir kopya oluşturmanız** anlamına gelir: +Kopyala + +Space'i kopyaladıktan sonra, Ajanınızın model API'sine erişebilmesi için Hugging Face API token'ınızı eklemeniz gerekecek: + +1. Eğer hala yoksa, [https://hf.co/settings/tokens](https://hf.co/settings/tokens) adresinden çıkarım (inference) izni olan bir Hugging Face token'ı alın +2. Kopyaladığınız Space'e gidin ve **Settings** (ayarlar) sekmesine tıklayın +3. **Variables and Secrets** bölümüne kadar kaydırın ve **New Secret** butonuna tıklayın +4. `HF_TOKEN` adında yeni bir secret oluşturun ve token'ınızı değer olarak yapıştırın +5. **Save** (kaydet) butonuna tıklayarak token'ınızı güvenli şekilde kaydedin + +Bu ders boyunca düzenlemeniz gereken tek dosya, şu an eksik olan **"app.py"** dosyası olacak. [Şablondaki orijinal dosyayı buradan](https://huggingface.co/spaces/agents-course/First_agent_template/blob/main/app.py) görebilirsiniz. Kendi dosyanızı bulmak için Space'inize gidin, `Files` (dosyalar) sekmesine tıklayın ve dizin listesinden `app.py`'ye tıklayın. + +Haydi birlikte kodu inceleyelim: + +- Dosya, bazı basit ama gerekli kütüphaneleri içe aktarmamızla başlıyor + +```python +from smolagents import CodeAgent, DuckDuckGoSearchTool, FinalAnswerTool, HfApiModel, load_tool, tool +import datetime +import requests +import pytz +import yaml +``` + +Daha önce belirttiğimiz gibi, doğrudan **smolagents** içindeki **CodeAgent** sınıfını kullanacağız. + + +### Tools (Araçlar) + +Şimdi araçlara geçelim! Araçlar hakkında hatırlatma istiyorsanız, kursun [Araçlar](tools) bölümüne geri dönmekten çekinmeyin. + +
+Türkçe çeviriyi görmek için tıklayın + +```python +@tool +def my_custom_tool(arg1:str, arg2:int)-> str: # dönüş türünü belirtmek önemlidir + # Araç açıklaması / argüman açıklaması formatını koruyun ama aracı değiştirmekte özgürsünüz + """Henüz hiçbir şey yapmayan bir araç + Args: + arg1: birinci argüman + arg2: ikinci argüman + """ + return "Ne tür bir sihir inşa edeceksin?" + +@tool +def get_current_time_in_timezone(timezone: str) -> str: + """Belirtilen bir saat dilimindeki yerel saati getiren bir araç. + Args: + timezone: Geçerli bir saat dilimini temsil eden bir string (örneğin, 'America/New_York'). + """ + try: + # Saat dilimi nesnesi oluştur + tz = pytz.timezone(timezone) + # Bu saat dilimindeki geçerli zamanı al + local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S") + return f"{timezone} saat dilimindeki yerel saat: {local_time}" + except Exception as e: + return f"'{timezone}' saat dilimi için zaman alınırken hata oluştu: {str(e)}" +``` + +
+ +```python +@tool +def my_custom_tool(arg1:str, arg2:int)-> str: # dönüş türünü belirtmek önemlidir + # Araç açıklaması / argüman açıklaması formatını koruyun ama aracı değiştirmekte özgürsünüz + """A tool that does nothing yet + Args: + arg1: the first argument + arg2: the second argument + """ + return "What magic will you build ?" + +@tool +def get_current_time_in_timezone(timezone: str) -> str: + """A tool that fetches the current local time in a specified timezone. + Args: + timezone: A string representing a valid timezone (e.g., 'America/New_York'). + """ + try: + # Saat dilimi nesnesi oluştur + tz = pytz.timezone(timezone) + # Bu saat dilimindeki geçerli zamanı al + local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S") + return f"The current local time in {timezone} is: {local_time}" + except Exception as e: + return f"Error fetching time for timezone '{timezone}': {str(e)}" +``` + + +Bu bölümde inşa etmenizi teşvik ettiğimiz şey araçlar! + +İki örnek veriyoruz: + +1. **Çalışmayan sahte bir araç** — bunu faydalı bir şeye dönüştürebilirsiniz +2. Dünyadaki herhangi bir yerin geçerli saatini döndüren **çalışan bir araç** + +Kendi aracınızı tanımlarken şunlara dikkat etmelisiniz: + +1. Fonksiyonunuz için girdi ve çıktı türlerini belirtin, örn. `get_current_time_in_timezone(timezone: str) -> str:` +2. **İyi biçimlendirilmiş bir docstring ekleyin.** `smolagents`, tüm argümanların **docstring içinde açıklanmasını** bekler. + +### Ajan +Bu Ajan, LLM (büyük dil modelleri) motoru olarak [`Qwen/Qwen2.5-Coder-32B-Instruct`](https://huggingface.co/Qwen/Qwen2.5-Coder-32B-Instruct) kullanıyor. Bu, serverless API aracılığıyla erişeceğimiz oldukça yetenekli bir modeldir. + +```python +final_answer = FinalAnswerTool() +model = HfApiModel( + max_tokens=2096, + temperature=0.5, + model_id='Qwen/Qwen2.5-Coder-32B-Instruct', + custom_role_conversions=None, +) + +with open("prompts.yaml", 'r') as stream: + prompt_templates = yaml.safe_load(stream) + +# CodeAgent'ımızı oluşturuyoruz +agent = CodeAgent( + model=model, + tools=[final_answer], # araçlarınızı buraya ekleyin (final_answer'ı silmeyin) + max_steps=6, + verbosity_level=1, + grammar=None, + planning_interval=None, + name=None, + description=None, + prompt_templates=prompt_templates +) + +GradioUI(agent).launch() +``` + +Bu Ajan hala, daha önceki bölümde gördüğümüz `InferenceClient`'ı, **HfApiModel** sınıfı üzerinden kullanıyor! + +Framework'ü Ünite 2'de daha ayrıntılı örneklerle anlatacağız. Şimdilik, odaklanmanız gereken şey `tools` parametresi ile **yeni araçlar ekleyerek** Ajanınızı geliştirmek. + +Örneğin, ilk satırda içe aktarılan `DuckDuckGoSearchTool`'u kullanabilir veya kodun ilerleyen kısmında Hub'dan yüklenen `image_generation_tool`'u inceleyebilirsiniz. + +**Yeni araçlar eklemek, Ajanınıza yeni yetenekler kazandıracaktır**, bu konuda yaratıcı olmaya çalışın! + +### Sistem Prompt'u (İstemi) + +Ajanın sistem istemi ayrı bir `prompts.yaml` dosyasında saklanır. Bu dosya, Ajanın davranışlarını yönlendiren önceden tanımlanmış talimatları içerir. + +İstemleri bir YAML dosyasında saklamak, farklı Ajanlar veya kullanım senaryoları arasında kolayca özelleştirme ve yeniden kullanımı sağlar. + +`prompts.yaml` dosyasının nerede bulunduğunu ve proje içinde nasıl organize edildiğini görmek için [Space'in dosya yapısını](https://huggingface.co/spaces/agents-course/First_agent_template/tree/main) kontrol edebilirsiniz. + +Tam "app.py" dosyası: + +
+Türkçe çeviriyi görmek için tıklayın. + +```python +from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool +import datetime +import requests +import pytz +import yaml +from tools.final_answer import FinalAnswerTool + +from Gradio_UI import GradioUI + +# Aşağıda hiçbir şey yapmayan bir araç örneği var. Bizi yaratıcılığınla şaşırt! +@tool +def my_custom_tool(arg1:str, arg2:int)-> str: # dönüş tipi belirtmek önemli + # Araç açıklaması / argüman açıklaması formatını koruyun ama aracı değiştirmekte özgürsünüz + """Henüz hiçbir şey yapmayan bir araç + Args: + arg1: birinci argüman + arg2: ikinci argüman + """ + return "Ne tür bir sihir inşa edeceksin?" + +@tool +def get_current_time_in_timezone(timezone: str) -> str: + """Belirtilen bir saat dilimindeki yerel saati getiren bir araç. + Args: + timezone: Geçerli bir saat dilimini temsil eden bir string (örneğin, 'America/New_York'). + """ + try: + # Saat dilimi nesnesi oluştur + tz = pytz.timezone(timezone) + # Bu saat dilimindeki geçerli zamanı al + local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S") + return f"{timezone} saat dilimindeki yerel saat: {local_time}" + except Exception as e: + return f"'{timezone}' saat dilimi için zaman alınırken hata oluştu: {str(e)}" + + +final_answer = FinalAnswerTool() +model = HfApiModel( + max_tokens=2096, + temperature=0.5, + model_id='Qwen/Qwen2.5-Coder-32B-Instruct', + custom_role_conversions=None, +) + + +# Hub'dan araç içe aktar +image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True) + +# Sistem istemini prompt.yaml dosyasından yükle +with open("prompts.yaml", 'r') as stream: + prompt_templates = yaml.safe_load(stream) + +agent = CodeAgent( + model=model, + tools=[final_answer], # araçlarınızı buraya ekleyin (final_answer'ı silmeyin) + max_steps=6, + verbosity_level=1, + grammar=None, + planning_interval=None, + name=None, + description=None, + prompt_templates=prompt_templates # Sistem istemini CodeAgent'e aktar +) + + +GradioUI(agent).launch() +``` +
+ +```python +from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool +import datetime +import requests +import pytz +import yaml +from tools.final_answer import FinalAnswerTool + +from Gradio_UI import GradioUI + +# Aşağıda hiçbir şey yapmayan bir araç örneği var. Bizi yaratıcılığınla şaşırt! +@tool +def my_custom_tool(arg1:str, arg2:int)-> str: # dönüş tipi belirtmek önemli + # Araç açıklaması / argüman açıklaması formatını koruyun ama aracı değiştirmekte özgürsünüz + """A tool that does nothing yet + Args: + arg1: the first argument + arg2: the second argument + """ + return "What magic will you build ?" + +@tool +def get_current_time_in_timezone(timezone: str) -> str: + """A tool that fetches the current local time in a specified timezone. + Args: + timezone: A string representing a valid timezone (e.g., 'America/New_York'). + """ + try: + # Saat dilimi nesnesi oluştur + tz = pytz.timezone(timezone) + # Bu saat dilimindeki geçerli zamanı al + local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S") + return f"The current local time in {timezone} is: {local_time}" + except Exception as e: + return f"Error fetching time for timezone '{timezone}': {str(e)}" + + +final_answer = FinalAnswerTool() + model = HfApiModel( + max_tokens=2096, + temperature=0.5, + model_id='Qwen/Qwen2.5-Coder-32B-Instruct', + custom_role_conversions=None, +) + + +# Hub'dan araç içe aktar +image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True) + +# Sistem istemini prompt.yaml dosyasından yükle +with open("prompts.yaml", 'r') as stream: + prompt_templates = yaml.safe_load(stream) + +agent = CodeAgent( + model=model, + tools=[final_answer], # araçlarınızı buraya ekleyin (final_answer'ı silmeyin) + max_steps=6, + verbosity_level=1, + grammar=None, + planning_interval=None, + name=None, + description=None, + prompt_templates=prompt_templates # Sistem istemini CodeAgent'e aktar +) + + +GradioUI(agent).launch() +``` + +**Amacınız**, Space'e ve Ajana aşina olmaktır. + +Şu anda, şablondaki Ajan **herhangi bir araç kullanmıyor, bu yüzden ona bazı hazır araçları sağlamayı veya kendi araçlarınızı yazmayı deneyin!** + +Discord kanalımızda **#agents-course-showcase** adlı kanalda harika Ajan çıktılarınızı sabırsızlıkla bekliyoruz! + +Tebrikler, ilk Ajanınızı oluşturdunuz! Bunu arkadaşlarınız ve iş arkadaşlarınızla paylaşmaktan çekinmeyin. + +Bu ilk denemeniz olduğu için, biraz hatalı ya da yavaş çalışması tamamen normaldir. İlerleyen ünitelerde, daha iyi Ajanlar nasıl oluşturulur, bunu öğreneceğiz. + +Öğrenmenin en iyi yolu denemektir, bu yüzden Ajanınızı güncelleyin, yeni araçlar ekleyin, farklı bir modelle deneyin vs. + +Bir sonraki bölümde, son Sınav'ı tamamlayacak ve sertifikanızı alacaksınız! \ No newline at end of file diff --git a/units/tr/unit1/what-are-agents.mdx b/units/tr/unit1/what-are-agents.mdx new file mode 100644 index 000000000..038f60039 --- /dev/null +++ b/units/tr/unit1/what-are-agents.mdx @@ -0,0 +1,175 @@ +# Agent (Ajan) Nedir? + +Unit 1 planning + +Bu bölümün sonunda, Agent (Ajan) kavramına ve yapay zekadaki çeşitli uygulamalarına aşina olacaksınız. + +Bir Ajanın ne olduğunu açıklamak için bir benzetmeyle başlayalım. + +## Genel Görünüm: Ajan Alfred + +Alfred ile tanışın. Alfred bir **Ajan** (Ajan). + +Alfred + +Alfred'in **bir komut aldığını** hayal edin, örneğin: "Alfred, bir kahve alabilir miyim lütfen?" + +Bir kahve alabilir miyim? + +Alfred **doğal dili anladığı** için isteğimizi hemen kavrar. + +Siparişi yerine getirmeden önce Alfred, **akıl yürütme ve planlama** sürecine girer; şu adımları ve gerekli araçları belirler: + +1. Mutfağa git +2. Kahve makinesini kullan +3. Kahveyi demle +4. Kahveyi geri getir + +Neden ve plan + +Bir planı olduğunda, **harekete geçmesi gerekir**. Planını uygulamak için, **bildiği araçlardan oluşan bir listeyi kullanabilir**. + +Bu durumda kahve yapmak için bir kahve makinesi kullanır. Kahve makinesini çalıştırarak kahveyi demler. + +Kahve yap + +Sonunda Alfred taze demlenmiş kahveyi bize getirir. + +Kahveyi getir + +Ve işte bir Ajan budur: **akıl yürütme, planlama yapabilen ve çevresiyle etkileşim kurabilen bir AI modelidir.** + +Ona Ajan diyoruz çünkü aracın vardır, yani çevresiyle etkileşime geçme yeteneği vardır. + +Ajan prosesi + +## Biraz daha teorik olalım + +Artık genel bir fikriniz olduğuna göre, daha net bir tanım verelim: + +> Bir Ajan, AI modelini kullanarak çevresiyle etkileşime geçen ve kullanıcı tanımlı bir hedefe ulaşmayı amaçlayan bir sistemdir. Akıl yürütme, planlama ve eylemlerin uygulanmasını (genellikle harici araçlar aracılığıyla) birleştirerek görevleri yerine getirir. + +Bir Ajanı iki ana bölümden oluşan bir yapı olarak düşünebilirsiniz: + +1. **Beyin (Yapay Zeka (AI) Modeli)** + +Bütün düşünme burada gerçekleşir. AI modeli **akıl yürütme ve planlamadan sorumludur**. +**Duruma göre hangi Action (eylemler)** alınacağını belirler. + +2. **Gövde (Yetenekler ve Araçlar)** + +Bu bölüm, **Ajanın yapabildiği her şeyi** temsil eder. + +**Mümkün olan eylemlerin kapsamı**, aracın **hangi yeteneklerle donatıldığına** bağlıdır. Örneğin insanlar kanatlara sahip olmadığı için "uçmak" eylemini gerçekleştiremez ama "yürümek", "koşmak", "zıplamak", "tutmak" gibi eylemleri gerçekleştirebilirler. + +### "Agency" Spektrumu + +Bu tanımı takip ederek, Ajanlar artan agency seviyelerine sahip bir sürekli spektrumda yer alırlar: + +| Agency Seviyesi | Açıklama | Adlandırma | ### Örnek desen | +| --- | --- | --- | --- | +| ☆☆☆ | Ajan çıktısı program akışını etkilemez | Basit işlemci | `process_llm_output(llm_response)` | +| ★☆☆ | Ajan çıktısı temel kontrol akışını belirler | Yönlendirici | `if llm_decision(): path_a() else: path_b()` | +| ★★☆ | Ajan çıktısı işlev çağrısını belirler | Araç çağırıcı | `run_function(llm_chosen_tool, llm_chosen_args)` | +| ★★★ | Ajan çıktısı yineleme ve programın devamını kontrol eder | Çok Adımlı Ajan | `while llm_should_continue(): execute_next_step()` | +| ★★★ | Bir Ajanik iş akışı başka bir Ajanik iş akışını başlatabilir | Çoklu Ajan | `if llm_trigger(): execute_agent()` | + +Tablo: [smolagents kavramsal rehberinden](https://huggingface.co/docs/smolagents/conceptual_guides/intro_agents) + +## Ajanlar için hangi tür AI modelleri kullanılır? + +Ajanlarda en sık kullanılan AI modeli, girdi olarak **Metin** alıp çıkış olarak da **Metin** veren LLM (büyük dil modelleri)'dir. + +Bilinen örnekler arasında **OpenAI**'dan **GPT4**, **Meta**'dan **Llama**, **Google**'dan **Gemini** gibi modeller vardır. Bu modeller büyük miktarda metin üzerinde eğitilmiştir ve genelleme konusunda oldukça iyidirler. LLM'ler hakkında [bir sonraki bölümde](what-are-llms) daha fazla bilgi edineceğiz. + + +Ajanın çekirdek modeli olarak başka girdi türlerini kabul eden modeller kullanmak da mümkündür. Örneğin, bir Vision Language Model (VLM - Görüntü Dili Modeli), bir LLM gibidir ama görüntüleri de girdi olarak anlayabilir. Şimdilik LLM'lere odaklanacağız ve diğer seçenekleri daha sonra tartışacağız. + + +## AI çevresine nasıl etki eder? + +LLM'ler harika modellerdir ama **yalnızca metin üretebilirler**. + +Peki ama HuggingChat veya ChatGPT gibi bilinen sohbet uygulamalarından bir resim üretmelerini istediğimizde bunu nasıl yapabiliyorlar? + +Cevap şu: HuggingChat, ChatGPT ve benzeri uygulamaların geliştiricileri, LLM'nin kullanabileceği ek işlevsellikler (yani **Tools** (Araçlar)) eklemiştir. + +
+Brokoliden Eyfel +
Model bu resmi üretmek için bir Görüntü Üretim Aracı kullandı.
+
+ +Araçlar hakkında daha fazla bilgiyi [Araçlar](tools) bölümünde öğreneceğiz. + +## Bir Ajan ne tür görevler yapabilir? + +Bir Ajan, eylemleri tamamlamak için uygulanmış olan araçlar aracılığıyla herhangi bir görevi gerçekleştirebilir. + +Örneğin bilgisayarımda bir kişisel asistan (Siri gibi) görevi görecek bir Ajan yazdım diyelim ve ona "Yöneticime bugünkü toplantının ertelenmesini isteyen bir e-posta gönder." dedim. Ona e-posta gönderebilecek bir kod verebilirim. Bu, Ajanın e-posta göndermesi gerektiğinde kullanabileceği yeni bir araç olur. Bunu Python ile yazabiliriz: + +
+Türkçe çeviriyi görmek için tıklayın + +```python +def send_message_to(recipient, message): + """Bir alıcıya e-posta mesajı göndermek için kullanışlıdır""" + ... +``` + +
+ +```python +def send_message_to(recipient, message): + """Useful to send an e-mail message to a recipient""" + ... +``` + +LLM, göreceğimiz gibi, gerektiğinde bu aracı çalıştırmak için kod üretecek ve böylece istenen görevi yerine getirecek. + +
+Türkçe çeviriyi görmek için tıklayın + +```python +send_message_to("Yönetici", "Bugünkü toplantıyı erteleyebilir miyiz?") +``` + +
+ +```python +send_message_to("Manager", "Can we postpone today's meeting?") +``` + +**Araçların tasarımı çok önemlidir ve Ajanın kalitesi üzerinde büyük etki yaratır.** Bazı görevler çok özel araçlar gerektirirken, bazıları "web_search" gibi genel amaçlı araçlarla çözülebilir. + +> Not: **Eylemler araçlarla aynı şey değildir.** Örneğin bir eylem, birden fazla aracın kullanılmasını gerektirebilir. + +Bir Ajanın çevresiyle etkileşime geçebilmesi, **şirketler ve bireyler için gerçek hayatta kullanılabilirliği mümkün kılar.** + +### Örnek 1: Kişisel Sanal Asistanlar +Siri, Alexa veya Google Assistant gibi sanal asistanlar, kullanıcıların dijital ortamlarıyla etkileşim kurarken Ajan olarak çalışırlar. + +Kullanıcı isteklerini alır, bağlamı analiz eder, veritabanlarından bilgi çeker ve yanıtlar verir veya eylemleri başlatırlar (örneğin hatırlatıcı ayarlamak, mesaj göndermek, akıllı cihazları kontrol etmek). + +### Örnek 2: Müşteri Hizmetleri Sohbet Botları +Birçok şirket, müşterilerle doğal dilde etkileşim kuran sohbet botlarını Ajan olarak sunar. + +Bu Ajanlar soruları yanıtlayabilir, kullanıcıyı sorun giderme adımlarında yönlendirebilir, iç veritabanlarında kayıt açabilir veya işlemleri tamamlayabilirler. + +Önceden belirlenmiş hedefleri; kullanıcı memnuniyetini artırmak, bekleme sürelerini azaltmak veya satış dönüşüm oranlarını yükseltmek olabilir. Müşterilerle doğrudan etkileşime girerek, diyaloglardan öğrenerek ve yanıtlarını zamanla geliştirerek, bir Ajanın temel ilkelerini uygulamış olurlar. + +### Örnek 3: Video oyunlarında AI Kontrollü Karakterler (NPC) +LLM destekli Yapay Zeka Ajanları, oyunlardaki Yapay Zeka Karakterlerini (NPC) daha dinamik ve öngörülemez hale getirebilir. + +Katı davranış ağaçları yerine, **bağlama uygun şekilde yanıt verebilir, oyuncu etkileşimlerine uyum sağlayabilir** ve daha incelikli diyaloglar üretebilirler. Bu esneklik, oyuncularla birlikte evrilen daha gerçekçi ve etkileyici karakterler yaratılmasına olanak tanır. + +--- + +Özetlemek gerekirse, bir Ajan, ana düşünme motoru olarak bir AI Model (genellikle bir LLM) kullanan bir sistemdir ve: + +- **Doğal dili anlar:** İnsan talimatlarını anlamlı şekilde yorumlar ve yanıtlar. + +- **Akıl yürütme ve planlama yapar:** Bilgileri analiz eder, kararlar alır ve stratejiler geliştirir. + +- **Çevresiyle etkileşim kurar:** Bilgi toplar, eylemler gerçekleştirir ve bu eylemlerin sonuçlarını gözlemler. + +Artık Ajanların ne olduğu konusunda sağlam bir kavrayışa sahipsiniz. Şimdi bu bilgileri kısa, notsuz bir sınavla pekiştireceğiz. Daha sonra "Ajanın beynini" inceleyeceğiz: [LLM'ler](what-are-llms). \ No newline at end of file diff --git a/units/tr/unit1/what-are-llms.mdx b/units/tr/unit1/what-are-llms.mdx new file mode 100644 index 000000000..417ab6da0 --- /dev/null +++ b/units/tr/unit1/what-are-llms.mdx @@ -0,0 +1,223 @@ +# LLM (Büyük Dil Modelleri) Nedir? + +Unit 1 planning + +Önceki bölümde her Ajanın **merkezinde bir Yapay Zeka Modeline** ihtiyacı olduğunu ve bu amaçla en yaygın kullanılan model türünün LLM'ler olduğunu öğrendik. + +Şimdi LLM'lerin ne olduğunu ve Ajanları nasıl çalıştırdığını öğreneceğiz. + +Bu bölüm, LLM'lerin kullanımına dair kısa ve teknik bir açıklama sunar. Daha derine inmek isterseniz, ücretsiz Doğal Dil İşleme Kursumuza göz atabilirsiniz. + +## Büyük Dil Modeli Nedir? + +LLM, **insan dilini anlama ve üretme** konusunda son derece başarılı bir yapay zeka modelidir. Bu modeller, dili yapı, kalıp ve hatta nüanslarıyla öğrenebilmek için çok büyük miktarda metin verisi üzerinde eğitilir. Genellikle milyonlarca parametre içerirler. + +Günümüzdeki LLM'lerin çoğu **Transformer mimarisi** üzerine kuruludur — 2018'de Google tarafından yayımlanan BERT modelinden bu yana büyük ilgi gören ve "Attention" (dikkat) algoritmasına dayanan bir derin öğrenme mimarisi. + +
+Transformer +
Orijinal Transformer mimarisi bu şekildedir: solda bir encoder (kodlayıcı), sağda ise bir decoder (çözümleyici) yer alır.
+
+ +Transformer'ların 3 türü vardır: + +1. **Encoder'lar** + Encoder tabanlı bir Transformer, metni (veya başka bir veriyi) girdi olarak alır ve bu metnin yoğun bir gösterimini (embedding) üretir. + + - **Örnek**: Google'dan BERT + - **Kullanım Alanları**: Metin sınıflandırma, anlamsal arama, adlandırılmış varlık tanıma (Named Entity Recognition - NER) + - **Tipik Boyut**: Milyonlarca parametre + +2. **Decoder'lar** + Decoder tabanlı bir Transformer, **bir diziyi tamamlamak için her seferinde bir belirteç (belirteç) üreterek** çalışır. + + - **Örnek**: Meta'dan Llama + - **Kullanım Alanları**: Metin üretimi, sohbet robotları, kod üretimi + - **Tipik Boyut**: Milyarlarca parametre + +3. **Seq2Seq (Encoder–Decoder)** + Dizi-dönüştürücü (sequence-to-sequence) Transformer, bir encoder ve bir decoder'ı _birleştirir_. Encoder önce girdi dizisini bağlamsal bir temsil haline getirir, ardından decoder bu temsile göre bir çıktı dizisi üretir. + + - **Örnek**: T5, BART + - **Kullanım Alanları**: Çeviri, Özetleme, Parafrazlama + - **Tipik Boyut**: Milyonlarca parametre + +Her ne kadar LLM'ler farklı biçimlerde gelebilse de, LLM'ler genellikle milyarlarca parametreye sahip decoder tabanlı modellerdir. İşte en bilinen LLM'lerden bazıları: + +| **Model** | **Sağlayıcı** | +|-----------------------------------|--------------------------------------------| +| **Deepseek-R1** | DeepSeek | +| **GPT4** | OpenAI | +| **Llama 3** | Meta (Facebook AI Research) | +| **SmolLM2** | Hugging Face | +| **Gemma** | Google | +| **Mistral** | Mistral | + +LLM'lerin temel prensibi basit ama etkili: **önceki belirteçlerdan oluşan bir diziyi baz alarak bir sonraki belirteçi tahmin etmek**. "Belirteç", bir LLM'in çalıştığı bilgi birimidir. Bunu bir "kelime" gibi düşünebilirsiniz, fakat verimlilik açısından LLM'ler tüm kelimeleri kullanmaz. + +Örneğin, İngilizce'de yaklaşık 600.000 kelime varken, Llama 2 gibi bir model yalnızca yaklaşık 32.000 belirteçlik bir kelime dağarcığına sahiptir. Belirteçleme (tokenizasyon) genellikle kelime-altı birimler üzerinden yapılır. + +Mesela "interest" ve "ing" belirteçleri birleştirilerek "interesting" elde edilebilir. Ya da "ed" eklenerek "interested" oluşturulabilir. + +Aşağıdaki etkileşimli oynatma alanında farklı belirteçleyicileri deneyebilirsiniz: + + + +Her LLM'in **kendine özgü özel belirteçleri** vardır. Model, bu belirteçleri oluşturduğu yapının başını ve sonunu belirtmek için kullanır. Örneğin, bir dizinin, mesajın ya da cevabın başlangıç ya da bitişini belirtmek için. Girdi olarak verdiğimiz istemler (prompts) de özel belirteçlerle yapılandırılır. Bunların en önemlisi **Dizi Sonu Özel Belirteci'dir (end of sequence - EOS)**. + +Bu özel belirteçlerin biçimi, model sağlayıcısına göre çok farklılık gösterebilir. + +Aşağıdaki tablo, özel belirteçlerin çeşitliliğini göstermektedir: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ModelSağlayıcıEOS Belirteciİşlev
GPT4OpenAI<|endoftext|>Mesaj metninin sonu
Llama 3Meta (Facebook AI Research)<|eot_id|>Dizi sonu
Deepseek-R1DeepSeek<|end_of_sentence|>Mesaj metninin sonu
SmolLM2Hugging Face<|im_end|>Talimat veya mesajın sonu
GemmaGoogle<end_of_turn>Konuşma turunun sonu
+ + + +Bu özel belirteçleri ezberlemeniz beklenmiyor, ancak çeşitliliklerini ve metin üretimindeki rollerini anlamak önemlidir. Daha fazla bilgi için modelin Hub sayfasındaki yapılandırma dosyalarını inceleyebilirsiniz. Örneğin, SmolLM2 modelinin özel belirteçlerinı şu dosyada görebilirsiniz: tokenizer_config.json. + + + +## Bir Sonraki Belirteç Tahminini Anlamak + +LLM'lerin **oto-regresif** olduğu söylenir, yani **bir geçişteki çıktı, bir sonraki geçişin girdisi olur**. Bu döngü, model bir EOS (dizi sonu) belirteci tahmin edene kadar devam eder; o noktada model durabilir. + +Oto-regresif kod çözmenin görsel GIF'i + +Başka bir deyişle, bir LLM metni EOS'a ulaşana kadar çözer. Peki tek bir kod çözme döngüsü sırasında ne olur? + +Ajanları öğrenme amacıyla tüm süreç oldukça teknik olsa da, işte kısa bir genel bakış: + +- Girdi metni **belirteçlere** ayrıldıktan sonra, model her bir belirtecin anlamı ve giriş dizisindeki konumuyla ilgili bilgileri yakalayan bir temsil hesaplar. +- Bu temsil, modelin her belirtecin sıradaki olma olasılığına göre sıraladığı skorları çıktıladığı modele verilir. + +Kod çözmenin görsel GIF'i + +Bu skorlara göre, cümleyi tamamlamak için belirteç seçmenin birden çok stratejisi vardır: + +- En basit kod çözme stratejisi, her zaman en yüksek skora sahip belirteci seçmektir. + +Kod çözme süreciyle kendiniz etkileşime geçebilirsiniz. Bu Space'te SmolLM2 ile oynayabilirsiniz (unutmayın, bu model **EOS** belirteci olan **<|im_end|>**'e ulaşana kadar kod çözer): + + + +- Ama daha gelişmiş kod çözme stratejileri de vardır. Örneğin, *beam search*, birden fazla aday diziyi keşfederek toplam skoru en yüksek olanı bulmaya çalışır — bireysel bazı belirteçlerin skoru düşük olsa bile. + + + +Kod çözme hakkında daha fazla bilgi edinmek isterseniz, [Doğal Dil İşleme kursuna](https://huggingface.co/learn/nlp-course) göz atabilirsiniz. + +## Attention (Dikkat): Tek İhtiyacınız Olan Şey + +Transformer mimarisinin temel bir yönü **Attention (Dikkat Mekanizması)**dır. Bir sonraki kelimeyi tahmin ederken, cümledeki her kelime eşit derecede önemli değildir; *"Fransa'nın başkenti..."* cümlesinde "Fransa" ve "başkenti" gibi kelimeler en anlamlı olanlardır. + +Attention'ın görsel GIF'i + +Dizide bir sonraki belirteci doğru tahmin edebilmek için, mevcut belirteçle en ilgili olanları dizideki diğer belirteçler arasından seçmek oldukça önemlidir. + +LLM'lerin temel ilkesi — bir sonraki belirteci tahmin etme — GPT-2'den bu yana aynı kalsa da, sinir ağlarının ölçeklenmesi ve dikkat mekanizmasının daha uzun dizilerde çalıştırılması konusunda büyük gelişmeler yaşanmıştır. + +Eğer LLM'lerle etkileşime geçtiyseniz, muhtemelen *context length* (bağlam uzunluğu) terimine aşinasınızdır. Bu, LLM'in işleyebileceği maksimum belirteç sayısını ve dolayısıyla maksimum *dikkat aralığını* ifade eder. + +## LLM'leri Yönlendirmek: Prompting (İstemleme) + +Bir LLM'in tek görevinin tüm girdi belirteçlerine bakarak bir sonraki belirteci tahmin etmek ve hangilerinin "önemli" olduğunu seçmek olduğunu düşünürsek, girdi dizinizin nasıl yazıldığı çok önemlidir. + +LLM'e sağladığınız girdi dizisine _prompt_ (istem) denir. İstemi dikkatli bir şekilde tasarlamak, **LLM'in çıktısını istenen sonuca yönlendirmeyi kolaylaştırır**. + +## LLM'ler Nasıl Eğitilir? + +LLM'ler, büyük metin veri kümeleri üzerinde eğitilir. Bu süreçte model, kendiliğinden denetimli (self-supervised) ya da maskeleme temelli dil modelleme (masked language modeling) görevleri aracılığıyla bir sonraki kelimeyi tahmin etmeyi öğrenir. + +Bu denetimsiz öğrenme sayesinde model dilin yapısını ve **metindeki temel kalıpları öğrenir, böylece daha önce hiç görmediği verilerde genelleme yapabilir**. + +Bu ilk _ön-eğitimden_ (pre-training) sonra, LLM'ler belirli görevler için denetimli öğrenmeyle _ince-ayar (fine-tuning)_ yapılabilir. Örneğin, bazı modeller diyalog yapıları ya da araç kullanımı için eğitilirken, bazıları sınıflandırma ya da kod üretimi üzerine odaklanır. + +## LLM'leri Nasıl Kullanabilirim? + +İki temel seçeneğiniz var: + +1. **Yerel Olarak Çalıştırmak** (donanımınız yeterliyse). + +2. **Bulut/API Kullanmak** (örneğin Hugging Face Serverless Inference API aracılığıyla). + +Bu kurs boyunca, ağırlıklı olarak modelleri Hugging Face Hub üzerinden API'ler aracılığıyla kullanacağız. Daha sonra bu modelleri kendi donanımınızda nasıl çalıştırabileceğinizi de göreceğiz. + +## LLM'ler Yapay Zeka Ajanlarında Nasıl Kullanılır? + +LLM'ler, yapay zeka Ajanlarının temel bir bileşenidir. **İnsan dilini anlama ve üretme temelini sağlarlar**. + +Kullanıcı talimatlarını yorumlayabilir, konuşmalarda bağlamı sürdürebilir, bir plan tanımlayabilir ve hangi araçları kullanacağına karar verebilirler. + +Bu adımları bu ünitenin ilerleyen kısımlarında daha ayrıntılı inceleyeceğiz. Ama şimdilik bilmeniz gereken şey: LLM, **Ajanın beynidir**. + +--- + +Oldukça fazla şey öğrendik! LLM'lerin ne olduklarını, nasıl çalıştıklarını ve yapay zeka Ajanlarını nasıl güçlendirdiklerini temel düzeyde inceledik. + +Eğer dil modelleri ve doğal dil işleme dünyasına daha da derinlemesine dalmak isterseniz, ücretsiz NLP kursumuza göz atabilirsiniz. + +Artık LLM'lerin nasıl çalıştığını bildiğimize göre, **LLM'lerin kelime üretimlerini konuşma bağlamında nasıl yapılandırdığını** görme zamanı. + +Bu notebook'u çalıştırmak için **bir Hugging Face token'ına** ihtiyacınız var. Bunu https://hf.co/settings/tokens adresinden alabilirsiniz. + +Jupyter Notebook'ları nasıl çalıştıracağınızı öğrenmek için Hugging Face Hub'daki Jupyter Notebooklar sayfasına göz atın. + +Ayrıca Meta Llama modelleri için erişim talep etmeniz gerekir. +""" +