{"id":39002,"date":"2026-02-12T13:00:37","date_gmt":"2026-02-12T10:00:37","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/"},"modified":"2026-02-12T13:00:37","modified_gmt":"2026-02-12T10:00:37","slug":"fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/","title":{"rendered":"FastAPI ve Ollama ile Hibrit RAG API Olu\u015fturma: Seyrek ve Yo\u011fun Geri Getirimin G\u00fcc\u00fc"},"content":{"rendered":"<h2>FastAPI ve Ollama ile Hibrit RAG API Olu\u015fturma: Seyrek ve Yo\u011fun Geri Getirimin G\u00fcc\u00fc<\/h2>\n<p>B\u00fcy\u00fck Dil Modelleri (LLM&#8217;ler) g\u00fcncel olmayan veya spesifik alan bilgisi gerektiren konularda s\u0131n\u0131rl\u0131l\u0131klar g\u00f6sterebilir. Geri Getirim Destekli \u00dcretim (RAG) bu sorunu \u00e7\u00f6zmek i\u00e7in g\u00fc\u00e7l\u00fc bir mimaridir. Bu makalede, RAG&#8217;\u0131n yeteneklerini bir ad\u0131m \u00f6teye ta\u015f\u0131yarak hem seyrek (sparse) hem de yo\u011fun (dense) geri getirim stratejilerini birle\u015ftiren hibrit bir RAG API&#8217;sini nas\u0131l in\u015fa edece\u011fimizi inceleyece\u011fiz. FastAPI ve Ollama kullanarak pratik bir \u00e7\u00f6z\u00fcm sunaca\u011f\u0131z.<\/p>\n<h3>RAG (Retrieval Augmented Generation) Nedir?<\/h3>\n<p>RAG, B\u00fcy\u00fck Dil Modellerinin (LLM) bilgi taban\u0131n\u0131 geni\u015fletmek ve hal\u00fcsinasyonlar\u0131 azaltmak i\u00e7in kullan\u0131lan bir yap\u0131d\u0131r. Temel olarak, bir kullan\u0131c\u0131 sorgusu geldi\u011finde, LLM do\u011frudan yan\u0131t vermek yerine, \u00f6nceden indekslenmi\u015f bir veri taban\u0131ndan (bilgi taban\u0131) ilgili bilgileri &#8220;geri getirir&#8221; ve bu bilgileri kullanarak daha do\u011fru ve ba\u011flamsal bir yan\u0131t \u00fcretir.<\/p>\n<h4>RAG&#8217;\u0131n \u00c7al\u0131\u015fma Prensibi<\/h4>\n<p>RAG s\u00fcreci genellikle \u00fc\u00e7 ana ad\u0131mdan olu\u015fur: <strong>Veri \u0130ndeksleme<\/strong>, <strong>Geri Getirim (Retrieval)<\/strong> ve <strong>\u00dcretim (Generation)<\/strong>.<\/p>\n<ul>\n<li><strong>Veri \u0130ndeksleme:<\/strong> Belgeleriniz par\u00e7alara ayr\u0131l\u0131r (chunking) ve bu par\u00e7alar indekslenir. Bu indeksleme, daha sonra h\u0131zl\u0131 ve etkili bir \u015fekilde ilgili par\u00e7alar\u0131 bulmak i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><strong>Geri Getirim:<\/strong> Kullan\u0131c\u0131n\u0131n sorgusu al\u0131nd\u0131\u011f\u0131nda, indekslenmi\u015f veri taban\u0131ndan sorguyla en alakal\u0131 belge par\u00e7alar\u0131 bulunur. Bu ad\u0131m, genellikle anlamsal benzerlik veya anahtar kelime e\u015fle\u015ftirme y\u00f6ntemleriyle yap\u0131l\u0131r.<\/li>\n<li><strong>\u00dcretim:<\/strong> Geri getirilen ilgili belge par\u00e7alar\u0131, LLM&#8217;ye ba\u011flam olarak sunulur. LLM, bu ba\u011flam\u0131 kullanarak kullan\u0131c\u0131 sorgusuna dayal\u0131 bir yan\u0131t \u00fcretir. Bu sayede LLM, kendi genel bilgisinin \u00f6tesinde, spesifik ve g\u00fcncel bilgilere eri\u015febilir.<\/li>\n<\/ul>\n<h4>RAG&#8217;\u0131n Avantajlar\u0131<\/h4>\n<p>RAG, LLM&#8217;lerin do\u011frulu\u011funu art\u0131r\u0131r, hal\u00fcsinasyon riskini azalt\u0131r, g\u00fcncel bilgilere eri\u015fim sa\u011flar ve LLM&#8217;yi yeniden e\u011fitme maliyetini ortadan kald\u0131r\u0131r. Ayr\u0131ca, yan\u0131tlar\u0131n hangi kaynaklardan geldi\u011fini izlenebilir k\u0131lar, bu da \u015feffafl\u0131k a\u00e7\u0131s\u0131ndan \u00f6nemlidir.<\/p>\n<h3>Seyrek ve Yo\u011fun Geri Getirim: Neden Hibrit Yakla\u015f\u0131m?<\/h3>\n<p>Geri getirim stratejileri temel olarak ikiye ayr\u0131l\u0131r: seyrek (sparse) ve yo\u011fun (dense). Her birinin kendine \u00f6zg\u00fc avantajlar\u0131 ve dezavantajlar\u0131 vard\u0131r. Hibrit yakla\u015f\u0131m, bu iki y\u00f6ntemin g\u00fc\u00e7l\u00fc y\u00f6nlerini birle\u015ftirerek daha sa\u011flam ve esnek bir geri getirim mekanizmas\u0131 sunar.<\/p>\n<h4>Seyrek Geri Getirim (Sparse Retrieval)<\/h4>\n<p>Seyrek geri getirim y\u00f6ntemleri, metinleri anahtar kelimeler veya terim frekanslar\u0131 \u00fczerinden e\u015fle\u015ftirir. En bilinen \u00f6rnekleri TF-IDF ve BM25&#8217;tir. Bu y\u00f6ntemler, sorgudaki kelimelerle belge par\u00e7alar\u0131ndaki kelimeler aras\u0131nda do\u011frudan bir e\u015fle\u015fme arar.<\/p>\n<ul>\n<li><strong>Avantajlar\u0131:<\/strong> Anahtar kelime e\u015fle\u015fmesinde \u00e7ok ba\u015far\u0131l\u0131d\u0131r, terimlerin tam olarak ge\u00e7ti\u011fi durumlarda y\u00fcksek hassasiyet sa\u011flar, h\u0131zl\u0131d\u0131r ve genellikle daha az hesaplama kayna\u011f\u0131 gerektirir.<\/li>\n<li><strong>Dezavantajlar\u0131:<\/strong> Anlamsal e\u015fle\u015fmeyi g\u00f6z ard\u0131 eder, e\u015f anlaml\u0131 kelimeleri veya farkl\u0131 ifade bi\u00e7imlerini alg\u0131layamaz. \u00d6rne\u011fin, &#8220;araba&#8221; ve &#8220;otomobil&#8221; kelimelerini farkl\u0131 terimler olarak g\u00f6r\u00fcr.<\/li>\n<\/ul>\n<h4>Yo\u011fun Geri Getirim (Dense Retrieval)<\/h4>\n<p>Yo\u011fun geri getirim y\u00f6ntemleri, metinleri y\u00fcksek boyutlu vekt\u00f6r uzaylar\u0131nda temsil eden &#8220;embedding&#8221;leri kullan\u0131r. Sorgu ve belge par\u00e7alar\u0131, bir embedding modeli arac\u0131l\u0131\u011f\u0131yla vekt\u00f6rlere d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr ve bu vekt\u00f6rler aras\u0131ndaki anlamsal benzerlik (genellikle kosin\u00fcs benzerli\u011fi) \u00f6l\u00e7\u00fclerek en alakal\u0131 par\u00e7alar bulunur.<\/p>\n<ul>\n<li><strong>Avantajlar\u0131:<\/strong> Anlamsal benzerli\u011fi yakalar, e\u015f anlaml\u0131lar\u0131 ve farkl\u0131 ifade bi\u00e7imlerini anlayabilir, daha karma\u015f\u0131k ve ba\u011flamsal sorgulara yan\u0131t verebilir.<\/li>\n<li><strong>Dezavantajlar\u0131:<\/strong> Anahtar kelime e\u015fle\u015fmesinde bazen zay\u0131f kalabilir, hesaplama a\u00e7\u0131s\u0131ndan daha yo\u011fun olabilir ve uygun bir embedding modelinin se\u00e7imi \u00f6nemlidir. &#8220;Nadir&#8221; veya \u00e7ok spesifik anahtar kelimelerin ge\u00e7ti\u011fi durumlarda performans\u0131 d\u00fc\u015febilir.<\/li>\n<\/ul>\n<h4>Hibrit Geri Getirimin G\u00fcc\u00fc<\/h4>\n<p>Hibrit RAG, hem seyrek hem de yo\u011fun geri getirim sonu\u00e7lar\u0131n\u0131 birle\u015ftirerek her iki y\u00f6ntemin zay\u0131f y\u00f6nlerini telafi eder ve g\u00fc\u00e7l\u00fc y\u00f6nlerini bir araya getirir. \u00d6rne\u011fin, bir sorgu hem belirli anahtar kelimeleri i\u00e7eriyorsa (seyrek geri getirim i\u00e7in ideal) hem de anlamsal olarak karma\u015f\u0131ksa (yo\u011fun geri getirim i\u00e7in ideal), hibrit yakla\u015f\u0131m en iyi sonu\u00e7lar\u0131 sunar. Birle\u015ftirme genellikle Reciprocal Rank Fusion (RRF) gibi algoritmalarla yap\u0131l\u0131r.<\/p>\n<div class=\"table-responsive\">\n<table class=\"table table-bordered\">\n<thead>\n<tr>\n<th>\u00d6zellik<\/th>\n<th>Seyrek Geri Getirim<\/th>\n<th>Yo\u011fun Geri Getirim<\/th>\n<th>Hibrit Geri Getirim<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Temel Mekanizma<\/td>\n<td>Anahtar kelime e\u015fle\u015ftirme (BM25, TF-IDF)<\/td>\n<td>Anlamsal vekt\u00f6r benzerli\u011fi (Embeddings)<\/td>\n<td>Her ikisinin kombinasyonu<\/td>\n<\/tr>\n<tr>\n<td>Ana Avantaj<\/td>\n<td>Anahtar kelime hassasiyeti, h\u0131z<\/td>\n<td>Anlamsal anlay\u0131\u015f, ba\u011flam<\/td>\n<td>Kapsaml\u0131l\u0131k, do\u011fruluk, esneklik<\/td>\n<\/tr>\n<tr>\n<td>Ana Dezavantaj<\/td>\n<td>Anlamsal bo\u015fluklar<\/td>\n<td>Anahtar kelime zay\u0131fl\u0131\u011f\u0131<\/td>\n<td>Karma\u015f\u0131kl\u0131k, daha fazla kaynak<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3>Ara\u00e7 Kutumuz: FastAPI ve Ollama<\/h3>\n<p>Bu hibrit RAG API&#8217;sini olu\u015fturmak i\u00e7in modern ve g\u00fc\u00e7l\u00fc ara\u00e7lar kullanaca\u011f\u0131z: FastAPI ve Ollama.<\/p>\n<h4>FastAPI: H\u0131zl\u0131 ve Modern API Geli\u015ftirme<\/h4>\n<p>FastAPI, Python ile API&#8217;ler olu\u015fturmak i\u00e7in modern, h\u0131zl\u0131 (Starlette ve Pydantic sayesinde), y\u00fcksek performansl\u0131 bir web \u00e7at\u0131s\u0131d\u0131r. Otomatik interaktif API dok\u00fcmantasyonu (Swagger UI ve ReDoc) sunar ve asenkron programlamay\u0131 (<code>async\/await<\/code>) do\u011fal olarak destekler.<\/p>\n<ul>\n<li><strong>Neden FastAPI?<\/strong> Y\u00fcksek performans, geli\u015ftirici verimlili\u011fi, tip ipu\u00e7lar\u0131 ile daha az hata, otomatik dok\u00fcmantasyon ve asenkron i\u015flemler i\u00e7in m\u00fckemmel destek sunar.<\/li>\n<\/ul>\n<h4>Ollama: Yerel LLM&#8217;leri \u00c7al\u0131\u015ft\u0131rmak<\/h4>\n<p>Ollama, b\u00fcy\u00fck dil modellerini (LLM&#8217;ler) yerel makinenizde \u00e7al\u0131\u015ft\u0131rmay\u0131 kolayla\u015ft\u0131ran bir platformdur. Llama 2, Mistral, Gemma gibi pop\u00fcler modelleri indirip \u00e7al\u0131\u015ft\u0131rabilir, hatta kendi modellerinizi olu\u015fturabilirsiniz. Bir API aray\u00fcz\u00fc sunarak uygulamalar\u0131n\u0131za kolayca entegre edilebilir.<\/p>\n<ul>\n<li><strong>Neden Ollama?<\/strong> Gizlilik (veriler yerel kal\u0131r), maliyet etkinli\u011fi (API \u00fccreti yok), esneklik (\u00e7e\u015fitli modelleri destekler), \u00e7evrimd\u0131\u015f\u0131 \u00e7al\u0131\u015fma yetene\u011fi ve kolay entegrasyon sa\u011flar.<\/li>\n<\/ul>\n<h3>Veri Haz\u0131rl\u0131\u011f\u0131 ve \u0130ndeksleme: Hibrit RAG&#8217;\u0131n Temelleri<\/h3>\n<p>Hibrit RAG sisteminin temelini sa\u011flam bir veri haz\u0131rl\u0131\u011f\u0131 ve indeksleme s\u00fcreci olu\u015fturur. Hem seyrek hem de yo\u011fun geri getirim i\u00e7in ayr\u0131 ayr\u0131 indeksler olu\u015fturmam\u0131z gerekecek.<\/p>\n<h4>Belge Y\u00fckleme ve Par\u00e7alama (Chunking)<\/h4>\n<p>\u0130lk ad\u0131m, bilgi taban\u0131m\u0131z\u0131 olu\u015fturan belgeleri y\u00fcklemek ve daha k\u00fc\u00e7\u00fck, y\u00f6netilebilir par\u00e7alara ay\u0131rmakt\u0131r. Bu par\u00e7alama i\u015flemi (chunking), geri getirilen bilgilerin LLM i\u00e7in daha anlaml\u0131 ve odakl\u0131 olmas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-python\">\nfrom langchain_community.document_loaders import TextLoader\nfrom langchain.text_splitter import RecursiveCharacterTextSplitter\n\n# \u00d6rnek bir belge y\u00fckleme\nloader = TextLoader(\"data\/my_document.txt\")\ndocuments = loader.load()\n\n# Belgeleri par\u00e7alara ay\u0131rma\ntext_splitter = RecursiveCharacterTextSplitter(\n    chunk_size=500,\n    chunk_overlap=50\n)\nchunks = text_splitter.split_documents(documents)\n<\/pre>\n<p><\/code><\/p>\n<h4>Seyrek \u0130ndeksleme (BM25)<\/h4>\n<p>Seyrek geri getirim i\u00e7in BM25 gibi bir algoritma kullanaca\u011f\u0131z. Bu, belge par\u00e7alar\u0131n\u0131n metin i\u00e7eri\u011fini do\u011frudan analiz ederek bir indeks olu\u015fturur. Python'da <code>rank_bm25<\/code> k\u00fct\u00fcphanesi bu i\u015f i\u00e7in kullan\u0131labilir.<\/p>\n<pre><code class=\"language-python\">\nfrom rank_bm25 import BM25Okapi\n\n# Her bir chunk'\u0131n i\u00e7eri\u011fini token'lara ay\u0131r\ntokenized_corpus = [chunk.page_content.split(\" \") for chunk in chunks]\nbm25 = BM25Okapi(tokenized_corpus)\n<\/pre>\n<p><\/code><\/p>\n<h4>Yo\u011fun \u0130ndeksleme (Vekt\u00f6r Veritaban\u0131)<\/h4>\n<p>Yo\u011fun geri getirim i\u00e7in, belge par\u00e7alar\u0131n\u0131 vekt\u00f6rlere d\u00f6n\u00fc\u015ft\u00fcrecek bir embedding modeli ve bu vekt\u00f6rleri saklayacak bir vekt\u00f6r veritaban\u0131 (\u00f6rne\u011fin ChromaDB, FAISS veya Pinecone) kullanaca\u011f\u0131z. Burada <code>sentence-transformers<\/code> k\u00fct\u00fcphanesinden bir model ve <code>ChromaDB<\/code> kullanabiliriz.<\/p>\n<pre><code class=\"language-python\">\nfrom langchain_community.embeddings import OllamaEmbeddings\nfrom langchain_community.vectorstores import Chroma\n\n# Ollama ile embedding modeli y\u00fckleme (\u00f6rne\u011fin \"nomic-embed-text\")\nollama_embeddings = OllamaEmbeddings(model=\"nomic-embed-text\")\n\n# Vekt\u00f6r veritaban\u0131 olu\u015fturma ve belge par\u00e7alar\u0131n\u0131 ekleme\nvectorstore = Chroma.from_documents(\n    documents=chunks,\n    embedding=ollama_embeddings,\n    persist_directory=\".\/chroma_db\"\n)\nvectorstore.persist()\n<\/pre>\n<p><\/code><\/p>\n<h3>Hibrit Geri Getirim Mant\u0131\u011f\u0131n\u0131n Uygulanmas\u0131<\/h3>\n<p>Art\u0131k hem seyrek hem de yo\u011fun indekslerimiz oldu\u011funa g\u00f6re, bir kullan\u0131c\u0131 sorgusu geldi\u011finde bu iki kaynaktan sonu\u00e7lar\u0131 al\u0131p bunlar\u0131 birle\u015ftirmemiz gerekiyor. Reciprocal Rank Fusion (RRF) bu birle\u015ftirme i\u00e7in pop\u00fcler ve etkili bir y\u00f6ntemdir.<\/p>\n<h4>Geri Getirim Fonksiyonlar\u0131<\/h4>\n<p>\u00d6ncelikle, her bir geri getirim y\u00f6nteminden sonu\u00e7lar\u0131 alacak fonksiyonlar tan\u0131mlayal\u0131m.<\/p>\n<pre><code class=\"language-python\">\ndef sparse_retrieve(query: str, bm25_retriever, chunks, k=5):\n    tokenized_query = query.split(\" \")\n    doc_scores = bm25_retriever.get_scores(tokenized_query)\n    top_n = sorted(range(len(doc_scores)), key=lambda i: doc_scores[i], reverse=True)[:k]\n    return [(chunks[i], doc_scores[i]) for i in top_n]\n\nasync def dense_retrieve(query: str, vectorstore, k=5):\n    # Langchain'in retriever aray\u00fcz\u00fcn\u00fc kullan\u0131yoruz\n    docs = await vectorstore.asimilarity_search(query, k=k)\n    # Chroma'dan gelen docs'lar zaten Document nesnesi, skorlar\u0131 da eklenebilir\n    return [(doc, 1.0) for doc in docs] # Skorlar i\u00e7in basitle\u015ftirilmi\u015f \u00f6rnek\n<\/pre>\n<p><\/code><\/p>\n<h4>Reciprocal Rank Fusion (RRF) ile Birle\u015ftirme<\/h4>\n<p>RRF, farkl\u0131 geri getirimcilerden gelen sonu\u00e7lar\u0131n s\u0131ralamalar\u0131n\u0131 birle\u015ftirir. Her bir belgeye, s\u0131ralamas\u0131na g\u00f6re bir puan verir ve bu puanlar\u0131 toplayarak nihai bir s\u0131ralama olu\u015fturur. Daha d\u00fc\u015f\u00fck s\u0131ralamalar (yani daha iyi sonu\u00e7lar) daha y\u00fcksek puan al\u0131r.<\/p>\n<pre><code class=\"language-python\">\ndef reciprocal_rank_fusion(results: list[list[tuple]], k=60):\n    fused_scores = {}\n    for retriever_results in results:\n        for rank, (doc, score) in enumerate(retriever_results):\n            doc_id = doc.page_content # Basit bir id olarak i\u00e7erik kullan\u0131yoruz\n            if doc_id not in fused_scores:\n                fused_scores[doc_id] = 0\n            fused_scores[doc_id] += 1 \/ (k + rank)\n    \n    # Skorlara g\u00f6re s\u0131rala ve orijinal Document nesnelerini geri d\u00f6nd\u00fcr\n    sorted_results = sorted(fused_scores.items(), key=lambda item: item[1], reverse=True)\n    \n    # Orijinal chunk nesnelerini bulup d\u00f6nd\u00fcrmek i\u00e7in bir harita olu\u015ftur\n    doc_map = {chunk.page_content: chunk for chunk in chunks} # chunks globalden geliyor\n    \n    final_docs = []\n    for doc_content, score in sorted_results:\n        if doc_content in doc_map:\n            final_docs.append(doc_map[doc_content])\n            \n    return final_docs\n<\/pre>\n<p><\/code><\/p>\n<h3>Ollama ile \u00dcretim ve FastAPI API Entegrasyonu<\/h3>\n<p>Geri getirilen belge par\u00e7alar\u0131n\u0131 LLM'ye iletmek ve bir yan\u0131t \u00fcretmek i\u00e7in Ollama'y\u0131 kullanaca\u011f\u0131z. T\u00fcm bu s\u00fcreci bir FastAPI API'si arac\u0131l\u0131\u011f\u0131yla d\u0131\u015f d\u00fcnyaya a\u00e7aca\u011f\u0131z.<\/p>\n<h4>Ollama ile LLM Entegrasyonu<\/h4>\n<p>Ollama'n\u0131n yerel API'sini kullanarak bir LLM'den yan\u0131t alabiliriz. Langchain'in <code>ChatOllama<\/code> s\u0131n\u0131f\u0131 bu entegrasyonu kolayla\u015ft\u0131r\u0131r.<\/p>\n<pre><code class=\"language-python\">\nfrom langchain_community.chat_models import ChatOllama\nfrom langchain.prompts import ChatPromptTemplate\n\n# Ollama modelini ba\u015flatma\nllm = ChatOllama(model=\"llama2\") # Yerelinizde llama2 y\u00fckl\u00fc olmal\u0131\n\n# Prompt \u015fablonu olu\u015fturma\nprompt_template = ChatPromptTemplate.from_messages(\n    [\n        (\"system\", \"Sen yard\u0131msever bir yapay zeka asistan\u0131s\u0131n. A\u015fa\u011f\u0131daki ba\u011flam\u0131 kullanarak kullan\u0131c\u0131 sorusunu yan\u0131tla: {context}\"),\n        (\"human\", \"{question}\"),\n    ]\n)\n<\/pre>\n<p><\/code><\/p>\n<h4>FastAPI API Endpoin'i Olu\u015fturma<\/h4>\n<p>\u015eimdi t\u00fcm bu bile\u015fenleri bir araya getiren bir FastAPI endpoint'i tan\u0131mlayal\u0131m.<\/p>\n<pre><code class=\"language-python\">\nfrom fastapi import FastAPI\nfrom pydantic import BaseModel\nimport uvicorn\n\n# ... (\u00f6nceki indeksleme ve retriever kodlar\u0131 buraya gelecek) ...\n\napp = FastAPI(\n    title=\"Hibrit RAG API\",\n    description=\"FastAPI ve Ollama ile Seyrek ve Yo\u011fun Geri Getirim Destekli \u00dcretim API'si\"\n)\n\nclass QueryRequest(BaseModel):\n    query: str\n    top_k: int = 5\n\n@app.post(\"\/ask\")\nasync def ask_rag(request: QueryRequest):\n    # 1. Seyrek Geri Getirim\n    sparse_results = sparse_retrieve(request.query, bm25, chunks, k=request.top_k)\n\n    # 2. Yo\u011fun Geri Getirim\n    dense_results = await dense_retrieve(request.query, vectorstore, k=request.top_k)\n\n    # 3. Hibrit Birle\u015ftirme (RRF)\n    combined_docs = reciprocal_rank_fusion([sparse_results, dense_results])\n    \n    # Sadece en iyi 3-5 belgeyi LLM'ye g\u00f6nderelim\n    context = \"\\n\\n\".join([doc.page_content for doc in combined_docs[:request.top_k]])\n\n    # 4. LLM ile \u00dcretim\n    chain = prompt_template | llm\n    response = await chain.ainvoke({\"context\": context, \"question\": request.query})\n\n    return {\"answer\": response.content, \"context_used\": context}\n\nif __name__ == \"__main__\":\n    # Uygulamay\u0131 ba\u015flatmadan \u00f6nce indekslerin olu\u015fturuldu\u011fundan emin olun\n    # Bu k\u0131s\u0131m sadece geli\u015ftirme i\u00e7in, \u00fcretimde indeksler \u00f6nceden y\u00fcklenmeli\n    # \u0130lk \u00e7al\u0131\u015ft\u0131rmada bm25 ve vectorstore'u olu\u015ftur\n    # ... (veri y\u00fckleme, par\u00e7alama, bm25 ve vectorstore olu\u015fturma kodlar\u0131) ...\n    \n    uvicorn.run(app, host=\"0.0.0.0\", port=8000)\n<\/pre>\n<p><\/code><\/p>\n<p>Bu kod blo\u011fu, bir kullan\u0131c\u0131dan sorgu alan, hibrit geri getirim yapan ve Ollama ile yan\u0131t \u00fcreten temel bir API endpoint'ini g\u00f6stermektedir. Ger\u00e7ek bir uygulamada, indekslerin \u00f6nceden y\u00fcklenmesi ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n uygun \u015fekilde y\u00f6netilmesi \u00f6nemlidir.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu makalede, FastAPI ve Ollama kullanarak g\u00fc\u00e7l\u00fc bir hibrit RAG API'sinin nas\u0131l in\u015fa edilece\u011fini detayl\u0131 bir \u015fekilde inceledik. Seyrek ve yo\u011fun geri getirim y\u00f6ntemlerinin avantajlar\u0131n\u0131 birle\u015ftirerek, LLM'lerin daha do\u011fru, ba\u011flamsal ve g\u00fcncel bilgilere dayal\u0131 yan\u0131tlar \u00fcretmesini sa\u011flayan bir sistem kurduk. FastAPI'nin performans\u0131 ve Ollama'n\u0131n yerel LLM \u00e7al\u0131\u015ft\u0131rma yetene\u011fi sayesinde, esnek, gizlili\u011fe \u00f6nem veren ve maliyet etkin bir \u00e7\u00f6z\u00fcm elde ettik. Bu yakla\u015f\u0131m, \u00f6zel bilgi tabanlar\u0131na dayal\u0131 sohbet botlar\u0131, soru-cevap sistemleri ve ak\u0131ll\u0131 asistanlar geli\u015ftirmek i\u00e7in sa\u011flam bir temel sunmaktad\u0131r.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<h4>Hibrit RAG neden sadece seyrek veya yo\u011fun geri getirime g\u00f6re daha iyidir?<\/h4>\n<p>Hibrit RAG, hem anahtar kelime e\u015fle\u015fmesinin hassasiyetini (seyrek) hem de anlamsal anlay\u0131\u015f\u0131n derinli\u011fini (yo\u011fun) birle\u015ftirir. Bu sayede, hem do\u011frudan terimlerin ge\u00e7ti\u011fi hem de farkl\u0131 ifadelerle sorulan karma\u015f\u0131k sorulara daha kapsaml\u0131 ve do\u011fru yan\u0131tlar verebilir, her iki y\u00f6ntemin zay\u0131f y\u00f6nlerini telafi eder.<\/p>\n<h4>Ollama kullanman\u0131n ba\u015fl\u0131ca avantajlar\u0131 nelerdir?<\/h4>\n<p>Ollama, LLM'leri yerel makinenizde \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131r, bu da veri gizlili\u011fi, maliyet tasarrufu (API \u00fccreti yok), \u00e7evrimd\u0131\u015f\u0131 \u00e7al\u0131\u015fma yetene\u011fi ve farkl\u0131 modeller aras\u0131nda kolayca ge\u00e7i\u015f yapma esnekli\u011fi sa\u011flar. Ayr\u0131ca, bulut sa\u011flay\u0131c\u0131lara ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 azalt\u0131r.<\/p>\n<h4>FastAPI'nin bu t\u00fcr bir API i\u00e7in tercih edilme nedenleri nelerdir?<\/h4>\n<p>FastAPI, y\u00fcksek performansl\u0131d\u0131r, asenkron i\u015flemleri do\u011fal olarak destekler (bu da LLM \u00e7a\u011fr\u0131lar\u0131 ve vekt\u00f6r veritaban\u0131 sorgular\u0131 i\u00e7in \u00f6nemlidir), Pydantic tabanl\u0131 veri do\u011frulama ve otomatik interaktif API dok\u00fcmantasyonu sunar. Bu \u00f6zellikler, h\u0131zl\u0131 geli\u015ftirme ve kolay bak\u0131m sa\u011flar.<\/p>\n<h4>Reciprocal Rank Fusion (RRF) nas\u0131l \u00e7al\u0131\u015f\u0131r?<\/h4>\n<p>RRF, birden fazla geri getirimciden gelen sonu\u00e7 listelerini birle\u015ftirmek i\u00e7in kullan\u0131lan bir algoritmad\u0131r. Her bir belgenin farkl\u0131 listelerdeki s\u0131ralamas\u0131n\u0131 dikkate alarak bir puan hesaplar. Daha y\u00fcksek s\u0131ralamalara (yani listenin ba\u015f\u0131nda olan belgelere) daha fazla a\u011f\u0131rl\u0131k verilir. Bu puanlar toplanarak belgeler i\u00e7in nihai bir s\u0131ralama olu\u015fturulur ve b\u00f6ylece farkl\u0131 geri getirim y\u00f6ntemlerinin en iyi sonu\u00e7lar\u0131 birle\u015ftirilmi\u015f olur.<\/p>\n<h4>Bu API'yi \u00fcretim ortam\u0131nda kullanmak i\u00e7in nelere dikkat etmeliyim?<\/h4>\n<p>\u00dcretim ortam\u0131nda, indekslerin \u00f6nceden olu\u015fturulup kal\u0131c\u0131 olarak sakland\u0131\u011f\u0131ndan ve API ba\u015flat\u0131ld\u0131\u011f\u0131nda h\u0131zl\u0131ca y\u00fcklendi\u011finden emin olmal\u0131s\u0131n\u0131z. Ollama sunucusunun kararl\u0131 ve eri\u015filebilir oldu\u011fundan, LLM modelinin uygun \u015fekilde y\u00fcklendi\u011finden emin olun. Ayr\u0131ca, API'nizi g\u00fcvenlik \u00f6nlemleriyle (kimlik do\u011frulama, yetkilendirme) g\u00fc\u00e7lendirmeli, hata y\u00f6netimi ve loglama mekanizmalar\u0131n\u0131 eklemelisiniz. \u00d6l\u00e7eklenebilirlik i\u00e7in gunicorn gibi bir ASGI sunucusu ile kullanman\u0131z \u00f6nerilir.<\/p>\n","protected":false},"excerpt":{"rendered":"B\u00fcy\u00fck Dil Modelleri (LLM&#8217;ler) g\u00fcncel olmayan veya spesifik alan bilgisi gerektiren konularda s\u0131n\u0131rl\u0131l\u0131klar g\u00f6sterebilir. Geri Getirim Destekli \u00dcreti&#8230;","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-39002","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>FastAPI ve Ollama ile Hibrit RAG API Olu\u015fturma: Seyrek ve Yo\u011fun Geri Getirimin G\u00fcc\u00fc - 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\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"FastAPI ve Ollama ile Hibrit RAG API Olu\u015fturma: Seyrek ve Yo\u011fun Geri Getirimin G\u00fcc\u00fc\" \/>\n<meta property=\"og:description\" content=\"B\u00fcy\u00fck Dil Modelleri (LLM&#039;ler) g\u00fcncel olmayan veya spesifik alan bilgisi gerektiren konularda s\u0131n\u0131rl\u0131l\u0131klar g\u00f6sterebilir. Geri Getirim Destekli \u00dcreti...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-12T10:00:37+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=\"13 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"FastAPI ve Ollama ile Hibrit RAG API Olu\u015fturma: Seyrek ve Yo\u011fun Geri Getirimin G\u00fcc\u00fc\",\"datePublished\":\"2026-02-12T10:00:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/\"},\"wordCount\":1942,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/\",\"name\":\"FastAPI ve Ollama ile Hibrit RAG API Olu\u015fturma: Seyrek ve Yo\u011fun Geri Getirimin G\u00fcc\u00fc - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-12T10:00:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"FastAPI ve Ollama ile Hibrit RAG API Olu\u015fturma: Seyrek ve Yo\u011fun Geri Getirimin G\u00fcc\u00fc\"}]},{\"@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":"FastAPI ve Ollama ile Hibrit RAG API Olu\u015fturma: Seyrek ve Yo\u011fun Geri Getirimin G\u00fcc\u00fc - 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\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/","og_locale":"tr_TR","og_type":"article","og_title":"FastAPI ve Ollama ile Hibrit RAG API Olu\u015fturma: Seyrek ve Yo\u011fun Geri Getirimin G\u00fcc\u00fc","og_description":"B\u00fcy\u00fck Dil Modelleri (LLM'ler) g\u00fcncel olmayan veya spesifik alan bilgisi gerektiren konularda s\u0131n\u0131rl\u0131l\u0131klar g\u00f6sterebilir. Geri Getirim Destekli \u00dcreti...","og_url":"https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-12T10:00:37+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"13 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"FastAPI ve Ollama ile Hibrit RAG API Olu\u015fturma: Seyrek ve Yo\u011fun Geri Getirimin G\u00fcc\u00fc","datePublished":"2026-02-12T10:00:37+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/"},"wordCount":1942,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/","url":"https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/","name":"FastAPI ve Ollama ile Hibrit RAG API Olu\u015fturma: Seyrek ve Yo\u011fun Geri Getirimin G\u00fcc\u00fc - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-12T10:00:37+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/fastapi-ve-ollama-ile-hibrit-rag-api-olusturma-seyrek-ve-yogun-geri-getirimin-gucu\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"FastAPI ve Ollama ile Hibrit RAG API Olu\u015fturma: Seyrek ve Yo\u011fun Geri Getirimin G\u00fcc\u00fc"}]},{"@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\/39002","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=39002"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39002\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39002"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39002"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39002"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}