Membuka dunia bonus dengan Gemini untuk teka-teki Google I/O

MAR 13, 2025
Jay Chang Senior Product Marketing Manager Developer Activations

Memecahkan kode


Teka-teki Google I/O tahun ini menantang para pemain untuk memanipulasi cahaya dan warna melalui prisma untuk membuka sektor baru dalam dunia game. Selain game loop inti, sebuah dimensi baru ditambahkan ke dalam gameplay–bonus dunia yang tersembunyi di balik teka-teki yang dibuat dengan Gemini API. Blog ini akan mengulas cara kami membuatnya!

Integrasi Gemini: Solusi yang kreatif dan skalabel

Ubin tersembunyi ditempatkan secara dinamis di peta saat model Gemini membuat teka-teki unik yang harus diselesaikan dan ditemukan oleh para pemain. Tujuannya? Untuk menciptakan interaksi yang lebih tinggi dengan memberi insentif kepada pemain untuk menjelajahi dimensi baru dari teka-teki yang dibangun dengan AI.

Alih-alih secara manual melakukan hardcoding 100 kemungkinan lokasi ubin rahasia dan teka-teki yang sesuai, kami menggunakan AI untuk membantu kami menskalakan fitur ini secara menantang dan unik.

Solusi kami: Pembuatan teka-teki dinamis

Untuk memanfaatkan kekuatan Gemini, kami merancang solusi yang menggabungkan presisi algoritmik dengan kreativitas berbasis AI. Algoritme backend menempatkan ubin tersembunyi di peta dan menghasilkan prompt untuk Gemini API berdasarkan aturan game yang menggambarkan lokasi dengan tiga petunjuk sederhana. Ini memastikan bahwa setiap teka-teki memiliki solusi logis dalam framework game. Kami menggunakan Gemini untuk mengubah jawaban yang dihasilkan secara algoritmik menjadi teka-teki cerdas.


Pembuatan prompt algoritmik

Berdasarkan aturan permainan, kami secara terprogram menentukan “lokasi rahasia” di papan permainan yang digunakan sebagai prompt untuk Gemini. Hal ini memastikan bahwa jawaban dari setiap teka-teki selalu valid dan dapat dipecahkan.

// Finds a new hiding spot for the Gemini token and generates a clue string
  getHiddenLocation() {
    const geminiCluePositions = GameWorld.getCluePositions() // Returns positions that are designated as a "Clue" tile. We tag important tiles when designing a level. These are generally tiles that are not movable by the player.
 
 
    // We get all the tiles positions in the level, a position is a simple XY coordinate
    const secretLocations = GameWorld.getAllTilePositions()
      // we remove tiles that are not adjacent to a clue position...
      .filter((tileA) => geminiCluePositions.some((tileB) => GameWorld.isNextTo(tileA, tileB)))
      // we remove invalid positions, such as tiles that are not empty
      .filter(({gridX, gridY}) => GameWorld.isValidGeminiPosition(gridX, gridY))
 
 
    // we randomly choose a hiding spot
    const randomPosition = secretLocations[Math.floor(Math.random() * secretLocations.length)]
 
 
    const randomTile = Gameworld.getTileByPosition(randomPosition)
 
 
    // now that we have a hiding spot, we generate a clue string
    const riddleClues = GameWorld.generateGeminiRiddleClues(tilePosition)
 
 
    return {
      position: randomPosition,
      clues: riddleClues,
    }
  }

Output dari algoritme ini adalah teks sederhana, seperti:

1. Tepat di bawah dinding.

2. Tepat 2 ubin dari node pelangi.

3. Di sektor pertama.


Pembuatan teka-teki Gemini

Dengan struktur yang konsisten untuk prompt yang akan dibuat, kami kemudian beralih ke Gemini API untuk membuat teka-teki yang secara tersamar menggambarkan lokasi ubin rahasia. Dengan memerintahkan Gemini menggunakan konteks dan batasan yang tepat, kami bisa menciptakan teka-teki yang menarik dan menantang yang diformat secara konsisten sedemikian rupa sehingga aplikasi front end kami bisa menampilkannya kepada pengguna.

