{"id":36918,"date":"2025-12-24T23:00:45","date_gmt":"2025-12-24T20:00:45","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/"},"modified":"2025-12-24T23:00:45","modified_gmt":"2025-12-24T20:00:45","slug":"basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/","title":{"rendered":"Basit RAG&#8217;\u0131n \u00d6tesine Ge\u00e7mek: Next.js, Python ve Supabase ile Ajan Temelli \u0130\u015f Ak\u0131\u015flar\u0131 Olu\u015fturma"},"content":{"rendered":"<h2>Basit RAG&#8217;\u0131n \u00d6tesine Ge\u00e7mek: Next.js, Python ve Supabase ile Ajan Temelli \u0130\u015f Ak\u0131\u015flar\u0131 Olu\u015fturma<\/h2>\n<p>B\u00fcy\u00fck Dil Modelleri (LLM&#8217;ler) d\u00fcnyay\u0131 kas\u0131p kavururken, Bilgi Art\u0131r\u0131lm\u0131\u015f \u00dcretim (RAG &#8211; Retrieval Augmented Generation) teknikleri, bu modellerin g\u00fcncel ve spesifik bilgilere eri\u015fimini sa\u011flayarak hal\u00fcsinasyon riskini azaltmada kilit rol oynam\u0131\u015ft\u0131r. Ancak basit RAG uygulamalar\u0131 genellikle statik bilgi \u00e7ekme ve tek y\u00f6nl\u00fc yan\u0131tlar \u00fcretme ile s\u0131n\u0131rl\u0131d\u0131r. Ger\u00e7ek d\u00fcnya problemlerini \u00e7\u00f6zmek ve daha dinamik, otonom sistemler kurmak i\u00e7in RAG&#8217;\u0131n \u00f6tesine ge\u00e7erek &#8220;ajan temelli&#8221; i\u015f ak\u0131\u015flar\u0131na y\u00f6nelmek gerekiyor. Bu makalede, Next.js, Python ve Supabase gibi modern teknolojileri kullanarak nas\u0131l daha ak\u0131ll\u0131, ara\u00e7 kullanabilen ve karar verebilen ajan temelli sistemler kurabilece\u011fimizi detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<h3>Basit RAG&#8217;dan Ajan Temelli Yakla\u015f\u0131ma Neden Ge\u00e7meliyiz?<\/h3>\n<p>RAG, LLM&#8217;lerin belirli bir bilgi taban\u0131ndan (dok\u00fcmanlar, veritabanlar\u0131 vb.) ilgili par\u00e7ac\u0131klar\u0131 \u00e7ekerek yan\u0131tlar\u0131n\u0131 bu bilgilerle zenginle\u015ftirmesini sa\u011flayan g\u00fc\u00e7l\u00fc bir y\u00f6ntemdir. Ancak \u00e7o\u011fu basit RAG uygulamas\u0131, kullan\u0131c\u0131n\u0131n sorgusuna do\u011frudan bir yan\u0131t \u00fcretmekle s\u0131n\u0131rl\u0131d\u0131r. Ger\u00e7ek d\u00fcnya senaryolar\u0131nda, bir sorgu genellikle birden fazla ad\u0131m\u0131, harici ara\u00e7 kullan\u0131m\u0131n\u0131 veya dinamik karar alma s\u00fcre\u00e7lerini gerektirir.<\/p>\n<h4>RAG&#8217;\u0131n S\u0131n\u0131rlar\u0131: Statik Bilgi ve Tek Y\u00f6nl\u00fc Etkile\u015fim<\/h4>\n<p>Basit RAG, genellikle vekt\u00f6r veritabanlar\u0131nda depolanan \u00f6nceden tan\u0131mlanm\u0131\u015f metin par\u00e7ac\u0131klar\u0131n\u0131 sorgular ve LLM&#8217;ye ba\u011flam olarak sunar. Bu yakla\u015f\u0131m, belirli bir dok\u00fcman k\u00fcmesi i\u00e7indeki sorular\u0131 yan\u0131tlamak i\u00e7in m\u00fckemmeldir. Ancak, bir kullan\u0131c\u0131n\u0131n &#8220;Bug\u00fcn hava nas\u0131l?&#8221; gibi bir sorusuna yan\u0131t vermek i\u00e7in harici bir hava durumu API&#8217;sini \u00e7a\u011f\u0131rmak veya &#8220;Bana son \u00fc\u00e7 aydaki sat\u0131\u015f raporlar\u0131n\u0131 getir ve \u00f6zetle&#8221; gibi bir istek i\u00e7in bir veritaban\u0131 sorgusu \u00e7al\u0131\u015ft\u0131rmak gibi dinamik eylemleri ger\u00e7ekle\u015ftiremez. RAG, &#8220;ne&#8221; sorusuna yan\u0131t verirken, &#8220;nas\u0131l&#8221; ve &#8220;ne yapmal\u0131y\u0131m&#8221; sorular\u0131nda yetersiz kal\u0131r.<\/p>\n<h4>Ajan Temelli Sistemlerin G\u00fcc\u00fc: Dinamik Karar Alma ve Ara\u00e7 Kullan\u0131m\u0131<\/h4>\n<p>Ajan temelli sistemler, LLM&#8217;leri yaln\u0131zca bir metin \u00fcreticisi olarak de\u011fil, ayn\u0131 zamanda bir &#8220;ak\u0131l y\u00fcr\u00fctme motoru&#8221; olarak kullan\u0131r. Bu sistemler, belirli bir hedefe ula\u015fmak i\u00e7in bir dizi ad\u0131m\u0131 planlayabilir, bu ad\u0131mlar\u0131 ger\u00e7ekle\u015ftirmek i\u00e7in harici ara\u00e7lar\u0131 (API&#8217;ler, veritaban\u0131 sorgular\u0131, kod yorumlay\u0131c\u0131lar vb.) kullanabilir ve hatta ba\u015far\u0131s\u0131zl\u0131k durumunda planlar\u0131n\u0131 revize edebilir. Bu, sistemin daha otonom, adaptif ve karma\u015f\u0131k g\u00f6revleri yerine getirebilir olmas\u0131n\u0131 sa\u011flar. \u00d6rne\u011fin, bir m\u00fc\u015fteri destek ajan\u0131, bir kullan\u0131c\u0131n\u0131n sipari\u015f durumunu \u00f6\u011frenmek i\u00e7in bir e-ticaret API&#8217;sini sorgulayabilir, ard\u0131ndan kargo takibi i\u00e7in ba\u015fka bir API kullanabilir ve t\u00fcm bu bilgileri sentezleyerek kullan\u0131c\u0131ya kapsaml\u0131 bir yan\u0131t sunabilir.<\/p>\n<h4>\u0130\u015f Ak\u0131\u015f\u0131 Otomasyonunda Yeni Bir Boyut<\/h4>\n<p>Ajan temelli yakla\u015f\u0131mlar, i\u015f ak\u0131\u015f\u0131 otomasyonunda devrim niteli\u011finde yeni kap\u0131lar a\u00e7ar. \u0130nsan m\u00fcdahalesi olmadan, karma\u015f\u0131k g\u00f6revleri ba\u015ftan sona y\u00fcr\u00fctebilen, dinamik ko\u015fullara uyum sa\u011flayabilen ve \u00f6\u011frenme yetene\u011fine sahip sistemler olu\u015fturmak m\u00fcmk\u00fcn hale gelir. Bu, \u00f6zellikle m\u00fc\u015fteri hizmetleri, veri analizi, yaz\u0131l\u0131m geli\u015ftirme asistanl\u0131\u011f\u0131 ve operasyonel y\u00f6netim gibi alanlarda verimlili\u011fi ve kapasiteyi \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir.<\/p>\n<h3>Ajan Temelli \u0130\u015f Ak\u0131\u015f\u0131n\u0131n Temel Bile\u015fenleri<\/h3>\n<p>Bir ajan temelli sistem, basit bir LLM \u00e7a\u011fr\u0131s\u0131ndan \u00e7ok daha fazlas\u0131n\u0131 i\u00e7erir. Bu sistemler, belirli bir mimari ve temel bile\u015fenler etraf\u0131nda in\u015fa edilir.<\/p>\n<h4>B\u00fcy\u00fck Dil Modelleri (LLM&#8217;ler) ve Ak\u0131l Y\u00fcr\u00fctme Yetene\u011fi<\/h4>\n<p>Ajan\u0131n beyni, bir LLM&#8217;dir. LLM, kullan\u0131c\u0131n\u0131n iste\u011fini anlar, hedefe ula\u015fmak i\u00e7in bir plan yapar, hangi ara\u00e7lar\u0131 kullanaca\u011f\u0131na karar verir ve bu ara\u00e7lar\u0131n \u00e7\u0131kt\u0131s\u0131n\u0131 yorumlar. Bu s\u00fcre\u00e7, &#8220;ak\u0131l y\u00fcr\u00fctme&#8221; olarak adland\u0131r\u0131l\u0131r ve LLM&#8217;nin do\u011fal dil anlama, problem \u00e7\u00f6zme ve mant\u0131ksal \u00e7\u0131kar\u0131m yeteneklerine dayan\u0131r. Modelin kalitesi, ajan sisteminin genel performans\u0131n\u0131 do\u011frudan etkiler.<\/p>\n<h4>Ara\u00e7lar (Tools) ve Fonksiyon \u00c7a\u011fr\u0131lar\u0131<\/h4>\n<p>Ajanlar\u0131n en \u00f6nemli \u00f6zelliklerinden biri, harici &#8220;ara\u00e7lar\u0131&#8221; kullanabilmesidir. Bu ara\u00e7lar, belirli bir g\u00f6revi yerine getiren fonksiyonlar veya API&#8217;lerdir. \u00d6rnekler aras\u0131nda:<br \/>\n*   <strong>Arama Motoru:<\/strong> \u0130nternet \u00fczerinden bilgi edinmek i\u00e7in.<br \/>\n*   <strong>Veritaban\u0131 Sorgulay\u0131c\u0131:<\/strong> SQL veya NoSQL veritabanlar\u0131ndan veri \u00e7ekmek veya g\u00fcncellemek i\u00e7in.<br \/>\n*   <strong>Hesap Makinesi\/Kod Yorumlay\u0131c\u0131:<\/strong> Matematiksel i\u015flemler yapmak veya kod \u00e7al\u0131\u015ft\u0131rmak i\u00e7in.<br \/>\n*   <strong>\u00d6zel API&#8217;ler:<\/strong> \u015eirket i\u00e7i sistemlerle (CRM, ERP, e-ticaret platformlar\u0131 vb.) etkile\u015fim kurmak i\u00e7in.<br \/>\nLLM, ihtiyaca g\u00f6re bu ara\u00e7lar\u0131 \u00e7a\u011f\u0131r\u0131r, gerekli parametreleri sa\u011flar ve arac\u0131n \u00e7\u0131kt\u0131s\u0131n\u0131 alarak sonraki ad\u0131mlar\u0131 belirler.<\/p>\n<h4>Bellek (Memory) ve Ba\u011flam Y\u00f6netimi<\/h4>\n<p>Ajanlar, birden fazla etkile\u015fimi kapsayan bir &#8220;belle\u011fe&#8221; sahip olmal\u0131d\u0131r. Bu bellek, \u00f6nceki konu\u015fmalar\u0131, al\u0131nan kararlar\u0131, kullan\u0131lan ara\u00e7lar\u0131 ve bunlar\u0131n sonu\u00e7lar\u0131n\u0131 i\u00e7erir. Bellek, ajan\u0131n tutarl\u0131 ve ba\u011flamdan kopuk olmayan yan\u0131tlar vermesini, \u00f6nceki hatalar\u0131ndan ders \u00e7\u0131karmas\u0131n\u0131 ve daha karma\u015f\u0131k, \u00e7ok ad\u0131ml\u0131 g\u00f6revleri ba\u015far\u0131yla tamamlamas\u0131n\u0131 sa\u011flar. K\u0131sa s\u00fcreli (ge\u00e7ici konu\u015fma ge\u00e7mi\u015fi) ve uzun s\u00fcreli (vekt\u00f6r veritaban\u0131nda depolanan \u00f6nemli bilgiler) bellek t\u00fcrleri mevcuttur.<\/p>\n<h4>Planlama ve Geri Bildirim D\u00f6ng\u00fcleri<\/h4>\n<p>Bir ajan, bir hedefe ula\u015fmak i\u00e7in bir &#8220;plan&#8221; yapar. Bu plan, bir dizi ard\u0131\u015f\u0131k veya paralel ad\u0131mdan olu\u015fabilir. Her ad\u0131mda, ajan bir ara\u00e7 kullanabilir, bilgi toplayabilir veya bir karar verebilir. Arac\u0131n \u00e7\u0131kt\u0131s\u0131 al\u0131nd\u0131\u011f\u0131nda, ajan bu \u00e7\u0131kt\u0131y\u0131 de\u011ferlendirir (geri bildirim) ve bir sonraki ad\u0131m\u0131 belirler. E\u011fer plan ba\u015far\u0131s\u0131z olursa veya beklenmedik bir durum ortaya \u00e7\u0131karsa, ajan plan\u0131n\u0131 revize edebilir veya kullan\u0131c\u0131dan ek bilgi isteyebilir. Bu iteratif s\u00fcre\u00e7, ajan\u0131n karma\u015f\u0131k sorunlar\u0131 \u00e7\u00f6zme yetene\u011finin temelini olu\u015fturur.<\/p>\n<h3>Teknoloji Y\u0131\u011f\u0131n\u0131m\u0131z\u0131 Tan\u0131yal\u0131m: Next.js, Python ve Supabase<\/h3>\n<p>Bu makalede ele ald\u0131\u011f\u0131m\u0131z ajan temelli i\u015f ak\u0131\u015f\u0131n\u0131 olu\u015fturmak i\u00e7in modern ve g\u00fc\u00e7l\u00fc bir teknoloji y\u0131\u011f\u0131n\u0131 kullanaca\u011f\u0131z.<\/p>\n<h4>Next.js: Modern Web Aray\u00fczleri i\u00e7in G\u00fc\u00e7l\u00fc Bir \u00c7er\u00e7eve<\/h4>\n<p>Next.js, React tabanl\u0131, sunucu taraf\u0131 render (SSR), statik site \u00fcretimi (SSG) ve API rotalar\u0131 gibi \u00f6zellikler sunan bir web geli\u015ftirme \u00e7er\u00e7evesidir. Kullan\u0131c\u0131 dostu ve h\u0131zl\u0131 aray\u00fczler olu\u015fturmak i\u00e7in idealdir. Ajan temelli sistemimizde Next.js, kullan\u0131c\u0131 etkile\u015fimlerini y\u00f6netecek, ajanla ileti\u015fim kuracak ve sonu\u00e7lar\u0131 kullan\u0131c\u0131ya \u015f\u0131k bir \u015fekilde sunacak frontend uygulamas\u0131n\u0131 sa\u011flayacakt\u0131r. API rotalar\u0131 sayesinde, Python backend&#8217;imizle kolayca entegre olabiliriz.<\/p>\n<h4>Python: Ajan Geli\u015ftirme ve LLM Entegrasyonunun Kalbi<\/h4>\n<p>Python, yapay zeka ve makine \u00f6\u011frenimi alan\u0131ndaki zengin k\u00fct\u00fcphane ekosistemi sayesinde ajan temelli sistemlerin backend&#8217;i i\u00e7in do\u011fal bir se\u00e7imdir. LangChain veya LlamaIndex gibi \u00e7er\u00e7eveler, ajanlar\u0131n olu\u015fturulmas\u0131, ara\u00e7lar\u0131n tan\u0131mlanmas\u0131, bellek y\u00f6netimi ve LLM&#8217;lerle etkile\u015fim i\u00e7in g\u00fc\u00e7l\u00fc soyutlamalar sunar. T\u00fcm ajan mant\u0131\u011f\u0131, ara\u00e7lar\u0131n uygulanmas\u0131 ve LLM API \u00e7a\u011fr\u0131lar\u0131 Python \u00fczerinde ger\u00e7ekle\u015ftirilecektir.<\/p>\n<h4>Supabase: Veritaban\u0131, Kimlik Do\u011frulama ve Vekt\u00f6r Aramas\u0131 Tek \u00c7at\u0131da<\/h4>\n<p>Supabase, a\u00e7\u0131k kaynakl\u0131 bir Firebase alternatifi olarak \u00f6ne \u00e7\u0131kar. PostgreSQL tabanl\u0131 bir veritaban\u0131, kimlik do\u011frulama, ger\u00e7ek zamanl\u0131 abonelikler ve depolama gibi bir\u00e7ok hizmeti tek bir platformda sunar. Ajan temelli i\u015f ak\u0131\u015f\u0131m\u0131zda Supabase&#8217;i \u015fu ama\u00e7larla kullanaca\u011f\u0131z:<br \/>\n*   <strong>PostgreSQL Veritaban\u0131:<\/strong> Ajan\u0131n uzun s\u00fcreli belle\u011fi, kullan\u0131c\u0131 verileri, ara\u00e7 konfig\u00fcrasyonlar\u0131 ve i\u015f ak\u0131\u015f\u0131 kay\u0131tlar\u0131 i\u00e7in.<br \/>\n*   <strong>pgvector uzant\u0131s\u0131:<\/strong> Vekt\u00f6r g\u00f6mmelerini depolamak ve h\u0131zl\u0131 benzerlik aramalar\u0131 yapmak i\u00e7in. Bu, RAG bile\u015fenini ve uzun s\u00fcreli belle\u011fi g\u00fc\u00e7lendirecektir.<br \/>\n*   <strong>Auth:<\/strong> Kullan\u0131c\u0131 kimlik do\u011frulama ve yetkilendirme i\u00e7in.<br \/>\n*   <strong>Edge Fonksiyonlar\u0131 (iste\u011fe ba\u011fl\u0131):<\/strong> Basit API&#8217;ler veya webhook&#8217;lar i\u00e7in sunucusuz fonksiyonlar.<\/p>\n<p>Bu \u00fc\u00e7l\u00fcn\u00fcn kombinasyonu, hem \u00f6l\u00e7eklenebilir bir backend hem de h\u0131zl\u0131, duyarl\u0131 bir frontend ile g\u00fc\u00e7l\u00fc, ajan temelli uygulamalar geli\u015ftirmemize olanak tan\u0131r.<\/p>\n<h3>Bir Ajan Temelli \u0130\u015f Ak\u0131\u015f\u0131 Nas\u0131l Olu\u015fturulur? Mimari ve Uygulama Ad\u0131mlar\u0131<\/h3>\n<p>Ajan temelli bir i\u015f ak\u0131\u015f\u0131n\u0131n mimarisi, mod\u00fcler ve \u00f6l\u00e7eklenebilir olmal\u0131d\u0131r. \u0130\u015fte genel bir bak\u0131\u015f ve uygulama ad\u0131mlar\u0131:<\/p>\n<h4>Mimarinin Genel Bak\u0131\u015f\u0131<\/h4>\n<pre><code>\n+------------------+           +---------------------+           +---------------------+\n|                  |           |                     |           |                     |\n| Next.js Frontend | <-------> | Next.js API Routes  | <-------> | Python Backend (API)|\n| (Kullan\u0131c\u0131 Aray\u00fcz\u00fc)|           | (API Gateway\/Proxy) |           | (Ajan Mant\u0131\u011f\u0131)      |\n|                  |           |                     |           |                     |\n+------------------+           +---------------------+           +---------------------+\n                                         |                                 |\n                                         |                                 |\n                                         V                                 V\n                               +-------------------------------------------------+\n                               |                   Supabase                      |\n                               | (PostgreSQL, pgvector, Auth, Storage)           |\n                               +-------------------------------------------------+\n                                         |                                 |\n                                         |                                 |\n                                         V                                 V\n                               +-------------------------------------------------+\n                               |                   Harici Servisler              |\n                               | (LLM API'leri, 3. Parti API'ler, Web Servisleri) |\n                               +-------------------------------------------------+\n<\/pre>\n<p><\/code><\/p>\n<p>Kullan\u0131c\u0131, Next.js frontend \u00fczerinden etkile\u015fime girer. \u0130stekler, Next.js API rotalar\u0131 arac\u0131l\u0131\u011f\u0131yla Python backend'e iletilir. Python backend'i, ajan mant\u0131\u011f\u0131n\u0131 (LLM, ara\u00e7lar, bellek) bar\u0131nd\u0131r\u0131r, Supabase ile veri al\u0131\u015fveri\u015finde bulunur ve harici LLM sa\u011flay\u0131c\u0131lar\u0131 veya di\u011fer 3. parti API'lerle ileti\u015fim kurar.<\/p>\n<h4>Python ile Ajan Mant\u0131\u011f\u0131n\u0131 Geli\u015ftirme (LangChain\/LlamaIndex)<\/h4>\n<p>Python'da ajan mant\u0131\u011f\u0131n\u0131 geli\u015ftirmek i\u00e7in LangChain veya LlamaIndex gibi k\u00fct\u00fcphanelerden faydalanabiliriz. Bu k\u00fct\u00fcphaneler, ajanlar\u0131, ara\u00e7lar\u0131 ve belle\u011fi tan\u0131mlamak i\u00e7in y\u00fcksek seviyeli soyutlamalar sunar.<\/p>\n<p><strong>\u00d6rnek: Basit Bir LangChain Ajan\u0131 Tan\u0131mlama<\/strong><\/p>\n<pre><code class=\"language-python\">from langchain.agents import AgentExecutor, create_react_agent\nfrom langchain_core.prompts import PromptTemplate\nfrom langchain_community.tools import DuckDuckGoSearchRun\nfrom langchain_openai import ChatOpenAI\nfrom langchain_core.messages import HumanMessage, AIMessage\n\n# 1. Ara\u00e7lar\u0131 Tan\u0131mlama\ntools = [\n    DuckDuckGoSearchRun(name=\"Arama Motoru\"), # \u0130nternet aramas\u0131 i\u00e7in bir ara\u00e7\n    # Di\u011fer \u00f6zel ara\u00e7lar buraya eklenebilir (\u00f6rn: Supabase sorgu arac\u0131)\n]\n\n# 2. LLM'i Tan\u0131mlama\nllm = ChatOpenAI(model=\"gpt-4o\", temperature=0)\n\n# 3. Ajan i\u00e7in Prompt Olu\u015fturma\nprompt_template = PromptTemplate.from_template(\"\"\"\nSen, kullan\u0131c\u0131n\u0131n sorular\u0131n\u0131 yan\u0131tlamak ve g\u00f6revlerini yerine getirmek i\u00e7in ara\u00e7lar\u0131 kullanabilen yard\u0131mc\u0131 bir yapay zeka ajan\u0131s\u0131n.\nSana verilen ara\u00e7lar\u0131 en iyi \u015fekilde kullanarak g\u00f6revleri tamamla.\n\u015eu anki konu\u015fma ge\u00e7mi\u015fi:\n{chat_history}\nYeni kullan\u0131c\u0131 iste\u011fi: {input}\n{agent_scratchpad}\n\"\"\")\n\n# 4. Ajan\u0131 Olu\u015fturma\nagent = create_react_agent(llm, tools, prompt_template)\n\n# 5. Ajan Y\u00fcr\u00fct\u00fcc\u00fcs\u00fcn\u00fc Olu\u015fturma (Bellek ile birlikte)\n# Ger\u00e7ek bir uygulamada bellek y\u00f6netimi daha karma\u015f\u0131k olacakt\u0131r.\n# Burada basit bir liste kullan\u0131ld\u0131.\nchat_history = [] \n\nagent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, handle_parsing_errors=True)\n\ndef run_agent_query(query: str, history: list):\n    response = agent_executor.invoke({\n        \"input\": query,\n        \"chat_history\": history,\n    })\n    history.append(HumanMessage(content=query))\n    history.append(AIMessage(content=response[\"output\"]))\n    return response[\"output\"]\n\n# Kullan\u0131m \u00f6rne\u011fi:\n# print(run_agent_query(\"\u0130stanbul'da hava nas\u0131l?\", chat_history))\n# print(run_agent_query(\"Bu bilgiyi bir kenara not al ve bana daha sonra hat\u0131rlat.\", chat_history)) \n# (\u0130kinci \u00f6rnek i\u00e7in \"not alma\" arac\u0131 eklenmesi gerekir)<\/pre>\n<p><\/code><\/p>\n<p>Bu kod par\u00e7as\u0131, LangChain ile temel bir ajan yap\u0131s\u0131n\u0131n nas\u0131l olu\u015fturulabilece\u011fini g\u00f6sterir. <code>DuckDuckGoSearchRun<\/code> gibi haz\u0131r ara\u00e7lar\u0131 kullanabilir veya Supabase ile etkile\u015fim kurmak i\u00e7in kendi \u00f6zel ara\u00e7lar\u0131n\u0131z\u0131 yazabilirsiniz.<\/p>\n<h4>Supabase ile Veri Y\u00f6netimi ve Vekt\u00f6r Aramas\u0131<\/h4>\n<p>Supabase, ajan\u0131m\u0131z\u0131n hem yap\u0131land\u0131r\u0131lm\u0131\u015f verileri (kullan\u0131c\u0131 bilgileri, i\u015f ak\u0131\u015f\u0131 durumlar\u0131) hem de yap\u0131land\u0131r\u0131lmam\u0131\u015f verilerin vekt\u00f6r g\u00f6mmelerini (uzun s\u00fcreli bellek, dok\u00fcmanlar) depolamas\u0131 i\u00e7in merkezi bir konum sa\u011flar.<\/p>\n<p><strong>\u00d6rnek: Supabase'de pgvector ile Vekt\u00f6r Veritaban\u0131 Kurulumu<\/strong><\/p>\n<p>1.  <strong>pgvector uzant\u0131s\u0131n\u0131 etkinle\u015ftirin:<\/strong> Supabase projenizin SQL Editor'\u0131nda \u015funu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-sql\">create extension if not exists vector;<\/pre>\n<p><\/code><br \/>\n2.  <strong>Vekt\u00f6rleri depolamak i\u00e7in bir tablo olu\u015fturun:<\/strong><\/p>\n<pre><code class=\"language-sql\">create table documents (\n      id uuid primary key default gen_random_uuid(),\n      content text,\n      embedding vector(1536) -- OpenAI embeddings i\u00e7in 1536 boyut\n    );<\/pre>\n<p><\/code><br \/>\n3.  <strong>Python ile Supabase'e veri ekleme ve sorgulama (langchain-community kullanarak):<\/strong><\/p>\n<pre><code class=\"language-python\">from supabase import create_client, Client\n    from langchain_openai import OpenAIEmbeddings\n    from langchain_community.vectorstores import SupabaseVectorStore\n\n    # Supabase kimlik bilgileriniz\n    SUPABASE_URL = \"YOUR_SUPABASE_URL\"\n    SUPABASE_KEY = \"YOUR_SUPABASE_ANON_KEY\"\n\n    # Supabase istemcisini olu\u015fturma\n    supabase: Client = create_client(SUPABASE_URL, SUPABASE_KEY)\n\n    # Embeddings modelini tan\u0131mlama\n    embeddings = OpenAIEmbeddings(model=\"text-embedding-3-small\")\n\n    # SupabaseVectorStore \u00f6rne\u011fini olu\u015fturma\n    vector_store = SupabaseVectorStore(\n        embedding=embeddings,\n        client=supabase,\n        table_name=\"documents\",\n        query_name=\"match_documents\" # Supabase fonksiyonunuzun ad\u0131\n    )\n\n    # Dok\u00fcman ekleme\n    # vector_store.add_texts([\"Bu bir \u00f6rnek dok\u00fcman i\u00e7eri\u011fidir.\", \"Ba\u015fka bir \u00f6nemli bilgi.\"])\n\n    # Benzer dok\u00fcmanlar\u0131 sorgulama\n    # docs = vector_store.similarity_search(\"\u00d6rnek dok\u00fcman nedir?\", k=2)\n    # for doc in docs:\n    #     print(doc.page_content)\n\n    # Not: Supabase'de 'match_documents' ad\u0131nda bir fonksiyon olu\u015fturman\u0131z gerekebilir.\n    # Bu fonksiyon, pgvector'\u0131 kullanarak vekt\u00f6r aramas\u0131 yapar.\n    # \u00d6rnek bir 'match_documents' fonksiyonu Supabase belgelerinde bulunabilir.<\/pre>\n<p><\/code><\/p>\n<h4>Next.js ile Kullan\u0131c\u0131 Aray\u00fcz\u00fc ve API Etkile\u015fimi<\/h4>\n<p>Next.js frontend, kullan\u0131c\u0131n\u0131n ajanla etkile\u015fim kurdu\u011fu yerdir. Bir sohbet aray\u00fcz\u00fc, kullan\u0131c\u0131n\u0131n sorgular\u0131n\u0131 g\u00f6ndermesini ve ajan\u0131n yan\u0131tlar\u0131n\u0131 g\u00f6r\u00fcnt\u00fclemesini sa\u011flar. Next.js API rotalar\u0131, frontend ile Python backend aras\u0131ndaki k\u00f6pr\u00fc g\u00f6revi g\u00f6r\u00fcr.<\/p>\n<p><strong>\u00d6rnek: Next.js API Rotas\u0131 (pages\/api\/chat.js)<\/strong><\/p>\n<pre><code class=\"language-javascript\">\/\/ pages\/api\/chat.js\nimport axios from 'axios';\n\nexport default async function handler(req, res) {\n  if (req.method === 'POST') {\n    const { message, chatHistory } = req.body;\n\n    try {\n      \/\/ Python backend API'sine istek g\u00f6nderme\n      const pythonBackendUrl = process.env.PYTHON_BACKEND_URL || 'http:\/\/localhost:8000\/api\/agent-chat';\n      const response = await axios.post(pythonBackendUrl, {\n        query: message,\n        history: chatHistory, \/\/ Ge\u00e7mi\u015fi de g\u00f6nderebiliriz\n      });\n\n      res.status(200).json({ reply: response.data.reply, newChatHistory: response.data.newChatHistory });\n    } catch (error) {\n      console.error('Python backend ile ileti\u015fim hatas\u0131:', error.message);\n      res.status(500).json({ error: 'Ajan ile ileti\u015fim kurulurken bir hata olu\u015ftu.' });\n    }\n  } else {\n    res.setHeader('Allow', ['POST']);\n    res.status(405).end(<code>Method ${req.method} Not Allowed<\/code>);\n  }\n}<\/pre>\n<p><\/code><\/p>\n<p><strong>\u00d6rnek: Next.js Frontend Bile\u015feni (components\/ChatInterface.js)<\/strong><\/p>\n<pre><code class=\"language-javascript\">\/\/ components\/ChatInterface.js (Basitle\u015ftirilmi\u015f \u00f6rnek)\nimport React, { useState } from 'react';\n\nfunction ChatInterface() {\n  const [input, setInput] = useState('');\n  const [messages, setMessages] = useState([]); \/\/ { sender: 'user'\/'agent', text: '...' }\n  const [chatHistory, setChatHistory] = useState([]); \/\/ LangChain format\u0131nda ge\u00e7mi\u015f\n\n  const sendMessage = async () => {\n    if (!input.trim()) return;\n\n    const userMessage = { sender: 'user', text: input };\n    setMessages((prev) => [...prev, userMessage]);\n    setInput('');\n\n    try {\n      const response = await fetch('\/api\/chat', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application\/json' },\n        body: JSON.stringify({ message: input, chatHistory }),\n      });\n      const data = await response.json();\n\n      const agentMessage = { sender: 'agent', text: data.reply };\n      setMessages((prev) => [...prev, agentMessage]);\n      setChatHistory(data.newChatHistory); \/\/ G\u00fcncel ge\u00e7mi\u015fi al\n    } catch (error) {\n      console.error('Mesaj g\u00f6nderme hatas\u0131:', error);\n      setMessages((prev) => [...prev, { sender: 'agent', text: '\u00dczg\u00fcn\u00fcm, bir hata olu\u015ftu.' }]);\n    }\n  };\n\n  return (\n    <div>\n      <div className=\"chat-window\">\n        {messages.map((msg, index) => (\n          <div key={index} className={msg.sender}>{msg.text}<\/div>\n        ))}\n      <\/div>\n      <input\n        type=\"text\"\n        value={input}\n        onChange={(e) => setInput(e.target.value)}\n        onKeyPress={(e) => e.key === 'Enter' && sendMessage()}\n      \/>\n      <button onClick={sendMessage}>G\u00f6nder<\/button>\n    <\/div>\n  );\n}\n\nexport default ChatInterface;<\/pre>\n<p><\/code><\/p>\n<p>Bu yap\u0131yla, kullan\u0131c\u0131 Next.js aray\u00fcz\u00fcnden mesaj g\u00f6nderir, bu mesaj Next.js API rotas\u0131 \u00fczerinden Python backend'ine ula\u015f\u0131r, ajan mant\u0131\u011f\u0131 i\u015flenir ve yan\u0131t tekrar ayn\u0131 yol \u00fczerinden kullan\u0131c\u0131ya d\u00f6ner.<\/p>\n<h3>Pratik Bir Senaryo: Ak\u0131ll\u0131 Bir M\u00fc\u015fteri Destek Ajan\u0131<\/h3>\n<p>Yukar\u0131daki teknoloji y\u0131\u011f\u0131n\u0131n\u0131 ve mimariyi kullanarak, bir e-ticaret platformu i\u00e7in ak\u0131ll\u0131 bir m\u00fc\u015fteri destek ajan\u0131 senaryosunu ele alal\u0131m.<\/p>\n<h4>Problemin Tan\u0131m\u0131 ve Ajan\u0131n Rol\u00fc<\/h4>\n<p>M\u00fc\u015fteriler genellikle sipari\u015f durumu, \u00fcr\u00fcn bilgisi, iade s\u00fcre\u00e7leri ve s\u0131k\u00e7a sorulan sorular (SSS) hakk\u0131nda bilgi almak i\u00e7in destek ekibiyle ileti\u015fime ge\u00e7erler. Bir ajan temelli sistem, bu t\u00fcr sorgular\u0131 otonom olarak yan\u0131tlayarak destek ekibinin y\u00fck\u00fcn\u00fc azaltabilir ve m\u00fc\u015fteri memnuniyetini art\u0131rabilir. Ajan\u0131n rol\u00fc, kullan\u0131c\u0131n\u0131n niyetini anlamak, ilgili bilgileri \u00e7ekmek (veritaban\u0131, API'ler), gerekirse ek eylemler ger\u00e7ekle\u015ftirmek ve kullan\u0131c\u0131ya do\u011fru, kapsaml\u0131 yan\u0131tlar sunmakt\u0131r.<\/p>\n<h4>Gerekli Ara\u00e7lar ve Bilgi Kaynaklar\u0131<\/h4>\n<p>Bu senaryo i\u00e7in ajan\u0131n ihtiya\u00e7 duyaca\u011f\u0131 baz\u0131 ara\u00e7lar ve bilgi kaynaklar\u0131 \u015funlar olabilir:<\/p>\n<p>*   <strong>Sipari\u015f Durumu Sorgulama API'si:<\/strong> M\u00fc\u015fterinin sipari\u015f numaras\u0131n\u0131 alarak sipari\u015fin g\u00fcncel durumunu (haz\u0131rlan\u0131yor, kargoda, teslim edildi) sorgular. (\u00d6rn: <code>getOrderStatus(order_id)<\/code>)<br \/>\n*   <strong>\u00dcr\u00fcn Bilgisi Veritaban\u0131 Sorgulay\u0131c\u0131:<\/strong> \u00dcr\u00fcn SKU'su veya ad\u0131 ile \u00fcr\u00fcn detaylar\u0131n\u0131 (fiyat, stok, a\u00e7\u0131klama, \u00f6zellikler) Supabase'den \u00e7eker. (\u00d6rn: <code>getProductDetails(product_id_or_name)<\/code>)<br \/>\n*   <strong>SSS Dok\u00fcman Arama Arac\u0131:<\/strong> S\u0131k\u00e7a sorulan sorular ve yan\u0131tlar\u0131n\u0131 i\u00e7eren bir vekt\u00f6r veritaban\u0131nda (Supabase pgvector) arama yapar. (\u00d6rn: <code>searchFAQ(query)<\/code>)<br \/>\n*   <strong>\u0130ade Politikas\u0131 Dok\u00fcman Arama Arac\u0131:<\/strong> \u0130ade politikas\u0131 metinlerinde arama yapar. (Supabase pgvector)<br \/>\n*   <strong>Canl\u0131 Destek Y\u00f6nlendirme Arac\u0131:<\/strong> Ajan\u0131n \u00e7\u00f6zemedi\u011fi veya insan m\u00fcdahalesi gerektiren durumlarda, kullan\u0131c\u0131y\u0131 canl\u0131 bir temsilciye y\u00f6nlendirir. (\u00d6rn: <code>transferToLiveAgent(reason)<\/code>)<\/p>\n<h4>\u0130\u015f Ak\u0131\u015f\u0131n\u0131n Ad\u0131m Ad\u0131m \u0130ncelenmesi<\/h4>\n<p>1.  <strong>Kullan\u0131c\u0131 Sorgusu:<\/strong> Kullan\u0131c\u0131, Next.js aray\u00fcz\u00fcnden \"Sipari\u015fimin durumu nedir?\" veya \"X \u00fcr\u00fcn\u00fcn\u00fcn \u00f6zellikleri nelerdir?\" gibi bir soru sorar.<br \/>\n2.  <strong>Niyet Analizi (LLM):<\/strong> Python backend'deki ajan, LLM'yi kullanarak kullan\u0131c\u0131n\u0131n niyetini analiz eder.<br \/>\n    *   E\u011fer niyet sipari\u015f durumu sorgulamaksa, LLM <code>getOrderStatus<\/code> arac\u0131n\u0131 kullanmaya karar verir.<br \/>\n    *   E\u011fer niyet \u00fcr\u00fcn bilgisi ise, LLM <code>getProductDetails<\/code> arac\u0131n\u0131 kullanmaya karar verir.<br \/>\n    *   E\u011fer niyet genel bir soruysa, LLM <code>searchFAQ<\/code> veya <code>searchRefundPolicy<\/code> ara\u00e7lar\u0131n\u0131 de\u011ferlendirir.<br \/>\n3.  <strong>Ara\u00e7 \u00c7a\u011fr\u0131s\u0131 ve Parametre \u00c7\u0131kar\u0131m\u0131:<\/strong> LLM, gerekli arac\u0131 se\u00e7tikten sonra, kullan\u0131c\u0131n\u0131n sorgusundan arac\u0131n ihtiya\u00e7 duydu\u011fu parametreleri (\u00f6rn: sipari\u015f numaras\u0131, \u00fcr\u00fcn ad\u0131) \u00e7\u0131kar\u0131r. E\u011fer eksik bilgi varsa, LLM kullan\u0131c\u0131ya \"L\u00fctfen sipari\u015f numaran\u0131z\u0131 belirtir misiniz?\" gibi bir soru sorar.<br \/>\n4.  <strong>Ara\u00e7 Y\u00fcr\u00fctme:<\/strong> Python backend, belirlenen arac\u0131 (\u00f6rne\u011fin, bir REST API \u00e7a\u011fr\u0131s\u0131 veya Supabase veritaban\u0131 sorgusu) y\u00fcr\u00fct\u00fcr.<br \/>\n5.  <strong>Sonu\u00e7lar\u0131n Yorumlanmas\u0131 (LLM):<\/strong> Arac\u0131n \u00e7\u0131kt\u0131s\u0131 (\u00f6rn: \"Sipari\u015finiz kargoya verildi, takip numaras\u0131: TR12345\"), LLM'ye geri beslenir. LLM, bu ham veriyi al\u0131r, yorumlar ve kullan\u0131c\u0131ya anla\u015f\u0131l\u0131r, do\u011fal dilde bir yan\u0131t olu\u015fturur.<br \/>\n6.  <strong>Geri Bildirim ve Tekrar:<\/strong> Ajan, yan\u0131t\u0131 kullan\u0131c\u0131ya iletir. E\u011fer kullan\u0131c\u0131 ek sorular sorarsa veya ajan\u0131n yan\u0131t\u0131 yetersiz kal\u0131rsa, s\u00fcre\u00e7 ba\u015ftan ba\u015flar ve ajan \u00f6nceki konu\u015fma ge\u00e7mi\u015fini (bellek) kullanarak ba\u011flam\u0131 korur.<br \/>\n7.  <strong>Escalation (Y\u00fckseltme):<\/strong> E\u011fer ajan, belirli bir sorguyu \u00e7\u00f6zemezse veya yetkisi d\u0131\u015f\u0131ndaysa (\u00f6rn: bir iade talebini onaylamak), <code>transferToLiveAgent<\/code> arac\u0131n\u0131 kullanarak kullan\u0131c\u0131y\u0131 bir insan temsilciye y\u00f6nlendirir.<\/p>\n<p>Bu i\u015f ak\u0131\u015f\u0131, ajan\u0131n sadece bilgi sa\u011flamakla kalmay\u0131p, ayn\u0131 zamanda eylemler ger\u00e7ekle\u015ftirmesini ve karma\u015f\u0131k m\u00fc\u015fteri sorunlar\u0131n\u0131 \u00e7\u00f6zmesini sa\u011flar.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Basit RAG uygulamalar\u0131, LLM'lerin bilgi tabanlar\u0131n\u0131 kullanma yetene\u011fini art\u0131rsa da, ger\u00e7ek d\u00fcnya karma\u015f\u0131kl\u0131klar\u0131n\u0131 ele almak i\u00e7in genellikle yetersiz kal\u0131r. Ajan temelli i\u015f ak\u0131\u015flar\u0131, LLM'lerin ak\u0131l y\u00fcr\u00fctme, planlama ve harici ara\u00e7lar\u0131 kullanma yeteneklerini bir araya getirerek, daha otonom, dinamik ve g\u00fc\u00e7l\u00fc sistemler olu\u015fturman\u0131n yolunu a\u00e7ar. Next.js, Python ve Supabase gibi modern teknolojilerin birle\u015fimi, bu t\u00fcr yenilik\u00e7i \u00e7\u00f6z\u00fcmleri geli\u015ftirmek i\u00e7in sa\u011flam, \u00f6l\u00e7eklenebilir ve esnek bir temel sunar. Bu yakla\u015f\u0131m, sadece m\u00fc\u015fteri hizmetleri de\u011fil, ayn\u0131 zamanda veri analizi, operasyonel otomasyon ve ki\u015fisel asistanl\u0131k gibi bir\u00e7ok alanda yapay zekan\u0131n potansiyelini bir \u00fcst seviyeye ta\u015f\u0131maktad\u0131r. Gelecekte, ajan temelli sistemlerin daha da ak\u0131ll\u0131 hale gelmesi ve insan-bilgisayar etkile\u015fimini k\u00f6kten de\u011fi\u015ftirmesi beklenmektedir.<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<h4>Neden Next.js yerine ba\u015fka bir frontend framework kullanm\u0131yoruz?<\/h4>\n<p>Next.js, React tabanl\u0131 olmas\u0131, sunucu taraf\u0131 render (SSR) ve statik site \u00fcretimi (SSG) gibi performans odakl\u0131 \u00f6zellikler sunmas\u0131, ayr\u0131ca yerle\u015fik API rotalar\u0131 ile backend entegrasyonunu kolayla\u015ft\u0131rmas\u0131 nedeniyle modern web uygulamalar\u0131 i\u00e7in pop\u00fcler ve g\u00fc\u00e7l\u00fc bir se\u00e7imdir. Ancak, Vue.js (Nuxt.js ile) veya Angular gibi di\u011fer framework'ler de benzer ajan temelli sistemlerin frontend'i i\u00e7in kullan\u0131labilir. Se\u00e7im, genellikle geli\u015ftirme ekibinin tecr\u00fcbesine ve projenin spesifik gereksinimlerine ba\u011fl\u0131d\u0131r.<\/p>\n<h4>Supabase yerine ba\u015fka bir vekt\u00f6r veritaban\u0131 se\u00e7ene\u011fi var m\u0131?<\/h4>\n<p>Evet, Supabase'in pgvector uzant\u0131s\u0131 harika bir ba\u015flang\u0131\u00e7 noktas\u0131 olsa da, bir\u00e7ok alternatif vekt\u00f6r veritaban\u0131 mevcuttur. Pop\u00fcler se\u00e7enekler aras\u0131nda Pinecone, Weaviate, Milvus, Qdrant ve Chroma yer al\u0131r. Bu veritabanlar\u0131, \u00f6zellikle \u00e7ok b\u00fcy\u00fck \u00f6l\u00e7ekli vekt\u00f6r aramalar\u0131 ve daha geli\u015fmi\u015f \u00f6zellikler i\u00e7in optimize edilmi\u015ftir. Supabase, entegre bir \u00e7\u00f6z\u00fcm arayanlar i\u00e7in uygunken, \u00f6zel ihtiya\u00e7lar i\u00e7in bu alternatifler de\u011ferlendirilebilir.<\/p>\n<h4>Ajan temelli sistemlerin maliyeti ne kadar y\u00fcksek olabilir?<\/h4>\n<p>Maliyet, kullan\u0131lan LLM sa\u011flay\u0131c\u0131s\u0131na (OpenAI, Anthropic, Google vb.), yap\u0131lan API \u00e7a\u011fr\u0131lar\u0131n\u0131n say\u0131s\u0131na, kullan\u0131lan ara\u00e7lar\u0131n karma\u015f\u0131kl\u0131\u011f\u0131na ve Supabase gibi platformlar\u0131n kullan\u0131m \u00f6l\u00e7e\u011fine g\u00f6re de\u011fi\u015fir. LLM \u00e7a\u011fr\u0131lar\u0131 genellikle belirgin bir maliyet kalemi olabilir. Sistem daha fazla ak\u0131l y\u00fcr\u00fctme ad\u0131m\u0131 ve ara\u00e7 \u00e7a\u011fr\u0131s\u0131 yapt\u0131k\u00e7a, token t\u00fcketimi artar. Maliyetleri optimize etmek i\u00e7in daha k\u00fc\u00e7\u00fck ve uygun maliyetli LLM'ler kullanmak, \u00f6nbellekleme stratejileri uygulamak ve API \u00e7a\u011fr\u0131lar\u0131n\u0131 dikkatlice y\u00f6netmek \u00f6nemlidir.<\/p>\n<h4>G\u00fcvenlik endi\u015feleri nelerdir ve nas\u0131l ele al\u0131n\u0131r?<\/h4>\n<p>Ajan temelli sistemlerde g\u00fcvenlik kritik \u00f6neme sahiptir. Ba\u015fl\u0131ca endi\u015feler \u015funlard\u0131r:<br \/>\n*   <strong>Hassas Veri Eri\u015fimi:<\/strong> Ajan\u0131n eri\u015fti\u011fi harici ara\u00e7lar (API'ler, veritabanlar\u0131) \u00fczerinden hassas verilere yetkisiz eri\u015fim riski. Bu, rol tabanl\u0131 eri\u015fim kontrol\u00fc (RBAC) ve minimum yetki prensibiyle ele al\u0131nmal\u0131d\u0131r.<br \/>\n*   <strong>Prompt Enjeksiyonu:<\/strong> K\u00f6t\u00fc niyetli kullan\u0131c\u0131lar\u0131n prompt'lar\u0131 manip\u00fcle ederek ajan\u0131 istenmeyen eylemler yapmaya zorlamas\u0131<\/p>\n","protected":false},"excerpt":{"rendered":"Basit RAG&#8217;\u0131n \u00d6tesine Ge\u00e7mek: Next.","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":[1403],"tags":[],"class_list":{"0":"post-36918","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-python","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>Basit RAG&#039;\u0131n \u00d6tesine Ge\u00e7mek: Next.js, Python ve Supabase ile Ajan Temelli \u0130\u015f Ak\u0131\u015flar\u0131 Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\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\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Basit RAG&#039;\u0131n \u00d6tesine Ge\u00e7mek: Next.js, Python ve Supabase ile Ajan Temelli \u0130\u015f Ak\u0131\u015flar\u0131 Olu\u015fturma\" \/>\n<meta property=\"og:description\" content=\"Basit RAG&#039;\u0131n \u00d6tesine Ge\u00e7mek: Next.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-24T20:00:45+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=\"18 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Basit RAG&#8217;\u0131n \u00d6tesine Ge\u00e7mek: Next.js, Python ve Supabase ile Ajan Temelli \u0130\u015f Ak\u0131\u015flar\u0131 Olu\u015fturma\",\"datePublished\":\"2025-12-24T20:00:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/\"},\"wordCount\":2907,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Python\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/\",\"name\":\"Basit RAG'\u0131n \u00d6tesine Ge\u00e7mek: Next.js, Python ve Supabase ile Ajan Temelli \u0130\u015f Ak\u0131\u015flar\u0131 Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-24T20:00:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Basit RAG&#8217;\u0131n \u00d6tesine Ge\u00e7mek: Next.js, Python ve Supabase ile Ajan Temelli \u0130\u015f Ak\u0131\u015flar\u0131 Olu\u015fturma\"}]},{\"@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":"Basit RAG'\u0131n \u00d6tesine Ge\u00e7mek: Next.js, Python ve Supabase ile Ajan Temelli \u0130\u015f Ak\u0131\u015flar\u0131 Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\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\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/","og_locale":"tr_TR","og_type":"article","og_title":"Basit RAG'\u0131n \u00d6tesine Ge\u00e7mek: Next.js, Python ve Supabase ile Ajan Temelli \u0130\u015f Ak\u0131\u015flar\u0131 Olu\u015fturma","og_description":"Basit RAG'\u0131n \u00d6tesine Ge\u00e7mek: Next.","og_url":"https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-24T20:00:45+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"18 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Basit RAG&#8217;\u0131n \u00d6tesine Ge\u00e7mek: Next.js, Python ve Supabase ile Ajan Temelli \u0130\u015f Ak\u0131\u015flar\u0131 Olu\u015fturma","datePublished":"2025-12-24T20:00:45+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/"},"wordCount":2907,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Python"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/","url":"https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/","name":"Basit RAG'\u0131n \u00d6tesine Ge\u00e7mek: Next.js, Python ve Supabase ile Ajan Temelli \u0130\u015f Ak\u0131\u015flar\u0131 Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-24T20:00:45+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/basit-ragin-otesine-gecmek-next-js-python-ve-supabase-ile-ajan-temelli-is-akislari-olusturma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Basit RAG&#8217;\u0131n \u00d6tesine Ge\u00e7mek: Next.js, Python ve Supabase ile Ajan Temelli \u0130\u015f Ak\u0131\u015flar\u0131 Olu\u015fturma"}]},{"@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\/36918","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=36918"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36918\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36918"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36918"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36918"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}