Posting ini adalah perpaduan antara pribadi dan teknologi, jadi bersabarlah. Meskipun hal-hal pribadi mungkin tidak menarik bagi Anda, ide dan teknologi yang ditunjukkan di sini dengan mudah mencakup beragam data bisnis dan teknologi serta tantangan AI.
PS Jika Anda sampai di sini melalui buletin Gerald, berikan komentar.
Pribadi
Orang-orang menggunakan agen untuk segala macam kebutuhan dan keinginan pribadi, mulai dari nasihat kencan, kesehatan mental, investasi, dan pelatihan pribadi. Saya juga melakukan ini, termasuk ketika saya tidak bisa masuk gym. Terkadang saya membutuhkan latihan yang bisa saya lakukan sendiri.
Agen saya dan LLM pilihan SANGAT mahir dalam melakukan rutinitas kebugaran, tetapi mereka belum melatih saya. Mereka tidak tahu apa yang saya sukai, apa yang tidak saya sukai, bagaimana kinerja saya, berapa lama waktu yang saya perlukan untuk pulih, atau apa pun tentang saya. Sekarang, saya dapat memberikan informasi ini setiap kali saya mengajukan pertanyaan dengan banyak rekayasa konteks, tetapi pasti ada cara yang lebih baik… Spoiler: RAG membantu memperbaikinya.
Teknisnya

Saya dengan cermat mencatat setiap pendakian, bersepeda, Balapan Spartan, lari 5 km, kelas CrossFit, dayung kayak, dan 🐶 jalan kaki sejak 2013. Dan kebetulan saya memiliki ‘buku harian’ ini di Database Oracle 26ai saya.
Saya pikir mungkin jika Agen saya memiliki akses ke semua data ini, mungkin itu bisa memberi saya saran yang lebih baik.
Bagaimana dengan Pipa RAG? Dan, apa itu saluran pipa RAG? Menurut AI Penelusuran Google…
Alur Retrieval-Augmented Generation (RAG) adalah kerangka kerja AI yang meningkatkan akurasi Model Bahasa Besar (LLM) dengan mengambil data eksternal dan menyematkannya ke dalam prompt. Ini terdiri dari pengindeksan (pembersihan, pemotongan, penyimpanan data) dan pembuatan pengambilan (menemukan konten yang relevan untuk pertanyaan), mencegah halusinasi dengan mendasarkan jawaban pada data faktual.
Kedengarannya sangat dekat dengan apa yang saya cari!
Sekarang apa yang telah dilihat oleh banyak orang di Oracle AI Database kami sebelumnya dalam hal RAG mirip dengan apa yang dijelaskan Andy di sini, Menggunakan RAG dengan AI Vector Search. Andy memiliki beberapa postingan bagus termasuk yang ini dalam topiknya, pastikan untuk berlangganan pembaruannya.

Jadi seluruh unit kerja terjadi di database itu sendiri. Seseorang menjalankan kueri yang memanggil LLM dengan pertanyaan bahasa alami, sekaligus menyertakan informasi dari database itu sendiri, yang ditentukan dengan pencarian kesamaan AI Vector.
Bagi saya, saya berpikir…tapi saya hanya ingin menggunakan agen lokal saya, namun saya tetap ingin mendapatkan manfaat dari komponen RAG. Dan jika saya ingin berganti agen atau LLM, saya tidak mau harus mengubah apa pun di database.
Apa yang saya bangun

