paint-brush
So erstellen Sie eine LLM-Bewerbung mit Google Geminivon@alvinslee
2,425 Lesungen
2,425 Lesungen

So erstellen Sie eine LLM-Bewerbung mit Google Gemini

von Alvin Lee9m2024/06/05
Read on Terminal Reader

Zu lang; Lesen

Ein Tutorial zum Erstellen einer LLM-Anwendung mit der Google Gemini API und zum anschließenden Bereitstellen dieser Anwendung auf Heroku.
featured image - So erstellen Sie eine LLM-Bewerbung mit Google Gemini
Alvin Lee HackerNoon profile picture

Es scheint, als gäbe es mit LLMs endlose Möglichkeiten für Innovationen. Wenn Sie wie ich sind, haben Sie GenAI-Anwendungen und -Tools verwendet – wie ChatGPT, das in Expedia integriert ist, Copilot zum Schreiben von Code oder sogar DALL-E zum Generieren von Bildern. Aber als Techniker möchte ich mehr tun, als nur LLM-basierte Tools zu verwenden. Ich möchte meine eigenen entwickeln.


Ich habe DALL-E angewiesen, „ein Aquarell eines Computerprogrammierers zu erstellen, der darüber nachdenkt, was er alles mit LLMs bauen könnte.“ Ja, das trifft es ziemlich genau.


Um ein Entwickler zu werden, muss man bei allen neuen Technologien einfach anfangen. Das ist bei jeder neuen Programmiersprache, die ich lerne, oder jedem neuen Framework, das ich ausprobiere, so. Beim Erstellen mit LLMs ist das nicht anders. Und genau das werde ich hier durchgehen. Ich werde schnell und unkompliziert eine API erstellen, die mit Google Gemini interagiert und mir so praktisch meinen eigenen kleinen Chatbot-Assistenten gibt.


Und das werden wir tun:


  1. Stellen Sie Google Gemini kurz vor.
  2. Erstellen Sie eine einfache Node.js-Anwendung.
  3. Stellen Sie die Anwendung auf Heroku bereit.
  4. Probier es aus.

Was ist Google Gemini?

Die meisten normalen Verbraucher kennen ChatGPT, das auf dem GPT-4 LLM basiert. Aber wenn es um LLMs geht, ist GPT-4 nicht die einzige Alternative. Es gibt auch Google Gemini (früher bekannt als Bard). Bei den meisten Leistungsbenchmarks (wie z. B. multidisziplinären Denkproblemen auf College-Niveau oder Python-Codegenerierung) übertrifft Gemini GPT-4.


Was sagt Gemini über sich selbst aus?


Als Entwickler können wir über die Gemini-API in Google AI Studio auf Gemini zugreifen. Es sind auch SDKs für Python , JavaScript , Swift und Android verfügbar.


Okay. Fangen wir mit dem Bauen an.

Erstellen Sie die Node.js-Anwendung

Unsere Node.js-Anwendung wird ein einfacher Express- API-Server sein, der wie ein Gemini-Chatbot funktioniert. Er wird auf zwei Endpunkten abhören. Zuerst sendet eine POST Anfrage an /chat (die eine JSON-Nutzlast mit einem message enthält) die Nachricht an Gemini und gibt dann die Antwort zurück. Unsere Anwendung wird eine laufende Chat-Konversation mit Gemini führen. Dadurch wird unser Chatbot zu einem hilfreichen Assistenten, der Notizen für uns aufbewahren kann.


Zweitens: Wenn wir eine POST Anfrage an /reset senden, wird die Chat-Konversation von vorne zurückgesetzt, wodurch Geminis Speicher für frühere Interaktionen mit uns effektiv gelöscht wird.


Wenn Sie diese Code-Anleitung überspringen möchten, können Sie den gesamten Code hier in meinem GitHub-Repository sehen.

Initialisieren der Anwendung

Um zu beginnen, initialisieren wir unsere Node.js-Anwendung und installieren Abhängigkeiten.


 ~/project$ npm init -y && npm pkg set type="module" ~/project$ npm install @google/generative-ai dotenv express


Anschließend fügen wir Folgendes den scripts in unserer Datei package.json hinzu:


 "scripts": { "start": "node index.js" },


Die Datei index.js

Unsere Anwendung besteht aus einer Datei und ist ziemlich einfach. Wir werden sie Abschnitt für Abschnitt durchgehen.


Zuerst importieren wir alle Pakete, die wir verwenden werden. Dann initialisieren wir das SDK von Google AI. Wir verwenden das Gemini-Pro-Modell. Zuletzt rufen wir startChat() auf, wodurch eine neue ChatSession- Instanz für das erstellt wird, was Google eine Multi-Turn-Konversation nennt.


 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();


Als Nächstes instanziieren wir eine neue Express-App, die unser API-Server ist.


 const app = express(); app.use(express.json())


Dann richten wir unseren Listener für POST Anfragen an den /chat Endpunkt ein. Wir stellen sicher, dass der JSON-Nutzlasttext eine message enthält. Wir verwenden unser chat Objekt, um diese Nachricht an Gemini zu senden. Dann antworten wir unserem API-Anrufer mit dem Antworttext von Gemini.


 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()); })


