Kendi Yapay Zeka Chatbotunuzu Geliştirin: Pratik Bir Rehber
Kendi akıllı sohbet robotunuzu yaratma fikri size de cazip geliyor mu? Bu pratik rehberle, ChatGPT benzeri bir yapay zeka chatbotunu sıfırdan inşa etmeyi öğrenecek, kod örnekleriyle adım adım ilerleyeceksiniz. Başlamak için hazır olun!
Günümüz dijital dünyasında, yapay zeka (YZ) chatbotları, işletmelerden bireysel kullanıcılara kadar herkes için vazgeçilmez bir araç haline geldi. Eskiden sadece basit, kural tabanlı diyaloglar kurabilen bu botlar, büyük dil modelleri (LLM’ler) ve doğal dil işleme (NLP) teknolojilerindeki devrimsel gelişmeler sayesinde artık çok daha fazlasını yapabiliyor. Peki, bu chatbotların arkasındaki büyü nedir ve neden herkes kendi “ChatGPT benzeri” asistanını oluşturmak istiyor?
Temel olarak, YZ chatbotları, insan benzeri sohbetleri taklit ederek kullanıcı sorularına yanıt verme, bilgi sağlama veya belirli görevleri yerine getirme yeteneğine sahiptir. Bu yetenek, özellikle müşteri hizmetleri, eğitim, sağlık ve eğlence gibi pek çok alanda çığır açıcı fırsatlar sunuyor. Örneğin, bir müşteri hizmetleri botu, kullanıcıların sıkça sorduğu soruları anında yanıtlayarak insan temsilcilerinin yükünü hafifletebilir. Bir eğitim asistanı, öğrencilere ders materyalleri hakkında anında geri bildirim sağlayabilir veya karmaşık konuları basitleştirebilir. Bu sadece verimliliği artırmakla kalmaz, aynı zamanda kullanıcı deneyimini de kişiselleştirilmiş ve kesintisiz hale getirir.
Ancak bu popülerliğin ardında yatan asıl neden, teknolojinin artık daha erişilebilir olmasıdır. Eskiden sadece büyük teknoloji şirketlerinin karşılayabileceği bir yatırım gerektiren bu sistemler, şimdi açık kaynak araçlar, API’ler ve bulut bilişim sayesinde küçük ekiplerin ve hatta bireysel geliştiricilerin bile kolayca kurabileceği platformlara dönüştü. Bu da herkesin kendi ihtiyaçlarına özel, akıllı bir sohbet robotu geliştirmesine olanak tanıyor. Bu makale boyunca, bu heyecan verici dünyaya adım atmanızı sağlayacak temel bilgileri ve pratik kod örneklerini bulacaksınız. Kendi yapay zeka chatbotunuzu oluşturmak için gereken adımları keşfetmeye hazır mısınız?
Kendi Chatbotunuzu Geliştirmeden Önce Bilmeniz Gerekenler
Kendi yapay zeka chatbotunuzu geliştirme yolculuğuna başlamadan önce, temel kavramları anlamak ve doğru araçları seçmek büyük önem taşır. Bu bölüm, sizi chatbot dünyasının temelleriyle tanıştıracak ve projeniz için sağlam bir zemin oluşturmanıza yardımcı olacaktır.
Yapay Zeka Chatbot Nedir ve Nasıl Çalışır?
Yapay zeka chatbotu, bilgisayarların insan dilini anlamasına, yorumlamasına ve yanıtlamasına olanak tanıyan bir yazılım programıdır. Bu, temelde Doğal Dil İşleme (NLP) adı verilen bir altyapıya dayanır. NLP, bilgisayarların insan dilini analiz etmesini, anlamlandırmasını ve hatta üretmesini sağlayan bir dizi teknik ve algoritmayı içerir. Chatbotlar genellikle iki ana bileşenden oluşur: Doğal Dil Anlama (NLU) ve Doğal Dil Üretimi (NLG).
- Doğal Dil Anlama (NLU): Kullanıcının yazdığı veya söylediği şeyi anlama sürecidir. Bu, metnin niyetini (ne istediğini), anahtar kelimeleri ve varlıkları (tarihler, yerler, isimler) çıkarmayı içerir. Örneğin, “Yarın hava nasıl olacak?” sorusunda NLU, kullanıcının “hava durumu” ile ilgili bir “soru” sorduğunu ve “yarın” zaman dilimini belirttiğini anlar.
- Doğal Dil Üretimi (NLG): Chatbotun anladığı niyet ve bilgilere dayanarak insan benzeri bir yanıt oluşturma sürecidir. Bu yanıtın dilbilgisel olarak doğru, bağlamla uyumlu ve doğal akışta olması hedeflenir.
Modern chatbotlar, bu süreçleri Makine Öğrenimi (ML) ve özellikle Derin Öğrenme (DL) teknikleri sayesinde çok daha etkili bir şekilde gerçekleştirir. Büyük Dil Modelleri (LLM’ler) ise bu DL tekniklerinin en gelişmiş örneklerindendir. ChatGPT gibi modeller, milyarlarca parametre üzerinde eğitilmiş devasa sinir ağlarıdır ve bu sayede insan dilinin inceliklerini, bağlamını ve hatta çeşitli dilleri anlayıp üretebilirler. Bu modeller, sadece belirli kurallara bağlı kalmak yerine, öğrendikleri kalıplara dayanarak yaratıcı ve bağlamsal olarak uygun yanıtlar verebilirler. Bu da onları sadece “soru-cevap” makinelerinden öteye taşıyarak gerçek bir diyalog ortağına dönüştürür. İşte bu yüzden, kendi chatbotunuzu geliştirirken bir LLM’i entegre etmek, botunuzun zekasını ve yeteneklerini önemli ölçüde artıracaktır.
Hangi Araçları ve Teknolojileri Kullanmalıyız?
Kendi yapay zeka chatbotunuzu oluşturmak için doğru araçları ve teknolojileri seçmek, projenizin başarısı için kritik öneme sahiptir. Modern bir chatbot geliştirme süreci genellikle aşağıdaki ana bileşenleri içerir:
- Programlama Dili: Python, yapay zeka ve veri bilimi alanında de-facto standarttır. Zengin kütüphane ekosistemi (TensorFlow, PyTorch, NLTK, SpaCy vb.) sayesinde karmaşık görevleri kolayca yerine getirebilirsiniz. JavaScript (Node.js) de web tabanlı chatbotlar için popüler bir seçenektir, özellikle entegre bir frontend/backend çözümü arayanlar için. Bu rehberde Python’a odaklanacağız.
- Büyük Dil Modelleri (LLM) API’leri: Kendi LLM’inizi sıfırdan eğitmek, inanılmaz derecede maliyetli ve zaman alıcı bir süreçtir. Bu nedenle, mevcut LLM’lerin API’lerini kullanmak en pratik yaklaşımdır.
- OpenAI API: ChatGPT’nin arkasındaki GPT modellerine erişim sağlar. Kullanımı kolaydır ve çok güçlü sonuçlar verir. Genellikle ücretli bir modeldir ancak başlangıç için ücretsiz kredi sunabilir.
- Hugging Face Transformers: Açık kaynaklı LLM’lere (örneğin, Llama 2, Mistral) erişim sağlar. Kendi sunucunuzda barındırabilir veya Hugging Face Inference API’lerini kullanabilirsiniz. Daha fazla esneklik ve maliyet kontrolü sunar ancak kurulumu biraz daha karmaşık olabilir.
- Web Çerçeveleri (Frameworks): Chatbotunuz için bir arayüz veya API uç noktası oluşturmanız gerektiğinde web çerçeveleri devreye girer.
- Python için: Flask (hafif ve hızlı prototipleme için ideal) veya Django (daha büyük ve karmaşık uygulamalar için).
- JavaScript için: Express.js (Node.js tabanlı, RESTful API’ler için harika) veya React/Vue/Angular (kullanıcı arayüzü geliştirmek için).
- Veritabanları: Chatbotunuzun sohbet geçmişini, kullanıcı profillerini veya özel bilgi tabanlarını saklaması gerekebilir.
- NoSQL (örneğin MongoDB): Esnek şeması sayesinde sohbet geçmişi gibi dinamik veriler için uygundur.
- İlişkisel (örneğin PostgreSQL): Daha yapılandırılmış veriler ve karmaşık sorgular için idealdir.
- Vektör Veritabanları (örneğin Pinecone, ChromaDB, Faiss): LLM’lerle özel bilgi tabanlarını entegre etmek için kritik öneme sahiptir. Bu veritabanları, metinleri sayısal vektörlere dönüştürerek anlamsal arama yapmayı sağlar.
Bu rehberde, Python ve Flask kullanarak OpenAI API’si ile entegre, basit bir web tabanlı chatbot oluşturmaya odaklanacağız. Bu kombinasyon, hızlı prototipleme ve etkili sonuçlar için mükemmel bir başlangıç noktasıdır. Ayrıca, ileri seviye bölümlerde özel bir bilgi tabanını nasıl entegre edeceğinizi de ele alacağız.
Uygulamalı Kısım: Adım Adım Kendi AI Chatbotunuzu Oluşturma
Artık temel kavramlara hakim olduğunuza göre, kollarımızı sıvama ve kendi yapay zeka chatbotumuzu inşa etme zamanı. Bu bölümde, adım adım bir chatbot projesi oluşturacak, gerekli araçları kuracak ve temel kod yapılarını öğreneceğiz.
Proje Ortamını Kurma ve Gerekli Kütüphaneleri Yükleme
Herhangi bir Python projesine başlarken, bağımlılıkları izole etmek ve çakışmaları önlemek için sanal bir ortam (virtual environment) oluşturmak iyi bir uygulamadır. Ardından, chatbotumuz için gerekli kütüphaneleri yükleyeceğiz.
- Sanal Ortam Oluşturma:
Terminalinizi açın ve projeniz için bir klasör oluşturun:
mkdir my_chatbot_project cd my_chatbot_project python3 -m venv venvŞimdi sanal ortamı etkinleştirin:
# Linux/macOS source venv/bin/activate # Windows .\venv\Scripts\activateTerminalinizin başında
(venv)ibaresini görüyorsanız, sanal ortam başarıyla etkinleştirilmiş demektir. - Gerekli Kütüphaneleri Yükleme:
Chatbotumuz için Flask (web çerçevesi) ve OpenAI (API etkileşimi için) kütüphanelerine ihtiyacımız olacak. Ayrıca, ortam değişkenlerini güvenli bir şekilde yönetmek için
python-dotenvkütüphanesini de ekleyelim.pip install Flask openai python-dotenvBu komutlar, belirtilen kütüphaneleri sanal ortamınıza yükleyecektir. Artık projenizi geliştirmeye hazırsınız.
- API Anahtarınızı Ayarlama:
OpenAI API'sini kullanabilmek için bir API anahtarına ihtiyacınız olacak. Bu anahtarı OpenAI platformundan edinebilirsiniz. Anahtarınızı doğrudan kodunuza yazmak yerine, güvenlik nedenleriyle bir
.envdosyası kullanarak ortam değişkeni olarak saklamak en iyi yaklaşımdır. Proje klasörünüzde.envadında yeni bir dosya oluşturun ve içine anahtarınızı aşağıdaki gibi ekleyin:OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"xxxxxxxx...kısmını kendi OpenAI API anahtarınızla değiştirmeyi unutmayın. Bu dosya, uygulamanızın anahtarınızı güvenli bir şekilde yüklemesini sağlayacaktır.
Uzman İpucu:
.envdosyasını Git gibi versiyon kontrol sistemlerine asla yüklemeyin. Projenizin kök dizininde bir.gitignoredosyası oluşturarak.envsatırını ekleyin. Bu, hassas bilgilerinizin yanlışlıkla herkese açık hale gelmesini önleyecektir.
API ile Büyük Dil Modeli Entegrasyonu (OpenAI Örneği)
Şimdi chatbotumuzun beyni olacak OpenAI modelini entegre edelim. Bu kısımda, kullanıcının mesajını OpenAI API'sine nasıl göndereceğimizi ve modelden nasıl yanıt alacağımızı göreceğiz. Bir e-ticaret sitesi için ürün bilgisi sorgulayan basit bir bot senaryosu üzerinden ilerleyelim.
Proje klasörünüzde app.py adında bir dosya oluşturun ve aşağıdaki kodları ekleyin:
import os
from dotenv import load_dotenv
from flask import Flask, request, jsonify, render_template
import openai
# .env dosyasındaki değişkenleri yükle
load_dotenv()
# Flask uygulamasını başlat
app = Flask(__name__)
# OpenAI API anahtarını ayarla
openai.api_key = os.getenv("OPENAI_API_KEY")
# Basit bir örnek için ürün kataloğu
# Gerçek bir uygulamada bu veritabanından veya harici bir servisten gelir.
PRODUCT_CATALOG = {
"laptop": "Yüksek performanslı bir laptop mu arıyorsunuz? Intel i7 işlemci, 16GB RAM ve 512GB SSD ile gelir. Oyun oynamak ve profesyonel işler için idealdir. Fiyat: 25.000 TL.",
"akıllı telefon": "En yeni akıllı telefon modelimiz, 108MP kamera, AMOLED ekran ve uzun pil ömrü sunar. Her anı yakalayın! Fiyat: 15.000 TL.",
"kulaklık": "Gürültü önleyici kablosuz kulaklıklar, üstün ses kalitesi ve 30 saate kadar pil ömrü sunar. Müzik dinleme keyfini ikiye katlayın! Fiyat: 3.000 TL.",
"tablet": "Hafif ve güçlü bir tablet mi arıyorsunuz? 10.9 inç Liquid Retina ekran, A14 Bionic çip ile gelir. Eğitim ve eğlence için mükemmel. Fiyat: 8.000 TL."
}
# Chatbotun ana endpoint'i
@app.route("/chat", methods=["POST"])
def chat():
user_message = request.json.get("message")
if not user_message:
return jsonify({"error": "Mesaj alanı boş olamaz."}), 400
# Kullanıcının mesajında ürün anahtar kelimesi olup olmadığını kontrol et
response_text = ""
found_product = False
for product_name, product_info in PRODUCT_CATALOG.items():
if product_name in user_message.lower():
response_text = f"İşte {product_name} hakkında bilgi: {product_info}"
found_product = True
break
# Eğer ürün bulunamazsa veya ek bilgi istenirse OpenAI'ye danış
if not found_product:
try:
# OpenAI API'sine gönderilecek mesaj yapısı
messages = [
{"role": "system", "content": "Sen bir e-ticaret sitesinin yardımcı chatbotusun. Kullanıcının ürün sorularına nazikçe ve bilgilendirici bir şekilde yanıt ver."},
{"role": "user", "content": user_message}
]
# Chat modelini çağır (örneğin gpt-3.5-turbo)
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages,
max_tokens=200, # Yanıt uzunluğunu kontrol et
temperature=0.7 # Yaratıcılık seviyesi (0.0-1.0 arası)
)
response_text = response.choices[0].message["content"].strip()
except Exception as e:
print(f"OpenAI API hatası: {e}")
response_text = "Üzgünüm, şu an isteğinizi işleyemiyorum. Lütfen daha sonra tekrar deneyin."
return jsonify({"response": response_text})
# Ana sayfa (basit bir arayüz için)
@app.route("/")
def index():
return render_template("index.html")
if __name__ == "__main__":
app.run(debug=True)
Bu kod bloğu, temel bir Flask uygulaması oluşturur. /chat endpoint'i, kullanıcının gönderdiği mesajı alır ve ilk olarak kendi PRODUCT_CATALOG'umuza bakar. Eğer ilgili bir ürün anahtar kelimesi bulursa, katalogdan yanıt verir. Bulamazsa veya daha genel bir soru ise, mesajı OpenAI'nin gpt-3.5-turbo modeline gönderir. Sistem mesajı (role: system), chatbotun kişiliğini ve rolünü belirler. max_tokens ve temperature gibi parametreler, modelin yanıtının uzunluğunu ve yaratıcılığını kontrol eder. temperature değeri 0'a ne kadar yakınsa, yanıtlar o kadar deterministik (tahmin edilebilir) olur; 1'e ne kadar yakınsa o kadar yaratıcı ve çeşitli olabilir.
Vaka Analizi: E-ticaret Ürün Sorgulama Botu
Diyelim ki küçük bir online giyim mağazanız var ve müşterilerinizin ürünler hakkında sıkça soru sorduğunu fark ettiniz. Örneğin, "Bu tişörtün bedenleri nelerdir?" veya "Kargo süresi ne kadar?" gibi sorularla sürekli karşılaşıyorsunuz. Yukarıdaki kod yapısını kullanarak, bu soruları yanıtlayabilecek basit bir chatbot oluşturabilirsiniz. PRODUCT_CATALOG yerine kendi ürün veritabanınızdan veya bir CSV dosyasından verileri çekebilir, hatta stok durumunu bile kontrol edebilirsiniz. Chatbot, müşterinin sorusunu anlayarak ilgili ürün bilgisini hızlıca verecek, böylece müşteri hizmetleri ekibinizin yükünü hafifletecek ve müşteri memnuniyetini artıracaktır. Eğer soru ürün katalogunuzda yoksa, örneğin "Hava durumu nasıl?", o zaman chatbot bunu genel bilgisiyle OpenAI API üzerinden yanıtlayacaktır.
Kullanıcı Arayüzü Geliştirme (Basit Bir Web Uygulaması)
Bir chatbotun kullanıcılarla etkileşim kurabilmesi için bir arayüze ihtiyacı vardır. Şimdi Flask ile entegre olacak basit bir HTML/CSS/JavaScript tabanlı arayüz oluşturalım. Flask uygulamamızın templates klasörüne index.html adında bir dosya ve static klasörüne style.css ile script.js adında dosyalar ekleyeceğiz.
templates/index.htmldosyasını oluşturun:static/style.cssdosyasını oluşturun:static/script.jsdosyasını oluşturun:- Veri Toplama: Chatbotunuzun öğrenmesini istediğiniz tüm özel belgeleri (PDF'ler, web sayfaları, veritabanı kayıtları, müşteri SSS'leri vb.) toplayın.
- Veri Ön İşleme: Bu veriler genellikle ham haldedir. Onları temizlemek, parçalara ayırmak (chunking) ve LLM'in işleyebileceği bir formata dönüştürmek gerekir. Örneğin, uzun bir PDF belgesini daha küçük, anlamlı paragraflara bölmek.
- Embeddings Oluşturma: Ön işlenmiş her bir metin parçasını sayısal vektörlere dönüştürmeniz gerekir. Bu vektörler, metinlerin anlamsal anlamını temsil eder. Örneğin, "kedi" kelimesinin vektörü ile "köpek" kelimesinin vektörü birbirine daha yakınken, "araba" kelimesinin vektöründen daha uzaktır. OpenAI'nin
text-embedding-ada-002modeli gibi embedding modelleri bu iş için kullanılır. - Vektör Veritabanına Kaydetme: Oluşturduğunuz bu vektörleri bir vektör veritabanına kaydedersiniz (örneğin, ChromaDB, Pinecone, Faiss, Weaviate). Bu veritabanları, yüksek boyutlu vektörler arasında hızlı ve etkili benzerlik aramaları yapmanızı sağlar.
- Sorgu Anı (Retrieval): Bir kullanıcı soru sorduğunda, kullanıcının sorusu da bir vektöre dönüştürülür. Ardından, bu sorgu vektörü ile vektör veritabanınızdaki metin parçalarının vektörleri karşılaştırılır ve anlamsal olarak en benzer (yani kullanıcının sorusuyla en alakalı) parçalar bulunur.
- LLM'e Bağlam Olarak Gönderme: Bulunan en alakalı metin parçaları, kullanıcının orijinal sorusuyla birlikte LLM'e gönderilir. LLM bu ek bağlamı kullanarak daha doğru ve bilgilendirici bir yanıt üretir.
- Prompt Mühendisliği:
LLM'lerden en iyi yanıtları almak, doğru "prompt" (komut) yazma sanatına dayanır. Prompt mühendisliği, modellerin istenen görevi en iyi şekilde anlamasını ve yerine getirmesini sağlamak için komutları tasarlama, test etme ve iyileştirme pratiğidir.
- Açıklık ve Spesifiklik: Modelden ne istediğinizi net bir şekilde belirtin. "Bana bilgi ver" yerine "X ürünü hakkında temel özelliklerini maddeler halinde listele" gibi daha spesifik olun.
- Rol Tanımlama: Modele bir rol atayın (örneğin, "Sen bir müşteri hizmetleri temsilcisisin" veya "Sen bir kodlama asistanısın"). Bu, modelin yanıt tarzını ve içeriğini etkiler.
- Örnekler (Few-shot learning): Modele birkaç örnek girdi-çıktı çifti sağlayarak nasıl yanıt vermesi gerektiğini öğretebilirsiniz.
- Kısıtlamalar: Yanıtın uzunluğu, formatı veya dahil edilmesi gereken anahtar kelimeler gibi kısıtlamalar belirleyin.
- Yanıt Süresi Optimizasyonu:
Kullanıcılar hızlı yanıtlar bekler. API çağrılarının süresini kısaltmak için şunları yapabilirsiniz:
- Önbellekleme: Sıkça sorulan soruların veya yaygın yanıtların sonuçlarını önbelleğe alın. Böylece her seferinde API'ye istek göndermek yerine önbellekten hızlıca yanıt verebilirsiniz. Redis gibi in-memory veritabanları bu iş için idealdir.
- Asenkron API Çağrıları: Birden fazla API çağrısı yapmanız gerekiyorsa, bunları asenkron olarak (
asynciokütüphanesiyle Python'da) paralel çalıştırmak toplam yanıt süresini düşürebilir. - Daha Hafif Modeller Kullanma: Bazı görevler için en büyük ve en pahalı LLM'i kullanmak gerekmeyebilir. Daha küçük, daha hızlı veya maliyet-etkin modelleri (örneğin, OpenAI'nin farklı modelleri veya açık kaynaklı, daha küçük modeller) deneyerek performansı artırabilirsiniz.
- Hata Ayıklama ve Loglama:
Bir chatbot projesinde hata ayıklama, tahmin edilebilir bir süreç değildir çünkü LLM'lerin davranışları her zaman kesin olmayabilir.
- Kapsamlı Loglama: Kullanıcı sorgularını, LLM'e gönderilen prompt'ları, alınan yanıtları ve oluşabilecek hataları ayrıntılı bir şekilde loglayın. Bu, sorunları izlemenize ve modelin neden belirli bir şekilde davrandığını anlamanıza yardımcı olur.
- Hata İşleme: API çağrılarında veya veri işlemede oluşabilecek hataları (ağ sorunları, API sınırlarına ulaşma vb.) zarifçe ele alın. Kullanıcıya net ve yardımcı mesajlar gösterin.
- Kullanıcı Geri Bildirimi: Chatbot arayüzünüze basit bir "Bu yanıt yardımcı oldu mu?" veya "Yanlış mı anladım?" gibi geri bildirim mekanizmaları ekleyin. Bu geri bildirimler, chatbotunuzu sürekli iyileştirmeniz için değerli veriler sağlar.
- Versiyonlama: Prompt'larınızın ve model yapılandırmalarınızın versiyonlarını takip edin. Bir değişiklik yaptığınızda, performansın nasıl etkilendiğini izlemek için önceki versiyonlarla karşılaştırma yapabilmelisiniz.
-
Kendi chatbotumu geliştirmek için hangi programlama dilini öğrenmeliyim?
Yapay zeka ve chatbot geliştirme için Python, zengin kütüphane desteği (OpenAI, Flask, NLTK, SpaCy vb.) sayesinde en çok tercih edilen dildir. Bu rehberde de Python kullandık.
-
ChatGPT benzeri bir bot oluşturmak için OpenAI API'si ücretsiz mi?
OpenAI API'si genellikle kullanım tabanlı ücretlendirilir. Ancak, yeni kullanıcılar için genellikle belirli bir süre veya kullanım limitine kadar ücretsiz kredi sunarlar. Detaylı bilgi için OpenAI'nin fiyatlandırma sayfasını kontrol etmelisiniz.
-
Chatbotumun kendi özel verilerimi kullanmasını nasıl sağlarım?
Kendi özel verilerinizi kullanmak için "Retriever-Augmented Generation (RAG)" tekniğini kullanmanız gerekir. Bu, özel belgelerinizden metin parçalarını alıp bunları embedding'lere dönüştürerek bir vektör veritabanına kaydetmeyi, ardından kullanıcının sorgusuna en alakalı parçaları çekerek bunları LLM'ye bağlam olarak sunmayı içerir.
-
Chatbotumun yanıt süresini nasıl kısaltabilirim?
Yanıt süresini kısaltmak için önbellekleme (sıkça sorulan soruların yanıtlarını saklama), asenkron API çağrıları kullanma ve görev için daha hafif (daha az karmaşık) bir LLM modeli seçme gibi yöntemleri uygulayabilirsiniz.
-
Chatbotumu dağıttıktan sonra nasıl bakımını yapmalı ve iyileştirmeliyim?
Chatbotunuzu dağıttıktan sonra, kullanıcı geri bildirimlerini toplayın, logları düzenli olarak inceleyin, prompt'ları sürekli olarak iyileştirin ve yeni model güncellemelerini takip edin. Performans metriklerini izlemek ve düzenli testler yapmak da önemlidir.
AI Chatbot
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
margin: 0;
}
.chat-container {
background-color: #fff;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
width: 90%; /* Mobil uyumluluk için */
max-width: 500px;
height: 70vh;
display: flex;
flex-direction: column;
overflow: hidden;
}
.chat-box {
flex-grow: 1;
padding: 20px;
overflow-y: auto;
border-bottom: 1px solid #eee;
}
.message {
padding: 10px 15px;
border-radius: 18px;
margin-bottom: 10px;
max-width: 80%;
word-wrap: break-word;
}
.user-message {
background-color: #007bff;
color: white;
align-self: flex-end;
margin-left: auto;
border-bottom-right-radius: 2px;
}
.bot-message {
background-color: #e2e6ea;
color: #333;
align-self: flex-start;
border-bottom-left-radius: 2px;
}
input[type="text"] {
flex-grow: 1;
padding: 10px;
border: 1px solid #ddd;
border-radius: 20px;
margin-right: 10px;
font-size: 1em;
}
button {
background-color: #28a745;
color: white;
border: none;
border-radius: 20px;
padding: 10px 20px;
cursor: pointer;
font-size: 1em;
}
button:hover {
background-color: #218838;
}
/* Mobil uyumluluk için */
@media (max-width: 768px) {
.chat-container {
width: 100%;
height: 100vh;
border-radius: 0;
}
body {
align-items: flex-start;
}
}
document.addEventListener("DOMContentLoaded", () => {
const chatBox = document.getElementById("chat-box");
const userInput = document.getElementById("user-input");
const sendButton = document.getElementById("send-button");
function addMessage(sender, text) {
const messageDiv = document.createElement("div");
messageDiv.classList.add("message");
messageDiv.classList.add(sender === "user" ? "user-message" : "bot-message");
messageDiv.textContent = text;
chatBox.appendChild(messageDiv);
chatBox.scrollTop = chatBox.scrollHeight; // En alta kaydır
}
async function sendMessage() {
const message = userInput.value.trim();
if (message === "") return;
addMessage("user", message);
userInput.value = ""; // Giriş alanını temizle
// Botun yanıtını beklerken yükleme mesajı gösterebiliriz
addMessage("bot", "Yazılıyor...");
try {
const response = await fetch("/chat", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ message: message }),
});
const data = await response.json();
// "Yazılıyor..." mesajını kaldır ve gerçek yanıtı ekle
chatBox.lastChild.remove();
addMessage("bot", data.response);
} catch (error) {
console.error("Hata:", error);
chatBox.lastChild.remove();
addMessage("bot", "Üzgünüm, bir hata oluştu.");
}
}
sendButton.addEventListener("click", sendMessage);
userInput.addEventListener("keypress", (e) => {
if (e.key === "Enter") {
sendMessage();
}
});
});
Bu üç dosya, basit ama işlevsel bir chatbot arayüzü sağlar. index.html ana yapıyı, style.css görünümü ve mobil uyumluluğu (örneğin @media (max-width: 768px) kuralı ile), script.js ise kullanıcı etkileşimlerini (mesaj gönderme, yanıt alma ve sohbet kutusuna ekleme) yönetir. Kullanıcı bir mesaj gönderdiğinde, JavaScript bu mesajı Flask backend'indeki /chat endpoint'ine bir POST isteği olarak gönderir. Backend, OpenAI API'sinden yanıtı aldıktan sonra, bu yanıt tekrar frontend'e gönderilir ve sohbet kutusuna eklenir.
Uygulamayı çalıştırmak için terminalinizde (sanal ortamınız etkin haldeyken) şu komutu çalıştırın:
python app.py
Tarayıcınızda http://127.0.0.1:5000/ adresine giderek chatbotunuzu görebilir ve onunla sohbet etmeye başlayabilirsiniz!
Chatbotunuzu Daha Akıllı Hale Getirme: İleri Düzey Teknikler
Temel bir chatbotu başarıyla kurdunuz. Şimdi, botunuzu daha da akıllı, ilgili ve kullanışlı hale getirecek ileri düzey teknikleri inceleyelim. Bu teknikler, chatbotunuzun sadece genel bilgilerle sınırlı kalmamasını, aynı zamanda özel veritabanlarınızdan bilgi çekebilmesini ve performansını optimize edebilmesini sağlar.
Bilgi Bankası Entegrasyonu ve Veri Ön İşleme
Büyük dil modelleri (LLM'ler) genel konularda harikalar yaratırken, belirli bir şirket, ürün veya alan hakkında özel bilgilere sahip değillerdir. İşte bu noktada Harici Bilgi Bankası Entegrasyonu veya Retriever-Augmented Generation (RAG) devreye girer. RAG, chatbotunuzun bir kullanıcının sorusuna yanıt vermeden önce, ilgili bilgileri harici bir bilgi tabanından almasını ve bu bilgiyi LLM'ye bağlam olarak sunmasını sağlayan bir yaklaşımdır. Bu sayede model, kendi eğitim verilerinin ötesindeki güncel ve spesifik bilgilere erişebilir, "halüsinasyon" riskini azaltır ve daha doğru yanıtlar üretir.
Bu sürecin adımları genellikle şunlardır:
Örnek Kod: Basit Bir Embedding ve Arama İşlemi (InMemory)
Gerçek bir vektör veritabanı kurulumu biraz daha karmaşık olsa da, konsepti anlamak için basit bir in-memory örnekle bu süreci canlandırabiliriz:
import openai
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity # Vektör benzerliği için
# OpenAI API anahtarınızın ayarlı olduğunu varsayalım
# openai.api_key = os.getenv("OPENAI_API_KEY")
def get_embedding(text, model="text-embedding-ada-002"):
"""Metin için embedding (vektör) oluşturur."""
try:
response = openai.Embedding.create(input=[text], model=model)
return response['data'][0]['embedding']
except Exception as e:
print(f"Embedding oluşturulurken hata: {e}")
return None
def find_most_similar_chunk(query_embedding, document_embeddings_map):
"""Sorgu embedding'ine en benzer metin parçasını bulur."""
max_similarity = -1
most_similar_chunk = None
for chunk_text, chunk_embedding in document_embeddings_map.items():
if chunk_embedding is not None:
similarity = cosine_similarity(np.array(query_embedding).reshape(1, -1),
np.array(chunk_embedding).reshape(1, -1))[0][0]
if similarity > max_similarity:
max_similarity = similarity
most_similar_chunk = chunk_text
return most_similar_chunk
# Örnek bilgi bankası (gerçekte bu çok daha büyük ve çeşitli olur)
documents = [
"Şirketimiz 2005 yılında kurulmuştur ve yenilikçi teknoloji çözümleri sunar.",
"Müşteri hizmetlerimiz haftanın 7 günü 24 saat açıktır.",
"Ürün iadeleri için 30 gün içinde fatura ile başvurulması gerekmektedir.",
"Yeni yapay zeka entegrasyonumuz, üretim süreçlerimizi %15 hızlandırdı."
]
# Belgeler için embedding'ler oluştur ve sakla (gerçekte vektör DB'ye yazılır)
document_embeddings_map = {doc: get_embedding(doc) for doc in documents}
# Kullanıcı sorgusu
user_query = "İade politikalarınız hakkında bilgi verebilir misiniz?"
query_embedding = get_embedding(user_query)
if query_embedding:
# En alakalı belgeyi bul
relevant_context = find_most_similar_chunk(query_embedding, document_embeddings_map)
print(f"Kullanıcı sorgusu: {user_query}")
print(f"Bulunan en alakalı bağlam: {relevant_context}\n")
# Bu bağlamı LLM'e gönder
try:
messages_with_context = [
{"role": "system", "content": "Sen bir yardımcı asistansın. Aşağıdaki bağlamı kullanarak kullanıcının sorularına yanıt ver. Eğer bağlamda bilgi yoksa, bilmediğini söyle."},
{"role": "user", "content": f"Bağlam: {relevant_context}\n\nSoru: {user_query}"}
]
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages_with_context,
max_tokens=250
)
print("Chatbot yanıtı:", response.choices[0].message["content"].strip())
except Exception as e:
print(f"OpenAI API hatası (bağlamlı): {e}")
Bu örnek, bir kullanıcının sorgusuna en alakalı belge parçasını nasıl bulacağınızı ve bu bağlamı OpenAI modeline nasıl ileteceğinizi gösteriyor. Gerçek bir senaryoda, document_embeddings_map yerine bir vektör veritabanı kullanırdınız, bu da milyonlarca belge arasında anında arama yapmanızı sağlardı.
Uzman İpucu: Vektör veritabanları, büyük ölçekli bilgi tabanı entegrasyonu için vazgeçilmezdir. Bulut tabanlı çözümler (Pinecone, Weaviate) veya kendi kendine barındırılan (ChromaDB, Faiss) seçenekleri araştırın. Her ikisinin de kendine göre avantajları ve dezavantajları vardır.
Chatbot Performansını Optimize Etme ve Hata Ayıklama
Bir chatbotu hayata geçirmek bir başlangıçtır, ancak onu optimize etmek ve sorunsuz çalışmasını sağlamak sürekli bir süreçtir. İşte performans artırma ve hata ayıklama için bazı önemli noktalar:
Bu ileri düzey teknikleri uygulayarak, chatbotunuzun sadece temel sorulara yanıt veren bir araç olmaktan çıkıp, karmaşık görevleri anlayıp yerine getiren, güvenilir ve yüksek performanslı bir dijital asistana dönüşmesini sağlayabilirsiniz. Unutmayın, bir yapay zeka chatbotu geliştirmek sürekli bir öğrenme ve iyileştirme sürecidir.
Sonuç
Bu kapsamlı rehberde, kendi yapay zeka chatbotunuzu ChatGPT benzeri özelliklerle nasıl oluşturacağınızı adım adım keşfettik. Temel kavramlardan (NLP, LLM'ler) başlayarak, pratik bir Python ve Flask uygulamasıyla OpenAI API entegrasyonunu tamamladık. Ayrıca, chatbotunuzu daha akıllı hale getirmek için bilgi bankası entegrasyonu (RAG) ve performans optimizasyonu gibi ileri düzey tekniklere değindik. Kendi özel ihtiyaçlarınıza göre uyarlanmış, akıllı bir sohbet robotu geliştirmek artık bir hayal değil, kod örneklerimizle ulaşılabilir bir gerçeklik. Unutmayın, bu sadece bir başlangıç. Yapay zeka dünyası sürekli evriliyor ve chatbotunuzu düzenli olarak güncelleyerek ve yeni özellikler ekleyerek onu daha da güçlü hale getirebilirsiniz. Bu yolculukta başarılar dileriz!
