Ana içeriğe atla

LangChain ile İstem (Prompt) Mühendisliğine Giriş

LangChain’deki istem mühendisliğinin gücünü keşfedin; yapay zekâ modellerinden kesin ve ilgili yanıtlar almak için temel bir tekniktir.
Güncel 3 Eki 2026  · 11 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

LangChain, uygulamaları GPT, LLaMA, Mistral gibi dil modelleriyle kolayca geliştirmek için tasarlanmış açık kaynaklı bir çerçevedir.

LangChain’in en güçlü özelliklerinden biri, gelişmiş istem mühendisliğine verdiği destektir. İstem mühendisliği, bir dil modelinden en doğru ve ilgili yanıtları almak için istemlerin tasarlanması ve optimize edilmesini ifade eder.

Bu yazıda istemlerin temellerini, LangChain’in istemleri nasıl kullandığını, istem şablonlarını, belleği, ajanları ve zincirleri ele alacağız. Her bir temel kavram için Python’da birkaç kod örneği göreceğiz; böylece eğitimin sonunda Python’da LangChain çerçevesini kullanarak kendi uygulamalarınızı oluşturmada kendinizi rahat hissedeceksiniz.

LangChain ve GPT kullanarak basit bir yapay zekâ ajanı nasıl oluşturulur merak ediyor musunuz? GPT & LangChain ile Prompt Engineering Code-Along içeriğimize göz atın:

İstem (Prompt) Mühendisliği Nedir?

Görsel: Yazar

İstem mühendisliği üzerine kapsamlı bir rehberimiz var; ancak hızlı bir hatırlatma olarak, üretken yapay zekâ modelleriyle etkili biçimde iletişim kuran metin girdileri oluşturma pratiğidir. Doğal dilde yazılan bu istemler, yapay zekâdan gerçekleştirmesini istediğimiz görevi belirtir.

Biçimleri çok çeşitli olabilir; bir matematik teoreminin açıklamasını istemek gibi basit sorulardan, belirli bir tema hakkında şiir yazdırmak gibi daha yaratıcı taleplere kadar uzanır.

İstem mühendisliğinde önemli olan sadece ne sorduğunuz değil, nasıl sorduğunuzdur. Bu; doğru kelime seçimlerini yapmak, belirli bir ton veya üslup belirlemek, gerekli bağlamı sağlamak ya da hatta yapay zekâya bir rol tanımlamak (örneğin belirli bir dilin ana dili konuşuru gibi yanıt vermesini istemek) anlamına gelebilir.

Bazı durumlarda istemler, yapay zekânın öğrenme sürecini yönlendirmek için örnekler de içerebilir. Az örnekli öğrenme (few-shot learning) olarak bilinen bu teknik, özellikle karmaşık görevlerde etkili olabilir.

Görüntü veya ses üreten modellerle çalışırken, istemler genellikle istenen çıktıyı ayrıntılı biçimde tanımlar; konudan ve üsluptan, kompozisyona ve nihai ürünün havasına kadar. İstem mühendisliğinin inceliği, bu unsurları ayarlayıp yapay zekâyı istenen sonuca yönlendirmede yatar.

İstemlerin Temelleri

Görsel: Yazar

İstemler, istenen yanıtı almak için büyük dil modellerine (LLM) verilen girdilerdir. İyi tasarlanmış istemler, LLM’lerden faydalı çıktılar almanın anahtarıdır. İstem mühendisliğinin amacı, doğru, ilgili ve faydalı LLM yanıtları üreten istemleri dikkatle oluşturmaktır.

İyi bir istem genellikle şu dört bileşeni içerir:

  1. Yönergeler - Modele ne yapacağını, sağlanan bilgiyi nasıl kullanacağını, sorguyla ne yapacağını ve çıktıyı nasıl oluşturacağını söyleyin.
  2. Örnek Girdi - Modle beklenen şeyi göstermek için örnek girdiler sağlayın.
  3. Örnek Çıktı - Karşılık gelen örnek çıktılar verin.
  4. Sorgu - Modelin işlemesini istediğiniz asıl girdi.