Sisi kiri mewakili apa yang dimiliki seseorang, dengan asumsi mereka memiliki agen/llm. Dan sisi kanan menunjukkan bagaimana saya dapat meningkatkan apa yang bisa dilakukan Agen saya sendiri, dengan ‘data eksternal’, ‘konten yang relevan’.
Biarkan saya memecah bagian-bagian yang berbeda.
Oracle SQLcl MCP
Saya memiliki Server MCP database saya yang terdaftar di Agen saya. Ketika perlu mendapatkan beberapa data yang relevan untuk membantu tugas yang ada, ia dapat melakukannya dengan menanyakan data kebugaran saya. Atau dengan kata lain, ini adalah pintu gerbang bagi agen untuk menjalankan kueri, dengan aman, terhadap database saya.
Penyematan ONNX
Saya memiliki model transformator kalimat ALL_MINILM_L12_V12 yang dimuat di database saya. Ini berguna untuk dua hal:
- memvektorisasi data di database saya, untuk kueri RAG nanti
- memvektorisasi string pencarian dari kueri masuk, yang dapat digunakan untuk menemukan data serupa
💡 Tip: Anda tidak perlu menggunakan Database untuk membuat vektor data. Anda dapat membuat vektornya di luar db, dan cukup menyimpan vektor dalam database, dan menggunakan fungsi pengindeksan dan pencarian vektor jika Anda mau.
Untuk kasus penggunaan saya, sangat sederhana dan mudah untuk menggunakan fitur database ini, dan itulah yang saya lakukan. Petunjuk langkah demi langkah dapat ditemukan di sini. Saya juga melakukan ini secara eksternal melalui Python, dan menggunakan REST API untuk mengunggah vektor tersebut, yang telah saya tunjukkan di sini.
Data (STRAVA_ACTIVITIES)
Tabel ini memiliki sekitar 80 kolom. Saya punya saran mengenai kolom atau kolom mana yang akan divektorisasi, dan membagikannya dengan Agen saya. Namun, saya juga menawarkannya kesempatan untuk melihat data saya terlebih dahulu, lalu menyarankan sendiri apa yang harus kita lakukan vektorisasi, untuk pertanyaan lanjutan/kueri kesamaan.
kita akan menambahkan kolom VECTOR ke tabel kita, dan kita akan menghitung vektor yang menggabungkan konten kolom ACTIVITY_NAME, ACTIVITY_DESCRIPTION, dan AVERAGE_HEART_RATE.
Data ini akan digunakan untuk melengkapi apa yang telah dilatih Sonnet 4.6 Extended dengan data latihan saya selama 13 tahun.
Jangan ragu untuk menelusuri tabel dan menyarankan kolom lain atau kolom berbeda yang berguna untuk membantu saya memberikan saran
Agen saya menyukai ini. Ia menggunakan Server MCP kami untuk menelusuri/menyelami tabel – menjalankan kueri melalui Alat MCP run-sql untuk mendapatkan daftar kolom, deskripsi, dan mengintip data, dan ia memiliki saran ini untuk data VECTOR kami:
| Kolom | Mengapa ini berharga |
|---|---|
ACTIVITY_NAME |
Anda memberi nama sesi Anda secara deskriptif (“Saturday Endurance”, “Crossfit WOD: Cindy”) |
ACTIVITY_DESCRIPTION |
Emasnya — detail program Dr. Mike |
ACTIVITY_TYPE |
Latihan vs Lari vs Mendayung, dll. — penting untuk pemfilteran |
AVERAGE_HEART_RATE |
Proksi intensitas |
CALORIES |
Volume upaya |
TRAINING_LOAD |
Jika diisi, secara langsung mencerminkan stres sesi |
ELAPSED_TIME_2 |
Konteks durasi |
PERCEIVED_EXERTION |
Intensitas subyektif |
Saya menyetujuinya, dan mengizinkannya untuk memperbarui kolom VECTOR baru kami – ya, saya menyimpan vektor bersama dengan data sebenarnya.
UPDATE strava_activities
SET activity_embedding = VECTOR_EMBEDDING(
ALL_MINILM_L12_V2 USING (
activity_type || ' ' ||
NVL(activity_name, '') || ' ' ||
NVL(activity_description, '') || ' ' ||
'HR:' || NVL(TO_CHAR(average_heart_rate), '') || ' ' ||
'calories:' || NVL(TO_CHAR(calories), '') || ' ' ||
'duration_sec:' || NVL(TO_CHAR(elapsed_time_2), '') || ' ' ||
'training_load:' || NVL(TO_CHAR(training_load), '') || ' ' ||
'perceived_exertion:' || NVL(TO_CHAR(perceived_exertion), '')
) AS data
Ini membutuhkan waktu sekitar 90 detik untuk menyelesaikannya. Catatan, saya belum memiliki indeks VECTOR apa pun. Mengapa tidak? Kuerinya sudah cukup cepat, jadi saya belum membutuhkannya.
Ini ada di Mac Mini 2018 lokal saya, dan instance database saya vector_memory_size disetel ke 512MB.
Hasilnya, Cara Kerjanya
Oke, sekarang agen saya sudah memiliki apa yang dibutuhkan, sekarang saatnya mengujinya.
Saya memintanya untuk menjalankan skenario yang sama dua kali. Sekali tanpa RAG, dan lagi dengan RAG.
Gym saya tutup hari Sabtu ini, saya ingin sesi kardio yang berat kurang dari 30 menit. Tolong beri saya jawaban umum terlebih dahulu, diikuti dengan saran yang disempurnakan dengan data yang tersedia di toko vektor saya.
Jawaban Generik / LLM saja
🧠 Langkah 1: Jawaban Umum (dingin — tidak ada database yang dikonsultasikan)
Untuk sesi kardio berat di bawah 30 menit tanpa akses gym, berikut yang disarankan oleh pelatih mana pun:
Opsi A — Tabata (20 menit) 8 putaran kerja 20 detik / istirahat 10 detik dalam 4 gerakan: Lompat jongkok → Pendaki gunung → Lompat tali / lutut tinggi → Burpees
Opsi B — 5 Putaran Waktu (~25 menit) Lari 400m → 20 push-up → 30 squat udara → 10 lompat tuck
Opsi C — AMRAP 25 5 burpe → 10 lompat lunge → 15 sit-up → lari 200m. Ulangi putaran sebanyak mungkin, tanpa istirahat.
Jawaban yang Jauh Lebih Baik dan mengandung RAG
🎯 Langkah 3: Jawaban yang Ditingkatkan RAG
Agen berbicara pada dirinya sendiri… Itu kontras yang berarti. Penyimpanan vektor Anda menghasilkan sesuatu yang benar-benar berbeda dari yang saya sarankan secara umum — dan lebih berguna.
Apa yang sebenarnya ditunjukkan oleh data Anda tentang sesi kardio sub-30 yang sulit:
Pertandingan dengan skor tertinggi Anda hampir semuanya Format “Ketahanan Sabtu” Dr. Mike — penggabungan blok For Time atau AMRAP terstruktur lari + kerja kettlebell + gerakan berat badanbukan pola lompat jongkok / jongkok udara / push-up yang saya gunakan secara umum.
Hasil teratas — “Detak jantungnya mencurigakan” (Des 2024) — mengatakan: rata-rata HR 176usaha relatif 94449 kalori tepat dalam 29,9 menit. Itu batas tertinggi Anda untuk format ini. Deskripsinya mengatakan “Ya, saya masih hidup dan saya telah melampaui batasan waktu” — yang memberitahuku bahwa ini menyakitkan.
Rekomendasi saya untuk hari Sabtu:
For Time (batas 30 menit) — Format Saturday Endurance Dr. Mike, diadaptasi untuk solo/tanpa gym:
5 Putaran:
- Lari 300m
- Ayunan 15 KB (24kg)
- 12 Piala Squat (24kg)
- 9 Push-up
Kemudian: Lari 600m
Kemudian: 3 Putaran:
- 12 Ab Mat Sit-up
- 10 Lunge Terbalik
- 8 Ketukan Bahu
Ini mencerminkan struktur persis yang diketahui tubuh Anda dari 8 sesi yang cocok — segmen lari bergantian dengan KB + triset berat badan.
Berdasarkan riwayat Anda, harapkan rata-rata HR ~160, ~350-430 kal, upaya relatif 50-60.
Oke, tapi bagaimana cara saya mendapatkan data pribadi untuk menginformasikan sarannya?
Melalui integrasi Server MCP kami, Agen dapat menanyakan tabel. Namun alih-alih melihat data secara langsung, ia malah merumuskan deskripsi tentang apa yang dicarinya, dan menanyakan database 8 entri teratas yang paling mendekati data tersebut – melalui pencarian kesamaan AI Vector.
SELECT
activity_date,
activity_name,
activity_type,
activity_description,
average_heart_rate,
calories,
ROUND(elapsed_time_2/60, 1) as duration_min,
relative_effort_2,
perceived_exertion,
VECTOR_DISTANCE(
activity_embedding,
VECTOR_EMBEDDING(ALL_MINILM_L12_V2 USING 'tough intense cardio under 30 minutes high heart rate no equipment needed' AS data),
COSINE
) as distance
FROM strava_activities
WHERE activity_embedding IS NOT NULL
AND elapsed_time_2 BETWEEN 600 AND 1800
ORDER BY distance ASC
FETCH FIRST 8 ROWS ONLY
Data divektorkan dalam tabel saya melalui transformator ALL_MINILLM_L12_V2, jadi penting agar frasa penelusuran ‘kardio intens yang tangguh di bawah 30…’ juga diubah melalui mekanisme yang sama.
Beberapa catatan di sini:
- ini penelusuran hibrid, kami melakukan perhitungan VECTOR_DISTANCE dan ORDER BY untuk mendapatkan 8 kecocokan terdekat
- kami juga menggunakan predikat reguler untuk membatasi data pada aktivitas yang cukup panjang untuk menghasilkan data yang baik
- ini menggunakan metrik COSINE, dan kami menggunakan kesamaan semantik, jadi penting agar kedua vektor kami mengarah ke arah yang sama, di seluruh 380+ dimensi tersebut. Selain itu, ALL_MINIMLM_L12_V2 dilatih dengan asumsi kesamaan COSINE akan ada dalam percakapan (dokumen HuggingFace).
Contoh kedua saya lebih demonstratif, menurut saya
Saya menindaklanjuti rekomendasi latihan ‘Sabtu yang berat’ dengan pertanyaan ‘aktivitas pemulihan hari Minggu yang malas’.
Setelah saya bekerja keras pada hari Sabtu dengan latihan ini, saya memerlukan sesi yang menyenangkan, panjang, dan mudah pada hari Minggu. Sesuatu di luar dan sesuatu di mana detak jantung saya bisa dikatakan di bawah 130 dan katakanlah juga sesuatu yang saya nikmati
🧠 Jawaban Umum (dingin)
Untuk hari pemulihan setelah sesi kardio yang berat, pelatih mana pun akan mengatakan:
Opsi A — Lari Jarak Jauh dan Mudah (60-90 menit) Kecepatan zona 2, percakapan, HR di bawah 130. Tanpa interval, tanpa dorongan. Hanya waktu berjalan kaki.
Opsi B — Pendakian Jauh (2-3 jam) Jalur, ketinggian opsional. Penekanan HR alami dari berbagai medan dan udara segar.
Opsi C — Bersepeda Mudah (60-90 menit) Rute datar, kecepatan santai. Bagus untuk membilas kaki tanpa memuatnya.
Saran universal: tetap aerobik, tetap di luar, nikmati pemandangan, jangan perhatikan kecepatan Anda.
Jawaban bertenaga RAG
Pertama, dibutuhkan data untuk memberi informasi, meningkatkan LLM –
...
VECTOR_DISTANCE(
activity_embedding,
VECTOR_EMBEDDING(ALL_MINILM_L12_V2 USING 'easy long outdoor recovery session low heart rate run hike walk enjoyable outside nature' AS data),
COSINE
) as distance
...
WHERE activity_embedding IS NOT NULL
AND average_heart_rate < 130
AND average_heart_rate > 90
AND elapsed_time_2 > 2400
AND activity_type IN ('Run','Hike','Walk','Ride')
ORDER BY distance ASC
FETCH FIRST 8 ROWS ONLY
🎯 Jawaban yang Ditingkatkan RAG
Toko vektor Anda bahkan tidak ragu-ragu — setiap hasil adalah kenaikan. Bukan lari, bukan bersepeda. Mendaki gunung adalah aktivitas pemulihan luar ruangan pilihan Anda, dan data Anda membuktikan bahwa aktivitas tersebut secara konsisten memberikan HR 98-127 di seluruh sesi mulai dari 52 menit hingga lebih dari 3 jam.
Beberapa deskripsi Anda menjelaskan semuanya:
- “Cantik, mudah…panjang saja.” — 10 Nov 2021, 128 menit, HR 105
- “Pendakian yang bagus dan mudah….pendakian yang sulit untuk besok” — 12 Agustus 2019, 131 menit, HR 108
- “Anak-anak benar-benar bersenang-senang kali ini” — 5 Juni 2021, HR 104
- “Halaman belakang Washington dan Jefferson 🇮🇩” — 4 Juli 2021, HR 98, 151 menit
Lalu ada yang kacau: “4 mil berubah menjadi 7,5, ups” — Juni 2024, 190 menit, 12,1 mil, ketinggian 74 kaki, 1.659 kal. Yang itu memiliki kepribadianmu tertulis di sana-sini.
Rekomendasi saya yang ditingkatkan RAG untuk hari Minggu:
Pendakian Jalur Mudah — 2 hingga 2,5 jam
- Target SDM: tetap di bawah 125 sepanjang waktu
- Jarak: 4-5 mil dengan ketinggian yang landai (100-200 kaki) — cukup untuk merasakannya, tidak cukup untuk meningkatkan HR
- Tidak ada target kecepatan. Berhenti dan lihatlah sesuatu.
- Ajaklah keluarga Anda jika mereka bersedia — data Anda menunjukkan bahwa Anda pernah melakukannya, dan setidaknya sekali anak-anak bersenang-senang
Data pribadi saya menjadi nyata
Saya seorang pria besar, beratnya lebih dari 200 pon. Jadi kapan pun saya berlari, meski tidak cepat, tetap saja lari tidak pernah aktivitas santai atau pemulihan. Data saya menunjukkan hal ini, dan itu memungkinkan Agen memberikan saran yang jauh lebih baik, UNTUK SAYA.
Itulah manfaat RAG sebenarnya. Mari kita bantu LLM dengan beberapa fakta, beberapa informasi latar belakang, beberapa gambaran tentang skenario sebenarnya – dengan data yang sudah kita miliki di database (Oracle!) kita. Dan saya tidak perlu menyalinnya ke database khusus vektor lainnya, KARENA Oracle AI Database kami sudah mendukung semua fitur VECTOR.
Menyelesaikan semuanya dengan keterampilan
Saya mungkin akan menggunakan ini secara nyata, jadi alangkah baiknya jika saya tidak perlu lagi berusaha mengajari agen saya bagaimana atau apa yang kami lakukan di sini. Minta saja ‘lakukan yang diperlukan.’
Jadi untuk mengakhiri sesi obrolan, saya menyuruhnya untuk menghasilkan keterampilan baru berdasarkan tugas kami, dan menambahkannya secara otomatis ke konfigurasinya.

PakarPBN
A Private Blog Network (PBN) is a collection of websites that are controlled by a single individual or organization and used primarily to build backlinks to a “money site” in order to influence its ranking in search engines such as Google. The core idea behind a PBN is based on the importance of backlinks in Google’s ranking algorithm. Since Google views backlinks as signals of authority and trust, some website owners attempt to artificially create these signals through a controlled network of sites.
In a typical PBN setup, the owner acquires expired or aged domains that already have existing authority, backlinks, and history. These domains are rebuilt with new content and hosted separately, often using different IP addresses, hosting providers, themes, and ownership details to make them appear unrelated. Within the content published on these sites, links are strategically placed that point to the main website the owner wants to rank higher. By doing this, the owner attempts to pass link equity (also known as “link juice”) from the PBN sites to the target website.
The purpose of a PBN is to give the impression that the target website is naturally earning links from multiple independent sources. If done effectively, this can temporarily improve keyword rankings, increase organic visibility, and drive more traffic from search results.