{"id":34381,"date":"2025-11-16T00:01:23","date_gmt":"2025-11-15T21:01:23","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/"},"modified":"2025-11-16T00:01:23","modified_gmt":"2025-11-15T21:01:23","slug":"rag-sistemi-nedir-ve-neden-onemlidir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/","title":{"rendered":"RAG Sistemi Nedir ve Neden \u00d6nemlidir?"},"content":{"rendered":"<style>\n  body {\n    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n    line-height: 1.7;\n    color: #333;\n    max-width: 1000px;\n    margin: 0 auto;\n    padding: 25px;\n    background-color: #f9f9f9;\n  }\n  @media (max-width: 768px) {\n    body {\n      padding: 15px;\n      font-size: 15px;\n      line-height: 1.6;\n    }\n    h2 {\n      font-size: 24px;\n    }\n    h3 {\n      font-size: 20px;\n    }\n    pre {\n      padding: 10px;\n      font-size: 13px;\n    }\n    table, th, td {\n      font-size: 14px;\n    }\n  }\n  h1 {\n    font-size: 32px;\n    color: #2c3e50;\n    margin-bottom: 25px;\n    text-align: center;\n  }\n  h2 {\n    font-size: 28px;\n    color: #2c3e50;\n    margin-top: 40px;\n    margin-bottom: 20px;\n    border-bottom: 2px solid #e0e0e0;\n    padding-bottom: 10px;\n  }\n  h3 {\n    font-size: 22px;\n    color: #34495e;\n    margin-top: 30px;\n    margin-bottom: 15px;\n  }\n  p {\n    margin-bottom: 15px;\n  }\n  a {\n    color: #3498db;\n    text-decoration: none;\n  }\n  a:hover {\n    text-decoration: underline;\n  }\n  ul, ol {\n    margin-left: 20px;\n    margin-bottom: 15px;\n  }\n  li {\n    margin-bottom: 8px;\n  }\n  pre {\n    background-color: #2d2d2d;\n    color: #f8f8f2;\n    padding: 20px;\n    border-radius: 8px;\n    overflow-x: auto;\n    font-family: 'Fira Code', 'Cascadia Code', 'Consolas', monospace;\n    font-size: 14px;\n    line-height: 1.5;\n    margin-bottom: 20px;\n  }\n  code {\n    font-family: 'Fira Code', 'Cascadia Code', 'Consolas', monospace;\n    background-color: #e0e0e0;\n    padding: 2px 4px;\n    border-radius: 3px;\n    font-size: 0.9em;\n  }\n  .expert-tip {\n    background-color: #e8f5e9; \/* Light green *\/\n    border-left: 5px solid #4CAF50; \/* Green border *\/\n    padding: 18px;\n    margin: 30px 0;\n    border-radius: 8px;\n    color: #2e7d32; \/* Dark green text *\/\n    font-style: italic;\n  }\n  .expert-tip strong {\n    color: #1b5e20;\n  }\n  table {\n    width: 100%;\n    border-collapse: collapse;\n    margin-bottom: 20px;\n    background-color: #fff;\n  }\n  table, th, td {\n    border: 1px solid #ddd;\n  }\n  th, td {\n    padding: 12px;\n    text-align: left;\n  }\n  th {\n    background-color: #f2f2f2;\n    font-weight: bold;\n    color: #333;\n  }\n  tr:nth-child(even) {\n    background-color: #f8f8f8;\n  }\n  .faq-section {\n    margin-top: 40px;\n    border-top: 1px solid #eee;\n    padding-top: 20px;\n  }\n  .faq-question {\n    font-weight: bold;\n    color: #2c3e50;\n    margin-top: 15px;\n  }\n  .faq-answer {\n    margin-bottom: 10px;\n    color: #555;\n  }\n<\/style>\n<h1>PHP ve Neuron AI ile Ak\u015fam\u0131n\u0131za RAG Sistemi Kurun<\/h1>\n<p>G\u00fcn\u00fcm\u00fcz d\u00fcnyas\u0131nda, b\u00fcy\u00fck dil modelleri (LLM&#8217;ler) hayat\u0131m\u0131z\u0131n vazge\u00e7ilmez bir par\u00e7as\u0131 haline geldi. Peki ya bu g\u00fc\u00e7l\u00fc modellerin, \u015firketinizin \u00f6zel dok\u00fcmanlar\u0131 veya g\u00fcncel veri kaynaklar\u0131 hakk\u0131nda do\u011fru ve ba\u011flam odakl\u0131 yan\u0131tlar vermesini sa\u011flamak isteseydiniz? \u0130\u015fte tam bu noktada, Retrival Augmented Generation (RAG) devreye giriyor. Bu makalede, PHP geli\u015ftiricileri olarak, Neuron AI \u00e7er\u00e7evesini kullanarak kendi RAG sisteminizi nas\u0131l h\u0131zl\u0131ca kurabilece\u011finizi ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. Ak\u015fam\u0131n\u0131z\u0131 ay\u0131rarak, mevcut bilgi taban\u0131n\u0131zdan g\u00fc\u00e7 alan ak\u0131ll\u0131 bir yapay zeka uygulamas\u0131n\u0131 hayata ge\u00e7irmeye haz\u0131r olun.<\/p>\n<p>B\u00fcy\u00fck dil modelleri (LLM&#8217;ler), geni\u015f veri k\u00fcmeleri \u00fczerinde e\u011fitilmi\u015f olsalar bile, baz\u0131 temel s\u0131n\u0131rlamalara sahiptirler. \u00d6ncelikle, e\u011fitim verileri belli bir tarihte kesildi\u011fi i\u00e7in, g\u00fcncel bilgiler hakk\u0131nda genellikle yetersiz kal\u0131rlar. \u0130kinci olarak, &#8220;hal\u00fcsinasyon&#8221; denilen, yani mevcut olmayan veya yanl\u0131\u015f bilgileri ger\u00e7ekmi\u015f gibi sunma e\u011filimleri vard\u0131r. \u00dc\u00e7\u00fcnc\u00fcs\u00fc, \u015firket i\u00e7i \u00f6zel belgeleriniz, ki\u015fisel notlar\u0131n\u0131z veya belirli bir alan hakk\u0131nda detayl\u0131 verileriniz varsa, LLM&#8217;lerin bu bilgilere eri\u015fmesi veya bu bilgiler \u00fczerinden yan\u0131t \u00fcretmesi m\u00fcmk\u00fcn de\u011fildir. Bu durumlar, \u00f6zellikle i\u015f d\u00fcnyas\u0131nda, m\u00fc\u015fteri hizmetleri, teknik destek veya kurumsal bilgi y\u00f6netimi gibi alanlarda ciddi sorunlara yol a\u00e7abilir. \u00c7\u00fcnk\u00fc bir yapay zekadan beklenen, sadece ak\u0131c\u0131 konu\u015fmak de\u011fil, ayn\u0131 zamanda do\u011fru ve g\u00fcvenilir bilgi sunmakt\u0131r.<\/p>\n<p>\u0130\u015fte tam bu noktada, Retrival Augmented Generation (RAG) sistemi, LLM&#8217;lerin bu eksikliklerini gidermek i\u00e7in g\u00fc\u00e7l\u00fc bir \u00e7\u00f6z\u00fcm sunar. RAG, ad\u0131ndan da anla\u015f\u0131laca\u011f\u0131 gibi, &#8220;geri \u00e7ekme&#8221; (retrieval) ve &#8220;\u00fcretme&#8221; (generation) s\u00fcre\u00e7lerini birle\u015ftirir. Kullan\u0131c\u0131 bir sorgu yapt\u0131\u011f\u0131nda, RAG sistemi \u00f6nce bu sorguyla en alakal\u0131 bilgileri (dok\u00fcman par\u00e7ac\u0131klar\u0131, veritaban\u0131 kay\u0131tlar\u0131 vb.) belirlenen bir kaynaktan &#8220;geri \u00e7eker&#8221;. Ard\u0131ndan, bu geri \u00e7ekilen bilgileri bir &#8220;ba\u011flam&#8221; olarak LLM&#8217;ye sunar ve LLM&#8217;den bu ba\u011flam i\u00e7inde bir yan\u0131t &#8220;\u00fcretmesini&#8221; ister. Bu yakla\u015f\u0131m sayesinde LLM, rastgele tahminler yapmak yerine, kendisine sa\u011flanan do\u011fru ve g\u00fcncel bilgiler \u0131\u015f\u0131\u011f\u0131nda \u00e7ok daha isabetli, g\u00fcvenilir ve alakal\u0131 yan\u0131tlar olu\u015fturabilir.<\/p>\n<p>Peki, RAG&#8217;\u0131n pratik \u00f6nemi nedir? Bir \u00f6rnekle a\u00e7\u0131klayal\u0131m: Bir e-ticaret \u015firketinin karma\u015f\u0131k \u00fcr\u00fcn iade politikalar\u0131 ve garanti s\u00fcre\u00e7leri oldu\u011funu d\u00fc\u015f\u00fcn\u00fcn. M\u00fc\u015fteriler s\u00fcrekli bu konular hakk\u0131nda sorular soruyor. Geleneksel bir chatbot, bu sorulara genellikle s\u0131n\u0131rl\u0131 veya genel yan\u0131tlar verir, \u00e7\u00fcnk\u00fc bilgisi \u00f6nceden kodlanm\u0131\u015f kurallarla s\u0131n\u0131rl\u0131d\u0131r. Bir LLM ise, genel bilgilerle yan\u0131lt\u0131c\u0131 veya eksik cevaplar verebilir. Ancak bir RAG sistemi ile, t\u00fcm iade politikas\u0131 ve garanti belgelerinizi sisteme y\u00fcklersiniz. Bir m\u00fc\u015fteri &#8220;\u00dcr\u00fcn\u00fcm\u00fc nas\u0131l iade edebilirim?&#8221; diye sordu\u011funda, RAG sistemi belgeleriniz i\u00e7inden en alakal\u0131 iade politikas\u0131 paragraflar\u0131n\u0131 bulur, bu par\u00e7alar\u0131 LLM&#8217;e sunar ve LLM de bu bilgiler \u0131\u015f\u0131\u011f\u0131nda m\u00fc\u015fteriye \u00f6zel, ad\u0131m ad\u0131m bir iade s\u00fcreci a\u00e7\u0131klamas\u0131 yapar. Bu, hem m\u00fc\u015fteri memnuniyetini art\u0131r\u0131r hem de destek ekibinin y\u00fck\u00fcn\u00fc azalt\u0131r. RAG, sadece bir trend de\u011fil, yapay zeka destekli uygulamalar\u0131n g\u00fcvenilirli\u011fini ve kullan\u0131\u015fl\u0131l\u0131\u011f\u0131n\u0131 k\u00f6kten de\u011fi\u015ftiren bir paradigmad\u0131r.<\/p>\n<div class=\"expert-tip\">\n  <strong>Uzman \u0130pucu:<\/strong> RAG sistemleri, LLM&#8217;lerin &#8220;hal\u00fcsinasyon&#8221; sorununu b\u00fcy\u00fck \u00f6l\u00e7\u00fcde azalt\u0131r. \u00c7\u00fcnk\u00fc model art\u0131k &#8220;tahmin etmeye&#8221; \u00e7al\u0131\u015fmaz; kendisine sunulan kan\u0131tlanm\u0131\u015f bilgiyi \u00f6zetler veya yorumlar. Bu, \u00f6zellikle hukuki, t\u0131bbi veya finansal gibi do\u011fruluk kritik sekt\u00f6rlerde RAG&#8217;\u0131 vazge\u00e7ilmez k\u0131lar.\n<\/div>\n<h2>Neuron AI Framework ile Tan\u0131\u015f\u0131n: PHP \u0130\u00e7in Yapay Zeka G\u00fcc\u00fc<\/h2>\n<p>PHP, web geli\u015ftirme d\u00fcnyas\u0131n\u0131n temel ta\u015flar\u0131ndan biri olmaya devam ediyor. Ancak, yapay zeka (AI) ve makine \u00f6\u011frenimi (ML) gibi alanlarda Python&#8217;\u0131n pop\u00fclaritesi g\u00f6z \u00f6n\u00fcne al\u0131nd\u0131\u011f\u0131nda, PHP geli\u015ftiricileri bazen bu modern AI trendlerinden uzak hissedebilirler. \u0130\u015fte bu noktada Neuron AI Framework, PHP ekosistemine taze bir soluk getiriyor ve yapay zeka yeteneklerini PHP d\u00fcnyas\u0131na ta\u015f\u0131yarak bu a\u00e7\u0131\u011f\u0131 kapatmay\u0131 hedefliyor. Neuron AI, \u00f6zellikle b\u00fcy\u00fck dil modelleri (LLM&#8217;ler) ve vekt\u00f6r veritabanlar\u0131 gibi AI altyap\u0131lar\u0131yla etkile\u015fim kurmay\u0131 kolayla\u015ft\u0131ran, temiz ve basit bir API sa\u011flayan bir PHP k\u00fct\u00fcphanesidir. Bu sayede, PHP geli\u015ftiricileri karma\u015f\u0131k AI modellerini kendileri e\u011fitmek veya derinlemesine makine \u00f6\u011frenimi bilgisine sahip olmak zorunda kalmadan, g\u00fc\u00e7l\u00fc AI \u00f6zelliklerini uygulamalar\u0131na entegre edebilirler.<\/p>\n<p>Neuron AI&#8217;\u0131n temel amac\u0131, PHP geli\u015ftiricilerine yapay zeka modellerini t\u00fcketme ve bu modellerden faydalanma konusunda ara\u00e7lar sunmakt\u0131r. Bu, \u00f6zellikle RAG sistemleri gibi, harici LLM servisleri ve vekt\u00f6r veritabanlar\u0131 ile yo\u011fun etkile\u015fim gerektiren uygulamalar i\u00e7in hayati \u00f6nem ta\u015f\u0131r. Framework, pop\u00fcler LLM sa\u011flay\u0131c\u0131lar\u0131 (OpenAI, Google Gemini gibi) ve vekt\u00f6r veritabanlar\u0131 (Weaviate, Pinecone gibi) i\u00e7in haz\u0131r entegrasyonlar sunar. Bu sayede, farkl\u0131 servisler aras\u0131nda ge\u00e7i\u015f yapmak veya kendi ba\u011flant\u0131 katman\u0131n\u0131z\u0131 yazmak yerine, tutarl\u0131 ve basit bir PHP aray\u00fcz\u00fc \u00fczerinden i\u015flem yapabilirsiniz. Neuron AI&#8217;\u0131 se\u00e7memizin en b\u00fcy\u00fck nedenlerinden biri de budur: PHP geli\u015ftiricilerinin AI d\u00fcnyas\u0131na h\u0131zl\u0131 ve etkili bir \u015fekilde ad\u0131m atmas\u0131n\u0131 sa\u011flamas\u0131. Bu, zaman kazand\u0131r\u0131r, kod karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 azalt\u0131r ve geli\u015ftiricilerin ana i\u015f mant\u0131\u011f\u0131na odaklanmas\u0131na olanak tan\u0131r.<\/p>\n<p>Kurulum s\u00fcreci olduk\u00e7a basittir ve Composer arac\u0131l\u0131\u011f\u0131yla ger\u00e7ekle\u015ftirilir. \u00d6ncelikle, projenize Neuron AI&#8217;\u0131 eklemek i\u00e7in a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131rman\u0131z yeterlidir:<\/p>\n<pre><code class=\"language-bash\">\ncomposer require neuron-ai\/neuron\n<\/pre>\n<p><\/code><\/p>\n<p>Bu komut, gerekli t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131 projenize kuracakt\u0131r. Kurulum tamamland\u0131ktan sonra, Neuron AI'\u0131 kullanmaya ba\u015flamak i\u00e7in birka\u00e7 temel yap\u0131land\u0131rma ad\u0131m\u0131na ihtiyac\u0131n\u0131z olacak. Genellikle bu, kulland\u0131\u011f\u0131n\u0131z LLM servisinin API anahtar\u0131n\u0131 ve belki de bir vekt\u00f6r veritaban\u0131n\u0131n ba\u011flant\u0131 bilgilerini ayarlamak anlam\u0131na gelir. Bu bilgiler, uygulaman\u0131z\u0131n ortam de\u011fi\u015fkenleri (<code>.env<\/code> dosyas\u0131) arac\u0131l\u0131\u011f\u0131yla veya do\u011frudan kod i\u00e7inde yap\u0131land\u0131r\u0131labilir. \u00d6rne\u011fin, OpenAI API anahtar\u0131n\u0131z\u0131 a\u015fa\u011f\u0131daki gibi ayarlayabilirsiniz:<\/p>\n<pre><code class=\"language-php\">\n\/\/ .env dosyas\u0131na ekleyebilirsiniz:\n\/\/ OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n\/\/ Veya kod i\u00e7inde:\nuse Neuron\\AI\\Client;\nuse Dotenv\\Dotenv;\n\n\/\/ Ortam de\u011fi\u015fkenlerini y\u00fcklemek i\u00e7in (Laravel\/Symfony kullanm\u0131yorsan\u0131z)\n$dotenv = Dotenv::createImmutable(__DIR__);\n$dotenv->load();\n\n$apiKey = $_ENV['OPENAI_API_KEY'] ?? 'YOUR_DEFAULT_OPENAI_API_KEY';\n\n$client = new Client([\n    'openai' => [\n        'api_key' => $apiKey,\n    ],\n    \/\/ Di\u011fer servisler i\u00e7in de buraya ekleme yapabilirsiniz\n]);\n\n\/\/ \u015eimdi $client nesnesini kullanarak LLM'ler ve di\u011fer AI servisleriyle etkile\u015fim kurabilirsiniz.\n<\/pre>\n<p><\/code><\/p>\n<p>Bu ilk ad\u0131mlarla birlikte, Neuron AI'\u0131n sundu\u011fu t\u00fcm g\u00fc\u00e7l\u00fc \u00f6zelliklere kap\u0131 a\u00e7m\u0131\u015f olursunuz. PHP ekosisteminde AI uygulamalar\u0131 geli\u015ftirmek art\u0131k hayal de\u011fil, Neuron AI ile ula\u015f\u0131labilir bir ger\u00e7eklik. Framework'\u00fcn mod\u00fcler yap\u0131s\u0131 sayesinde, ilerleyen zamanlarda farkl\u0131 LLM'leri veya vekt\u00f6r veritabanlar\u0131n\u0131 denemek istedi\u011finizde de kolayca ge\u00e7i\u015f yapabilirsiniz. Bu esneklik, uzun vadeli projeler i\u00e7in b\u00fcy\u00fck bir avantaj sa\u011flar.<\/p>\n<h3>Temel Bile\u015fenler: Vekt\u00f6r Veritaban\u0131 ve Embedding \u0130\u015flemi Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h3>\n<p>RAG sistemlerinin kalbinde, veriyi \"anlamak\" ve arama yap\u0131labilir hale getirmek yatar. Bu anlay\u0131\u015f\u0131 sa\u011flayan sihirli de\u011fnek \"embedding\"lerdir. Peki, embedding nedir ve bir vekt\u00f6r veritaban\u0131 neden RAG i\u00e7in bu kadar kritiktir? Embedding'ler, metinlerin (kelimeler, c\u00fcmleler, paragraflar) \u00e7ok boyutlu say\u0131sal vekt\u00f6rlere d\u00f6n\u00fc\u015ft\u00fcr\u00fclm\u00fc\u015f halleridir. Bu vekt\u00f6rler, metinlerin semantik anlamlar\u0131n\u0131 korur; yani, anlamsal olarak birbirine yak\u0131n metinler, bu \u00e7ok boyutlu uzayda birbirine daha yak\u0131n konumlan\u0131r. \u00d6rne\u011fin, \"k\u00f6pek\" ve \"havlayan hayvan\" kelimelerinin embedding'leri, \"masa\" kelimesinin embedding'inden \u00e7ok daha yak\u0131nd\u0131r. Bu sayede, geleneksel anahtar kelime tabanl\u0131 aramalardan farkl\u0131 olarak, semantik (anlamsal) aramalar yapabiliriz. Kullan\u0131c\u0131 \"k\u00f6pekler hakk\u0131nda bilgi\" diye sordu\u011funda, sistem sadece \"k\u00f6pek\" kelimesinin ge\u00e7ti\u011fi yerleri de\u011fil, ayn\u0131 zamanda \"pati dostlar\u0131\", \"evcil hayvan\" veya \"d\u00f6rt ayakl\u0131 dostlar\u0131m\u0131z\" gibi anlamsal olarak ilgili i\u00e7eri\u011fi de bulabilir.<\/p>\n<p>Bu embedding'leri verimli bir \u015fekilde depolamak ve aramak i\u00e7in \"vekt\u00f6r veritabanlar\u0131na\" ihtiyac\u0131m\u0131z vard\u0131r. Geleneksel ili\u015fkisel veritabanlar\u0131 (MySQL, PostgreSQL) veya NoSQL veritabanlar\u0131 (MongoDB) metin verilerini depolamakta iyidir, ancak y\u00fcksek boyutlu vekt\u00f6rler aras\u0131ndaki benzerlikleri h\u0131zl\u0131ca bulmak konusunda yetersiz kal\u0131rlar. Vekt\u00f6r veritabanlar\u0131 ise (Weaviate, Pinecone, Milvus gibi), bu t\u00fcr y\u00fcksek boyutlu vekt\u00f6rleri depolamak ve \"en yak\u0131n kom\u015fuyu bulma\" (Nearest Neighbor Search) algoritmalar\u0131 kullanarak sorgu vekt\u00f6r\u00fcne en benzer vekt\u00f6rleri milisaniyeler i\u00e7inde d\u00f6nd\u00fcrmek \u00fczere \u00f6zel olarak tasarlanm\u0131\u015ft\u0131r. Bu, RAG sistemlerinin temelini olu\u015fturur, \u00e7\u00fcnk\u00fc kullan\u0131c\u0131 sorgusunun embedding'i olu\u015fturulduktan sonra, vekt\u00f6r veritaban\u0131nda bu sorguya en yak\u0131n, yani anlamsal olarak en alakal\u0131 metin par\u00e7ac\u0131klar\u0131 aran\u0131r.<\/p>\n<p>Neuron AI, bu embedding olu\u015fturma ve vekt\u00f6r veritaban\u0131 etkile\u015fimini PHP d\u00fcnyas\u0131na ta\u015f\u0131yor. Neuron AI kullanarak bir metinden embedding olu\u015fturmak olduk\u00e7a basittir. Genellikle bir LLM sa\u011flay\u0131c\u0131s\u0131n\u0131n (\u00f6rne\u011fin OpenAI, Google) embedding API's\u0131 kullan\u0131l\u0131r. \u0130\u015fte Neuron AI ile metin embedding'i olu\u015fturma ve basit\u00e7e g\u00f6sterme \u00f6rne\u011fi:<\/p>\n<pre><code class=\"language-php\">\nuse Neuron\\AI\\Client;\nuse Neuron\\AI\\Providers\\OpenAI\\OpenAIClient;\nuse Neuron\\AI\\Enums\\EmbeddingModel; \/\/ Veya kulland\u0131\u011f\u0131n\u0131z sa\u011flay\u0131c\u0131n\u0131n modeli\n\n\/\/ Daha \u00f6nce olu\u015fturdu\u011funuz Neuron AI client'\u0131n\u0131 kullan\u0131n\n$client = new Client([\n    'openai' => [\n        'api_key' => $_ENV['OPENAI_API_KEY'],\n    ],\n]);\n\n\/\/ OpenAI sa\u011flay\u0131c\u0131s\u0131n\u0131 kullanarak embedding servisine eri\u015fin\n\/** @var OpenAIClient $openaiClient *\/\n$openaiClient = $client->openai();\n\n$textToEmbed = \"RAG sistemi, yapay zeka uygulamalar\u0131nda do\u011fruluk ve g\u00fcncellik sa\u011flar.\";\n\ntry {\n    \/\/ Metni embedding'e \u00e7evirin\n    $embeddingResponse = $openaiClient->embeddings()->create(\n        input: [$textToEmbed],\n        model: EmbeddingModel::TextEmbedding3Small \/\/ Veya desteklenen ba\u015fka bir model\n    );\n\n    \/\/ \u0130lk metnin embedding vekt\u00f6r\u00fcn\u00fc al\u0131n\n    $embeddingVector = $embeddingResponse->data[0]->embedding;\n\n    echo \"Metin embedding'i ba\u015far\u0131yla olu\u015fturuldu. Boyutu: \" . count($embeddingVector) . \"\\n\";\n    \/\/ Embedding vekt\u00f6r\u00fcn\u00fcn ilk 5 eleman\u0131n\u0131 g\u00f6sterelim\n    echo \"\u0130lk 5 eleman: \" . implode(\", \", array_slice($embeddingVector, 0, 5)) . \"...\\n\";\n\n    \/\/ Bu vekt\u00f6r\u00fc bir vekt\u00f6r veritaban\u0131na kaydetmemiz gerekecek.\n    \/\/ \u00d6rnek: Basit bir dizi olarak saklama (ger\u00e7ek projede vekt\u00f6r veritaban\u0131 kullan\u0131l\u0131r)\n    \/\/ $vectorStore[$someId] = $embeddingVector;\n\n} catch (\\Exception $e) {\n    echo \"Embedding olu\u015fturulurken bir hata olu\u015ftu: \" . $e->getMessage() . \"\\n\";\n}\n<\/pre>\n<p><\/code><\/p>\n<pre><code class=\"language-php\">Yukar\u0131daki kod par\u00e7as\u0131, OpenAI&#039;\u0131n metin embedding modelini kullanarak bir metni say\u0131sal bir vekt\u00f6re d\u00f6n\u00fc\u015ft\u00fcrmeyi g\u00f6sterir. Bu vekt\u00f6r, daha sonra bir vekt\u00f6r veritaban\u0131na kaydedilir. Vekt\u00f6r veritaban\u0131na kaydetme i\u015flemi, Neuron AI&#039;\u0131n sa\u011flad\u0131\u011f\u0131 entegrasyonlar arac\u0131l\u0131\u011f\u0131yla yap\u0131labilir. \u00d6rne\u011fin, Weaviate entegrasyonu ile bir dok\u00fcman\u0131 embedding&#039;iyle birlikte kolayca kaydedebilirsiniz:<\/pre>\n<p><\/code><br \/>\nuse Neuron\\AI\\Providers\\Weaviate\\WeaviateClient;<\/p>\n<p>\/\/ Weaviate client'\u0131 yap\u0131land\u0131rma (\u00f6rnek)<br \/>\n$weaviateClient = new WeaviateClient([<br \/>\n    'host' => 'your-weaviate-cluster.weaviate.network',<br \/>\n    'api_key' => $_ENV['WEAVIATE_API_KEY'],<br \/>\n]);<\/p>\n<p>$documentId = 'doc-123';<br \/>\n$documentText = \"Bu, \u015firket i\u00e7i bir bilgi taban\u0131ndan al\u0131nm\u0131\u015f \u00f6nemli bir belgedir.\";<br \/>\n$embeddingVector = [...]; \/\/ Yukar\u0131daki \u00f6rnekten gelen embedding<\/p>\n<p>\/\/ Belgeyi Weaviate'e kaydetme<br \/>\ntry {<br \/>\n    $weaviateClient->dataManager()->addObject(<br \/>\n        className: 'KnowledgeBaseDocument', \/\/ S\u0131n\u0131f ad\u0131n\u0131z<br \/>\n        properties: [<br \/>\n            'content' => $documentText,<br \/>\n        ],<br \/>\n        id: $documentId,<br \/>\n        vector: $embeddingVector \/\/ Vekt\u00f6r\u00fc buraya ekliyoruz<br \/>\n    );<br \/>\n    echo \"Belge ve embedding Weaviate'e ba\u015far\u0131yla kaydedildi.\\n\";<br \/>\n} catch (\\Exception $e) {<br \/>\n    echo \"Weaviate'e kaydederken hata olu\u015ftu: \" . $e->getMessage() . \"\\n\";<br \/>\n}<br \/>\n<\/code><\/p>\n<p>Bu temel ad\u0131mlar, RAG sisteminin en \u00f6nemli bile\u015fenlerinden ikisi olan embedding olu\u015fturma ve vekt\u00f6r veritaban\u0131 entegrasyonunu anlamam\u0131z\u0131 sa\u011fl\u0131yor. Verilerimizi anlaml\u0131 vekt\u00f6rlere d\u00f6n\u00fc\u015ft\u00fcr\u00fcp bunlar\u0131 h\u0131zl\u0131ca aranabilir bir yap\u0131da saklad\u0131\u011f\u0131m\u0131zda, RAG sistemimizin temellerini atm\u0131\u015f oluyoruz.<\/p>\n<h2>Ad\u0131m Ad\u0131m RAG Sistemi Kurulumu: PHP ile Verileri Haz\u0131rlama<\/h2>\n<p>RAG sisteminin etkinli\u011fi, b\u00fcy\u00fck \u00f6l\u00e7\u00fcde ona sundu\u011funuz verilerin kalitesine ve organizasyonuna ba\u011fl\u0131d\u0131r. Veri haz\u0131rl\u0131\u011f\u0131 s\u00fcreci, sisteminizin ne kadar do\u011fru ve ilgili yan\u0131tlar \u00fcretece\u011fini belirleyen kritik bir a\u015famad\u0131r. Bu b\u00f6l\u00fcmde, PHP ile bir RAG sistemi i\u00e7in verileri nas\u0131l haz\u0131rlayaca\u011f\u0131m\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz.<\/p>\n<p>\u0130lk olarak, veri kaynaklar\u0131m\u0131z\u0131 belirlememiz gerekiyor. RAG sistemi, herhangi bir metinsel veriyi kullanabilir: PDF belgeleri, web sayfalar\u0131, veritaban\u0131 kay\u0131tlar\u0131, m\u00fc\u015fteri e-postalar\u0131, \u015firket i\u00e7i wiki sayfalar\u0131 veya JSON dosyalar\u0131 gibi yap\u0131land\u0131r\u0131lm\u0131\u015f veya yap\u0131land\u0131r\u0131lmam\u0131\u015f veriler. \u00d6nemli olan, bu verilerin sorgulara yan\u0131t verecek bilgileri i\u00e7ermesidir. \u00d6rne\u011fin, bir m\u00fc\u015fteri hizmetleri botu i\u00e7in \u00fcr\u00fcn k\u0131lavuzlar\u0131, SSS sayfalar\u0131 ve iade politikalar\u0131 ideal kaynaklard\u0131r. Bir yaz\u0131l\u0131m projesinde, teknik dok\u00fcmantasyon veya hata kay\u0131tlar\u0131 kullan\u0131labilir.<\/p>\n<p>Veri kaynaklar\u0131m\u0131z\u0131 belirledikten sonra, bu verileri y\u00fcklememiz ve \"par\u00e7alara ay\u0131rmam\u0131z\" (chunking) gerekir. LLM'ler genellikle giri\u015f boyutunda (context window) s\u0131n\u0131rlamalara sahiptir. Bu, tek seferde \u00e7ok uzun metinleri i\u015fleyemeyecekleri anlam\u0131na gelir. Ayr\u0131ca, kullan\u0131c\u0131 sorgusuyla alakal\u0131 bilgiyi bulmak i\u00e7in t\u00fcm belgeyi embedding'e d\u00f6n\u00fc\u015ft\u00fcrmek hem maliyetli hem de performans\u0131 d\u00fc\u015f\u00fcr\u00fcc\u00fcd\u00fcr. Bu nedenle, belgelerimizi daha k\u00fc\u00e7\u00fck, ancak anlamsal olarak hala anlaml\u0131 par\u00e7alara ay\u0131rmam\u0131z gerekir. \"Chunking\" ad\u0131 verilen bu s\u00fcre\u00e7, belgenin i\u00e7eri\u011fini bozmadan, her par\u00e7an\u0131n kendi ba\u015f\u0131na bir anlam ifade etmesini sa\u011flayacak \u015fekilde yap\u0131l\u0131r. Par\u00e7alama stratejileri farkl\u0131l\u0131k g\u00f6sterebilir: sabit boyutlu par\u00e7alar, c\u00fcmle tabanl\u0131 par\u00e7alar, paragraf tabanl\u0131 par\u00e7alar veya ba\u015fl\u0131k yap\u0131s\u0131na g\u00f6re par\u00e7alar. Her par\u00e7an\u0131n uzunlu\u011fu genellikle 200 ila 1000 belirte\u00e7 (token) aras\u0131nda de\u011fi\u015fir, ancak bu, kullan\u0131lan LLM ve uygulaman\u0131n gereksinimlerine g\u00f6re ayarlanabilir.<\/p>\n<p>\u015eimdi bu s\u00fcreci PHP ile nas\u0131l uygulayaca\u011f\u0131m\u0131za bakal\u0131m. Neuron AI do\u011frudan belge par\u00e7alama (chunking) ara\u00e7lar\u0131 sunmayabilir, ancak PHP'nin g\u00fc\u00e7l\u00fc metin i\u015fleme yeteneklerini ve ek k\u00fct\u00fcphaneleri kullanarak bu g\u00f6revi kolayca yerine getirebiliriz. Varsayal\u0131m ki elimizde bir dizi metin belgesi var:<\/p>\n<pre><code class=\"language-php\">\nuse Neuron\\AI\\Client;\nuse Neuron\\AI\\Providers\\OpenAI\\OpenAIClient;\nuse Neuron\\AI\\Enums\\EmbeddingModel;\nuse Dotenv\\Dotenv;\n\/\/ Vekt\u00f6r veritaban\u0131 entegrasyonu i\u00e7in kulland\u0131\u011f\u0131n\u0131z k\u00fct\u00fcphane (\u00f6rne\u011fin Weaviate i\u00e7in)\nuse Neuron\\AI\\Providers\\Weaviate\\WeaviateClient;\n\n\/\/ Ortam de\u011fi\u015fkenlerini y\u00fckle\n$dotenv = Dotenv::createImmutable(__DIR__);\n$dotenv->load();\n\n$apiKey = $_ENV['OPENAI_API_KEY'];\n$weaviateHost = $_ENV['WEAVIATE_HOST'];\n$weaviateApiKey = $_ENV['WEAVIATE_API_KEY'];\n\n\/\/ Neuron AI Client ve OpenAI embedding client'\u0131n\u0131 ba\u015flat\n$client = new Client([\n    'openai' => [\n        'api_key' => $apiKey,\n    ],\n]);\n\/** @var OpenAIClient $openaiClient *\/\n$openaiClient = $client->openai();\n\n\/\/ Weaviate client'\u0131 ba\u015flat (vekt\u00f6r veritaban\u0131 olarak Weaviate kulland\u0131\u011f\u0131m\u0131z\u0131 varsayal\u0131m)\n$weaviateClient = new WeaviateClient([\n    'host' => $weaviateHost,\n    'api_key' => $weaviateApiKey,\n]);\n\n\/\/ \u00d6rnek belgelerimiz\n$documents = [\n    [\n        'id' => 'doc-001',\n        'title' => '\u00dcr\u00fcn \u0130ade Politikas\u0131',\n        'content' => \"\u015eirketimizden sat\u0131n ald\u0131\u011f\u0131n\u0131z \u00fcr\u00fcnleri, teslimat tarihinden itibaren 14 g\u00fcn i\u00e7inde ko\u015fulsuz iade edebilirsiniz. \u0130ade edilecek \u00fcr\u00fcnlerin orijinal ambalaj\u0131nda, kullan\u0131lmam\u0131\u015f ve hasar g\u00f6rmemi\u015f olmas\u0131 gerekmektedir. \u0130ade s\u00fcreci i\u00e7in m\u00fc\u015fteri hizmetlerimizle ileti\u015fime ge\u00e7iniz. \u0130ade formunu doldurarak \u00fcr\u00fcn\u00fc kargoya verebilirsiniz. Para iadeniz, \u00fcr\u00fcn bize ula\u015ft\u0131ktan sonra 7 i\u015f g\u00fcn\u00fc i\u00e7inde hesab\u0131n\u0131za yap\u0131lacakt\u0131r. Garanti kapsam\u0131ndaki \u00fcr\u00fcnler i\u00e7in farkl\u0131 prosed\u00fcrler uygulanabilir, l\u00fctfen garanti belgesini inceleyin.\"\n    ],\n    [\n        'id' => 'doc-002',\n        'title' => 'Garanti Ko\u015fullar\u0131',\n        'content' => \"T\u00fcm elektronik \u00fcr\u00fcnlerimiz 2 y\u0131l \u00fcretici garantisi alt\u0131ndad\u0131r. Garanti, \u00fcretim hatalar\u0131n\u0131 ve i\u015f\u00e7ilik kusurlar\u0131n\u0131 kapsar. Kullan\u0131c\u0131 hatas\u0131ndan kaynaklanan hasarlar (d\u00fc\u015fme, s\u0131v\u0131 temas\u0131, yetkisiz onar\u0131m giri\u015fimi) garanti kapsam\u0131 d\u0131\u015f\u0131ndad\u0131r. Garanti hizmetinden faydalanmak i\u00e7in fatura veya garanti belgesini ibraz etmeniz gerekmektedir. Servis talepleri i\u00e7in yetkili servis noktalar\u0131m\u0131zla ileti\u015fime ge\u00e7iniz.\"\n    ],\n    [\n        'id' => 'doc-003',\n        'title' => 'M\u00fc\u015fteri Hizmetleri \u0130leti\u015fim',\n        'content' => \"M\u00fc\u015fteri hizmetlerimiz haftan\u0131n her g\u00fcn\u00fc 09:00 - 18:00 saatleri aras\u0131nda hizmet vermektedir. Telefon numaram\u0131z: 0850 123 45 67. E-posta adresimiz: destek@sirketim.com. Canl\u0131 destek i\u00e7in web sitemizdeki sohbet baloncunu kullanabilirsiniz. Teknik destek ve \u00fcr\u00fcn ar\u0131zalar\u0131 i\u00e7in ilgili departman\u0131m\u0131za y\u00f6nlendirileceksiniz.\"\n    ],\n];\n\n\/\/ Basit bir par\u00e7alama (chunking) fonksiyonu\nfunction chunkText(string $text, int $maxWords = 100): array\n{\n    $words = preg_split('\/\\s+\/', $text, -1, PREG_SPLIT_NO_EMPTY);\n    $chunks = [];\n    $currentChunk = [];\n\n    foreach ($words as $word) {\n        $currentChunk[] = $word;\n        if (count($currentChunk) >= $maxWords) {\n            $chunks[] = implode(' ', $currentChunk);\n            $currentChunk = [];\n        }\n    }\n    if (!empty($currentChunk)) {\n        $chunks[] = implode(' ', $currentChunk);\n    }\n    return $chunks;\n}\n\n\/\/ Belgeleri i\u015fleyip vekt\u00f6r veritaban\u0131na kaydetme\nforeach ($documents as $doc) {\n    $chunks = chunkText($doc['content'], 80); \/\/ Her par\u00e7ay\u0131 yakla\u015f\u0131k 80 kelimeye b\u00f6lelim\n    echo \"Belge '{$doc['title']}' i\u00e7in \" . count($chunks) . \" par\u00e7a olu\u015fturuldu.\\n\";\n\n    foreach ($chunks as $index => $chunk) {\n        try {\n            \/\/ Her par\u00e7a i\u00e7in embedding olu\u015ftur\n            $embeddingResponse = $openaiClient->embeddings()->create(\n                input: [$chunk],\n                model: EmbeddingModel::TextEmbedding3Small\n            );\n            $embeddingVector = $embeddingResponse->data[0]->embedding;\n\n            \/\/ Par\u00e7ay\u0131 ve embedding'i vekt\u00f6r veritaban\u0131na kaydet\n            \/\/ Weaviate'de her par\u00e7ay\u0131 ayr\u0131 bir nesne olarak saklayabiliriz\n            $weaviateClient->dataManager()->addObject(\n                className: 'KnowledgeBaseChunk', \/\/ Her par\u00e7ay\u0131 \"KnowledgeBaseChunk\" s\u0131n\u0131f\u0131na kaydet\n                properties: [\n                    'chunk_id' => \"{$doc['id']}-chunk-{$index}\",\n                    'document_id' => $doc['id'],\n                    'document_title' => $doc['title'],\n                    'content' => $chunk,\n                    'chunk_index' => $index,\n                ],\n                id: \"{$doc['id']}-chunk-{$index}\", \/\/ Her par\u00e7aya \u00f6zg\u00fc bir ID veriyoruz\n                vector: $embeddingVector\n            );\n            echo \"  - Par\u00e7a {$index} kaydedildi. \u0130\u00e7erik: \" . substr($chunk, 0, 50) . \"...\\n\";\n\n        } catch (\\Exception $e) {\n            echo \"  - Par\u00e7a {$index} i\u00e7in embedding veya kaydetme hatas\u0131: \" . $e->getMessage() . \"\\n\";\n        }\n    }\n}\n\necho \"\\nT\u00fcm belgeler ba\u015far\u0131yla i\u015flendi ve vekt\u00f6r veritaban\u0131na kaydedildi.\\n\";\n<\/pre>\n<p><\/code><\/p>\n<p>Bu kod par\u00e7as\u0131, \u00f6rnek metin belgelerimizi al\u0131yor, her belgeyi daha k\u00fc\u00e7\u00fck par\u00e7alara ay\u0131r\u0131yor ve ard\u0131ndan Neuron AI'\u0131n OpenAI entegrasyonunu kullanarak her bir par\u00e7a i\u00e7in bir embedding (vekt\u00f6r) olu\u015fturuyor. Son olarak, bu par\u00e7alar\u0131 (orijinal i\u00e7eri\u011fi, belge kimli\u011fi ve par\u00e7a indeksi gibi meta verilerle birlikte) ve onlar\u0131n embedding'lerini bir vekt\u00f6r veritaban\u0131 olan Weaviate'e kaydediyor. Bu i\u015flem, RAG sisteminizin daha sonra kullan\u0131c\u0131 sorgular\u0131yla en alakal\u0131 par\u00e7alar\u0131 bulabilmesi i\u00e7in temel olu\u015fturur. Verilerinizi ne kadar iyi haz\u0131rlarsan\u0131z, RAG sisteminiz o kadar verimli ve do\u011fru \u00e7al\u0131\u015facakt\u0131r. Bu s\u00fcre\u00e7, sisteminizin \"bilgi taban\u0131n\u0131\" olu\u015fturma ad\u0131m\u0131d\u0131r.<\/p>\n<h3>Sorgu \u0130\u015fleme ve LLM Entegrasyonu: Ak\u0131ll\u0131 Yan\u0131tlar Nas\u0131l \u00dcretilir?<\/h3>\n<p>RAG sisteminin veri haz\u0131rl\u0131\u011f\u0131 tamamland\u0131ktan sonra, art\u0131k kullan\u0131c\u0131 sorgular\u0131n\u0131 i\u015fleyip LLM'den ak\u0131ll\u0131 yan\u0131tlar \u00fcretme a\u015famas\u0131na ge\u00e7ebiliriz. Bu s\u00fcre\u00e7, temelde \u00fc\u00e7 ana ad\u0131mdan olu\u015fur: kullan\u0131c\u0131 sorgusunun embedding'e \u00e7evrilmesi, vekt\u00f6r veritaban\u0131nda alakal\u0131 ba\u011flam\u0131n bulunmas\u0131 ve son olarak bu ba\u011flam ile birlikte sorgunun LLM'ye iletilerek yan\u0131t \u00fcretilmesi. Bu ad\u0131mlar, RAG'\u0131n \"geri \u00e7ekme\" ve \"\u00fcretme\" fazlar\u0131n\u0131 bir araya getirir.<\/p>\n<p>\u0130lk olarak, kullan\u0131c\u0131dan gelen bir sorguyu al\u0131yoruz. Bu sorgu, do\u011fal dil formundad\u0131r (\u00f6rne\u011fin, \"\u00dcr\u00fcn iade prosed\u00fcr\u00fc nedir?\"). T\u0131pk\u0131 bilgi taban\u0131m\u0131zdaki her bir metin par\u00e7as\u0131n\u0131 embedding'e \u00e7evirdi\u011fimiz gibi, bu kullan\u0131c\u0131 sorgusunu da say\u0131sal bir vekt\u00f6re d\u00f6n\u00fc\u015ft\u00fcrmemiz gerekir. Bu, sorgunun semantik anlam\u0131n\u0131 yakalamam\u0131z\u0131 sa\u011flar ve onu vekt\u00f6r veritaban\u0131m\u0131zdaki di\u011fer embedding'lerle kar\u015f\u0131la\u015ft\u0131r\u0131labilir hale getirir. Neuron AI'\u0131n embedding servisi, bu ad\u0131m i\u00e7in kullan\u0131lacak temel ara\u00e7t\u0131r.<\/p>\n<p>Ard\u0131ndan, olu\u015fturulan sorgu embedding'i ile vekt\u00f6r veritaban\u0131m\u0131zda bir arama yapar\u0131z. Ama\u00e7, kullan\u0131c\u0131 sorgusuyla anlamsal olarak en benzer (yani vekt\u00f6r uzay\u0131nda en yak\u0131n) metin par\u00e7alar\u0131n\u0131 bulmakt\u0131r. Bu i\u015flem, \"en yak\u0131n kom\u015fu aramas\u0131\" (Nearest Neighbor Search) olarak bilinir. Vekt\u00f6r veritaban\u0131, bu aramay\u0131 son derece optimize bir \u015fekilde ger\u00e7ekle\u015ftirir ve bize belirli bir say\u0131da (\u00f6rne\u011fin 3-5 adet) en alakal\u0131 metin par\u00e7as\u0131n\u0131 d\u00f6nd\u00fcr\u00fcr. Bu par\u00e7alar, LLM'nin yan\u0131t \u00fcretirken kullanaca\u011f\u0131 \"ba\u011flam\"\u0131 olu\u015fturur.<\/p>\n<p>Son olarak, bulunan alakal\u0131 metin par\u00e7alar\u0131n\u0131 (ba\u011flam\u0131) ve orijinal kullan\u0131c\u0131 sorgusunu bir araya getirerek LLM'ye g\u00f6ndeririz. Burada kritik olan, LLM'ye net bir \"talimat\" (prompt) vermektir. Bu talimat, LLM'den sa\u011flanan ba\u011flam\u0131 kullanarak sorguyu yan\u0131tlamas\u0131n\u0131 ister. \u00d6rne\u011fin, \"A\u015fa\u011f\u0131daki ba\u011flam\u0131 kullanarak, '[kullan\u0131c\u0131n\u0131n sorusu]' sorusunu yan\u0131tla. E\u011fer ba\u011flamda yeterli bilgi yoksa, 'Bilgi bulunamad\u0131.' \u015feklinde yan\u0131t ver.\" gibi bir talimat verilebilir. LLM, bu talimat, ba\u011flam ve sorgu \u00fc\u00e7l\u00fcs\u00fcn\u00fc i\u015fleyerek nihai yan\u0131t\u0131 \u00fcretir.<\/p>\n<p>\u0130\u015fte bu s\u00fcreci g\u00f6steren bir PHP kodu \u00f6rne\u011fi:<\/p>\n<pre><code class=\"language-php\">\nuse Neuron\\AI\\Client;\nuse Neuron\\AI\\Providers\\OpenAI\\OpenAIClient;\nuse Neuron\\AI\\Providers\\Weaviate\\WeaviateClient;\nuse Neuron\\AI\\Enums\\EmbeddingModel;\nuse Neuron\\AI\\Enums\\ChatModel; \/\/ Sohbet modeli i\u00e7in\nuse Neuron\\AI\\ValueObjects\\ChatMessage;\nuse Dotenv\\Dotenv;\n\n$dotenv = Dotenv::createImmutable(__DIR__);\n$dotenv->load();\n\n$apiKey = $_ENV['OPENAI_API_KEY'];\n$weaviateHost = $_ENV['WEAVIATE_HOST'];\n$weaviateApiKey = $_ENV['WEAVIATE_API_KEY'];\n\n\/\/ Neuron AI Client ve OpenAI embedding\/chat client'\u0131n\u0131 ba\u015flat\n$client = new Client([\n    'openai' => [\n        'api_key' => $apiKey,\n    ],\n]);\n\/** @var OpenAIClient $openaiClient *\/\n$openaiClient = $client->openai();\n\n\/\/ Weaviate client'\u0131 ba\u015flat\n$weaviateClient = new WeaviateClient([\n    'host' => $weaviateHost,\n    'api_key' => $weaviateApiKey,\n]);\n\nfunction processQuery(string $userQuery, OpenAIClient $openaiClient, WeaviateClient $weaviateClient): string\n{\n    echo \"Kullan\u0131c\u0131 sorgusu: '{$userQuery}'\\n\";\n\n    \/\/ 1. Kullan\u0131c\u0131 sorgusunu embedding'e \u00e7evir\n    echo \"Sorgu embedding'i olu\u015fturuluyor...\\n\";\n    try {\n        $queryEmbeddingResponse = $openaiClient->embeddings()->create(\n            input: [$userQuery],\n            model: EmbeddingModel::TextEmbedding3Small\n        );\n        $queryVector = $queryEmbeddingResponse->data[0]->embedding;\n    } catch (\\Exception $e) {\n        return \"Sorgu embedding'i olu\u015fturulurken hata: \" . $e->getMessage();\n    }\n\n    \/\/ 2. Vekt\u00f6r veritaban\u0131nda alakal\u0131 par\u00e7alar\u0131 bul\n    echo \"Vekt\u00f6r veritaban\u0131nda alakal\u0131 par\u00e7alar aran\u0131yor...\\n\";\n    $retrievedChunks = [];\n    try {\n        \/\/ Weaviate'te vekt\u00f6r aramas\u0131n\u0131 yap (benzerlik aramas\u0131)\n        $searchResults = $weaviateClient->graphql()->query()\n            ->withClassName('KnowledgeBaseChunk') \/\/ Kaydetti\u011fimiz s\u0131n\u0131f ad\u0131\n            ->withFields(['content', 'document_title', 'document_id', 'chunk_id'])\n            ->withNearVector([\n                'vector' => $queryVector,\n                'certainty' => 0.75 \/\/ Belirlilik e\u015fi\u011fi, ihtiyaca g\u00f6re ayarlanabilir\n            ])\n            ->withLimit(3) \/\/ En alakal\u0131 3 par\u00e7ay\u0131 al\n            ->get();\n\n        foreach ($searchResults->get('KnowledgeBaseChunk') as $item) {\n            $retrievedChunks[] = $item['content'];\n        }\n    } catch (\\Exception $e) {\n        return \"Vekt\u00f6r veritaban\u0131nda arama yap\u0131l\u0131rken hata: \" . $e->getMessage();\n    }\n\n    if (empty($retrievedChunks)) {\n        return \"\u00dczg\u00fcn\u00fcm, sorgunuzla ilgili bilgi bulunamad\u0131.\";\n    }\n\n    \/\/ Alakal\u0131 par\u00e7alar\u0131 bir ba\u011flam metni olarak birle\u015ftir\n    $context = implode(\"\\n\\n---\\n\\n\", $retrievedChunks);\n    echo \"Bulunan ba\u011flam par\u00e7alar\u0131:\\n---\\n{$context}\\n---\\n\";\n\n    \/\/ 3. LLM'ye ba\u011flam ve sorguyu g\u00f6ndererek yan\u0131t \u00fcretmesini sa\u011fla\n    echo \"LLM'ye sorgu g\u00f6nderiliyor...\\n\";\n    $systemPrompt = \"Sen bir bilgi taban\u0131 asistan\u0131s\u0131n. Sana verilen ba\u011flam\u0131 kullanarak kullan\u0131c\u0131 sorular\u0131n\u0131 yan\u0131tla. \n                     Ba\u011flamda bilgi yoksa, 'Sa\u011flanan ba\u011flamda bu bilgiye rastlayamad\u0131m.' \u015feklinde yan\u0131t ver.\";\n    $userPrompt = \"Soru: {$userQuery}\\n\\nBa\u011flam:\\n{$context}\\n\\nYan\u0131t:\";\n\n    try {\n        $chatCompletion = $openaiClient->chat()->create(\n            model: ChatModel::Gpt4o, \/\/ Veya uygun bir sohbet modeli\n            messages: [\n                new ChatMessage('system', $systemPrompt),\n                new ChatMessage('user', $userPrompt),\n            ],\n            temperature: 0.7, \/\/ Yan\u0131t\u0131n yarat\u0131c\u0131l\u0131\u011f\u0131n\u0131 kontrol eder\n            maxTokens: 500 \/\/ Maksimum yan\u0131t uzunlu\u011fu\n        );\n\n        return $chatCompletion->choices[0]->message->content;\n\n    } catch (\\Exception $e) {\n        return \"LLM ile yan\u0131t \u00fcretilirken hata: \" . $e->getMessage();\n    }\n}\n\n\/\/ \u00d6rnek sorgular\n$response1 = processQuery(\"\u00dcr\u00fcn\u00fcm\u00fc nas\u0131l iade edebilirim?\", $openaiClient, $weaviateClient);\necho \"\\nLLM Yan\u0131t\u0131 1: {$response1}\\n\\n\";\n\n$response2 = processQuery(\"Elektronik \u00fcr\u00fcnlerin garanti s\u00fcresi ne kadar?\", $openaiClient, $weaviateClient);\necho \"\\nLLM Yan\u0131t\u0131 2: {$response2}\\n\\n\";\n\n$response3 = processQuery(\"\u015eirketinizin CEO'su kimdir?\", $openaiClient, $weaviateClient); \/\/ Ba\u011flamda olmayan bir soru\necho \"\\nLLM Yan\u0131t\u0131 3: {$response3}\\n\\n\";\n<\/pre>\n<p><\/code><\/p>\n<p>Bu script, bir kullan\u0131c\u0131n\u0131n sorgusunu al\u0131r, bu sorgudan bir embedding olu\u015fturur, ard\u0131ndan bu embedding'i kullanarak Weaviate vekt\u00f6r veritaban\u0131nda alakal\u0131 metin par\u00e7alar\u0131n\u0131 arar. Bulunan par\u00e7alar bir ba\u011flam olarak birle\u015ftirilir ve OpenAI'\u0131n GPT-4o gibi bir LLM'ine g\u00f6nderilir. LLM, bu ba\u011flam\u0131 kullanarak kullan\u0131c\u0131 sorgusunu yan\u0131tlar. Bu, RAG sisteminin dinamik ve ak\u0131ll\u0131 yan\u0131t \u00fcretme yetene\u011fini g\u00f6steren temel i\u015f ak\u0131\u015f\u0131d\u0131r. <code>certainty<\/code> parametresi, araman\u0131n ne kadar \"emin\" olmas\u0131 gerekti\u011fini belirler; daha d\u00fc\u015f\u00fck de\u011ferler daha fazla sonu\u00e7 d\u00f6nd\u00fcrebilirken, daha y\u00fcksek de\u011ferler sadece \u00e7ok benzer sonu\u00e7lar\u0131 d\u00f6nd\u00fcr\u00fcr.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Uygulamas\u0131: Ak\u0131ll\u0131 Bir Bilgi Taban\u0131 Botu<\/h2>\n<p>RAG sistemleri, teorik olarak harika g\u00f6r\u00fcnse de, as\u0131l g\u00fcc\u00fcn\u00fc ger\u00e7ek d\u00fcnya senaryolar\u0131nda, somut problemlere \u00e7\u00f6z\u00fcm getirirken g\u00f6sterir. En yayg\u0131n ve etkili uygulamalardan biri, \u015firket i\u00e7i bilgi tabanlar\u0131ndan g\u00fc\u00e7 alan ak\u0131ll\u0131 bir bot olu\u015fturmakt\u0131r. Bir\u00e7ok \u015firketin, \u00e7al\u0131\u015fanlar\u0131n\u0131n ve m\u00fc\u015fterilerinin s\u0131k\u00e7a ba\u015fvurdu\u011fu, ancak aranmas\u0131 veya g\u00fcncel tutulmas\u0131 zor olabilen geni\u015f dok\u00fcman havuzlar\u0131 (proje dok\u00fcmantasyonlar\u0131, i\u00e7 y\u00f6netmelikler, insan kaynaklar\u0131 politikalar\u0131, teknik destek makaleleri vb.) bulunur. Bu bilgiye eri\u015fimi kolayla\u015ft\u0131rmak, hem verimlili\u011fi art\u0131r\u0131r hem de bilgi silolar\u0131n\u0131 y\u0131kar.<\/p>\n<p><strong>Vaka Analizi: \u015eirket \u0130\u00e7i Teknik Destek Botu<\/strong><\/p>\n<p>Bir yaz\u0131l\u0131m \u015firketinde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131z\u0131 ve bir\u00e7ok farkl\u0131 projeye, teknolojiye ve i\u00e7 s\u00fcrece sahip oldu\u011funuzu hayal edin. Yeni bir \u00e7al\u0131\u015fan i\u015fe ba\u015flad\u0131\u011f\u0131nda veya mevcut bir \u00e7al\u0131\u015fan farkl\u0131 bir projeye ge\u00e7ti\u011finde, \u015firketin i\u00e7 bilgi portal\u0131ndaki y\u00fczlerce dok\u00fcman\u0131 taramak zorunda kal\u0131r. S\u0131k\u00e7a sorulan sorular \u015funlar olabilir: \"X projesinin CI\/CD pipeline'\u0131 nas\u0131l \u00e7al\u0131\u015f\u0131yor?\", \"Yeni bir mikroservis nas\u0131l devreye al\u0131n\u0131r?\", \"Maa\u015f bordromu nereden bulabilirim?\", \"VPN ba\u011flant\u0131s\u0131 kurarken hangi ayarlar\u0131 kullanmal\u0131y\u0131m?\" Bu t\u00fcr sorular\u0131n yan\u0131tlar\u0131 genellikle da\u011f\u0131n\u0131k belgelerde, Confluence sayfalar\u0131nda veya Slack ge\u00e7mi\u015flerinde gizlidir.<\/p>\n<p>\u0130\u015fte burada RAG destekli bir bilgi taban\u0131 botu devreye girer. Bu bot, t\u00fcm bu da\u011f\u0131n\u0131k belgeleri (PDF'ler, Markdown dosyalar\u0131, Wiki sayfalar\u0131, hatta JIRA\/GitHub a\u00e7\u0131klamalar\u0131) indeksler. Her belge par\u00e7as\u0131n\u0131 embedding'e d\u00f6n\u00fc\u015ft\u00fcr\u00fcr ve merkezi bir vekt\u00f6r veritaban\u0131nda saklar. Bir \u00e7al\u0131\u015fan soru sordu\u011funda, bot an\u0131nda bu belgelerden en alakal\u0131 k\u0131s\u0131mlar\u0131 \u00e7ekerek, tam ve do\u011fru bir yan\u0131t sunar.<\/p>\n<p>Bu uygulaman\u0131n faydalar\u0131 saymakla bitmez:<\/p>\n<p>*   <strong>H\u0131zl\u0131 Bilgi Eri\u015fimi:<\/strong> \u00c7al\u0131\u015fanlar saniyeler i\u00e7inde do\u011fru bilgiye ula\u015f\u0131r, saatlerce dok\u00fcman aramak zorunda kalmazlar.<br \/>\n*   <strong>Artan Verimlilik:<\/strong> Destek ekipleri, tekrarlayan sorular\u0131 yan\u0131tlamak yerine daha karma\u015f\u0131k problemlere odaklanabilir.<br \/>\n*   <strong>Standartla\u015fma ve Do\u011fruluk:<\/strong> Yan\u0131tlar, do\u011frudan \u015firket i\u00e7i belgelerden geldi\u011fi i\u00e7in tutarl\u0131 ve do\u011frudur, \"kulaktan dolma\" bilgiler azal\u0131r.<br \/>\n*   <strong>E\u011fitim S\u00fcrecini H\u0131zland\u0131rma:<\/strong> Yeni \u00e7al\u0131\u015fanlar, \u015firket k\u00fclt\u00fcr\u00fcn\u00fc ve s\u00fcre\u00e7lerini daha h\u0131zl\u0131 \u00f6\u011frenir.<\/p>\n<p><strong>Kullan\u0131c\u0131 Aray\u00fcz\u00fc ve Entegrasyon:<\/strong><\/p>\n<p>Bu t\u00fcr bir bot i\u00e7in basit bir CLI (Komut Sat\u0131r\u0131 Aray\u00fcz\u00fc) veya daha geli\u015fmi\u015f bir web aray\u00fcz\u00fc olu\u015fturabiliriz. PHP tabanl\u0131 bir web aray\u00fcz\u00fc, Laravel veya Symfony gibi bir framework kullan\u0131larak kolayca geli\u015ftirilebilir. Kullan\u0131c\u0131, web formuna sorusunu yazar, PHP backend'i RAG s\u00fcrecini i\u015fletir ve yan\u0131t\u0131 HTML olarak d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-html\">\n<!-- web\/index.html veya bir Blade\/Twig \u015fablonunda -->\n<!DOCTYPE html>\n<html lang=\"tr\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Neuron AI Bilgi Botu<\/title>\n    <style>\n        \/* Mobil uyumluluk ve genel stil i\u00e7in basit CSS *\/\n        body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; margin: 0; padding: 20px; background-color: #f4f7f6; color: #333; }\n        .container { max-width: 800px; margin: 30px auto; background-color: #fff; padding: 30px; border-radius: 10px; box-shadow: 0 4px 12px rgba(0,0,0,0.08); }\n        h1 { text-align: center; color: #2c3e50; margin-bottom: 30px; }\n        form { display: flex; flex-direction: column; gap: 15px; }\n        label { font-weight: bold; color: #34495e; }\n        textarea { padding: 12px; border: 1px solid #ddd; border-radius: 6px; font-size: 16px; resize: vertical; min-height: 80px; }\n        button { background-color: #3498db; color: white; padding: 12px 20px; border: none; border-radius: 6px; cursor: pointer; font-size: 18px; transition: background-color 0.3s ease; }\n        button:hover { background-color: #2980b9; }\n        .response-area { margin-top: 30px; padding: 20px; background-color: #eaf2f8; border-left: 5px solid #3498db; border-radius: 6px; }\n        .response-area h3 { margin-top: 0; color: #2c3e50; }\n        @media (max-width: 600px) {\n            .container { margin: 15px; padding: 20px; }\n            h1 { font-size: 24px; }\n            textarea, button { font-size: 14px; padding: 10px; }\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"container\">\n        <h1>\u015eirket \u0130\u00e7i AI Bilgi Botu<\/h1>\n        <form action=\"process.php\" method=\"POST\">\n            <label for=\"question\">Sorunuzu Yaz\u0131n:<\/label>\n            <textarea id=\"question\" name=\"question\" placeholder=\"\u00d6rn: X projesinin yeni versiyonu nas\u0131l yay\u0131nlan\u0131r?\" required><\/textarea>\n            <button type=\"submit\">Yan\u0131t Al<\/button>\n        <\/form>\n\n        <?php if (isset($_POST['question']) &#038;&#038; isset($response)): ?>\n            <div class=\"response-area\">\n                <h3>Bot Yan\u0131t\u0131:<\/h3>\n                <p><?= htmlspecialchars($response) ?><\/p>\n            <\/div>\n        <?php endif; ?>\n    <\/div>\n<\/body>\n<\/html>\n<\/pre>\n<p><\/code><br \/>\nYukar\u0131daki HTML, basit bir web aray\u00fcz\u00fc sunar. <code>process.php<\/code> dosyas\u0131 ise \u00f6nceki b\u00f6l\u00fcmde g\u00f6sterdi\u011fimiz <code>processQuery<\/code> fonksiyonunu \u00e7a\u011f\u0131rarak kullan\u0131c\u0131 sorgusunu i\u015fleyebilir.<\/p>\n<p><strong>Performans Optimizasyonlar\u0131 ve \u00d6l\u00e7eklenebilirlik:<\/strong><\/p>\n<p>Ger\u00e7ek d\u00fcnya uygulamalar\u0131nda performans ve \u00f6l\u00e7eklenebilirlik hayati \u00f6nem ta\u015f\u0131r.<\/p>\n<p>*   <strong>Caching:<\/strong> S\u0131k\u00e7a sorulan sorular\u0131n yan\u0131tlar\u0131n\u0131 \u00f6nbelle\u011fe alarak LLM \u00e7a\u011fr\u0131lar\u0131n\u0131 azaltabilir ve yan\u0131t s\u00fcrelerini \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131rabilirsiniz. Redis veya Memcached bu i\u015f i\u00e7in idealdir.<br \/>\n*   <strong>Asenkron \u0130\u015flemler:<\/strong> Veri indeksleme gibi yo\u011fun i\u015flemleri arka plan g\u00f6revleri (queue jobs) olarak \u00e7al\u0131\u015ft\u0131rmak, ana uygulaman\u0131n performans\u0131n\u0131 etkilemez. Laravel Queue sistemi veya Symfony Messenger gibi ara\u00e7lar kullan\u0131labilir.<br \/>\n*   <strong>Vekt\u00f6r Veritaban\u0131 Se\u00e7imi:<\/strong> Pinecone, Weaviate, Milvus gibi bulut tabanl\u0131 vekt\u00f6r veritabanlar\u0131, y\u00fcksek hacimli aramalar ve \u00f6l\u00e7eklenebilirlik i\u00e7in tasarlanm\u0131\u015ft\u0131r. Kendi sunucunuzda \u00e7al\u0131\u015fan Faiss veya HNSW k\u00fct\u00fcphanelerini kullanan \u00e7\u00f6z\u00fcmler de d\u00fc\u015f\u00fcn\u00fclebilir ancak y\u00f6netimi daha zordur.<br \/>\n*   <strong>Chunking Stratejileri:<\/strong> Daha ak\u0131ll\u0131 par\u00e7alama algoritmalar\u0131 (\u00f6rne\u011fin, semantik tabanl\u0131 par\u00e7alama, i\u00e7 i\u00e7e ge\u00e7mi\u015f par\u00e7alar) kullanmak, arama kalitesini art\u0131rabilir.<\/p>\n<p>Bu uygulamalar, PHP ve Neuron AI ile bir RAG sisteminin sadece bir ak\u015famda prototipini olu\u015fturabilece\u011finiz ancak ger\u00e7ek d\u00fcnya sorunlar\u0131na kal\u0131c\u0131 \u00e7\u00f6z\u00fcmler sunabilece\u011fi potansiyelini g\u00f6zler \u00f6n\u00fcne seriyor.<\/p>\n<h2>\u0130leri Seviye Optimizasyonlar ve Gelecek Ad\u0131mlar<\/h2>\n<p>Basit bir RAG sistemi kurmak harika bir ba\u015flang\u0131\u00e7 noktas\u0131 olsa da, ger\u00e7ek d\u00fcnya uygulamalar\u0131 genellikle daha karma\u015f\u0131k optimizasyonlar ve ileri d\u00fczey teknikler gerektirir. Sisteminizin performans\u0131n\u0131, do\u011frulu\u011funu ve kullan\u0131c\u0131 deneyimini art\u0131rmak i\u00e7in atabilece\u011finiz baz\u0131 ileri ad\u0131mlar ve gelecekteki olas\u0131l\u0131klar \u015funlard\u0131r:<\/p>\n<p>*   <strong>Daha Ak\u0131ll\u0131 Par\u00e7alama (Chunking) Stratejileri:<\/strong> Daha \u00f6nce bahsetti\u011fimiz basit kelime veya karakter tabanl\u0131 par\u00e7alaman\u0131n \u00f6tesine ge\u00e7ebiliriz.<br \/>\n    *   <strong>Semantik Par\u00e7alama:<\/strong> Par\u00e7alar\u0131, anlamsal b\u00fct\u00fcnl\u00fcklerini koruyacak \u015fekilde, \u00f6zellikle bir konuyu veya fikri bitirdikleri noktalardan ay\u0131rmak.<br \/>\n    *   <strong>Yeniden Kesme (Overlap Chunking):<\/strong> Par\u00e7alar aras\u0131nda k\u00fc\u00e7\u00fck bir \"\u00e7ak\u0131\u015fma\" b\u0131rakmak, ba\u011flam\u0131n kaybolmamas\u0131n\u0131 sa\u011flamaya yard\u0131mc\u0131 olur. \u00d6rne\u011fin, bir \u00f6nceki par\u00e7an\u0131n son birka\u00e7 c\u00fcmlesini yeni par\u00e7an\u0131n ba\u015f\u0131na eklemek.<br \/>\n    *   <strong>Ba\u015fl\u0131k veya Belge Yap\u0131s\u0131na G\u00f6re Par\u00e7alama:<\/strong> HTML veya Markdown gibi yap\u0131land\u0131r\u0131lm\u0131\u015f belgelerde, ba\u015fl\u0131k seviyelerini kullanarak mant\u0131ksal b\u00f6l\u00fcmlere ay\u0131rma. \u00d6rne\u011fin, her H2 ba\u015fl\u0131\u011f\u0131n\u0131n alt\u0131ndaki t\u00fcm i\u00e7eri\u011fi bir par\u00e7a olarak almak. Bu, \u00f6zellikle dok\u00fcmanlar\u0131 anlamak i\u00e7in \u00e7ok \u00f6nemlidir.<\/p>\n<p>*   <strong>Yeniden S\u0131ralama (Re-ranking):<\/strong> Vekt\u00f6r veritaban\u0131ndan gelen ilk N adet alakal\u0131 par\u00e7a her zaman en iyi ba\u011flam\u0131 sunmayabilir. Bir yeniden s\u0131ralama (re-ranking) mekanizmas\u0131 ekleyerek, bu N par\u00e7ay\u0131 daha k\u00fc\u00e7\u00fck bir LLM (veya BERT gibi bir s\u0131ralama modeli) kullanarak sorguya g\u00f6re daha da optimize edebilirsiniz. Bu, LLM'ye giden ba\u011flam\u0131n kalitesini art\u0131rarak daha do\u011fru yan\u0131tlar elde edilmesini sa\u011flar. Neuron AI, farkl\u0131 LLM'ler veya s\u0131ralama modelleriyle entegrasyon i\u00e7in esnek bir yap\u0131 sunabilir.<\/p>\n<p>*   <strong>Farkl\u0131 Vekt\u00f6r Veritabanlar\u0131 ile Denemeler:<\/strong> Makalede Weaviate'\u0131 kulland\u0131k, ancak piyasada bir\u00e7ok farkl\u0131 vekt\u00f6r veritaban\u0131 bulunuyor ve her birinin kendine \u00f6zg\u00fc avantajlar\u0131 var:<br \/>\n    *   <strong>Pinecone:<\/strong> Y\u00fcksek performansl\u0131, y\u00f6netilen bir vekt\u00f6r veritaban\u0131. \u00d6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli uygulamalar i\u00e7in idealdir.<br \/>\n    *   <strong>Milvus\/Zilliz:<\/strong> A\u00e7\u0131k kaynakl\u0131 ve bulut tabanl\u0131 se\u00e7enekleriyle esneklik sunar.<br \/>\n    *   <strong>Qdrant:<\/strong> Rust tabanl\u0131, h\u0131zl\u0131 ve esnek, Kubernetes ile kolayca \u00f6l\u00e7eklenebilir.<br \/>\n    *   <strong>PostgreSQL with pgvector:<\/strong> E\u011fer zaten PostgreSQL kullan\u0131yorsan\u0131z, <code>pgvector<\/code> eklentisi ile mevcut veritaban\u0131n\u0131z\u0131 vekt\u00f6r veritaban\u0131na d\u00f6n\u00fc\u015ft\u00fcrebilirsiniz. Bu, ek bir ba\u011f\u0131ml\u0131l\u0131k kurmaktan ka\u00e7\u0131nmak i\u00e7in iyi bir se\u00e7enek olabilir.<\/p>\n<p>*   <strong>Asenkron \u0130\u015flemler ve Arka Plan G\u00f6revleri:<\/strong> \u00d6zellikle veri indeksleme veya b\u00fcy\u00fck hacimli sorgu i\u015fleme gibi yo\u011fun g\u00f6revlerde, PHP uygulaman\u0131z\u0131n ana ak\u0131\u015f\u0131n\u0131 bloke etmemek i\u00e7in asenkron i\u015flemleri veya arka plan kuyruklar\u0131n\u0131 kullanmak kritik \u00f6neme sahiptir. Laravel Queue, Symfony Messenger veya Swoole gibi k\u00fct\u00fcphaneler bu konuda size yard\u0131mc\u0131 olabilir. \u00d6rne\u011fin, yeni bir belge eklendi\u011finde, bu belgenin par\u00e7alara ayr\u0131lmas\u0131 ve embedding'lerinin olu\u015fturulmas\u0131 bir kuyrukta i\u015flenebilir.<\/p>\n<p>*   <strong>Kullan\u0131c\u0131 Geri Bildirimi ve Model \u0130yile\u015ftirmesi:<\/strong> RAG sisteminizin zamanla daha iyi performans g\u00f6stermesi i\u00e7in kullan\u0131c\u0131 geri bildirimlerini toplamak \u00f6nemlidir. Kullan\u0131c\u0131lar\u0131n be\u011fenmedikleri veya yanl\u0131\u015f bulduklar\u0131 yan\u0131tlar\u0131 i\u015faretlemelerine izin verin. Bu geri bildirimleri, LLM prompt'lar\u0131n\u0131z\u0131 iyile\u015ftirmek, yeniden s\u0131ralama modellerini ayarlamak veya hatta bilgi taban\u0131n\u0131zdaki eksiklikleri gidermek i\u00e7in kullanabilirsiniz.<\/p>\n<p>*   <strong>Mobil Uyumlu Tasar\u0131m Detaylar\u0131:<\/strong> Makalenin ba\u015f\u0131nda ekledi\u011fimiz CSS kodunda oldu\u011fu gibi, RAG sisteminin \u00e7\u0131kt\u0131s\u0131 bir web aray\u00fcz\u00fcnde sunuluyorsa, mobil uyumluluk her zaman d\u00fc\u015f\u00fcn\u00fclmelidir. CSS media query'leri, farkl\u0131 ekran boyutlar\u0131na g\u00f6re d\u00fczeni ve font boyutlar\u0131n\u0131 ayarlamak i\u00e7in temel bir ara\u00e7t\u0131r. Ancak daha geli\u015fmi\u015f senaryolarda, esnek grid sistemleri (CSS Grid, Flexbox) ve duyarl\u0131 resimler gibi teknikler de devreye girer. PHP backend'i mobil uyumluluk konusunda do\u011frudan bir rol oynamasa da, mobil uygulamalar i\u00e7in JSON API'lar\u0131 sunarak veya minimalist HTML \u00e7\u0131kt\u0131lar\u0131 olu\u015fturarak dolayl\u0131 olarak katk\u0131da bulunabilir.<\/p>\n<pre><code class=\"language-css\">\n\/* \u00d6rnek bir responsive resim stili *\/\nimg {\n  max-width: 100%;\n  height: auto;\n  display: block; \/* Resmin alt\u0131nda bo\u015fluk olu\u015fmas\u0131n\u0131 engeller *\/\n}\n\n\/* Flexbox ile responsive layout \u00f6rne\u011fi *\/\n.flex-container {\n  display: flex;\n  flex-wrap: wrap; \/* \u00d6\u011feler s\u0131\u011fmad\u0131\u011f\u0131nda alt sat\u0131ra ge\u00e7sin *\/\n  gap: 20px;\n}\n\n.flex-item {\n  flex: 1 1 300px; \/* Minimum 300px geni\u015flik, esneyebilir *\/\n  background-color: #f0f0f0;\n  padding: 15px;\n  border-radius: 5px;\n}\n\n@media (max-width: 600px) {\n  .flex-item {\n    flex: 1 1 100%; \/* Mobil cihazlarda tam geni\u015flik *\/\n  }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Bu ileri d\u00fczey optimizasyonlar ve gelecekteki ad\u0131mlar, RAG sisteminizin sadece temel bir prototip olmaktan \u00e7\u0131k\u0131p, ger\u00e7ek d\u00fcnya ihtiya\u00e7lar\u0131na yan\u0131t veren sa\u011flam ve etkili bir \u00e7\u00f6z\u00fcme d\u00f6n\u00fc\u015fmesini sa\u011flayacakt\u0131r. PHP ve Neuron AI, bu yolculukta size esneklik ve g\u00fc\u00e7 sunarak modern AI uygulamalar\u0131n\u0131 geli\u015ftirmenize olanak tan\u0131r.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu makalede, PHP geli\u015ftiricileri olarak Neuron AI \u00e7er\u00e7evesini kullanarak kendi Retrival Augmented Generation (RAG) sistemimizi nas\u0131l kuraca\u011f\u0131m\u0131z\u0131 ad\u0131m ad\u0131m inceledik. B\u00fcy\u00fck dil modellerinin (LLM'ler) g\u00fcncel ve \u00f6zel bilgilere eri\u015fim s\u0131n\u0131rl\u0131l\u0131klar\u0131n\u0131 RAG ile nas\u0131l a\u015fabilece\u011fimizi g\u00f6rd\u00fck. Neuron AI'\u0131n, embedding olu\u015fturma ve vekt\u00f6r veritaban\u0131 entegrasyonu gibi kritik AI bile\u015fenlerini PHP d\u00fcnyas\u0131na ta\u015f\u0131yarak bu s\u00fcreci nas\u0131l basitle\u015ftirdi\u011fine tan\u0131k olduk. Belgeleri par\u00e7alama, embedding'lere d\u00f6n\u00fc\u015ft\u00fcrme ve bir vekt\u00f6r veritaban\u0131na kaydetme ad\u0131mlar\u0131n\u0131 i\u00e7eren veri haz\u0131rl\u0131\u011f\u0131 s\u00fcrecini ele ald\u0131k. Ard\u0131ndan, kullan\u0131c\u0131 sorgular\u0131n\u0131 al\u0131p alakal\u0131 ba\u011flam\u0131 geri \u00e7ekerek LLM'den nas\u0131l ak\u0131ll\u0131 ve do\u011fru yan\u0131tlar \u00fcretebilece\u011fimizi uygulamal\u0131 kod \u00f6rnekleriyle g\u00f6sterdik. Son olarak, \u015firket i\u00e7i bilgi taban\u0131 botu gibi ger\u00e7ek d\u00fcnya senaryolar\u0131 \u00fczerinden RAG'\u0131n pratik de\u011ferini vurgulad\u0131k ve performans optimizasyonlar\u0131 ile ileri seviye tekniklere dair ipu\u00e7lar\u0131 payla\u015ft\u0131k.<\/p>\n<p>Art\u0131k PHP'nin sadece web geli\u015ftirme i\u00e7in de\u011fil, ayn\u0131 zamanda modern yapay zeka uygulamalar\u0131 i\u00e7in de g\u00fc\u00e7l\u00fc bir platform oldu\u011funu biliyoruz. Neuron AI sayesinde, AI ve makine \u00f6\u011frenimi alan\u0131ndaki en son yenilikleri kendi projelerinize entegre etmek hi\u00e7 bu kadar eri\u015filebilir olmam\u0131\u015ft\u0131. Ak\u015fam\u0131n\u0131z\u0131 ay\u0131rarak bile, bu g\u00fc\u00e7l\u00fc teknolojiyi ke\u015ffetmeye ba\u015flayabilir ve uygulamalar\u0131n\u0131za de\u011fer katabilirsiniz. Gelecek, bilgiye dayal\u0131 ve ak\u0131ll\u0131 sistemlerde yat\u0131yor; PHP geli\u015ftiricileri olarak bu de\u011fi\u015fimin \u00f6n saflar\u0131nda yer almak bizim elimizde.<\/p>\n<div class=\"faq-section\">\n<h2>S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<div class=\"faq-question\">1. Neuron AI Framework'\u00fc kullanmak i\u00e7in PHP'nin hangi s\u00fcr\u00fcm\u00fcne ihtiyac\u0131m var?<\/div>\n<div class=\"faq-answer\">Genellikle Neuron AI gibi modern PHP k\u00fct\u00fcphaneleri, g\u00fcncel ve desteklenen PHP s\u00fcr\u00fcmlerini (\u00f6rne\u011fin PHP 8.1 veya daha yenisi) gerektirir. En do\u011fru bilgi i\u00e7in projenin resmi dok\u00fcmantasyonunu kontrol etmeniz \u00f6nerilir.<\/div>\n<div class=\"faq-question\">2. Hangi vekt\u00f6r veritabanlar\u0131n\u0131 Neuron AI ile kullanabilirim?<\/div>\n<div class=\"faq-answer\">Neuron AI, Weaviate ve Pinecone gibi pop\u00fcler vekt\u00f6r veritabanlar\u0131 i\u00e7in haz\u0131r entegrasyonlar sunar. Framework'\u00fcn mod\u00fcler yap\u0131s\u0131 sayesinde, gelecekte farkl\u0131 vekt\u00f6r veritabanlar\u0131 i\u00e7in de destek eklenebilir veya kendi adapt\u00f6r\u00fcn\u00fcz\u00fc yazarak entegrasyon sa\u011flayabilirsiniz.<\/div>\n<div class=\"faq-question\">3. RAG sistemlerinde \"chunk boyutu\" ne kadar olmal\u0131?<\/div>\n<div class=\"faq-answer\">Chunk boyutu, kullan\u0131lan LLM'in ba\u011flam penceresi, veri kayna\u011f\u0131n\u0131n yap\u0131s\u0131 ve uygulaman\u0131z\u0131n \u00f6zel gereksinimlerine g\u00f6re de\u011fi\u015fir. Genellikle 200 ila 1000 belirte\u00e7 (token) aras\u0131 \u00f6nerilir. \u00c7ok k\u00fc\u00e7\u00fck par\u00e7alar ba\u011flam kayb\u0131na yol a\u00e7arken, \u00e7ok b\u00fcy\u00fck par\u00e7alar LLM'in limitlerini a\u015fabilir ve maliyeti art\u0131rabilir. Deneme yan\u0131lma yoluyla optimal boyutu bulmak en iyi yakla\u015f\u0131md\u0131r.<\/div>\n<div class=\"faq-question\">4. RAG sistemim neden bazen yanl\u0131\u015f cevaplar veriyor?<\/div>\n<div class=\"faq-answer\">Yanl\u0131\u015f cevaplar birka\u00e7 nedenden kaynaklanabilir: 1) K\u00f6t\u00fc par\u00e7alama stratejisi: Alakal\u0131 bilgi par\u00e7alara ayr\u0131l\u0131rken kaybolmu\u015f olabilir. 2) Yetersiz veri kalitesi: Bilgi taban\u0131n\u0131zdaki veriler eksik, yanl\u0131\u015f veya g\u00fcncel de\u011filse. 3) K\u00f6t\u00fc sorgu embedding'i: Kullan\u0131c\u0131 sorgusu do\u011fru \u015fekilde vekt\u00f6re d\u00f6n\u00fc\u015ft\u00fcr\u00fclememi\u015f olabilir. 4) Yetersiz arama: Vekt\u00f6r veritaban\u0131, sorguya en alakal\u0131 par\u00e7alar\u0131 bulamam\u0131\u015f olabilir (\u00f6rne\u011fin <code>certainty<\/code> e\u015fi\u011fi \u00e7ok y\u00fcksek olabilir). 5) Zay\u0131f prompt m\u00fchendisli\u011fi: LLM'ye verilen talimatlar yeterince a\u00e7\u0131k veya y\u00f6nlendirici olmayabilir. Bu alanlarda iyile\u015ftirmeler yaparak sistemin do\u011frulu\u011funu art\u0131rabilirsiniz.<\/div>\n<div class=\"faq-question\">5. PHP tabanl\u0131 bir RAG sistemi, Python tabanl\u0131 bir \u00e7\u00f6z\u00fcme g\u00f6re dezavantajl\u0131 m\u0131d\u0131r?<\/div>\n<div class=\"faq-answer\">PHP tabanl\u0131 RAG sistemleri, performans veya yetenek a\u00e7\u0131s\u0131ndan Python tabanl\u0131 \u00e7\u00f6z\u00fcmlere g\u00f6re esasen bir dezavantaj ta\u015f\u0131maz. Arka planda kullan\u0131lan LLM'ler ve vekt\u00f6r veritabanlar\u0131 genellikle dil ba\u011f\u0131ms\u0131z API'lar \u00fczerinden eri\u015filebilir. Neuron AI gibi framework'ler, bu API'larla etkile\u015fimi PHP geli\u015ftiricileri i\u00e7in kolayla\u015ft\u0131r\u0131r. PHP'nin mevcut altyap\u0131n\u0131za entegrasyonu kolayl\u0131\u011f\u0131 ve g\u00fc\u00e7l\u00fc web yetenekleri, bir\u00e7ok senaryoda onu cazip bir se\u00e7enek haline getirir.<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"PHP ve Neuron AI ile Ak\u015fam\u0131n\u0131za RAG Sistemi Kurun G\u00fcn\u00fcm\u00fcz d\u00fcnyas\u0131nda, b\u00fcy\u00fck dil modelleri (LLM&#8217;ler) hayat\u0131m\u0131z\u0131n vazge\u00e7ilmez bir&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-34381","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>RAG Sistemi Nedir ve Neden \u00d6nemlidir?<\/title>\n<meta name=\"description\" content=\"Hi\u00e7bir etiketi bulunamad\u0131.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"RAG Sistemi Nedir ve Neden \u00d6nemlidir?\" \/>\n<meta property=\"og:description\" content=\"Hi\u00e7bir etiketi bulunamad\u0131.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-15T21:01:23+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"31 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"RAG Sistemi Nedir ve Neden \u00d6nemlidir?\",\"datePublished\":\"2025-11-15T21:01:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/\"},\"wordCount\":4770,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/\",\"name\":\"RAG Sistemi Nedir ve Neden \u00d6nemlidir?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-15T21:01:23+00:00\",\"description\":\"Hi\u00e7bir etiketi bulunamad\u0131.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"RAG Sistemi Nedir ve Neden \u00d6nemlidir?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"RAG Sistemi Nedir ve Neden \u00d6nemlidir?","description":"Hi\u00e7bir etiketi bulunamad\u0131.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/","og_locale":"tr_TR","og_type":"article","og_title":"RAG Sistemi Nedir ve Neden \u00d6nemlidir?","og_description":"Hi\u00e7bir etiketi bulunamad\u0131.","og_url":"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-15T21:01:23+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"31 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"RAG Sistemi Nedir ve Neden \u00d6nemlidir?","datePublished":"2025-11-15T21:01:23+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/"},"wordCount":4770,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/","url":"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/","name":"RAG Sistemi Nedir ve Neden \u00d6nemlidir?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-15T21:01:23+00:00","description":"Hi\u00e7bir etiketi bulunamad\u0131.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/rag-sistemi-nedir-ve-neden-onemlidir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"RAG Sistemi Nedir ve Neden \u00d6nemlidir?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34381","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=34381"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34381\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34381"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34381"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34381"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}