← Back to list

ChatGPT API ile Kolayca Twitter Botu Oluşturma

Selamlar, bu yazıda ChatGPT’yi kullanarak nasıl basit bir Twitter botu oluşturabileceğimizi ele alacağım.

Canerkaya · 2023-06-04 13:56 · 72 claps · 9.2 min read
#chatgpt #twitter-api #openai #python-twitter-bot #pythonanywhere
Open on Medium ↗
Wiki topics: LLM · Large Language Models

ChatGPT API ile Kolayca Twitter Botu Oluşturma

Selamlar, bu yazıda ChatGPT API’yi kullanarak nasıl basit bir Twitter botu oluşturabileceğimizi ele alacağım.

ChatGPT API, yapay zeka tabanlı bir dil modeli olan OpenAI sunduğu güçlü bir hizmettir. Bu API, metin tabanlı bir etkileşim sağlayarak kullanıcılara doğal dilde soruları yanıtlama, metin oluşturma ve hatta sosyal medya platformlarında botlar oluşturma gibi birçok olanak sunar. Bu uygulamada, belirli bir prompt (tetikleyici) üzerine ChatGPT tarafından üretilen tweetleri otomatik olarak Twitter’da paylaşan bir bot yapılmıştır.

Uygulama bir python scriptinden oluşmaktadır. Script her çalıştığında bizim tanımladığımız promptu ChatGPT API’ye gönderir ve yanıt olarak bir tweet alır. Ardından bu tweeti, tanımladığımız twitter hesabında Twitter API aracılığıyla paylaşır. Uygulamanın sürekli ve otonom bir şekilde çalışabilmesi için PythonAnywhere platformu kullanılmıştır. PythonAnywhere, scripti barındırır ve belirli bir zamanlayıcıyla scriptin düzenli olarak çalışmasını sağlar. Şimdi, uygulamayı adım adım nasıl gerçekleştirebileceğimize bir göz atalım.

1. ChatGPT API Kullanımı

Open AI, içerisinde ChatGPT ve farklı dil modellerini sunan ücretli bir servistir. ChatGPT Plus gibi sabit bir ücretlendirme yerine, kullanıcılar sorgularıyla harcadığı token üzerinden ücretlendirilir. Token’ları, ChatGPT’nin yanıtlarını oluşturan kelime parçaları gibi düşünebiliriz. Üretilen yanıt ne kadar uzunsa o kadar çok token harcar ve ücreti de buna bağlı olarak artar. Ücretlendirme, kullanılan yöntem ve dil modeli gibi diğer faktörlerden de etkilenebilir. Tarifeleri görmek için OpenAI’ın ilgili sayfasına göz atabilirsiniz. Ücretleri daha iyi anlamak için deneme yapmak önemlidir, ancak bir örnek vermek gerekirse, bu uygulamada ChatGPT tarafında üretilen her iki tweet için yaklaşık olarak 0.01$ gibi bir ücret harcandığını söyleyebilirim. Günlük kullanımlar için, OpenAI hizmeti oldukça uygun bir seçenektir. Yine de, *Usage limits* bölümünden bir uyarı ve bir stop limiti belirlemenizi öneririm. Böylece beklenmedik harcamaları önleyebilirsiniz.

1.1. OpenAI API Anahtarının Alınması

ChatGPT API’sini kullanabilmek için bir OpenAI API anahtarına ihtiyacımız vardır. Eğer bir ChatGPT hesabınız yoksa, OpenAI web sitesinden kaydolabilirsiniz. Ardından, profil resminizin üzerine gelerek açılan menüden “View API keys” seçeneğine tıklamanız gerekmektedir.

Açılan pencerede “Create new secret key” butonuna tıklayarak yeni API anahtarları oluşturabilirsiniz.

1.2. OpenAI Python Kütüphanesi Kullanımı

OpenAI’ın Python kütüphanesi, ChatGPT API’sine erişip istek atmak için en basit yöntemlerden biridir. OpenAI kütüphanesini yüklemek için aşağıdaki komutu kullanabilirsiniz:

pip3 install openai

Ardından aşağıdaki python koduna kendi API anahtarınızı girerek bilgisayarınızda çalıştırabilirsiniz.