Bedenken Sie, dass durch die Verwendung einer ChatSession ein gespeicherter, laufender Verlauf unserer Interaktion mit Gemini über alle API-Aufrufe hinweg vorhanden ist. Es ist hilfreich, Gemini eine „Erinnerung“ an unser Gespräch zu geben, um den Kontext zu erhalten.


Aber was, wenn Sie möchten, dass Gemini komplett neu startet und den gesamten vorherigen Kontext vergisst? Dafür haben wir den Endpunkt /reset . Dadurch wird einfach eine neue ChatSession gestartet.


 app.post('/reset', async (req, res) => { chat = model.startChat(); res.status(200).send('OK'); })


Schließlich starten wir unseren Server, um mit dem Abhören zu beginnen.


 const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server is running on port ${PORT}`) })


Als Randbemerkung: Dieses gesamte Projekt ist nur eine Mini-Demo. Es ist nicht für den Einsatz in der Produktion gedacht! So wie ich es jetzt entworfen habe (ohne Authentifizierung), kann jeder mit der URL eine Anfrage an /chat oder /reset senden. In einer Produktionsumgebung hätten wir eine ordnungsgemäße Authentifizierung eingerichtet und jeder Benutzer hätte seine eigene Instanz einer Konversation mit Gemini, die niemand sonst manipulieren könnte.

Abrufen eines Gemini-API-Schlüssels

An diesem Punkt sind wir fast startklar. Als letztes benötigen wir einen API-Schlüssel für den Zugriff auf die Gemini-API. Um einen API-Schlüssel zu erhalten, registrieren Sie sich zunächst für ein Google AI for Developers-Konto .


Sobald Sie angemeldet sind, wählen Sie „Google AI Studio starten“ aus, um ein neues Google Gemini-Projekt zu starten.



Klicken Sie im Projekt auf „API-Schlüssel abrufen“ , um zur Seite mit den API-Schlüsseln zu navigieren. Klicken Sie dann auf „API-Schlüssel erstellen“ , um einen Schlüssel zu generieren. Kopieren Sie den Wert.


Kopieren Sie in Ihrem Projekt die Datei .env.template als neue Datei mit dem Namen .env . Fügen Sie den Wert Ihres Gemini-API-Schlüssels ein. Ihre .env Datei sollte ungefähr so aussehen:


 GEMINI_API_KEY=ABCDEFGH0123456789_JJJ

Testen Sie unsere Anwendung lokal

Wenn alles bereit ist, können wir unseren Server lokal hochfahren, um ihn zu testen.


 ~/project$ npm start > [email protected] start > node index.js Server is running on port 3000


In einem anderen Terminal können wir einige Curl-Anfragen senden:


 $ 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.


Es funktioniert. Sieht aus, als wären wir bereit zur Bereitstellung!

Stellen Sie unsere Anwendung auf Heroku bereit

Um unsere Anwendung bereitzustellen, habe ich mich für Heroku entschieden. Es ist schnell, einfach und kostengünstig. Ich kann meinen Code mit nur wenigen einfachen Schritten in der Cloud ausführen, ohne mich mit all den kleinlichen Infrastrukturproblemen herumschlagen zu müssen. Auf diese Weise kann ich mich ganz auf das Erstellen cooler Anwendungen konzentrieren.


Nachdem Sie sich für ein Heroku-Konto angemeldet und die CLI installiert haben , gehen Sie wie folgt vor, um die Bereitstellung durchzuführen.

Procfile zur Codebasis hinzufügen

Wir müssen eine Datei namens Procfile einbinden, die Heroku mitteilt, wie unsere Anwendung gestartet werden soll. Der Inhalt von Procfile sieht folgendermaßen aus:


 web: npm start


Wir übernehmen diese Datei in unser Codebase-Repo.

Melden Sie sich bei Heroku an (über die CLI)

 ~/project$ heroku login

App erstellen

 ~/project$ heroku create gemini-chatbot Creating ⬢ gemini-chatbot... done https://gemini-chatbot-1933c7b1f717.herokuapp.com/ | https://git.heroku.com/gemini-chatbot.git

Gemini-API-Schlüssel als Konfigurationsumgebungsvariable hinzufügen

 ~/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

Code an Heroku Remote übertragen

 ~/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


Das ist alles? Das ist alles.

Testen Sie unsere bereitgestellte Anwendung

Nachdem unsere Anwendung bereitgestellt ist, senden wir einige Curl-Anfragen an die URL unserer Heroku-App.


 $ 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.


Abschluss

Jetzt ist ein großartiger Zeitpunkt, um LLM-basierte Anwendungen zu erstellen. Reiten Sie auf der Welle!


Wir haben gezeigt, wie man eine einfache LLM-basierte Anwendung auf Google Gemini erstellt. Unser einfacher Chatbot-Assistent ist einfach, aber er ist eine großartige Möglichkeit, sich mit der Gemini-API und den zugehörigen SDKs vertraut zu machen. Und indem Sie Heroku für die Bereitstellung verwenden, können Sie die sekundären Aufgaben auslagern, sodass Sie sich auf das Lernen und Entwickeln dort konzentrieren können, wo es darauf ankommt.