~/tools / Embedding dan pencarian (RAG) / Embeddings to pgvector INSERT

Embeddings to pgvector INSERT — Ubah hasil /api/embed Ollama dan teks menjadi INSERT untuk pgvector

Ubah teks yang sudah Anda embed dan respons dari /api/embed milik Ollama (atau endpoint /v1/embeddings yang kompatibel dengan OpenAI) menjadi pernyataan INSERT untuk tabel pgvector di PostgreSQL. Setiap teks dipasangkan dengan vektornya secara berurutan, tanda kutip di-escape, dan alat ini memeriksa apakah jumlah dan dimensinya cocok sebelum Anda menjalankan apa pun. Tidak ada yang keluar dari browser Anda.

Contoh ini memakai vektor karangan dengan panjang 1 dan 4 dimensi agar mudah dibaca. Embedding asli punya ratusan atau ribuan dimensi.

3 baris dengan 4 dimensi. Teks dibaca sebagai body permintaan /api/embed, vektor dibaca sebagai respons /api/embed dari Ollama.

Pernyataan INSERT

Jalankan di psql atau klien lain. Baris-barisnya dimasukkan dalam satu transaksi.

BEGIN;

INSERT INTO documents (content, embedding) VALUES
  ('Embeddings turn text into numeric vectors.', '[0.620186,0.410123,0.550165,0.380114]'),
  ('pgvector stores vectors in PostgreSQL, next to the rest of your data.', '[0.578815,0.469039,0.518937,0.419142]'),
  ('Ollama''s /api/embed returns one vector per input, in the same order.', '[0.119982,0.809879,-0.329951,0.46993]');

COMMIT;

Format vektor dari README pgvector, diperiksa terhadap pgvector 0.8.7 pada 2026-11-04. pgvector README

Semuanya dilakukan di browser Anda. Alat ini menulis SQL dan tidak terhubung ke mana pun.

Setelah Anda membuat embedding untuk chunk dokumen dengan Ollama, vektornya harus dimasukkan ke database bersama teks asalnya. /api/embed milik Ollama mengembalikan satu vektor untuk setiap string input, dengan urutan yang sama seperti input, sehingga teks pertama milik vektor pertama. Alat ini melakukan pemasangan itu dan menulis SQL-nya. Tempel teksnya, baik sebagai body JSON yang Anda kirim ke /api/embed (RAG Text Chunker di situs ini menghasilkannya), array JSON berisi string, atau satu teks per baris, lalu tempel responsnya. Alat ini membaca respons Ollama ({"embeddings": [[…], …]}) dan yang kompatibel dengan OpenAI ({"data": [{"embedding": […]}]}, dikembalikan ke urutan index). Alat ini menulis vektor dalam format teks pgvector, seperti '[0.1,-0.2,0.3]', dan menulis setiap teks sebagai konstanta string SQL: dokumentasi PostgreSQL mengatakan bahwa tanda kutip tunggal di dalam string ditulis sebagai dua tanda kutip tunggal, dan backslash dibiarkan apa adanya karena standard_conforming_strings aktif secara default sejak PostgreSQL 9.1. Sebelum menulis apa pun, alat ini memeriksa hal-hal yang akan membuat INSERT gagal atau memasangkan baris yang salah: jumlah teks dan vektor yang berbeda, vektor dengan dimensi yang berbeda, dimensi yang berbeda dari vector(n) pada kolom, nilai yang bukan bilangan terhingga (pgvector tidak menerima NaN atau Infinity), embedding base64, dan karakter NUL, yang tidak dapat disimpan PostgreSQL dalam text. Pernyataan-pernyataan itu dibungkus dengan BEGIN dan COMMIT, 100 baris per INSERT. Kami menjalankan keluarannya pada pgvector 0.8.7 dengan PostgreSQL 16 memakai respons asli dari Ollama, termasuk teks yang berisi tanda kutip, backslash, pemisah baris, dan emoji, dan teksnya kembali tanpa berubah.

Logika utama alat ini bersifat sumber terbuka dengan lisensi MIT. github.com/seigo5555/toolkitbox-lib/src/pgvector-insert.ts

Kapan dipakai

  • Muat chunk dari sebuah manual atau FAQ beserta embedding-nya dari Ollama ke PostgreSQL untuk pencarian RAG
  • Coba pencarian pada beberapa baris asli sebelum Anda menulis kode pemuatan untuk aplikasi Anda
  • Cari tahu mengapa sebuah insert gagal: vektor dengan jumlah dimensi yang salah, atau teks yang lebih banyak daripada vektor

Cara pakai

  1. Tempel teks yang sudah Anda embed: body JSON dari RAG Text Chunker, array JSON berisi string, atau satu teks per baris.
  2. Kirim teks yang sama ke /api/embed dan tempel seluruh respons JSON-nya. Masukkan nama tabel dan kolom, dan jika mau, dimensi kolom vector(n).
  3. Salin SQL-nya dan jalankan di psql atau klien lain. pgvector SQL Builder di situs ini menulis tabel dan kueri pencarian yang sesuai.

Tanya jawab

Bagaimana saya tahu vektor mana yang milik teks mana?

Berdasarkan urutan. /api/embed milik Ollama mengembalikan embedding dengan urutan yang sama seperti array input, sehingga alat ini memasangkan teks pertama dengan vektor pertama, yang kedua dengan yang kedua, dan seterusnya. Jika jumlahnya berbeda, alat ini berhenti, bukan menebak.

Chunk saya berisi pemisah baris. Bisakah saya menempelkannya satu per baris?

Tidak, pemisah baris akan memecah satu chunk menjadi dua teks. Tempel body JSON yang Anda kirim ke /api/embed atau array JSON berisi string; pemisah baris di dalam setiap string tetap dipertahankan di SQL.

Amankah menempelkan teks yang berisi tanda kutip?

Alat ini menggandakan setiap tanda kutip tunggal, yang menurut dokumentasi PostgreSQL adalah cara menulis tanda kutip di dalam konstanta string. Backslash dibiarkan tidak berubah, yang benar dengan standard_conforming_strings = on secara default. Jika server Anda mematikannya, jangan jalankan keluarannya. Dalam kode aplikasi, gunakan parameter dari driver database Anda alih-alih menyusun string SQL.

Apa yang terjadi jika dimensinya tidak cocok dengan kolom?

pgvector menolak baris itu, dengan error seperti "expected 384 dimensions, not 768". Masukkan dimensi kolom ke alat ini untuk menangkapnya sebelum Anda menjalankan SQL. Dimensi yang berbeda biasanya berarti vektornya berasal dari model yang berbeda atau pengaturan dimensi yang berbeda.

Berapa baris yang bisa saya konversi sekaligus?

Hingga 1,000 teks dan vektor. Untuk pemuatan yang lebih besar, README pgvector menunjukkan pemuatan massal dengan COPY.

Apakah data saya dikirim ke suatu tempat?

Tidak. Konversi berjalan di browser Anda. Alat ini tidak pernah terhubung ke Ollama maupun ke database.

Artikel terkait

Terkait