import openai

openai.api_key = "sk-XXXXXXXXXXXXXX" 

response = openai.Completion.create(
  model="text-davinci-003",
  prompt='Sen bir filozofsun ve kafa açıcı tweetler atıyorsun. Attığın son tweet: "',
  max_tokens=225,
  temperature=0.7,
  top_p=1,
  frequency_penalty=1.2,
  presence_penalty=1.2,
  n=1,
  best_of=2,
  stream=False,
  stop=['"', '”']
)

sentence = response.choices[0].text
print(sentence)

Bu örnekte “Completion” yöntemini kullandık. Completion yönteminde gönderilen prompt GPT tarafından tamamlanır ve istek sonlanır. Tek seferlik bir yanıtın yeterli olduğu durumlarda, “ChatCompletion” yöntemine göre daha hızlı ve daha uygun fiyatlı olduğu için Completion yönteminin tercih edilmesi daha uygundur. Ancak, ChatGPT ile etkileşim halinde olup karşılıklı sohbet ihtiyacının olduğu durumlarda ChatCompletion yöntemi kullanılmalıdır.

Bu promptun çıktısı olarak üretilen bir kaç sonucu aşağıda paylaştım.

Kişinin kendisini keşfetmesi, özünü tanıması ve ne istediğini bilmesi hayatında en büyük zenginliktir.

Yaşamın amacını sormaktan korkmayalım. Sorgulayarak, bilgi ve anlayış aramaya çalışmalar yapmaktan hiçbir şey kaybetmeyeceğiz.

Her şeyin bir nedeni vardır; önemli olan, bu nedene bakarak anlamaya çalışmaktır.

Gerçek mutluluğu aramaktan vazgeçmek, gerçek olana ulaşmayı sağlayacaktır. #Mutluluk

1.3. ChatGPT Parametrelerinin Anlamları