// Build a prompt based on the tile position. We always output 3 rules in this order:
    // Clue 1. The type of one adjacent tile to the secret location
    // Clue 2. The sector which contains the secret location
    // Clue 3. The closest color node to the secret location, and exactly how many tiles away it is.
  generateGeminiRiddleClues(tilePosition) {
    const adjacentTiles = GameWorld.getAdjacentTiles(tilePosition) // Get the left, right, top and bottom neighboring tiles
    const locationSector = GameWorld.getTileSector(tilePosition) // get the "sector" of the tile. Levels are divided in sectors or 'chunks' by the level designer.
 
 
    const nodeTiles = GameWorld.getAllNodeTiles() // get every 'Node' tile in the level
 
 
    // clue 1
    const randomAdjacentTile = adjacentTiles[Math.floor(Math.random() * adjacentTiles.length)]
    const direction = GameWorld.getDirection(randomAdjacentTile, tilePosition)
    const randomTileType = randomAdjacentTile.type
    const firstClue = `Directly ${direction} a ${randomTileType} tile` // e.g. "Directly above a wall tile"
 
 
    // clue 2
    const secondClue = `In sector ${locationSector}` // e.g. "In sector 3"
 
 
    // clue 3
    const closestNode = nodeTiles.reduce((closest, node) => {
      const distance = GameWorld.getDistance(node.position, tilePosition)
      if (distance < closest.distance) {
        return {node, distance}
      }
      return closest
    }, {node: null, distance: Infinity})
 
 
    const thirdClue = Exactly ${distance} tiles away from a ${closestNode.node.color} node`
 
 
    const clues = `1. ${firstClue}. 2. ${secondClue}. 3. ${thirdClue}.`
 
 
    return clues
  }

Teka-teki yang dihasilkan adalah:

Aku berdiri tepat di bawah dinding yang begitu tinggi,

Dua ubin dari node pelangi, aku terbaring.

Dalam sektor pertama, tempatku yang akan Anda lihat,

Pecahkan ini dan klaim kemenangan token.


Mengapa teka-teki?

Teka-teki pada dasarnya bersifat samar dan menyenangkan, ditambah lagi dengan tingkat ambiguitas yang diharapkan. Ini memungkinkan kami menerima “red herring” atau kalimat tak terduga yang mungkin muncul dari output yang dihasilkan AI. Selain itu, teka-teki mengasah kemampuan penalaran pemain, mendorong mereka untuk berpikir kreatif dan menerapkan pengetahuan mereka tentang aturan permainan, menganalisis tata letak papan saat mereka menelusuri ubin tersembunyi.


Memastikan konsistensi dalam output yang dihasilkan LLM dengan Petunjuk Sistem

Bekerja dengan AI memiliki tantangan tersendiri. Salah satu yang paling signifikan adalah kecenderungan AI untuk “berhalusinasi” atau menyimpang dari aturan yang diberikan. Kami memitigasi risiko ini dengan membuat prompt secara terprogram, memberikan contoh dan output JSON yang ditentukan dalam Petunjuk Sistem untuk prompt:

**Important Instructions:**
        - Respond **only** with the JSON object in the exact format specified.
        - Do **not** include any explanations, code blocks, or additional text.
        - Do **not** enclose the JSON in triple backticks or any markdown formatting.
        - Ensure all strings in the JSON are properly escaped.
        - Escape special characters like newlines (`\\n`), tabs (`\\t`), and quotation marks (`\\"`) within strings.
        - Do not use single quotes; use double quotes for all JSON keys and string values.
        - Ensure the JSON is valid and parsable.

Kami juga memanfaatkan kapasitas manusia untuk melakukan penalaran. Pemain mahir dalam menafsirkan dan menguraikan petunjuk samar. Dengan menciptakan teka-teki yang membutuhkan deduksi logis, kami mendorong pemain untuk mengatasi potensi inkonsistensi dalam output AI. Pada akhirnya, ini adalah tentang menemukan keseimbangan yang tepat antara konten yang dihasilkan AI dan kecerdikan manusia.


Membangun dengan Gemini API di aplikasi Anda sekarang

Tahun ini menandai sebuah pencapaian penting: teka-teki Google I/O pertama yang menghadirkan Gemini API. Untuk tim desain dan engineering kami, ini bukan sekadar integrasi—ini adalah eksplorasi yang mendalam menuju era baru kreasi kolaboratif dengan AI. Kami tidak hanya membangun sebuah fitur; kami memelopori pendekatan baru untuk pengalaman interaktif. Ketika Anda mempertimbangkan untuk membawa Gemini API ke dalam project Anda sendiri, ingatlah tiga pelajaran penting ini dalam menentukan pendekatan Anda:

  • Kreativitas: Manfaatkan AI dalam produk Anda untuk pembuatan konten dinamis, skalabilitas, dan otomatisasi dengan cara yang belum pernah Anda lakukan sebelumnya.

  • Desain: Lakukan pengujian penulisan prompt yang efektif dan buat prototipe di Google AI Studio untuk menguji hasil Anda dengan kemampuan dan model Gemini yang berbeda.

  • Implementasi: Tulis Petunjuk Sistem terperinci untuk menentukan format output dengan contoh respons model yang Anda inginkan agar output lebih terstruktur dan konsisten dengan cara yang dapat diinterpretasikan oleh aplikasi Anda.


AI mengubah cara pengguna berinteraksi dengan aplikasi dan game kami, membuka pintu menuju pengalaman pengguna yang baru dan menarik.

Bergabunglah dengan kami secara online di Google I/O 20-21 Mei, untuk mendengarkan pengumuman menarik yang akan disiarkan secara langsung dari Shoreline Amphitheatre di Mountain View. Kami mendorong Anda untuk bereksperimen dengan Gemini dan mengeksplorasi potensinya untuk menciptakan pengalaman yang lebih bermanfaat dan menyenangkan bagi pengguna; kemungkinannya tidak terbatas.