import { Callout, FileTree } from 'nextra-theme-docs'
import {Screenshot} from 'components/screenshot'
import CODE1 from '../../img/code-generation/chat-mode.png'
<Callout emoji="⚠️">
Bu bölüm geliştirme aşamasındadır.
</Callout>
ChatGPT gibi LLM'ler kod üretmede çok etkilidir. Bu bölümde, kod üretmek için ChatGPT'yi nasıl kullanacağımıza dair birçok örnek üzerinde duracağız.
Aşağıdaki tüm örnekler için OpenAI's Playground (Chat Mode) ve `gpt-3.5-turbo` modeli kullanılır.
OpenAI'nin tüm sohbet modellerinde olduğu gibi, yanıtların davranışını ve formatını tanımlamak için `Sistem Mesajı` kullanabilirsiniz. İstem örnekleri için aşağıdaki Sistem Mesajı'nı kullanacağız:
```
Bir junior geliştiriciye nasıl kod yazılacağını öğretebilen yardımcı bir kod asistanısınız. Tercih ettiğiniz dil Python. Kodu açıklamayın, sadece kod bloğunu üretin.
```
## Basit Örnek
`Kullanıcı Mesajı`, modelin üretmesini istediğiniz belirli kodun talimatı ile birlikte istem olacaktır. Aşağıda, kod üretime yönelik ilk basit istemin bir görüntüsü bulunmaktadır. Son kodun `Asistan` tarafından üretildiğini unutmayın.
<Screenshot src={CODE1} alt="CODE1" />
Kendi denemeniz için istem:
```
Kullanıcının ismini soran ve "Merhaba" diyen kodu yazın
```
## Yorumları Kod Haline Getirme
Bu LLM'lerin kod üretme yeteneklerini, sadece yorumlardan kod üretmek için de kullanabilirsiniz. Talimatları yorum bloğu olarak geçiren başka bir örneğe bakalım:
*İstem:*
```
"""
1. Bir film listesi oluşturun
2. Bu filmler için bir puan listesi oluşturun
3. Onları, puanlarıyla birlikte 10 filmlik bir json nesnesi yapmak için birleştirin.
"""
```
*Çıktı:*
```python
filmler = ["The Shawshank Redemption", "The Godfather", "The Dark Knight", "Schindler's List", "Pulp Fiction", "The Lord of the Rings: The Return of the King", "Forrest Gump", "Star Wars: Episode V - The Empire Strikes Back", "Inception", "The Silence of the Lambs"]
Üretilen kod, çalışan bir kod gibi görünüyor. Ancak çıktı, önemli bir `import` ifadesini, yani `import json` ifadesini içermiyor. Bu modeller, çalışan kod üretirken, bu tür küçük detaylara dikkatli olmanız ve kodunuzu her zaman test etmeniz gerekir.
## Fonksiyonları veya Sonraki Satırı Tamamla
LLM'ler, geliştiriciler için yararlı olmalarını sağlayan GitHub Copilot gibi araçlara da dahil edilmiştir. Modelin fonksiyonları tamamlama yeteneği yararlı bir özelliktir.
*İstek:*
```python
# İki sayıyı çarpan ve sonucuna 75 ekleyen fonksiyon
def multiply(
```
*Çıktı:*
```python
a, b):
result = a * b
result += 75
return result
```
## MySQL Sorgusu Oluşturma
Yukarıdaki temel kod oluşturma örneğinin yanı sıra, modeli MySQL sorgularını oluşturma ve test etme gibi programlamanın diğer yönlerinde kullanılabilecek kullanışlı kod oluşturmak için de kullanabilirsiniz.
Diyelim ki, bazı bilgilere sahip bir veri setiniz var ve bunları isteğin bir parçası olarak dahil edip belirli bir sorgu oluşturmasını isteyebilirsiniz. Örneğin:
Create a MySQL query for all students in the Computer Science department
"""
```
*Output:*
```mysql
SELECT students.StudentId, students.StudentName
FROM students
INNER JOIN departments
ON students.DepartmentId = departments.DepartmentId
WHERE departments.DepartmentName = 'Computer Science';
```
Model bir sorgu oluşturuyor! Ancak bu örnekte veritabanını biz uydurduk, bu yüzden oluşturulan sorguyu test edecek bir veritabanımız yok. Bu örneği test ediyorsanız, bu veritabanını oluşturmanız yararlı olabilir. Neyse ki, bunu oluşturmak için de ChatGPT'yi kullanabilirsiniz. Bir yaklaşım, bir veritabanı şeması oluşturmak için yukarıdaki isteğin biraz farklı talimatlara sahip modifiye edilmiş bir versiyonunu kullanmaktır:
Bunu [sqliteonline.com](https://sqliteonline.com/) gibi bir şey kullanarak geçici bir veritabanı oluşturabilirsiniz.
Ayrıca, orijinal olarak oluşturulan sorgunun geçerli olup olmadığını test etmek için sahte verilere de ihtiyacınız olacak. Bunun için de ChatGPT'yi kullanalım! İstek şöyle bir şey olabilir:
Şimdi veritabanınız ve sahte verileriniz var, orijinal sorguyu test edebilirsiniz. Sahte verilere dayanarak, sonuç `Jane Doe` ve `John Doe` olan iki satır olmalıdır.
## Kod Açıklama
Belirli bir dilde programlamayı öğreniyorsanız, modelin belirli kod parçalarını açıklaması için istem oluşturmak yararlı olabilir. Yukarıda oluşturulan sorguyu kullanalım ve modelden bunu açıklamasını isteyelim.
Daha önceki Sistem Mesajını kullanıyorsanız, modeli nasıl yönlendirdiğinize dikkat edin. Örneğin, aşağıdaki örneği kullanırsak, model bu bir Python kod asistanı olduğunu belirtirken bir açıklama da sağlar. Bazen model, Sistem Mesajını takip etmek üzere tasarlandığı için talep ettiğiniz şeyi oluşturmayı reddeder.
*İstem:*
```mysql
SELECT students.StudentId, students.StudentName
FROM students
INNER JOIN departments
ON students.DepartmentId = departments.DepartmentId
WHERE departments.DepartmentName = 'Computer Science';
Yukarıdaki SQL ifadesini açıklayın.
```
*Çıktı:*
```
Üzgünüm, bir Python kod asistanı olarak, SQL kodu oluşturamam. Ancak, sağlanan SQL ifadesinin amacını açıklayabilirim.
Bu SQL ifadesi, `departments` tablosundaki `DepartmentName` sütunun 'Computer Science' eşit olduğu durumlarda `students` tablosundan `StudentId` ve `StudentName` sütunlarını seçer. Bunu başarmak için, ifade `students` ve `departments` tabloları arasında `DepartmentId` sütunu üzerinde bir iç birleştirme gerçekleştirir.
Daha basit bir dille ifade edecek olursak, Bilgisayar Bilimleri bölümüne kayıtlı olan öğrencilerin isimlerini ve ID'lerini seçer.