Möchten Sie eine App entwickeln, die personalisierte Spieleempfehlungen liefert? Dieses Tutorial führt Sie Schritt für Schritt durch die Verwendung von Retrieval Augmented Generation (RAG) Techniken, kombiniert mit dem DeepSeek im Gesang antworten Ollama Modell, um ein maßgeschneidertes Spielempfehlungssystem zu erstellen.
Wir werden den Epic Games Store-Datensatz für die games.csv
Datei als Datenquelle. Für dieses Lernprogramm wurden die folgenden Technologien gewählt:
- Große Sprachmodelle (LLM): Wir werden Ollama verwenden, um die
deepseek-r1:1.5b
Modelle. - Einbettungsmodelle: Wir verwenden Weaviate's
text2vec_openai
Komponente mit dem Standardtext-embedding-3-small
Modelle.
Schritt 1: Installation abhängiger Bibliotheken und Konfiguration von API-Schlüsseln
Zunächst müssen Sie die folgenden Python-Bibliotheken installieren, die für die Erstellung und Ausführung des RAG für die Anwendung erforderlich.
!pip install weaviate-client pandas tqdm ollama
Um das Einbettungsmodell von OpenAI nutzen zu können, müssen Sie als nächstes den OpenAI-API-Schlüssel einrichten. Wenn Sie ihn noch nicht eingerichtet haben, folgen Sie diesen Schritten:
from getpass import getpass
import os
if "OPENAI_APIKEY" not in os.environ:
os.environ["OPENAI_APIKEY"] = getpass("Enter your OpenAI API Key")
Dieser Code prüft, ob OPENAI_APIKEY bereits in Ihren Umgebungsvariablen vorhanden ist. Ist dies nicht der Fall, werden Sie aufgefordert, Ihren OpenAI-API-Schlüssel einzugeben und ihn als Umgebungsvariable zu setzen.
Schritt 2: Ausführen des DeepSeek-Modells
Dieses Tutorial verwendet Ollama, um das Modell deepseek-r1:1.5b lokal auszuführen. Wenn Sie Ollama noch nicht installiert und das deepseek-r1:1.5b Modell noch nicht gezogen haben, lesen Sie bitte die offiziellen Ollama Docs, um die Installation und das Ziehen des Modells abzuschließen.
Unter macOS können Sie das DeepSeek-Modell zum Beispiel mit folgendem Befehl in Terminal ausführen:
ollama run deepseek-r1:1.5b
Stellen Sie sicher, dass das Modell erfolgreich läuft, bevor Sie mit dem nächsten Schritt fortfahren.
Schritt 3: Erstellen und Auffüllen der Weaviate-Sammlung
Weaviate-Sammlungen werden zum Speichern und Abrufen von Spieldaten verwendet. Führen Sie die folgenden Schritte aus, um Ihre Weaviate-Sammlung zu erstellen und zu füllen:
- games.csv-Datei herunterladen: games.csv-Datei von Kaggle herunterladen (Kaggle) in Ihr lokales Verzeichnis.
- Starten des Weaviate-Docker-Containers: Starten Sie Weaviate mit der folgenden Datei docker-compose.yml und stellen Sie sicher, dass die Module generative-ollama und text2vec-openai aktiviert sind. Speichern Sie die folgende Datei als docker-compose.yml und starten Sie Weaviate in einem Terminal mit dem Befehl docker compose up.
---
services:
weaviate_anon:
command:
- --host
- 0.0.0.0
- --port
- '8080'
- --scheme
- http
image: cr.weaviate.io/semitechnologies/weaviate:1.28.4
ports:
- 8080:8080
- 50051:50051
restart: on-failure:0
environment:
QUERY_DEFAULTS_LIMIT: 25
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
ENABLE_API_BASED_MODULES: 'true'
BACKUP_FILESYSTEM_PATH: '/var/lib/weaviate/backups'
CLUSTER_HOSTNAME: 'node1'
LOG_LEVEL: 'trace'
ENABLE_MODULES: "text2vec-openai,generative-ollama"
...
- Erstellen Sie die Sammlung "Games": Führen Sie den folgenden Python-Code aus, um eine Weaviate-Sammlung namens "Games" zu erstellen. Dieser Code definiert die Eigenschaften der Sammlung, einschließlich Spielname, Preis, Plattform, Erscheinungsdatum und Beschreibung, und konfiguriert die Module generative-ollama und text2vec-openai.
import weaviate
import weaviate.classes.config as wc
from weaviate.util import generate_uuid5
import os
from tqdm import tqdm
import pandas as pd
headers = {"X-OpenAI-Api-Key": os.getenv("OPENAI_APIKEY")}
client = weaviate.connect_to_local(headers=headers)
if client.collections.exists("Games"):
client.collections.delete("Games")
client.collections.create(
name="Games",
properties=[
wc.Property(name="name", data_type=wc.DataType.TEXT),
wc.Property(name="price", data_type=wc.DataType.INT),
wc.Property(name="platforms", data_type=wc.DataType.TEXT_ARRAY),
wc.Property(name="release_date", data_type=wc.DataType.DATE),
wc.Property(name="description", data_type=wc.DataType.TEXT),
],
generative_config=wc.Configure.Generative.ollama(model="deepseek-r1:1.5b",
api_endpoint="http://host.docker.internal:11434"),
vectorizer_config=wc.Configure.Vectorizer.text2vec_openai(),
)
- Importieren von Spieldaten: Verwenden Sie den folgenden Code, um die Daten aus der Datei games.csv in die Sammlung "Games" zu importieren. Der Code liest die CSV-Datei und konvertiert jede Datenzeile in Weaviate-Objekte, die dann der Sammlung in großen Mengen hinzugefügt werden.
games = client.collections.get("Games")
df = pd.read_csv('games.csv')
with games.batch.dynamic() as batch:
for i, game in tqdm(df.iterrows()):
platforms = game["platform"].split(',') if type(game["platform"]) is str else []
game_obj = {
"name": game["name"],
"platforms": platforms,
"price": game["price"],
"release_date": game["release_date"],
"description": game["description"],
}
batch.add_object(
properties=game_obj,
uuid=generate_uuid5(game["id"])
)
if len(games.batch.failed_objects) > 0:
print(f"Failed to import {len(games.batch.failed_objects)} objects")
print(games.batch.failed_objects)
Schritt 4: Durchführen einer eingebetteten Suche
Jetzt ist Ihre Sammlung "Spiele" mit Daten gefüllt. Sie können versuchen, eine eingebettete Suche durchzuführen, um Spiele abzurufen, die mit der Abfrage des Benutzers zusammenhängen. Der folgende Code veranschaulicht die Suche nach Spielen, die mit "I play the vilain" zusammenhängen, und gibt die 3 relevantesten Ergebnisse zurück.
response = games.query.near_text(query="I play the vilain", limit=3)
for o in response.objects:
print(o.properties)
Dieser Code gibt Informationen über die Attribute der 3 Spiele aus, die für die Abfrage relevant sind, wie Plattform, Beschreibung, Preis, Veröffentlichungsdatum und Name.
Schritt 5: Erstellen der empfohlenen RAG-Anwendung
Um intelligentere Spieleempfehlungen zu implementieren, müssen wir eine RAG-Anwendung erstellen. Die folgende Funktion recommend_game übernimmt diese Aufgabe. Sie nimmt eine Benutzeranfrage als Eingabe, findet die 5 relevantesten Spiele und verwendet das Modell deepseek-r1:1.5b, um personalisierte Empfehlungen zu generieren.
def recommend_game(query: str):
response = games.generate.near_text(
query=query,
limit=5,
grouped_task=f"""You've been provided some relevant games based on the users query.
Provide an answer to the query. Your final answer MUST indicate the platform each game is available on.
User query: {query}""",
grouped_properties=["name", "description", "price", "platforms"],
)
return {'thought':response.generated.split('</think>')[0], 'recommendation': response.generated.split('</think>')[1]}
Diese Funktion verwendet die Methode games.generate.near_text, die nicht nur eine Vektorsuche durchführt, sondern auch das generative Modell verwendet, um empfohlenen Text auf der Grundlage der abgerufenen Spielinformationen zu generieren. Der Parameter grouped_task definiert die generative Aufgabe des Modells, indem er das Modell anweist, eine Antwort auf der Grundlage der Benutzeranfrage und der abgerufenen Spielinformationen zu generieren, und ausdrücklich verlangt, dass die Antwort die Informationen über die Spielplattform enthält.
Sie können Ihre Spielempfehlungsanwendung testen, indem Sie die Funktion recommend_game aufrufen und eine Benutzerabfrage übergeben. Zum Beispiel die Abfrage "Welche Spiele gibt es, in denen ich eine magische Kreatur spielen kann".
response = recommend_game("What are some games that I get to role play a magical creature")
print(response['recommendation'])
Führen Sie diesen Code aus und Sie werden die Ergebnisse der vom Modell generierten Spielempfehlungen sehen, zum Beispiel:
Here are several games that allow you to role-play as a magical creature:
1. **Mages of Mystralia**
- **Platform:** Windows
- Description: A fantasy RPG where you design your own spells in a world of magic, allowing creativity and flexibility.
2. **Geneforge 1 - Mutagen**
- **Platforms:** Windows, Mac
- Description: An open-ended RPG with mutant monsters, multiple skills, treasures, factions, and creation possibilities, offering unparalleled freedom and replayability.
3. **Beasts of Maravilla Island**
- **Platform:** Windows
- Description: A 3D adventure game where you role as a wildlife photographer exploring magical ecosystems, focusing on behavior learning for photography.
4. **Paper Beast**
- **Platforms:** Windows (PC)
- Description: An adventure game about disrupting wildlife balance with a focus on exotic creatures and mystery-solving.
5. **Black Book**
- **Platform:** Windows
- Description: A dark RPG based on Slavic myths, played as a young sorceress in a world of mythological creatures through card-based battles.
Each game offers unique experiences suitable for role-playing as a magical creature.
Wenn Sie sehen möchten, woran das Modell bei der Erstellung der Empfehlungsergebnisse denkt, können Sie die Eigenschaft response['thought'] ausdrucken:
print(response['thought'])
Dadurch wird der Denkprozess des Modells im Hintergrund ausgegeben und Sie können die Empfehlungslogik besser verstehen.
<think>
Okay, so I need to figure out some games that let me role-play as a magical creature. The user provided several options, each with a description and platform. Let me go through them one by one.
First up is "Mages of Mystralia." From the description, it's a fantasy RPG where you design your own spells in a world of magic. That sounds perfect because it allows for a lot of creativity as a magical creature. The platform is Windows, so maybe the user can run it on their PC or any desktop system.
Next is "Geneforge 1 - Mutagen." This seems like an open-ended RPG with mutant monsters and a battle mechanic. It's described as having countless skills, treasures, factions, and creation possibilities. Unmatched freedom and replayability make sense because it allows for various storylines. The platform here is Windows and Mac, so compatible options would be useful.
Then there's "Beasts of Maravilla Island." As the name suggests, it's a 3D adventure game where you take on a wildlife photographer exploring ecosystems. It focuses on behavior learning and photography, which could be exciting for someone looking to role-play in nature. The platform is Windows, so that should be accessible.
"Paper Beast" is another adventure game mentioned. It's about an unknown power disrupting wildlife balance, with players joining exotic creatures to solve mysteries. While it's PC-focused, maybe there are porting options available or different devices that can run it if the user has access to them.
Lastly, "Black Book." This dark RPG is based on Slavic myths and played as a young sorceress. It involves card-based battles in a world with mythological creatures. The platform here is Windows, so maybe older hardware might be a bit limiting unless the user has an updated PC or a dedicated console.
I should make sure each game is listed clearly with their platforms and any necessary details about how they work as magical creatures. Also, it's good to offer a couple of options if some aren't available. Maybe suggest cross-platform games or platforms that can be used for playing.
</think>
Herzlichen Glückwunsch! Sie haben erfolgreich eine Spielempfehlungs-RAG-Anwendung auf Basis von DeepSeek und Ollama erstellt. In diesem Tutorial haben Sie die Grundlagen gelernt, wie man ein personalisiertes Empfehlungssystem mit RAG-Techniken in Kombination mit einem großen Sprachmodell und einer Vektordatenbank erstellt. Sie können die Anwendung nach Ihren Bedürfnissen erweitern und verbessern, z. B. indem Sie weitere Spieldaten hinzufügen, den Empfehlungsalgorithmus optimieren oder die Benutzeroberfläche entwickeln, um einen besseren Spielempfehlungsdienst zu schaffen.