Modeli kullanırken bir sürü parametrenin input olarak girildiğini görüyorsunuz. Bu parametrelerin birçoğu zorunlu değil ve varsayılan değerlerini kullanabilirsiniz. Ancak ChatGPT’yi daha etkili bir şekilde kullanmak ve elde ettiğiniz sonuçların kalitesini artırmak için kullanım senaryonuza göre doğru ayarları yapmanız gereklidir.

  • model: Kullanacağımız modelin adı. Şu anda Completion yöntemi için mevcut olan modeller: “text-davinci-003, text-davinci-002, text-curie-001, text-babbage-001, text-ada-001”. Bu modellerin birbirlerine göre avantajları ve dezavantajları olabilir. Bu uygulamada, GPT-3.5 tabanlı olan text-davinci-003 modelini tercih ettim. Çünkü özellikle İngilizce dışındaki dillerde diğer modellere göre çok daha iyi sonuçlar vermektedir. (zorunlu parametre)
  • prompt : Modelin giriş olarak aldığı metin parçasıdır. Completion yöntemi kullanılırken yapay zeka, bu metnin devamını tamamlar. Girilen promptun uzunluğuna dikkat etmek önemlidir çünkü ücret hesaplamasında tamamlanan kısım kadar sizin verdiğiniz prompt uzunluğu da dikkate alınır. Eğer bir prompt belirtilmezse, yapay zeka herhangi bir konu hakkında kendi başına bir metin üretebilir ve üreteceği sonuç belirsiz olabilir. Bir prompt girmediğimde, tamamen rastgele konular hakkında metinler yazdığını gördüm, örneğin “buzdolabının neden iyi soğutmadığı” veya “düzenli diş muayenelerinin önemi” gibi. (varsayılan değeri =<|EOF|>)
  • max_tokens: Modelin tamamlayacağı metnin maksimum uzunluğudur. Bir token, genellikle bir kelime veya kelime parçasını temsil eder. İngilizcede ortalama olarak 1 token yaklaşık 0–5 karakter arasında değişir. Bu nedenle, 100 token yaklaşık olarak ortalama 75 kelimeye denk gelir. (varsayılan değeri =16)
  • temperature: Bu parametre, 0 ile 2 arasında değerler alır ve modelin ürettiği çıktıların rastgeleliğini kontrol eder. Değer ne kadar düşükse, sonuçlar o kadar belirgin ve deterministik olur. Öte yandan, değer ne kadar yüksekse, sonuçların yaratıcılık ve çeşitlilik potansiyeli artar. Örneğin, temperature değeri 0'a yakınsarsa, aynı prompt için her zaman aynı yanıtı alırsınız. Daha rastgele sonuçlar elde etmek için temperature değerini artırabilirsiniz ancak dikkatli olmanız gerekir. Örneğimizde temperature değerini 1'in üzerine çıkardığımızda, sonuçlarda cümle düşüklükleri artmış ve anlamsız hale gelmeye başlamıştır. Bu nedenle, temperature değerini kademe kademe artırarak sonuçları gözlemlemek ve istediğiniz dengeyi bulmanız tavsiye edilir. (varsayılan değeri =1)
  • top_p : Top probability parametresi, temperature parametresiyle benzer bir işlevi yerine getirir, bu yüzden aynı anda bu iki parametreyi kullanmak dökümanda tavsiye edilmese de her ikisini de kullanmanızda bir engel yoktur. Neden aynı işlevi gören iki parametre olduğunu merak ediyorsanız, “nucleus sampling” olarak da bilinen bu örnekleme tekniğinin çıkışı hakkındaki yazıya göz atabilirsiniz. Dikkat etmeniz gereken bir konu, top_p parametresi, temperature parametresinin tersine çalışır. Değeri 0'a yaklaştıkça yaratıcılık ve çeşitlilik potansiyeli artar, değeri 1'e yaklaştıkça ise azalır. (varsayılan değeri =1)
  • frequency_penalty: -2 ile 2 arasında değerler alır. Bu parametre, modelin ürettiği sonuçlarda token’ların tekrarlanma olasılıklarını ayarlamayı sağlar. Eğer bir token metinde sıkça tekrarlanıyorsa, frequency_penalty hesabına dahil edilir. Bu değeri yaklaşık olarak 1 seviyesinde tutmak tekrar olasılığını azaltırken, 2'ye yaklaştırmak tekrarları daha fazla baskılar. Ayrıca, negatif değerler de olasılığı artırmak için kullanılabilir. (varsayılan değeri =0)
  • presence_penalty: frequency_penalty parametresine benzer şekilde çalışır ve üretilen token’ların tekrar seçilme olasılığını ayarlar. Bu parametrede, token’ların frekansını dikkate alınmaksızın, bir tokenin bir kez üretilmesi presence_penalty hesaplamasına dahil olması için yeterlidir. (varsayılan değeri =0)
  • n: Modelin üreteceği sonuç sayısını belirtir. Bir sorgu için birden fazla sonuç üretilmesini isteyebiliriz. Yüksek bir n değeri sorguları yavaşlatıp maliyeti arttırdığından dikkatli kullanılması gerekir. (varsayılan değeri =1)
  • best_of: n parametresi ile birlikte kullanıldığında server tarafında birden fazla sonuç üreterek kaç tanesinin gerçek sonuç olarak döndürüleceğini belirtir. Örneğin, n=1 ve best_of=2 ise model 2 kez çalışacak ve 2 farklı sonuç üretecektir, ancak sadece en iyi sonucu size döndürecektir. (varsayılan değeri =1)
  • stream: False olarak ayarlandığında model üretimi tamamladıktan sonra yanıtı tek seferde döner. Ancak stream seçeneği True olarak ayarlandığında, model yanıtı adım adım üretir ve her adımda oluşan sonuçları anlık olarak ekranda gösterme imkanı sağlar. (varsayılan değeri =False)
  • stop: Önceden belirlenen değerlerin model tarafından üretildiğinde yapay zekanın durmasını sağlar. Örneğin, stop parametresine “.” karakterini verdiğinizde, model bir cümlenin sonuna geldiğinde duracaktır. Aynı şekilde, stop sequence olarak “araba” kelimesini verdiyseniz, model araba kelimesini ürettiğinde duracaktır. Ancak sonuçlarda stop sequence olarak belirlediğiniz kelimeyi göremezsiniz, çünkü bu kelime sonuca dahil edilmez. En fazla 4 stop sequence değeri girebilirsiniz. Eğer girdiğiniz stop sequence’ler üretilmezse, model max_tokens değerine ulaşana kadar çıktı üretmeye devam eder. Örneğimizde, yapay zekanın cümleye “ karakteri ile başlayacağını ve cümlesini de ” karakteriyle bitireceğini düşündüğümüz için bu karakteri ürettiğinde durmasını istedik, böylece yanıtı daha fazla uzatmasını engelledik. (varsayılan değeri =null)

