KYC yok — kimlik yok, selfie yok, belge yok. Kripto ile ödeme: BTC, USDT, USDC, ETH, SOL, LTC
Dil: Türkçe
API anahtarı alın

Docs · LangChain · LlamaIndex

LangChain ve LlamaIndex'te web arama: bir araç ve bir retriever

Çoğu framework'ü iki yapı kapsar. Bir araç, bir agent'ın ne zaman arama yapacağına karar vermesini sağlar. Bir retriever, canlı web'i bir retrieval chain'e bağlar; burada okunan her sayfa, metadata'sında URL'siyle birlikte bir document olur.

Son güncelleme: · 4 dk okuma

Kısa yanıt

LangChain veya LlamaIndex'e canlı web aramayı nasıl eklerim?

LLMWebSearch'in /search çağrısını bir LangChain @tool, bir LangChain retriever veya bir LlamaIndex FunctionTool içine sarın. Her biri, en iyi 3 sayfa Markdown olarak ve URL'leriyle birlikte, alıntılamaya hazır sıralı kaynaklar döndürür. Kuracak paketimiz yok: aşağıdaki kod entegrasyonun kendisidir. Bir arama 1 kredi tutar, Ekim 2026 itibarıyla $1,20/1K arama başlangıçlı. KYC yok; kripto ile ödeme yapın.

Her sarmalayıcı ne işe yarar

LangChain aracıBir agent, web'e ihtiyaç duyduğuna karar verdiğinde search_web çağrısını yapar
LangChain retrieverBir chain, sormadan her soru için güncel document'lar getirir
LlamaIndex FunctionToolLlamaIndex agent'ları için aynı search_web fonksiyonu
Paketlerlangchain-core veya llama-index-core, artı requests
AnahtarOrtam değişkeninde LLMWEBSEARCH_API_KEY
FaturalamaBir kredi bir aramayı karşılar: en fazla 20 sıralı sonuç, ilk 3'ün sayfaları okunur ve Markdown olarak döndürülür. 4 ile 10 arası sayfa okumak 2 kredi eder. Hata ile biten bir çağrı hiçbir ücrete tabi değildir

Bir LangChain agent'ı için arama aracını nasıl oluştururum?

Bir fonksiyonu langchain_core.tools içinden @tool ile dekore edin. LangChain, aracı modele tanımlamak için adı, tiplenmiş argümanları ve docstring'i okur; bu yüzden docstring'i kısa ve kesin tutun. Fonksiyon, numaralı kaynaklar içeren tek bir string döndürür; bu her sohbet modeline uyar ve URL'leri metnin yanında tutar.

Test etmek için doğrudan .invoke() ile çağırın, ardından agent'ınızın tools listesine geçirin.

LangChain aracı: search_web
import os

import requests
from langchain_core.tools import tool

