Yüksek Lisans'ta inovasyon için sonsuz olasılık var gibi görünüyor. Siz de benim gibiyseniz, Expedia'da yerleşik ChatGPT, kod yazmak için Copilot ve hatta görüntü oluşturmak için DALL-E gibi GenAI uygulamalarını ve araçlarını kullanmışsınızdır. Ancak bir teknoloji uzmanı olarak Yüksek Lisans tabanlı araçları kullanmaktan daha fazlasını yapmak istiyorum. Kendiminkini inşa etmek istiyorum.
Tüm yeni teknolojilerde inşaatçı olmak, basit bir başlangıç yapmak anlamına gelir. Öğrendiğim herhangi bir yeni programlama dili veya kontrol ettiğim herhangi bir yeni çerçeve için bu böyle. Yüksek Lisans ile inşaat yapmak da farklı değil. İşte burada bunun üzerinden geçeceğim. Google Gemini ile etkileşime giren hızlı ve kirli bir API oluşturacağım ve bana etkili bir şekilde kendime ait küçük bir sohbet robotu asistanı sunacağım.
İşte yapacağımız şey:
Çoğu sıradan tüketici, GPT-4 LLM üzerine inşa edilen ChatGPT'yi biliyor. Ancak yüksek lisans söz konusu olduğunda GPT-4 şehirdeki tek oyun değil. Ayrıca Google Gemini (eskiden Bard olarak biliniyordu) da var. Çoğu performans kriterinde (çok disiplinli üniversite düzeyinde akıl yürütme problemleri veya Python kodu oluşturma gibi) Gemini, GPT-4'ten daha iyi performans gösteriyor.
İkizler burcu kendisi hakkında ne söylüyor?
Geliştiriciler olarak Gemini'ye Google AI Studio'daki Gemini API'si aracılığıyla erişebiliriz. Python , JavaScript , Swift ve Android için de SDK'lar mevcuttur.
Peki. Gelelim inşaata.
Node.js uygulamamız Gemini chatbot gibi çalışan basit bir Express API sunucusu olacaktır. İki uç noktayı dinleyecektir. İlk olarak, /chat
( message
özniteliğine sahip bir JSON yükünü içerecek şekilde) yönelik bir POST
isteği, mesajı Gemini'ye gönderecek ve ardından yanıtı döndürecektir. Uygulamamız Gemini ile devam eden bir sohbet görüşmesine devam edecektir. Bu, sohbet robotumuzu bizim için not tutabilen yardımsever bir asistana dönüştürür.
İkincisi, /reset
adresine bir POST
isteği gönderirsek, bu, sohbet görüşmesini sıfırdan başlayacak şekilde sıfırlayacak ve Gemini'nin bizimle olan önceki etkileşimlerine ilişkin hafızasını etkili bir şekilde silecektir.
Bu kod adım adım açıklamalı anlatımını atlamak istiyorsanız kodun tamamını buradaki GitHub depomda görebilirsiniz.
Başlamak için Node.js uygulamamızı başlatıyoruz ve bağımlılıkları yüklüyoruz.
~/project$ npm init -y && npm pkg set type="module" ~/project$ npm install @google/generative-ai dotenv express
Daha sonra bunu package.json
dosyamızdaki scripts
ekliyoruz:
"scripts": { "start": "node index.js" },
index.js
dosyasıUygulamamız tek dosyadan oluşmaktadır ve oldukça basittir. Her seferinde bir bölüm üzerinden geçeceğiz.
Öncelikle kullanacağımız tüm paketleri import ediyoruz. Daha sonra SDK'yı Google AI'dan başlatıyoruz. Gemini-pro modelini kullanacağız. Son olarak, Google'ın çok turlu konuşma olarak adlandırdığı şey için yeni bir ChatSession örneği oluşturan startChat() adını veriyoruz.
import 'dotenv/config'; import express from 'express'; import { GoogleGenerativeAI } from '@google/generative-ai'; const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY); const model = genAI.getGenerativeModel({ model: "gemini-pro"}); let chat = model.startChat();
Daha sonra API sunucumuz olan yeni bir Express uygulamasını başlatıyoruz.
const app = express(); app.use(express.json())
Daha sonra, /chat
uç noktasına POST
istekleri için dinleyicimizi ayarladık. JSON veri gövdesinin bir message
içerdiğinden emin oluruz. Bu mesajı Gemini'ye göndermek için chat
nesnemizi kullanırız. Daha sonra API çağırıcımıza Gemini'den gelen yanıt metniyle yanıt veriyoruz.
app.post('/chat', async (req, res) => { if ((typeof req.body.message) === 'undefined' || !req.body.message.length) { res.status(400).send('"message" missing in request body'); return; } const result = await chat.sendMessage(req.body.message); const response = await result.response; res.status(200).send(response.text()); })
ChatSession
kullanıldığında, tüm API çağrılarında Gemini ile olan etkileşimimizin kayıtlı, çalışan bir geçmişinin bulunduğunu unutmayın. İkizler burcuna konuşmamızın bir "hatırasını" vermek bağlam açısından faydalıdır.
Peki ya Gemini'nin tamamen yeniden başlamasını ve önceki tüm bağlamları unutmasını istiyorsanız? Bunun için /reset
uç noktamız var. Bu sadece yeni bir ChatSession
başlatır.
app.post('/reset', async (req, res) => { chat = model.startChat(); res.status(200).send('OK'); })
Son olarak dinlemeye başlamak için sunucumuzu başlatıyoruz.
const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server is running on port ${PORT}`) })
Bir ek not olarak, bu projenin tamamı sadece mini bir demodur. Üretimde kullanılması amaçlanmamıştır! Şimdilik tasarladığım yöntemle (kimlik doğrulama olmadan), URL'ye sahip olan herkes /chat
/reset
istek gönderebilir. Bir üretim kurulumunda, uygun kimlik doğrulamaya sahip olacağız ve her kullanıcı, Gemini ile başka hiç kimsenin manipüle edemeyeceği kendi konuşma örneğine sahip olacaktı.
Bu noktada neredeyse gitmeye hazırız. İhtiyacımız olan son şey Gemini API'sine erişmek için bir API anahtarıdır. API anahtarı almak için Geliştiriciler için Google AI hesabına kaydolarak başlayın.
Giriş yaptıktan sonra yeni bir Google Gemini projesi başlatmak için Google AI Studio'yu Başlat'ı seçin.
Proje içinde, API anahtarları sayfasına gitmek için API anahtarını al'a tıklayın. Ardından, bir anahtar oluşturmak için API anahtarı oluştur'a tıklayın. Değeri kopyalayın.
Projenizde .env.template
adlı dosyayı .env
adlı yeni bir dosya olarak kopyalayın. Gemini API anahtarınızın değerini yapıştırın. .env
dosyanız şuna benzer görünmelidir:
GEMINI_API_KEY=ABCDEFGH0123456789_JJJ
Her şey yerinde olduğunda, test etmek için sunucumuzu yerel olarak çalıştırabiliriz.
~/project$ npm start > [email protected] start > node index.js Server is running on port 3000
Farklı bir terminalde bazı curl istekleri gönderebiliriz:
$ curl -X POST -H 'content-type:application/json' \ --data '{"message":"I would like to bake a shepherds pie to feed 8 \ people. As you come up with a recipe, please keep a grocery \ list for me with all of the ingredients that I would need to \ purchase."}' \ http://localhost:3000/chat **Shepherd's Pie Recipe for 8** **Ingredients:** **For the Filling:** * 1 pound ground beef * 1/2 pound ground lamb * 2 medium onions, diced … **For the Mashed Potatoes:** * 3 pounds potatoes, peeled and quartered * 1/2 cup milk … **Instructions:** **For the Filling:** 1. Heat a large skillet over medium heat. Add the ground beef and lamb and cook until browned. … $ curl -X POST -H 'content-type:application/json' \ --data '{"message":"I also need to buy fresh basil, for a different dish (not the shepherds pie). Add that to my grocery list \ too."}' \ http://localhost:3000/chat **Updated Grocery List for Shepherd's Pie for 8, and Fresh Basil:** * 1 pound ground beef * 1/2 pound ground lamb * 2 medium onions * 2 carrots * 2 celery stalks * 1 bag frozen peas * 1 bag frozen corn * 1 tablespoon Worcestershire sauce * 1 teaspoon dried thyme * 1 cup beef broth * 1/4 cup tomato paste * 3 pounds potatoes * 1/2 cup milk * 1/4 cup butter * **Fresh basil** $ curl -X POST -H 'content-type:application/json' \ --data '{"message":"What items on my grocery list can I find in the \ produce section?"}' \ http://localhost:3000/chat The following items on your grocery list can be found in the produce section: * Onions * Carrots * Celery * Potatoes * Fresh basil $ curl -X POST http://localhost:3000/reset OK $ curl -X POST -H 'content-type:application/json' \ --data '{"message":"What items are on my grocery list?"}' \ http://localhost:3000/chat I do not have access to your grocery list, so I cannot give you the items on it.
İşe yarıyor. Görünüşe göre konuşlanmaya hazırız!
Uygulamamızı dağıtmak için Heroku'yu kullanmayı tercih ettim. Hızlı, basit ve düşük maliyetlidir. Tüm temel altyapı sorunlarına takılıp kalmadan yalnızca birkaç basit adımla kodumu bulutta çalıştırabiliyorum. Bu şekilde sadece harika uygulamalar geliştirmeye odaklanabiliyorum.
Bir Heroku hesabına kaydolduktan ve CLI'yi yükledikten sonra, dağıtımı gerçekleştirmek için yapmanız gerekenler aşağıda açıklanmıştır.
Procfile
Kod Tabanına Ekleme Heroku'ya uygulamamızı nasıl başlatacağımızı söyleyen Procfile
adlı bir dosya eklememiz gerekiyor. Procfile
içeriği şuna benzer:
web: npm start
Bu dosyayı kod tabanı depomuza gönderiyoruz.
~/project$ heroku login
~/project$ heroku create gemini-chatbot Creating ⬢ gemini-chatbot... done https://gemini-chatbot-1933c7b1f717.herokuapp.com/ | https://git.heroku.com/gemini-chatbot.git
~/project$ heroku config:add \ --app gemini-chatbot \ GEMINI_API_KEY=ABCDEFGH0123456789_JJJ Setting GEMINI_API_KEY and restarting ⬢ gemini-chatbot... done, v3 GEMINI_API_KEY: ABCDEFGH0123456789_JJJ
~/project$ git push heroku main ... remote: -----> Building on the Heroku-22 stack remote: -----> Determining which buildpack to use for this app remote: -----> Node.js app detected ... remote: -----> Build succeeded! remote: -----> Discovering process types remote: Procfile declares types -> web remote: remote: -----> Compressing... remote: Done: 45.4M remote: -----> Launching... remote: Released v4 remote: https://gemini-chatbot-1933c7b1f717.herokuapp.com/ deployed to Heroku
Bu kadar? Bu kadar.
Uygulamamız konuşlandırıldığında, Heroku uygulama URL'mize bazı kıvrılma istekleri gönderelim.
$ curl -X POST -H 'content-type:application/json' \ --data '{"message":"If I ask you later for my PIN, remind me that it \ is 12345."}' \ https://gemini-chatbot-1933c7b1f717.herokuapp.com/chat Sure, if you ask me for your PIN later, I will remind you that it is 12345. **Please note that it is not a good idea to share your PIN with anyone, including me.** Your PIN is a secret code that should only be known to you. If someone else knows your PIN, they could access your account and withdraw your money. $ curl -X POST -H 'content-type:application/json' \ --data '{"message":"What is my PIN?"}' \ https://gemini-chatbot-1933c7b1f717.herokuapp.com/chat Your PIN is 12345. $ curl -X POST https://gemini-chatbot-1933c7b1f717.herokuapp.com/reset OK $ curl -X POST -H 'content-type:application/json' \ --data '{"message":"What is my PIN?"}' \ https://gemini-chatbot-1933c7b1f717.herokuapp.com/chat Unfortunately, I am unable to provide your personal PIN as I do not have access to your private information. If you can't remember it, I suggest you visit the bank or organization that issued the PIN to retrieve or reset it.
Şimdi LLM tabanlı uygulamalar geliştirmenin tam zamanı. Dalgayı sür!
Google Gemini'nin üzerinde basit bir LLM tabanlı uygulamanın nasıl oluşturulacağını anlattık. Basit sohbet robotu yardımcımız basittir ancak Gemini API'sini ve ilgili SDK'larını tanımanın harika bir yoludur. Ve dağıtım için Heroku'yu kullanarak, ikincil kaygıları ortadan kaldırabilir, böylece öğrenmeye ve önemli olduğu yerde inşa etmeye odaklanabilirsiniz.