~/tools / Embedding dan pencarian (RAG) / RAG Text Chunker
RAG Text Chunker — Pecah teks untuk RAG dan susun permintaan Ollama /api/embed
Pecah dokumen panjang menjadi chunk dengan panjang maksimum dan tumpang tindih (overlap) sebelum Anda membuat embedding-nya untuk RAG atau pencarian semantik. Teks dipotong pada paragraf lebih dulu, lalu baris, kalimat, dan spasi, dan hanya dipotong di tengah kata jika tidak ada pilihan lain. Anda mendapatkan chunk-nya dan perintah curl siap pakai untuk /api/embed milik Ollama dengan semua chunk dalam satu permintaan. Tidak ada yang keluar dari browser Anda.
Panjang dihitung dalam karakter. Jendela konteks model dihitung dalam token, dan berapa token yang dipakai sebuah teks bergantung pada model, jadi sisakan margin.
Perintah curl
Jalankan di mesin yang dapat menjangkau Ollama. Responsnya berisi satu vektor per chunk, dengan urutan ini.
curl http://localhost:11434/api/embed -d '{
"model": "embeddinggemma",
"input": [
"Embeddings turn text into numeric vectors. You can store them in a vector database and search them with cosine similarity, or use them in a RAG pipeline.\n\nThe length of each vector depends on the embedding model. Use the same model when you index your documents and when you embed a question.\n\n",
"Ollama'\''s /api/embed endpoint takes a single string or an array of strings. By default, input that is longer than the model'\''s context window is truncated. Set truncate to false to get an error instead.\n\n",
"Split long documents into smaller chunks before you embed them, so that each chunk fits in the context window and a search can return the part that answers the question."
],
"truncate": false
}'Chunk
3 chunk. Yang terpanjang memiliki 294 karakter.
#0 · 294 karakter · dimulai pada offset 0
Embeddings turn text into numeric vectors. You can store them in a vector database and search them with cosine similarity, or use them in a RAG pipeline. The length of each vector depends on the embedding model. Use the same model when you index your documents and when you embed a question.
#1 · 202 karakter · dimulai pada offset 294
Ollama's /api/embed endpoint takes a single string or an array of strings. By default, input that is longer than the model's context window is truncated. Set truncate to false to get an error instead.
#2 · 169 karakter · dimulai pada offset 496
Split long documents into smaller chunks before you embed them, so that each chunk fits in the context window and a search can return the part that answers the question.
Body JSON untuk /api/embed
{
"model": "embeddinggemma",
"input": [
"Embeddings turn text into numeric vectors. You can store them in a vector database and search them with cosine similarity, or use them in a RAG pipeline.\n\nThe length of each vector depends on the embedding model. Use the same model when you index your documents and when you embed a question.\n\n",
"Ollama's /api/embed endpoint takes a single string or an array of strings. By default, input that is longer than the model's context window is truncated. Set truncate to false to get an error instead.\n\n",
"Split long documents into smaller chunks before you embed them, so that each chunk fits in the context window and a search can return the part that answers the question."
],
"truncate": false
}Field permintaan sebagaimana tercantum di referensi API Ollama untuk /api/embed, dicek pada 2026-11-04. Ollama API: Generate embeddings
Semuanya dilakukan di browser Anda. Alat ini hanya menulis perintah dan tidak mengirim apa pun.
Endpoint /api/embed milik Ollama menerima satu string atau array string, dan referensi API menyatakan bahwa secara default input yang lebih panjang dari jendela konteks model akan dipotong. Karena itu, dokumen panjang yang dikirim sebagai satu string bisa kehilangan bagian akhirnya tanpa error apa pun, dan satu vektor untuk seluruh dokumen menyulitkan pencarian untuk mengembalikan bagian yang menjawab pertanyaan. Perbaikan yang lazim adalah memecah dokumen menjadi chunk yang lebih kecil dan membuat embedding untuk masing-masing. Alat ini memecah teks pada batas terbesar yang masih muat: baris kosong di antara paragraf lebih dulu, lalu pemisah baris, lalu akhir kalimat (termasuk 。!?), lalu spasi, dan karakter tunggal hanya sebagai pilihan terakhir. Alat ini mempertahankan pemisahnya, sehingga chunk yang disatukan kembali menghasilkan teks asli. Overlap mengulang bagian akhir satu chunk di awal chunk berikutnya, dalam potongan utuh, agar kalimat yang terpotong di batas tetap muncul utuh di salah satu chunk. Panjang dihitung dalam karakter. Hasilnya adalah permintaan /api/embed dengan semua chunk di array input, dengan truncate diatur ke false jika Anda ingin error alih-alih pemotongan diam-diam. Pemecahan ini diperiksa dengan contoh yang dihitung manual dan dengan memastikan bahwa setiap chunk adalah bagian dari teks asli pada posisi yang ditampilkan.
Logika utama alat ini bersifat sumber terbuka dengan lisensi MIT. github.com/seigo5555/toolkitbox-lib/src/text-chunk.ts
Kapan dipakai
- Siapkan manual, FAQ, atau README untuk pencarian RAG di server Ollama Anda sendiri, dan buat embedding semua chunk dalam satu permintaan
- Temukan ukuran chunk yang menjaga paragraf tetap bersama, dengan mengubah ukuran dan melihat di mana batas-batasnya jatuh
- Pastikan tidak ada yang terpotong diam-diam: aktifkan truncate false, dan Ollama mengembalikan error ketika sebuah chunk terlalu panjang untuk modelnya
Cara pakai
- Tempel teksnya. Pisahkan paragraf dengan baris kosong agar paragraf tetap bersama jika memungkinkan.
- Atur panjang chunk maksimum dan overlap dalam karakter, nama model embedding, dan alamat server Ollama Anda jika bukan http://localhost:11434.
- Salin perintah curl dan jalankan di mesin yang dapat menjangkau Ollama. Responsnya berisi satu vektor per chunk, dengan urutan yang sama. Embedding Similarity Calculator di situs ini dapat membandingkannya.
Tanya jawab
Berapa ukuran chunk yang sebaiknya saya pakai?
Tidak ada satu ukuran yang benar. Setiap chunk harus muat di jendela konteks model, yang dihitung dalam token, dan chunk yang lebih kecil memungkinkan pencarian menunjuk bagian teks yang lebih spesifik. Mulailah dengan ukuran yang menjaga satu atau dua paragraf tetap bersama, lalu bandingkan hasil pencarian dengan Embedding Similarity Calculator.
Mengapa karakter dan bukan token?
Setiap model embedding memiliki tokenizer sendiri, jadi teks yang sama menjadi jumlah token yang berbeda di model yang berbeda, dan alat di browser tidak dapat menghitungnya secara tepat untuk setiap model. Pustaka Ollama mencantumkan jendela konteks tiap model dalam token; misalnya, pustaka menampilkan 2K untuk embeddinggemma dan nomic-embed-text, serta 512 untuk mxbai-embed-large dan all-minilm. Sisakan margin, dan gunakan truncate false untuk menemukan chunk yang terlalu panjang.
Apa yang dilakukan truncate false?
Referensi API Ollama menyatakan truncate secara default bernilai true, yang memotong input yang melebihi jendela konteks. Dengan false, Ollama mengembalikan error. Alat ini menambahkan "truncate": false ketika kotaknya dicentang, sehingga chunk yang terlalu panjang gagal dengan jelas, bukan dipendekkan.
Bagaimana overlap bekerja?
Saat chunk baru dimulai, potongan terakhir dari chunk sebelumnya (kalimat, baris, atau kata) diulang di awalnya, selama masih muat dalam panjang overlap dan chunk tetap tidak melebihi panjang maksimum. Potongan tidak pernah dipotong untuk mengisi overlap, jadi overlap sebenarnya bisa lebih pendek daripada angka yang Anda atur.
Apakah alat ini memahami Markdown, HTML, atau kode?
Tidak. Alat ini memperlakukan semuanya sebagai teks biasa dan memecah pada paragraf, baris, kalimat, dan spasi. Hapus markup yang tidak Anda inginkan di embedding sebelum menempel teksnya.
Apakah teks saya dikirim ke suatu tempat?
Tidak. Teks dipecah di browser Anda, dan alat ini hanya menulis perintahnya. Tidak ada yang dikirim sampai Anda menjalankannya sendiri.
Artikel terkait
- Embedding dengan Ollama: dasar untuk pencarian dan RAGMembuat embedding dengan /api/embed milik Ollama: model dan ukurannya, truncate dan dimensions, vektor berpanjang satuan dan kemiripan kosinus, dari dokumentasi resmi.
- Simpan dan cari embedding Ollama di PostgreSQL dengan pgvectorSimpan embedding Ollama di PostgreSQL dengan pgvector, cari dengan HNSW atau IVFFlat, dan teruskan hasilnya ke /api/chat agar jawabannya menyebut sumbernya.