2. Twitter API Kullanımı

Twitter API, programlama yoluyla Twitter hesabınıza erişmenizi sağlayan bir servistir. Mobil uygulamada gerçekleştirebildiğiniz hemen hemen tüm işlevlerin API endpointleri bulunmaktadır. Ancak, Twitter API dökümantasyonu ilk kullanımda biraz karmaşık olabilir. API’nin iki farklı versiyonu olan v1.1 ve v2 bulunmaktadır. v2, v1.1'in aksine daha karmaşık bir kimlik doğrulama sürecine sahiptir. Bu nedenle, basit uygulamalar için v1.1 sürümünü kullanmak daha kolay olabilir.

2.1. Twitter Hesabının Oluşturulması

Twitter API kullanmak için bir twitter hesabınızın olması gerekmektedir. Ben kendi hesabımı bağlamak istemediğim için yeni bir hesap oluşturdum. Hatta bunun için sıfırdan bir e-posta hesabı da açtım. Genellikle e-posta uygulamaları kayıt sırasında doğrulama için telefon numarası isteyebiliyor, dilerseniz ProtonMail ile böyle bir zorunluluk olmadan bir e-postanızı ücretsiz oluşturabilirsiniz.

Başlangıçta Twitter hesabına Friedrich Nietzsche ismini vermeyi düşündüm, ancak daha sonra bu tweetlerin gerçekten ondan alıntılar gibi algılanmaması için Feride Nice adında hayali bir karakter oluşturdum. Bir karakter yaratmışken profil resmi de boş kalmasın diye OpenAI’ın DALL-E adlı yapay zeka modelini kullanarak bir resim oluşturdum. “Friedrich Nietzsche bir kadın olsaydı nasıl görünürdü?” şeklinde bir sorgu ile aşağıdaki resmi elde ettim. Böylece yerli filozofumuzun hesabı hazır hale geldi.

2.2. Twitter Developer Hesabı

Twitter API’yi kullanabilmek için öncelikle bir Twitter Developer Hesabı oluşturmanız gerekmektedir. Developer Hesabı oluşturmak için bu bağlantıyı kullanabilirsiniz. Aşağıdaki videoda yeni bir proje oluşturmak için gereken adımlar basit bir şekilde anlatılmaktadır. İlgili alanları kendinize göre doldurduktan sonra, API’ye erişim sağlamak için gerekli olan token ve secret bilgilerine sahip olacaksınız. Bu bilgiler, yazdığımız client programın Twitter API’ye erişmesi için gereklidir. Aşağıdaki video size bu süreci daha detaylı olarak gösterecektir.

[embed]

2.3. Python ile Twitter API Client Uygulaması

Twitter API‘ye erişim sağlamak için Python programlama dilinde Tweepy adlı kütüphaneyi kullanabilirsiniz. Tweepy, Twitter API ile kolayca entegre olmanızı sağlayan bir araçtır. Bu kütüphaneyi kullanırken Python’un en az 3.7 sürümünü kullanmanız gerektiğini unutmayın. Kütüphaneyi yüklemek için terminalde aşağıdaki komutu çalıştırabilirsiniz.

pip3 install tweepy
import tweepy

consumer_key = "YOUR_CONSUMER_KEY"
consumer_secret = "YOUR_CONSUMER_SECRET"
bearerToken = "YOUR_BEARER_TOKEN"
access_token = "YOUR_ACCESS_TOKEN"
access_token_secret = "YOUR_ACCESS_TOKEN_SECRET"

client = tweepy.Client(bearer_token=bearerToken, access_token=access_token,
                       access_token_secret=access_token_secret, consumer_key=consumer_key, consumer_secret=consumer_secret)

