Implementación rápida de la recomendación personalizada de juegos para aplicaciones RAG: guía práctica de DeepSeek y Ollama

¿Quieres crear una aplicación que ofrezca recomendaciones personalizadas de juegos? Este tutorial le guiará paso a paso en el uso de las técnicas de Generación Aumentada de Recuperación (RAG), combinadas con la DeepSeek responder cantando Ollama para crear un sistema personalizado de recomendación de juegos.

Utilizaremos el conjunto de datos de Epic Games Store para el games.csv como fuente de datos. Las opciones de pila tecnológica para este tutorial son las siguientes:

  • Grandes modelos lingüísticos (LLM): Utilizaremos Ollama para ejecutar los deepseek-r1:1.5b Modelos.
  • Modelos de incrustación: Utilizaremos Weaviate's text2vec_openai con el componente por defecto text-embedding-3-small Modelos.
快速实现个性化游戏推荐 RAG 应用:DeepSeek & Ollama 实践指南

 

Paso 1: Instalar las bibliotecas dependientes y configurar las claves API

En primer lugar, tendrá que instalar las siguientes bibliotecas de Python, que son necesarias para compilar y ejecutar la aplicación RAG necesarios para la aplicación.

!pip install weaviate-client pandas tqdm ollama

A continuación, para poder utilizar el modelo de incrustación de OpenAI, debes configurar la clave de la API de OpenAI. Si aún no la has configurado, sigue estos pasos:

from getpass import getpass
import os
if "OPENAI_APIKEY" not in os.environ:
os.environ["OPENAI_APIKEY"] = getpass("Enter your OpenAI API Key")

Este código comprueba si OPENAI_APIKEY ya existe en tus variables de entorno y, si no es así, te pide que introduzcas tu clave de API de OpenAI y la establezcas como variable de entorno.

 

Paso 2: Ejecutar el modelo DeepSeek

Este tutorial utiliza Ollama para ejecutar el modelo deepseek-r1:1.5b localmente. Si aún no has instalado Ollama y extraído el modelo deepseek-r1:1.5b, consulta la documentación oficial de Ollama para completar la instalación y extracción del modelo.

En macOS, por ejemplo, puede ejecutar el modelo DeepSeek en Terminal utilizando el siguiente comando:

ollama run deepseek-r1:1.5b

Asegúrese de que el modelo se ejecuta correctamente antes de pasar al siguiente paso.

 

Paso 3: Crear y rellenar la colección Weaviate

Las colecciones Weaviate se utilizan para almacenar y recuperar datos del juego. Sigue los pasos que se indican a continuación para crear y rellenar tu colección Weaviate:

  • Descargar archivo games.csv: Descargue el archivo games.csv de Kaggle (Kaggle) a su directorio local.
  • Inicio del contenedor Docker Weaviate: Inicie Weaviate utilizando el siguiente archivo docker-compose.yml y asegúrese de que los módulos generative-ollama y text2vec-openai están habilitados. Guarda lo siguiente como un archivo docker-compose.yml e inicia Weaviate en una terminal usando el comando 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"
...
  • Crear la colección "Juegos": Ejecuta el siguiente código Python para crear una colección Weaviate llamada "Juegos". Este código define las propiedades de la colección, incluidos el nombre del juego, el precio, la plataforma, la fecha de lanzamiento y la descripción, y configura los módulos generative-ollama y 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(),
)
  • Importar datos de juegos: Utilice el siguiente código para importar los datos del archivo games.csv a la colección "Juegos". El código lee el archivo CSV y convierte cada fila de datos en objetos Weaviate, que luego se añaden a la colección en bloque.
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)

 

Paso 4: Realizar una búsqueda incrustada

Ahora, su colección "Juegos" está llena de datos. Puedes intentar hacer una búsqueda incrustada para recuperar juegos relacionados con la consulta del usuario. El siguiente código muestra cómo buscar juegos relacionados con "Juego al villano" y devolver los 3 resultados más relevantes.

response = games.query.near_text(query="I play the vilain", limit=3)
for o in response.objects:
print(o.properties)

Este código proporciona información sobre los 3 atributos del juego relevantes para la consulta, como plataforma, descripción, precio, fecha de lanzamiento y nombre.

 

Paso 5: Crear la aplicación GAR recomendada

Para implementar recomendaciones de juegos más inteligentes, necesitamos crear una aplicación RAG. La siguiente función recommend_game se encarga de ello. Toma una consulta del usuario como entrada, recupera los 5 juegos más relevantes y utiliza el modelo deepseek-r1:1.5b para generar recomendaciones personalizadas.

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]}

Esta función utiliza el método games.generate.near_text, que no sólo realiza una búsqueda vectorial, sino que también utiliza el modelo generativo para generar texto recomendado basado en la información del juego recuperada. el parámetro grouped_task define la tarea generativa del modelo, ordenando al modelo que genere una respuesta basada en la consulta del usuario y la información del juego recuperada, y solicitando explícitamente que la respuesta contenga la información sobre la plataforma de juego.

Puedes probar tu aplicación de recomendación de juegos llamando a la función recommend_game y pasándole una consulta de usuario. Por ejemplo, la consulta "¿Qué juegos me permiten interpretar a una criatura mágica?

response = recommend_game("What are some games that I get to role play a magical creature")
print(response['recommendation'])

Ejecuta este código y verás los resultados de las recomendaciones de juego generadas por el modelo, por ejemplo:

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.

Si desea ver en qué está pensando el modelo cuando genera los resultados de la recomendación, puede imprimir la propiedad response['thought']:

print(response['thought'])

Esto mostrará el proceso de pensamiento del modelo en segundo plano y le ayudará a comprender mejor la lógica de la recomendación.

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

¡Enhorabuena! Has construido con éxito una aplicación RAG de recomendación de juegos basada en DeepSeek y Ollama. En este tutorial, has aprendido los conceptos básicos de cómo construir un sistema de recomendación personalizado utilizando técnicas RAG combinadas con un gran modelo de lenguaje y una base de datos vectorial. Puedes ampliar y mejorar la aplicación según tus necesidades, como añadir más datos de juegos, optimizar el algoritmo de recomendación o desarrollar la interfaz de usuario para crear un mejor servicio de recomendación de juegos.

© declaración de copyright

Artículos relacionados

Sin comentarios

Debe iniciar sesión para participar en los comentarios.
Acceder ahora
ninguno
Sin comentarios...