Kursus
Dalam panduan praktik ini, saya akan menggunakan model DeepSeek-R1 untuk membangun asisten pemecah teka-teki matematika yang terintegrasi dengan EasyOCR dan Gradio.
Saya akan menjelaskan langkah demi langkah cara membangun aplikasi web fungsional yang mampu menyelesaikan beragam teka-teki matematika dan menghasilkan solusi yang membantu dengan memanfaatkan kemampuan penalaran model DeepSeek R1.
Jika Anda hanya ingin gambaran umum tentang DeepSeek-R1, saya sarankan membaca ikhtisar DeepSeek-R1 ini. Untuk melakukan fine-tuning model, saya merekomendasikan tutorial tentang fine-tuning DeepSeek-R1.
Proyek Demo DeepSeek-R1: Ikhtisar
Untuk membangun asisten pemecah teka-teki, kita akan melalui langkah-langkah berikut:
- Menyiapkan prasyarat yang diperlukan.
- Menginisialisasi model dengan konfigurasi yang dioptimalkan.
- Mendefinisikan fungsionalitas inti dengan memanfaatkan kemampuan instruksi model.
- Mengintegrasikan komponen ke dalam antarmuka Gradio yang ramah pengguna untuk interaksi yang mudah.
Langkah 1: Prasyarat
Sebelum masuk ke implementasi, pastikan kita telah memasang alat dan pustaka berikut:
- Python 3.8+
- PyTorch: Untuk penanganan model pembelajaran mendalam yang efisien.
- EasyOCR: Modul Python untuk mengekstrak teks dari gambar.
- Gradio: Untuk membuat antarmuka web yang ramah pengguna.
Jalankan perintah berikut untuk memasang dependensi yang diperlukan:
!pip install torch gradio pillow easyocr -q
Setelah dependensi di atas terpasang, jalankan perintah impor berikut:
Import torch
from PIL import Image
import easyocr
import requests
import json
import gradio as gr
Langkah 2: Menyiapkan API DeepSeek-R1
Skrip berikut menunjukkan cara berinteraksi dengan DeepSeek API untuk memperoleh respons berdasarkan prompt pengguna. Perhatikan bahwa API DeepSeek kompatibel dengan format OpenAI dan menggunakan base URL untuk permintaan API.
Anda dapat langsung memasukkan kunci API (tidak direkomendasikan karena alasan privasi), atau jika menggunakan Google Colab seperti saya, Anda dapat menyimpan kunci API menggunakan fitur Secrets. Sebagai alternatif, Anda dapat menggunakan variabel lingkungan.
# DeepSeek API configuration
DEEPSEEK_API_URL = "https://api.deepseek.com/v1/chat/completions"
# If you're using Colab and storing your key in the Secrets tab:
from google.colab import userdata
API_KEY = userdata.get('SECRET_KEY')
# If you are running this code elsewhere then, replace 'YOUR_API_KEY' with your actual DeepSeek API key. Uncomment the following line of code.
#API_KEY = 'YOUR_API_KEY'
Pada saat artikel ini diterbitkan, layanan DeepSeek sedang mengalami beban tinggi dan kinerjanya menurun—saya juga mengalami kesulitan besar saat menjalankan kode untuk proyek ini. Harap periksa halaman status DeepSeek sebelum mencoba menjalankan kode dalam proyek ini.
Langkah 3: Merancang Fitur Inti
Sekarang API sudah siap, kita dapat mengerjakan fitur kodenya. Pada bagian ini, kita akan memproses gambar yang berisi teka-teki logika, mengekstrak teks teka-teki menggunakan OCR, menyempurnakan teksnya, dan mengirimkannya ke DeepSeek API untuk diselesaikan. Mari kita lihat dulu kodenya, lalu akan saya jelaskan.
reader = easyocr.Reader(['en'])
def solve_puzzle(image):
"""Extracts the puzzle from the image and sends it to DeepSeek for solving."""
try:
# 1. Save the uploaded image temporarily; EasyOCR uses file paths
image_path = "uploaded_image.png"
image.save(image_path)
# 2. Extract text from the image using EasyOCR
results = reader.readtext(image_path)
extracted_text = " ".join([res[1] for res in results])
# Standardize the text to avoid misinterpretation of "??" as "2?"
extracted_text = extracted_text.replace('??', '?')
if "?" not in extracted_text:
extracted_text += "?"
print("Extracted Text:", extracted_text) # Debugging output
# 3. Refine the extracted text to standardize expressions
refined_text = extracted_text.replace('x', '*').replace('X', '*').replace('=', ' = ').strip()
print("Refined Text:", refined_text) # Debugging output
# 4. Compose the user message with concise instructions
puzzle_prompt = (
f"You are an AI specialized in solving puzzles. Analyze the following, identify hidden patterns or rules, and provide the missing value with step-by-step reasoning in text format. Do not return an answer in Latex."
f"\nPuzzle:\n{refined_text}\n"
"Format your response strictly as follows:\n"
"1. **Given Equation**:\n - (original equations)\n"
"2. **Pattern Identified**:\n (explain the hidden logic)\n"
"3. **Step-by-step Calculation**:\n - For (input values):\n (calculation and result)\n"
"4. **Final Answer**:\n (Answer = X)"
)
messages = [
{"role": "user", "content": puzzle_prompt}
]
# 5. Optimized API request for faster response
data = {
"model": "deepseek-reasoner",
"messages": messages,
"temperature": 0,
"max_tokens": 100
}
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# 6. Send the request to DeepSeek with a timeout
response = requests.post(DEEPSEEK_API_URL, headers=headers, json=data, timeout=15)
# 7. Check the result
if response.status_code == 200:
try:
json_resp = response.json()
return json_resp.get("choices", [{}])[0].get("message", {}).get("content", "Error: No response content.").strip()
except json.JSONDecodeError:
return "Error: Invalid JSON response from DeepSeek API."
else:
return f"Error: DeepSeek API failed with status code {response.status_code}, Response: {response.text}"
except requests.exceptions.Timeout:
return "Error: DeepSeek API request timed out. Please try again."
except Exception as e:
return f"Error: {str(e)}"
Fungsi solve_puzzle() memproses gambar yang berisi teka-teki logika dan menyelesaikannya menggunakan OCR dan model R1. Alurnya sebagai berikut:
- Inisialisasi EasyOCR: Kita memulai dengan menginisialisasi pembaca EasyOCR dalam bahasa Inggris.
- Pemrosesan gambar: Gambar yang diunggah disimpan sementara dan diproses menggunakan EasyOCR untuk mengekstrak teks.
- Penyempurnaan teks: Teks yang diekstrak distandardisasi untuk memastikan konsistensi dan akurasi.
- Penyusunan kueri: Kueri terstruktur dibuat, mencakup teks teka-teki yang telah disempurnakan dan instruksi khusus untuk penyelesaian.
- Interaksi API: Kueri dikirim ke DeepSeek API, yang menganalisis dan menyelesaikan teka-teki. Pastikan menggunakan model
deepseek-reasoneruntuk memakai DeepSeek-R1. Jika ingin menggunakan DeepSeek-V3, gunakandeepseek-chat. Dan selalu perhatikan harga, jadi periksa halaman harga untuk informasi terbaru. - Penanganan respons: Respons API diproses untuk mengekstrak dan mengembalikan solusi atau pesan kesalahan yang sesuai.
- Penanganan galat: Fungsi ini juga menangani masalah seperti batas waktu habis atau pengecualian tak terduga, memastikan operasi yang andal.
Pipelinenya menggabungkan OCR untuk ekstraksi teks dan DeepSeek API untuk pemecahan teka-teki yang cerdas.
Langkah 4: Membuat Antarmuka Gradio
Gradio memungkinkan kita membuat antarmuka web interaktif untuk aplikasi kita. Cuplikan kode berikut membuat antarmuka web Gradio yang ramah pengguna untuk fungsi solve_puzzle(). Antarmuka Gradio menerima masukan pengguna dan mengirimkannya ke model untuk divalidasi.
interface = gr.Interface(
fn=solve_puzzle,
inputs=gr.Image(type="pil"),
outputs="text",
title="Logic Puzzle Solver with EasyOCR & DeepSeek",
description="Upload an image of a logic puzzle, and the model will solve it for you."
)
interface.launch(debug=True)
Pengaturan di atas mencakup tiga komponen:
- Input: Komponen
gr.Imagetempat pengguna dapat mengunggah gambar. - Output: Komponen
textuntuk menampilkan jawaban dari DeepSeek-R1. - Antarmuka: Fungsi gr.Interface() mengaitkan input dan output, lalu meluncurkan aplikasi web untuk interaksi pengguna.
Langkah 5: Uji Aplikasinya
Mari uji aplikasi kita dengan teka-teki yang melibatkan matematika dan logika.
Jika Anda melihat baris pertama, Anda akan menemukan 1 + 4 = 5, dan Anda mungkin mengatakan ini penjumlahan sederhana. Namun pada baris kedua ada 2 + 5 = 12, lalu 3 + 6 = 21. Bisakah Anda menemukan polanya dan menyelesaikan 8 + 11 = ?
Jika Anda melihat sisi kanan antarmuka Gradio, Anda akan melihat bahwa aplikasi Puzzle Solver telah mengidentifikasi polanya:

Kesimpulan
Dalam tutorial ini, kita membangun asisten pemecah teka-teki matematika menggunakan DeepSeek R1 yang dikombinasikan dengan OCR dan Gradio untuk menyelesaikan teka-teki matematika. Untuk mengikuti perkembangan terbaru di bidang AI, saya merekomendasikan blog berikut:
Saya adalah Google Developers Expert di ML (Gen AI), Kaggle 3x Expert, dan Women Techmakers Ambassador dengan pengalaman lebih dari 3 tahun di bidang teknologi. Saya ikut mendirikan startup health-tech pada 2020 dan sedang menempuh studi magister ilmu komputer di Georgia Tech dengan spesialisasi machine learning.