res = client.create_tweet(text="Hello Twitter API")
print(res)

Yukarıda gördüğünüz gibi Tweepy sayesinde çok basit bir şekilde Client sınıfını oluşturup create_tweet fonksiyonuyla istediğiniz tweeti gönderebilirsiniz. Sonraki adıma geçmeden önce bu python kodunun çalıştığından emin olun. Ayrıca Tweepy ile farklı kullanım senaryolarını incelemek için bu yazıyı okuyabilirsiniz

3. Uygulamanın Deploy Edilmesi

Uygulamanın kodlarına GitHub reposundan erişebilirsiniz. Readme dosyasındaki açıklamaları takip ederek uygulamayı çalıştırabilirsiniz. Uygulama her çalıştığında bir tweet atıyor. Ancak, bir bot yapmak istiyorsak manuel tetiklemek yerine, belirlediğimiz saatte otomatik tetiklenmesini sağlamak için bir zamanlayıcı (scheduler) kullanmamız gerekiyor. Bunun dışında kendi makinemizi sürekli açık tutmak mantıklı olmadığından, kodumuzun çalışacağı bir uzak sunucuya ihtiyacımız var. Bu örnekte PythonAnywhere’in scheduled task işlevini kullanarak ek bir cron job yazma ihtiyacından kurtuldum hem de uygulamanın uzak sunucuda barındırılmasını sağladım.

3.1. PythonAnywhere Kullanımı

PythonAnywhere, bulut tabanlı bir Python hosting ortamıdır. Python ile yazdığınız web sitelerinizi veya kodlarınızı kolaylıkla deploy edebilirsiniz. Ücretsiz planında bir web sitesi ve bir zamanlayıcı (scheduled task) çalıştırabilirsiniz, ancak CPU ve bant genişliği limitleri bulunmaktadır. Bu tür küçük uygulamalar için PythonAnywhere’i deneyebilirsiniz.

Öncelikle, scriptimiz çalışırken ortam değerlerini alabilmesi için bir dosyaya ihtiyacımız var. .env adında bir dosya oluşturun ve aşağıdaki metni içine yapıştırın. Kendi anahtar değerlerinizi güncelleyin:

export OPENAI_API_KEY=YOUR_OPEN_API_KEY
export TWITTER_API_CONSUMER_KEY=YOUR_CONSUMER_KEY
export TWITTER_API_CONSUMER_SECRET=YOUR_CONSUMER_SECRET
export TWITTER_API_BEARER_TOKEN=YOUR_BEARER_TOKEN
export TWITTER_API_ACCESS_TOKEN=YOUR_ACCESS_TOKEN
export TWITTER_API_ACCESS_TOKEN_SECRET=YOUR_ACCESS_TOKEN_SECRET

PythonAnywhere her seferinde sıfırdan bir sanal ortam (virtual environment) oluşturduğu için, her script çalıştığında ortam değerlerini tekrar almak gerekmektedir. Bu işlemi gerçekleştirmek için main fonksiyonunun başına aşağıdaki kodları eklemeliyiz.

project_folder = os.path.expanduser('~/')  #adjust as appropriate
load_dotenv(os.path.join(project_folder, '.env'))

İlk satırda, environment dosyasını yükleyeceğimiz yolun, scriptin bulunduğu yol ile aynı olduğuna dikkat etmeliyiz. İkinci satırda ise, .env dosyasının yolunu ve adını kullanarak environment değerlerini yüklüyoruz. Kodun son haline aşağıdan da ulaşabilirsiniz.

import tweepy
import openai
import os
from dotenv import load_dotenv

def get_sentence_from_gpt():

    openai.api_key = os.environ.get("OPENAI_API_KEY")

    response = openai.Completion.create(
      model="text-davinci-003",
      prompt='Sen bir filozofsun ve kafa açıcı tweetler atıyorsun. Attığın son tweet: "',
      max_tokens=225,
      temperature=0.7,
      top_p=1,
      frequency_penalty=1.2,
      presence_penalty=1.2,
      n=1,
      best_of=2,
      stream=False,
      stop=['"', '”']
    )

    sentence = response.choices[0].text
    print(sentence)
    return sentence

