Coba
5.000 pencarian
US$9,25
US$1,85/1K pencarian
- Pasang di satu agent
- API yang sama dengan paket terbesar
- Kredit tidak pernah kedaluwarsa
Use case · retrieval-augmented generation · sumber segar
Indeks vektor menyimpan apa yang Anda muat bulan lalu. Sebagian pertanyaan butuh apa yang dikatakan web hari ini. Live-web RAG melakukan retrieve saat pertanyaan diajukan: satu pencarian, halaman teratas sebagai Markdown, beberapa chunk masuk ke prompt, dan sitasi kembali ke setiap halaman.
Jawaban singkat
Bagaimana cara melakukan RAG dengan hasil pencarian web live?
Jalankan pencarian web saat pertanyaan diajukan, baca halaman teratas, bagi menjadi chunk, simpan yang paling relevan, dan minta model menjawab dengan sitasi bernomor. LLMWebSearch menangani dua langkah pertama dalam satu panggilan: hasil berperingkat dengan 3 halaman pertama sebagai Markdown, untuk satu kredit, mulai US$1,20/1K pencarian. Tanpa KYC; bayar dengan kripto.
Ini adalah retrieval-augmented generation yang langkah retrieval-nya berupa pencarian web, bukan pencarian di indeks Anda sendiri. Pertanyaan dikirim ke search API, API mengembalikan halaman, dan model menjawab dari halaman tersebut.
Pola ini cocok untuk pertanyaan tentang hal yang berubah: harga, rilis, aturan, jadwal, dan berita. Juga cocok untuk pertanyaan long-tail yang tidak pernah dibahas dokumen Anda sendiri. Biayanya satu pencarian per pertanyaan, atau dua jika pencarian pertama tidak menemukan hasil.
Simpan yang stabil dan milik Anda; ambil yang berubah. Manual produk, kebijakan internal, dan dokumen Anda sendiri cocok masuk indeks vektor, diperbarui sesuai jadwal. Harga pesaing, regulasi, dan berita cocok untuk live retrieval.
Banyak tim menggabungkan keduanya. Mereka mencari di indeks sendiri dulu dan memanggil web hanya ketika indeks tidak punya kecocokan yang baik, atau ketika pertanyaan menyebut tanggal terbaru.
Jika Anda memutuskan menyimpan halaman yang Anda retrieve, catat posisi kami: Kami tidak melatih model apa pun dengan kueri Anda atau dengan apa yang dikembalikan API, dan kami tidak menambahkan aturan kami sendiri yang melarang penyimpanan hasil; hak situs yang halaman-halamannya Anda baca tetap berlaku. Periksa ketentuan setiap situs sebelum membuat salinan permanen kontennya.
Bagi setiap halaman berdasarkan heading-nya, lalu potong bagian yang panjang ke panjang tetap. Markdown memudahkan ini, karena heading adalah baris yang dimulai dengan #. Simpan URL sumber dan judul di setiap chunk agar sitasi tetap utuh setelah pemisahan.
Contoh di bawah mencari, membaca tiga halaman, membaginya menjadi chunk, dan memilih enam chunk yang berbagi paling banyak kata dengan pertanyaan. Di produksi, ganti penghitungan kata dengan model embedding Anda; strukturnya tetap sama.
import os
import re
import requests
API = "https://llmwebsearch.com/api/v1/search"
HEADERS = {"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]}
def live_chunks(query, read=3, chunk_len=1200):
"""Search, then cut each page that was read into heading-based chunks tagged with its source."""
body = {"q": query, "max_results": 5, "read": read, "max_chars": 12000}
results = requests.post(API, headers=HEADERS, json=body, timeout=60).json()["results"]
chunks = []
for r in results:
if r.get("content_status") != "ok":
continue
for section in re.split(r"\n(?=#{1,3} )", r["content"]):
section = section.strip()
for start in range(0, len(section), chunk_len):
chunks.append({"url": r["url"], "title": r["title"], "text": section[start:start + chunk_len]})
return chunks
def top_chunks(chunks, question, k=6):
"""A plain keyword score; swap in your embedding model for better ranking."""
words = set(re.findall(r"\w{4,}", question.lower()))
def score(chunk):
return sum(1 for w in re.findall(r"\w{4,}", chunk["text"].lower()) if w in words)
return sorted(chunks, key=score, reverse=True)[:k]
def build_prompt(question):
picked = top_chunks(live_chunks(question), question)
urls = list(dict.fromkeys(c["url"] for c in picked))
blocks = [f"[{urls.index(c['url']) + 1}] {c['title']}\n{c['text']}" for c in picked]
sources = "\n".join(f"[{i}] {u}" for i, u in enumerate(urls, 1))
return (
"Use only the context to answer and cite sources as [n].\n\n"
+ "\n\n".join(blocks)
+ f"\n\nSources:\n{sources}\n\nQuestion: {question}"
)Tiga adalah awal yang baik, dan itu menjaga pencarian tetap satu kredit. Sebagian besar pertanyaan faktual terjawab pada dua atau tiga halaman pertama dari kueri yang baik.
Minta halaman yang lebih panjang daripada di chat agent, karena chunker tetap akan membuang sebagian besar teks. max_chars 10.000 hingga 15.000 per halaman memberi ranker cukup pilihan. Jika jawaban bergantung pada satu situs yang diketahui, tambahkan dengan include_domains daripada membaca lebih banyak halaman.
Beri nomor pada sumber di prompt dan minta nomornya di jawaban. Instruksi singkat sudah cukup: gunakan hanya konteks, sitasi setiap klaim sebagai [n], dan sebutkan jika konteks tidak mencakup pertanyaan.
Simpan daftar sumber di akhir prompt, dengan satu URL per nomor. Lalu render [n] sebagai tautan di antarmuka Anda. Pengguna mempercayai jawaban yang bisa mereka periksa, dan sitasi yang salah mudah terlihat saat review.
Lewati dan gunakan yang lain. Setiap hasil membawa content_status; hanya hasil ok yang punya teks. Halaman bisa tidak ada karena Pembaca kami mematuhi robots.txt: ia memperkenalkan diri sebagai LLMWebSearch, mengikuti aturan yang ditulis situs untuknya atau untuk semua robot, dan mengabaikan konten halaman apa pun yang tidak diizinkan untuk dibaca.
Jika semua halaman dari satu pencarian kembali kosong, coba ulang sekali dengan kueri berbeda atau tambahkan include_domains untuk situs yang Anda tahu terbuka. Saat situs menolak pembaca kami, hasil kembali tanpa konten dan dengan status dari situs tersebut: kami tidak pernah memecahkan CAPTCHA, masuk ke akun, atau mengakali blokir atau paywall.
Satu pencarian per pertanyaan dalam sebagian besar kasus. Asisten dukungan yang menjawab 5.000 pertanyaan sebulan, dengan pencarian kedua untuk satu dari lima pertanyaan, memakai sekitar 6.000 pencarian. 25.000 pencarian dengan US$41,25 mencakup empat bulan seperti itu.
Model Anda juga membaca chunk yang Anda kirim. Enam chunk berukuran 1.200 karakter menambah sekitar 2.000 token per pertanyaan, yang Anda kendalikan melalui ukuran dan jumlah chunk.
Satu kredit per pertanyaan untuk sebagian besar pipeline. Kredit pencarian tidak memiliki tanggal kedaluwarsa: yang tidak Anda pakai bulan ini masih ada tahun depan.
5.000 pencarian
US$9,25
US$1,85/1K pencarian
25.000 pencarian
US$41,25
US$1,65/1K pencarian
100.000 pencarian
US$145
US$1,45/1K pencarian
Di setiap paket: 3 halaman teratas dibaca sebagai Markdown · Filter negara, bahasa, waktu dan domain · Panggilan gagal tidak dikenai biaya · Kredit tidak pernah kedaluwarsa
Bisa. Halaman LangChain dan LlamaIndex membungkus pencarian sebagai retriever dan sebagai tool.
Bisa, dengan endpoint extract. Membaca halaman yang URL-nya sudah Anda miliki dikenakan 1 kredit untuk setiap grup 3 halaman yang mulai dikembalikan beserta kontennya, hingga 20 URL per panggilan; URL yang ditolak atau gagal tidak dihitung.
Tidak. Setiap panggilan meninggalkan satu baris log: waktu, akun, 60 karakter pertama kueri, berapa hasil dan halaman yang dikembalikan, serta kreditnya. Baris dihapus setelah 30 hari. Konten halaman yang kami baca tidak disimpan. Nomor akun, pesanan, top-up, dan total kredit tetap ada selama akun ada, lalu hanya selama hukum akuntansi menghendakinya. Otoritas menerima catatan hanya ketika hukum memaksa kami.
Bisa. Atur language dan country, misalnya language=de dan country=de untuk hasil berbahasa Jerman dari Jerman.
Mulai dari US$1,20/1K pencarian · tanpa KYC
Dapatkan API key