Sorgu dışındaki her şey isteğe bağlıdır ancak özellikle göreve ve beklenen yanıta ilişkin yönergeler yanıt kalitesini önemli ölçüde etkileyebilir.

Örnekler, verilen bir örnek girdi için istenen çıktı biçimini gösterir.

Sorgu, LLM’ye yöneltilen soru veya taleptir.

Etkili istemler oluşturmak, çözülen probleme bağlı olarak bu öğeleri yaratıcı biçimde bir araya getirmeyi gerektirir.

LangChain İstemleri

LangChain, dil modellerini içeren karmaşık görevleri yönetmeyi kolaylaştıran, istemleri oluşturmaya ve onlarla çalışmaya yardımcı çeşitli sınıf ve işlevler sunar.

LangChain, PromptTemplate nesnesi aracılığıyla istem mühendisliği için birinci sınıf destek sağlar.

İstem şablonları, dil modelleri için sorgular formüle etmeye yönelik yapılandırılmış kılavuzlar olarak hizmet eder.

Bu şablonlar genellikle direktifler, bir seçki örnek girdiler (few-shot örnekler) ve belirli görevlere uygun, özelleştirilmiş sorular ve bağlamlardan oluşur.

LangChain’in amacı, farklı dil modelleriyle uyumlu şablonlar tasarlayarak şablonların modeller arasında taşınmasını kolaylaştırmaktır.

Kısacası, PromptTemplate sınıfını bir dize istem için şablon oluşturmakta kullanabilirsiniz.

from langchain.prompts import PromptTemplate


prompt_template = PromptTemplate.from_template(
    "Tell me a {adjective} joke about {content}."
)
prompt_template.format(adjective="sad", content="data scientists")

Çıktı:

>>> 'Tell me a sad joke about data scientists.'

Değişken kullanmak zorunlu değildir. Hiç değişkeniniz olmasa bile bu sınıfı kullanarak bir istem oluşturabilirsiniz.

from langchain.prompts import PromptTemplate
prompt_template = PromptTemplate.from_template("Tell me a joke")
prompt_template.format()

Çıktı:

>>> 'Tell me a joke'

Peki ya bir sohbet uygulaması geliştiriyorsunuz ve kullanıcı her yeni mesaj gönderdiğinde mesaj geçmişini kaydedip LLM’ye göndermeniz gerekiyor? Bunu elle yapmak zaman alıcıdır.

Desteklenen sohbet modelleri için bunun yerine ChatPromptTemplate kullanabilirsiniz:

from langchain.prompts import ChatPromptTemplate


chat_template = ChatPromptTemplate.from_messages(
    [
        ("system", "You are a helpful AI bot. Your name is {name}."),
        ("human", "Hello, how are you doing?"),
        ("ai", "I'm doing well, thanks!"),
        ("human", "{user_input}"),
    ]
)


messages = chat_template.format_messages(name="Bob", user_input="What is your name?")


print(messages)

Çıktı:

>>> [SystemMessage(content='You are a helpful AI bot. Your name is Bob.'),

>>> HumanMessage(content='Hello, how are you doing?'),

>>> AIMessage(content="I'm doing well, thanks!"),

>>> HumanMessage(content='What is your name?')]

