update
This commit is contained in:
@@ -3,4 +3,5 @@ BOT_API_SECRET=your_super_secret_bot_key
|
|||||||
BACKEND_URL=http://localhost:3001/api
|
BACKEND_URL=http://localhost:3001/api
|
||||||
BOT_MODE=PROD
|
BOT_MODE=PROD
|
||||||
TRANSACTION_TYPES=SERVICE,JOB
|
TRANSACTION_TYPES=SERVICE,JOB
|
||||||
COUNT_PER_TYPE=1
|
COUNT_PER_TYPE=1
|
||||||
|
DATA_SOURCE=AI
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import os
|
import os
|
||||||
|
import json
|
||||||
from openai import OpenAI
|
from openai import OpenAI
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
@@ -10,18 +11,91 @@ client = OpenAI(
|
|||||||
api_key=os.getenv("OPENROUTER_API_KEY"),
|
api_key=os.getenv("OPENROUTER_API_KEY"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Load data pool
|
||||||
|
with open('bot_data_pool.json', 'r') as f:
|
||||||
|
data_pool = json.load(f)
|
||||||
|
|
||||||
|
DATA_SOURCE = os.getenv("DATA_SOURCE", "AI").upper()
|
||||||
|
|
||||||
|
def generate_from_pool():
|
||||||
|
"""Mengambil data secara acak langsung dari data pool (Tanpa AI)"""
|
||||||
|
import random
|
||||||
|
|
||||||
|
name1 = random.choice(data_pool['names'])
|
||||||
|
name2 = random.choice(data_pool['names'])
|
||||||
|
while name2 == name1:
|
||||||
|
name2 = random.choice(data_pool['names'])
|
||||||
|
|
||||||
|
title = random.choice(data_pool['service_titles'])
|
||||||
|
addr1 = random.choice(data_pool['addresses'])
|
||||||
|
addr2 = random.choice(data_pool['addresses'])
|
||||||
|
|
||||||
|
return {
|
||||||
|
"akun1": {
|
||||||
|
"nama_lengkap": name1,
|
||||||
|
"email": f"{name1.lower().replace(' ', '.')}@gmail.com",
|
||||||
|
"nama_bisnis": name1,
|
||||||
|
"deskripsi_bisnis": f"Penyedia jasa {title} profesional dan terpercaya.",
|
||||||
|
"lokasi": {
|
||||||
|
"lat": str(-6.2088 + (random.random() * 0.1)),
|
||||||
|
"lng": str(106.8456 + (random.random() * 0.1)),
|
||||||
|
"alamat": addr1,
|
||||||
|
"radius": "50"
|
||||||
|
},
|
||||||
|
"identitas": {
|
||||||
|
"tipe": "KTP",
|
||||||
|
"nomor": str(random.randint(1000000000000000, 9999999999999999))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"akun2": {
|
||||||
|
"nama_lengkap": name2,
|
||||||
|
"email": f"{name2.lower().replace(' ', '.')}@gmail.com"
|
||||||
|
},
|
||||||
|
"layanan": {
|
||||||
|
"judul": title,
|
||||||
|
"deskripsi": f"Saya menawarkan layanan {title} dengan hasil kualitas terbaik. Pengalaman sudah lebih dari 3 tahun di bidang ini.",
|
||||||
|
"harga": random.choice([50000, 75000, 100000, 150000, 200000, 500000])
|
||||||
|
},
|
||||||
|
"review": {
|
||||||
|
"rating": "5",
|
||||||
|
"komentar": random.choice([
|
||||||
|
"Sangat puas dengan hasilnya!",
|
||||||
|
"Kerja cepat dan rapi, mantap.",
|
||||||
|
"Sangat direkomendasikan untuk jasa ini.",
|
||||||
|
"Komunikasi baik dan hasil sesuai ekspektasi.",
|
||||||
|
"Terima kasih banyak, sangat membantu."
|
||||||
|
])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
def generate_bot_data():
|
def generate_bot_data():
|
||||||
"""
|
"""Menghasilkan data bot berdasarkan DATA_SOURCE (AI atau POOL)"""
|
||||||
Generate realistic Indonesian persona and service data using OpenRouter.
|
|
||||||
"""
|
if DATA_SOURCE == "POOL":
|
||||||
prompt = """
|
return generate_from_pool()
|
||||||
Kamu adalah pembuat data realistis untuk platform Microjob/Gig Economy di Indonesia.
|
|
||||||
Buat 1 set data dalam format JSON yang berisi:
|
# Jika mode AI
|
||||||
|
prompt = f"""
|
||||||
|
Anda adalah asisten AI yang bertugas men-generate data JSON untuk simulasi marketplace jasa (Microjob).
|
||||||
|
|
||||||
|
GUIDELINE PENAMAAN (Wajib Diikuti):
|
||||||
|
- Nama Orang: Gunakan referensi seperti {data_pool['names'][:10]}... (Hanya nama asli orang Indonesia).
|
||||||
|
- Nama Bisnis: HARUS sama dengan Nama Lengkap orang tersebut (Jangan gunakan tambahan 'Design', 'Solusi', dll).
|
||||||
|
- Judul Layanan: Gunakan pola seperti {data_pool['service_titles'][:5]}...
|
||||||
|
- Judul Job: Gunakan pola seperti {data_pool['job_titles'][:5]}...
|
||||||
|
- Alamat: Gunakan referensi pola seperti {data_pool['addresses'][:5]}...
|
||||||
|
|
||||||
|
Aturan Tambahan:
|
||||||
|
1. JANGAN gunakan nama artis, tokoh publik, atau selebriti.
|
||||||
|
2. JANGAN ada kata 'bot' di data manapun.
|
||||||
|
3. Output harus valid JSON.
|
||||||
|
|
||||||
|
Struktur JSON:
|
||||||
{
|
{
|
||||||
"akun1": {
|
"akun1": {
|
||||||
"nama_lengkap": "Nama asli orang Indonesia yang realistis (Hanya nama orang, misal: Budi Santoso, Siti Aminah)",
|
"nama_lengkap": "Nama asli orang Indonesia yang realistis. JANGAN gunakan nama artis, tokoh publik, atau selebriti (Hanya nama orang biasa, misal: Budi Santoso, Siti Aminah)",
|
||||||
"email": "Email pribadi realistis berdasarkan nama",
|
"email": "Email pribadi realistis berdasarkan nama",
|
||||||
"nama_bisnis": "Nama brand jasa profesional (misal: Budi Design, CV Sejuk Jaya)",
|
"nama_bisnis": "Gunakan nama orang saja (Hanya nama, jangan gunakan tambahan 'Solusi Digital', 'Design', 'Jasa', dll)",
|
||||||
"deskripsi_bisnis": "Deskripsi singkat tentang keahlian atau layanan yang ditawarkan",
|
"deskripsi_bisnis": "Deskripsi singkat tentang keahlian atau layanan yang ditawarkan",
|
||||||
"lokasi": {
|
"lokasi": {
|
||||||
"lat": "Latitude acak di area perkotaan Indonesia (misal: Jakarta, Bandung, atau Surabaya)",
|
"lat": "Latitude acak di area perkotaan Indonesia (misal: Jakarta, Bandung, atau Surabaya)",
|
||||||
@@ -35,7 +109,7 @@ def generate_bot_data():
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"akun2": {
|
"akun2": {
|
||||||
"nama_lengkap": "Nama asli pembeli Indonesia yang realistis (Hanya nama orang)",
|
"nama_lengkap": "Nama asli pembeli Indonesia yang realistis. JANGAN gunakan nama artis atau selebriti (Hanya nama orang biasa)",
|
||||||
"email": "Email pribadi realistis berdasarkan nama"
|
"email": "Email pribadi realistis berdasarkan nama"
|
||||||
},
|
},
|
||||||
"layanan": {
|
"layanan": {
|
||||||
|
|||||||
1210
bot_data_pool.json
Normal file
1210
bot_data_pool.json
Normal file
File diff suppressed because it is too large
Load Diff
83
generate_pool.py
Normal file
83
generate_pool.py
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
import json
|
||||||
|
import random
|
||||||
|
|
||||||
|
def generate_pool():
|
||||||
|
# 1. Names Generator (Combining First & Last Names)
|
||||||
|
first_names_male = [
|
||||||
|
"Agus", "Budi", "Bambang", "Eko", "Hendra", "Iwan", "Joko", "Lukman", "Mulyadi", "Rian",
|
||||||
|
"Rudi", "Slamet", "Taufik", "Wawan", "Yadi", "Zaki", "Ade", "Bagus", "Cahyo", "Darmawan",
|
||||||
|
"Erlangga", "Fadilah", "Galih", "Hafiz", "Ikhsan", "Junaedi", "Kiki", "Lutfi", "Maman", "Nanang"
|
||||||
|
]
|
||||||
|
first_names_female = [
|
||||||
|
"Siti", "Dewi", "Rina", "Maya", "Sari", "Indah", "Anita", "Putri", "Ratna", "Nina",
|
||||||
|
"Linda", "Desi", "Siska", "Amelia", "Yanti", "Ratna", "Nina", "Indah", "Anita", "Putri",
|
||||||
|
"Rara", "Fany", "Novi", "Aulia", "Fitri", "Hana", "Tika", "Wulan", "Yulia", "Kiki"
|
||||||
|
]
|
||||||
|
last_names = [
|
||||||
|
"Santoso", "Setiawan", "Nugroho", "Kurniawan", "Saputra", "Fauzi", "Hidayat", "Permana", "Pratama", "Wibowo",
|
||||||
|
"Rahman", "Budiman", "Sunandar", "Wahyuni", "Rahma", "Lestari", "Wijaya", "Fitriani", "Saputri", "Setyawati",
|
||||||
|
"Hidayah", "Puspita", "Kusuma", "Utami", "Marlina", "Fitriani", "Anwar", "Hasan", "Utomo", "Kosasih"
|
||||||
|
]
|
||||||
|
|
||||||
|
names = set()
|
||||||
|
all_first = first_names_male + first_names_female
|
||||||
|
while len(names) < 600:
|
||||||
|
full_name = f"{random.choice(all_first)} {random.choice(last_names)}"
|
||||||
|
names.add(full_name)
|
||||||
|
|
||||||
|
# 2. Addresses Generator (Combining Streets, Numbers, Cities)
|
||||||
|
streets = [
|
||||||
|
"Jl. Jenderal Sudirman", "Jl. MH Thamrin", "Jl. Gatot Subroto", "Jl. Rasuna Said", "Jl. Kebon Sirih",
|
||||||
|
"Jl. Imam Bonjol", "Jl. Diponegoro", "Jl. S. Parman", "Jl. Arteri Pondok Indah", "Jl. Prof. Dr. Satrio",
|
||||||
|
"Jl. Kemang Raya", "Jl. Pluit Indah", "Jl. Boulevard Raya", "Jl. Daan Mogot", "Jl. Hayam Wuruk",
|
||||||
|
"Jl. Braga", "Jl. Setiabudi", "Jl. Dago", "Jl. Asia Afrika", "Jl. Pasteur", "Jl. Cihampelas",
|
||||||
|
"Jl. Tunjungan", "Jl. Darmo", "Jl. Basuki Rahmat", "Jl. Gubeng", "Jl. Mayjen Sungkono",
|
||||||
|
"Jl. Malioboro", "Jl. Kaliurang", "Jl. Solo", "Jl. Gejayan", "Jl. Parangtritis",
|
||||||
|
"Jl. Pemuda", "Jl. Gajah Mada", "Jl. Pandanaran", "Jl. Simpang Lima", "Jl. Sunset Road",
|
||||||
|
"Jl. Legian", "Jl. Slamet Riyadi", "Jl. Pajajaran", "Jl. Ir. H. Juanda", "Jl. Margonda Raya",
|
||||||
|
"Jl. Ahmad Yani", "Jl. Veteran", "Jl. Kartini", "Jl. Teuku Umar", "Jl. Pattimura",
|
||||||
|
"Jl. Sam Ratulangi", "Jl. Urip Sumoharjo", "Jl. Dr. Sutomo", "Jl. MT Haryono"
|
||||||
|
]
|
||||||
|
cities = [
|
||||||
|
"Jakarta Selatan", "Jakarta Pusat", "Jakarta Barat", "Jakarta Utara", "Bandung",
|
||||||
|
"Surabaya", "Yogyakarta", "Semarang", "Solo", "Bogor", "Depok", "Bekasi", "Tangerang",
|
||||||
|
"Denpasar, Bali", "Medan", "Makassar", "Palembang", "Pekanbaru", "Banjarmasin", "Pontianak"
|
||||||
|
]
|
||||||
|
|
||||||
|
addresses = set()
|
||||||
|
while len(addresses) < 550:
|
||||||
|
addr = f"{random.choice(streets)} No. {random.randint(1, 200)}, {random.choice(cities)}"
|
||||||
|
addresses.add(addr)
|
||||||
|
|
||||||
|
# 3. Service Titles Generator
|
||||||
|
actions = ["Service", "Cuci", "Perbaikan", "Pasang", "Desain", "Penulisan", "Les", "Pijat", "MUA", "Fotografi", "Kursus", "Pelatihan", "Jasa", "Sewa", "Pembuatan", "Maintenance", "Audit", "Konsultasi", "Edit", "Setup"]
|
||||||
|
objects = ["AC", "Kulkas", "Mesin Cuci", "Listrik", "Pompa Air", "TV", "Laptop", "PC", "CCTV", "Website", "Logo", "Konten", "Video", "Banner", "Karpet", "Sofa", "Taman", "Motor", "Mobil", "Gaun", "Kamera", "Server", "VPN", "SEO", "Iklan", "Rumah", "Kantor", "Kos", "Water Heater", "Kanopi"]
|
||||||
|
descriptors = ["Jakarta", "Panggilan", "Terdekat", "Profesional", "Murah", "Cepat", "Terpercaya", "Bergaransi", "24 Jam", "Handal"]
|
||||||
|
|
||||||
|
service_titles = set()
|
||||||
|
while len(service_titles) < 550:
|
||||||
|
svc = f"{random.choice(actions)} {random.choice(objects)} {random.choice(descriptors)}"
|
||||||
|
service_titles.add(svc)
|
||||||
|
|
||||||
|
# 4. Job Titles Generator
|
||||||
|
job_prefixes = ["Dicari", "Butuh", "Cari", "Dibutuhkan", "Memerlukan", "Loker", "Lowongan", "Open Order", "Cepat:", "Urgent:"]
|
||||||
|
|
||||||
|
job_titles = set()
|
||||||
|
while len(job_titles) < 550:
|
||||||
|
job = f"{random.choice(job_prefixes)} {random.choice(objects)} {random.choice(descriptors)}"
|
||||||
|
job_titles.add(job)
|
||||||
|
|
||||||
|
data_pool = {
|
||||||
|
"names": sorted(list(names)),
|
||||||
|
"addresses": sorted(list(addresses)),
|
||||||
|
"service_titles": sorted(list(service_titles)),
|
||||||
|
"job_titles": sorted(list(job_titles))
|
||||||
|
}
|
||||||
|
|
||||||
|
with open('d:/DEVELOPMENT/MICROJOB/bot/bot_data_pool.json', 'w') as f:
|
||||||
|
json.dump(data_pool, f, indent=2)
|
||||||
|
|
||||||
|
print(f"Pool generated successfully: {len(names)} names, {len(addresses)} addresses, {len(service_titles)} services, {len(job_titles)} jobs.")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
generate_pool()
|
||||||
Reference in New Issue
Block a user