API = "https://llmwebsearch.com/api/v1/search"
HEADERS = {"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]}


@tool
def search_web(query: str, read: int = 3) -> str:
    """Search the live web. Returns numbered sources with URLs; the first `read` include page text."""
    body = {"q": query, "max_results": 5, "read": max(0, min(read, 10)), "max_chars": 5000}
    resp = requests.post(API, headers=HEADERS, json=body, timeout=60)
    resp.raise_for_status()
    parts = []
    for i, r in enumerate(resp.json()["results"], start=1):
        text = r["content"] if r["content_status"] == "ok" else "(snippet only) " + r["snippet"]
        parts.append(f"[{i}] {r['title']} - {r['url']}\n{text}")
    return "\n\n".join(parts)


print(search_web.invoke({"query": "postgres connection pool size"})[:500])

Canlı web'i retriever olarak nasıl kullanırım?

BaseRetriever alt sınıfını oluşturun ve okunan her sayfa için bir Document döndürün. Sayfa metni page_content içine gider; URL, başlık, sıra ve tarih metadata içine gider; kaynaklarını alıntılayan chain'ler bunları orada arar. İçeriksiz sonuçlar atlanır, çünkü bir retriever modelin alıntılayabileceği metni teslim etmelidir.

Bir retriever her soruda çalışır. Bu, güncel konular hakkında soru-cevap chain'i için doğrudur ve çoğu turun arama gerektirmediği bir sohbet için savurgandır; bu durumda aracı kullanın.

LangChain retriever: LLMWebSearchRetriever
import os
from typing import List

import requests
from langchain_core.callbacks import CallbackManagerForRetrieverRun
from langchain_core.documents import Document
from langchain_core.retrievers import BaseRetriever


class LLMWebSearchRetriever(BaseRetriever):
    """Live web search results as Documents, one per page that was read."""

    max_results: int = 5
    read: int = 3
    max_chars: int = 6000

    def _get_relevant_documents(self, query: str, *, run_manager: CallbackManagerForRetrieverRun) -> List[Document]:
        resp = requests.post(
            "https://llmwebsearch.com/api/v1/search",
            headers={"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]},
            json={"q": query, "max_results": self.max_results, "read": self.read, "max_chars": self.max_chars},
            timeout=60,
        )
        resp.raise_for_status()
        docs = []
        for r in resp.json()["results"]:
            if r["content_status"] != "ok":
                continue
            meta = {"source": r["url"], "title": r["title"], "position": r["position"], "published_at": r.get("published_at")}
            docs.append(Document(page_content=r["content"], metadata=meta))
        return docs


retriever = LLMWebSearchRetriever(read=3)
for doc in retriever.invoke("pgbouncer transaction mode limitations"):
    print(doc.metadata["position"], doc.metadata["source"], len(doc.page_content))

Aynı aramayı bir LlamaIndex agent'ına nasıl veririm?

Sade bir fonksiyon yazın ve llama_index.core.tools içinden FunctionTool.from_defaults ile sarmalayın. LlamaIndex, aracın adını ve açıklamasını fonksiyonun adı, imzası ve docstring'inden oluşturur. Aracı çağırmak, content alanı agent'ın okuyacağı metin olan bir ToolOutput döndürür.

Fonksiyon LangChain'dekiyle aynıdır; böylece her iki framework'ü kullanan bir ekip onu paylaşabilir.

LlamaIndex: FunctionTool
import os

import requests
from llama_index.core.tools import FunctionTool


def search_web(query: str, read: int = 3) -> str:
    """Search the live web and return numbered sources; the first `read` include their page text."""
    resp = requests.post(
        "https://llmwebsearch.com/api/v1/search",
        headers={"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]},
        json={"q": query, "max_results": 5, "read": max(0, min(read, 10)), "max_chars": 5000},
        timeout=60,
    )
    resp.raise_for_status()
    parts = []
    for i, r in enumerate(resp.json()["results"], start=1):
        text = r["content"] if r["content_status"] == "ok" else "(snippet only) " + r["snippet"]
        parts.append(f"[{i}] {r['title']} - {r['url']}\n{text}")
    return "\n\n".join(parts)


search_tool = FunctionTool.from_defaults(fn=search_web)
print(search_tool.metadata.name)
print(search_tool.call(query="postgres connection pool size").content[:300])

Bağlam penceresini nasıl kontrol altında tutarım?

Sonradan kırpmak yerine API çağrısında max_chars ayarlayın: daha az veri taşınır ve framework uzun sürümü hiç tutmaz. Sayfa başına 5.000 karakter ve 3 sayfa yaklaşık 4.000 token eder; çoğu model için rahat bir değerdir.

Canlı web'i kendi belgelerinizle birleştiren retrieval zincirlerinde web belgelerine daha düşük ağırlık verin ya da ayrı bir prompt bölümü ayırın. Web sayfaları değişir ve yanlış olabilir; kendi belgeleriniz genellikle referanstır.

Retriever'ın döndürdüklerini bir vektör veritabanında saklayabilir miyim?

Evet, bize göre saklayabilirsiniz. Sorgularınız veya API'nin döndürdükleri üzerinde hiçbir model eğitmeyiz ve sonuçları saklamaya karşı kendi kurallarımızı eklemeyiz; sayfalarını okuduğunuz sitelerin hakları hâlâ geçerlidir. Her chunk ile birlikte URL'yi ve published_at saklayın; böylece agent sayfayı kaynak gösterebilir ve siz de eskien chunk'ları atabilirsiniz.

Çoğu ekip sık sorulan soruların web sonuçlarını bir gün veya bir hafta önbelleğe alır. Bu, tekrarlanan aramaları azaltır ve kaçınılan her arama bir kredi tasarrufudur.

LangChain ve LlamaIndex: sık sorulan sorular

langchain-llmwebsearch paketi var mı?

Hayır. Hiçbir paket yayınlamıyoruz. Bu sayfadaki kod sahiplenebileceğiniz kadar kısa: kopyalayın, varsayılanları değiştirin ve deponuzda tutun.

Aracı async yapabilir miyim?

Evet. requests yerine httpx.AsyncClient kullanın ve fonksiyonu async def ile tanımlayın. LangChain'in @tool dekoratörü async fonksiyonları doğrudan sarar; LlamaIndex'te async sürümü FunctionTool.from_defaults içine async_fn olarak geçirin.

Agent'ın başka bir yerde bulduğu sayfayı nasıl okurum?

URL'leri https://llmwebsearch.com/api/v1/extract endpoint'ine gönderen ikinci bir araç ekleyin. URL'sini zaten bildiğiniz sayfaları okumak, içerikle birlikte döndürülen her başlamış 3 sayfalık grup için 1 kredi eder, çağrı başına en fazla 20 URL; reddedilen veya başarısız olan URL'ler sayılmaz. extract referansı isteği gösterir.

$1,20/1K arama'dan · KYC olmadan

API anahtarı alın