def send_tweet(text):
    consumer_key = os.environ.get("TWITTER_API_CONSUMER_KEY")
    consumer_secret = os.environ.get("TWITTER_API_CONSUMER_SECRET")
    bearerToken = os.environ.get("TWITTER_API_BEARER_TOKEN")
    access_token = os.environ.get("TWITTER_API_ACCESS_TOKEN")
    access_secret = os.environ.get("TWITTER_API_ACCESS_TOKEN_SECRET")

    client = tweepy.Client(
        bearer_token=bearerToken,
        access_token=access_token,
        access_token_secret=access_secret,
        consumer_key=consumer_key,
        consumer_secret=consumer_secret
    )

    res = client.create_tweet(text=text)
    print(res)

def main():
    project_folder = os.path.expanduser('~/gpt-twitter-bot/')  #adjust as appropriate
    load_dotenv(os.path.join(project_folder, '.env'))

    sentence = get_sentence_from_gpt()
    send_tweet(sentence)

if __name__ == "__main__":
    main()

Kodu ve environment dosyasını hazırladıktan sonra, PythonAnywhere panelinde “Files” sekmesine gidin. Sol taraftaki dosya gezgininde, klasörünüzün adını yazarak “New directory” seçeneğiyle bir klasör oluşturun.

Python ve ortam dosyasını klasöre yükledikten sonra “philo_bot_tweet.py” dosyasına gidip manuel çalıştırarak bir sorun olmadığına emin olabilirsiniz. Her şey doğru ilerlediyse ChatGPT’nin attığı tweet hesabınıza yansıyacaktır, sonraki adıma geçebilirsiniz.

Son olarak, PythonAnywhere’deki Task sekmesine gidin ve bir scheduled task oluşturmak için UTC saatine göre günlük çalışmasını istediğiniz saati girin. Scriptin path’ini belirtin ve task’ı oluşturun. Böylece botunuz hazır olacaktır.

Sonuç

ChatGPT API, geniş bir kullanım alanına sahip olan bir hizmettir. Bu yazıda sadece küçük bir kullanım örneğine değindim, ancak bu bilgi, benzer birçok uygulamada size yardımcı olabilir. Yukarıdaki adımları takip ederek kendi ChatGPT Twitter botunuzu oluşturabilirsiniz. Botun sonuçlarını merak ediyorsanız aşağıdaki linkten ulaşabilirsiniz:

https://twitter.com/FerideNice

ChatGPT’nin ürettiği tweetlerde genellikle anlam bütünlüğü sağlanmış ve mantıklı tweetler atılmıştır. Ancak, çok genel ve sabit bir prompt kullandığım için tweetler de genel nitelikte olmuştur. Promptu daha detaylandırarak ve bazı alanları dinamik olarak bir kelime havuzundan rastgele çekerek her seferinde daha spesifik ve farklı tweetler elde etmek mümkündür. Bu şekilde botunuzun çıktıları daha özgün ve ilgi çekici olabilir.

Kaynaklar

1- https://platform.openai.com/docs/api-reference/introduction

2- https://developer.twitter.com/en/docs/twitter-api

3- https://dev.to/twitterdev/a-comprehensive-guide-for-using-the-twitter-api-v2-using-tweepy-in-python-15d9

4- https://docs.tweepy.org/en/latest/

5- https://community.openai.com/t/cheat-sheet-mastering-temperature-and-top-p-in-chatgpt-api-a-few-tips-and-tricks-on-controlling-the-creativity-deterministic-output-of-prompt-responses/172683

6- https://community.openai.com/t/difference-between-frequency-and-presence-penalties/2777


메타데이터
post_id
85d2b29bb91f
slug
chatgpt-api-ile-kolayca-twitter-botu-oluşturma-85d2b29bb91f
url
https://medium.com/@cnrkaya/chatgpt-api-ile-kolayca-twitter-botu-olu%C5%9Fturma-85d2b29bb91f
canonical_url
https://medium.com/@cnrkaya/chatgpt-api-ile-kolayca-twitter-botu-olu%C5%9Fturma-85d2b29bb91f
author_url
https://medium.com/@cnrkaya
status
ok
fetched_at
2026-07-31 22:50:39