Şöyle düşünüyor olabilirsiniz: Neden PromptTemplate’lere ihtiyaç var? Neden dize istemi doğrudan LLM’ye geçemiyoruz? İşte LangChain’in PromptTemplate’lerini kullanmak için bazı iyi nedenler:

  • İstem şablonları yeniden kullanılabilir; bir istemi bir kez oluşturup, her seferinde yeniden yazmadan farklı makaleleri özetlemek gibi birçok durumda kullanabilirsiniz.
  • İstemlerin biçimlendirmesini, modelin çağrılmasından ayırarak kodu daha modüler hale getirir; şablonu veya modeli bağımsızca güncelleyebilirsiniz.
  • Şablonlar, karmaşık mantığı daha basit bir biçimde, daha net adlandırılmış değişkenlerle kapsüllediğinden kodunuzun okunabilirliğini artırır.
  • Bakım, istem şablonlarıyla daha kolaydır; istem mantığındaki değişiklikler, tek tek her istemde değil, merkezi tek bir yerde yapılır.

LangChain Belleği

Dil modeliyle sohbet etmeyi içeren uygulamalarda sistemin geçmiş konuşmaları hatırlaması önemlidir.

Tıpkı normal bir sohbette olduğu gibi, sistem daha önce söylenenlere geri dönebilmeli.

En basit hâliyle bu, sistemin önceki birkaç mesajı görebilmesi demektir. Daha gelişmiş bir sistem ise farklı konulara ilişkin gerçekleri ve bunların nasıl bağlandığını da hatırlar.

Geçmiş sohbetleri hatırlayabilme yeteneğine “bellek” denir. LangChain, bu sohbet sistemlerine bellek eklemeye yardımcı olur.

LangChain’de bir bellek iki temel şey yapar:

  1. Sorgu LLM’ye gönderilmeden önce, sistem belleğinden okuyarak kullanıcının verdiği ilk girdi istemini zenginleştirir.
  2. Yanıt LLM’den döndüğünde, nihai çıktıyı kullanıcıya iletmeden önce gelecekteki etkileşimler için belleğe yazar.

LangChain’de Bellek (Görsel Kaynağı)

Bellek özelliğini LangChain’de kullanmak için ConversationBufferMemory sınıfından yararlanabilirsiniz.

from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(return_messages=True)
memory.chat_memory.add_user_message("hi!")
memory.chat_memory.add_ai_message("what's up?")
memory.chat_memory.add_user_message("how are you doing?")
memory.chat_memory.add_ai_message("I am fine, thank you and you?")


# to check the variables history
memory.load_memory_variables({})

Çıktı:

>>> {'history': [HumanMessage(content='hi!'),

>>> AIMessage(content="what's up?"),

>>> HumanMessage(content='how are you doing?'),

>>> AIMessage(content='I am fine, thank you and you?')]}

Varsayılan olarak anahtarın history olduğu bir sözlük döndürür. Bu anahtar, iletilerin listesini gösterir ve bu iletiler bir insandan (HumanMessage) veya LLM’den (AIMessage) gelmiş olabilir.

LangChain Zincirleri

Basit görevlerde tek bir LLM (Büyük Dil Modeli) kullanmak yeterlidir. Ancak daha karmaşık görevler genellikle birden çok adımın ve/veya modelin zincirlenmesini gerektirir.

LangChain’de Zincirleri kullanmanın eski yöntemi Chain arayüzüdür.

Daha yeni ve önerilen yöntem ise LangChain Expression Language (LCEL)’dir. Yeni projeler için LCEL tercih edilse de Chain yöntemi hâlâ kullanışlıdır ve desteklenmektedir.

from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema import StrOutputParser


model = ChatOpenAI(openai_api_key = “...”)


prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "You're a expert data scientist and machine learning engineer who offer its expertise and responds to the point and accurately.",
        ),
        ("human", "{question}"),
    ]
)
runnable = prompt | model | StrOutputParser()


for chunk in runnable.stream({"question": "How is machine learning different than deep learning?"}):
    print(chunk, end="", flush=True)

Çıktı:

>>> Machine learning and deep learning are subfields of artificial intelligence (AI) that involve training models to make predictions or decisions based on data. While there is an overlap between the two, they ……..

runnable’ın oluşturulma biçimi Python için çok alışıldık değildir; ancak bu | bir pipe (boru) işlemcisidir. Prompt | model | StrOutputParser(), Prompt’un modelden geçirilip, çıktısının StrOutputParser()’dan geçirilmesi anlamına gelir. Zincirdeki her bir parça veriyi bir şekilde dönüştürür.

LangChain kullanarak oluşturulabilecek ilginç kullanım örnekleri ve uygulamalar hakkında daha fazla bilgi edinmek ister misiniz? Mühendislik ve Veri Uygulamaları kullanım senaryoları eğitimimize göz atın.

LangChain Ajanları

Ajanların temel kavramı, bir dizi eylem seçmek için bir dil modeli kullanmayı içerir.

Zincirlerin aksine, eylemler dizisinin önden belirlendiği ve koda gömüldüğü durumlar yerine, ajanlar uygun eylemleri ve sıralarını belirlemek için karar verme aracı olarak bir dil modeli kullanır.

LangChain’in Ajanlar yapısında üç temel kavram vardır:

  1. Araçlar: LLM’nin kullanımına sunulan araçların açıklamaları
  2. Kullanıcı girdisi: Görevin üst düzey hedefi
  3. Ara adımlar: Kullanıcı girdisini gerçekleştirmek için daha önce yürütülen (eylem, araç çıktısı) çiftleri

Araçlar, bir ajanın etkinleştirebileceği işlevleri temsil eder. Araç tasarımında iki kritik unsur şunlardır:

  • Ajanın uygun araçlara erişiminin sağlanması.
  • Araçların, ajana en yüksek faydayı sağlayacak şekilde tanımlanması.

Çeşitli rutin faaliyetler için bir ajanın birbirine bağlı bir araç koleksiyonuna ihtiyacı vardır. Bunu karşılamak için LangChain, araç takımları (toolkit) fikrini sunar. LangChain, başlamak için geniş bir araç takımı yelpazesi sunar.

Ajanlar hakkında daha fazla bilgi edinmek için şu Resmî LangChain Rehberine bakın.

Teşekkür: Bu blogdaki bazı örnekler resmî LangChain dokümantasyonu kullanılarak oluşturulmuştur.

Sonuç

İstemleri tasarlamaya yapılandırılmış bir yaklaşım sunarak LangChain, farklı dil modelleriyle etkileşimi basitleştirmekle kalmaz, aynı zamanda çıktıların verimliliğini ve alâkalılığını da en üst düzeye çıkarır. LangChain’deki PromptTemplate ve Memory gibi özellikler, istem mühendisliğinde esneklik ile hassasiyetin düşünceli bir entegrasyonunu sergiler; basit sorgulardan karmaşık sohbet bağlamlarına kadar geniş bir görev yelpazesine hitap eder.

LangChain’in Zincirler ve Ajanlar içindeki gelişmiş özellikleri, yalnızca birkaç satır kodla ve altta yatan LLM tercihi ne olursa olsun (seçenek çoktur), LangChain kullanılarak oluşturulabilecek uygulamaların potansiyelini daha da artırır.

İster basit görevler ister karmaşık uygulamalar için olsun, LangChain’in istem mühendisliğine yaklaşımı oldukça basit, net ve benimsemesi kolaydır.

Daha fazlasını öğrenmek ister misiniz? DataCamp’te LangChain ile LLM Uygulamaları Nasıl Geliştirilir serisinin 1. bölümüne göz atın.


Moez Ali's photo
Author
Moez Ali
LinkedIn
Twitter

Veri Bilimci, PyCaret'in Kurucusu ve Yaratıcısı

Konular
Yapay Zeka

LLM'ler Hakkında Daha Fazla Bilgi Edinin

Kurs

Large Language Models (LLMs) Kavramları

2 sa
113.3K
LLM uygulamaları, eğitim metodolojileri, etik hususlar ve en son araştırmaları kapsayan kavramsal kursumuzla LLM'lerin tüm potansiyelini keşfedin.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör