Senza KYC — nessun documento d'identità, nessun selfie, nessun documento. Paga in criptovalute: BTC, USDT, USDC, ETH, SOL, LTC
Lingua: Italiano
Ottieni una chiave API

Docs · LangChain · LlamaIndex · Python

Strumento di ricerca web LangChain su una API SERP, più la versione LlamaIndex

Racchiudi una singola chiamata HTTPS in uno strumento, descrivilo bene e lascia che l'agente decida quando cercare. Il codice qui sotto funziona con LangChain 1.0 o successivo e con LlamaIndex; non serve nessun pacchetto SerpCrypto.

Ultimo aggiornamento: · 4 min di lettura

Risposta rapida

Come faccio a dare a un agente LangChain uno strumento di ricerca web?

Decora una funzione Python con @tool da langchain_core.tools, falla chiamare https://serpcrypto.com/api/v1/search e restituisci testo breve, poi passala in tools=[...] quando crei l'agente. Con SerpCrypto, ogni ricerca eseguita dall'agente costa 1 credito, a partire da 0,30 USD/1K ricerche, e le chiamate fallite sono gratuite. I crediti si pagano in criptovalute, senza KYC.

Come scrivo lo strumento di ricerca?

Uno strumento LangChain è una funzione tipizzata con una docstring. Il decoratore trasforma la firma nello schema degli argomenti e la docstring nella descrizione che legge il modello, quindi entrambe meritano attenzione. Dai agli argomenti i nomi con cui il modello dovrebbe ragionarci: una query, un paese, una lingua.

Restituisci testo, non tutto il JSON. Cinque risultati con titolo, link e snippet danno al modello abbastanza per rispondere e citare, con una frazione dei token della risposta grezza. In caso di errore restituisci un messaggio breve invece di sollevare un'eccezione, così l'agente può spiegare o riprovare.

search_tool.py
"""A LangChain tool that searches Google through the SerpCrypto SERP API."""
import os

import requests
from langchain_core.tools import tool

API_URL = "https://serpcrypto.com/api/v1/search"


@tool
def google_search(query: str, gl: str = "us", hl: str = "en") -> str:
    """Search Google for current information. Returns the top results with title, link and snippet.

    Args:
        query: the search query, as a person would type it.
        gl: two-letter country code of the results, for example us, gb or de.
        hl: language code, for example en, de or pt-BR.
    """
    r = requests.get(
        API_URL,
        params={"q": query, "gl": gl, "hl": hl},
        headers={"Authorization": "Bearer " + os.environ["SERPCRYPTO_API_KEY"]},
        timeout=90,
    )
    if r.status_code != 200:
        return f"Search failed with HTTP {r.status_code}."
    results = r.json().get("organic_results", [])[:5]
    return "\n\n".join(f"{x['title']}\n{x['link']}\n{x.get('snippet', '')}" for x in results) or "No results."

Come faccio a lasciare che un agente decida quando cercare?

Passa lo strumento a create_agent, disponibile da LangChain 1.0. Il modello legge la descrizione e chiama lo strumento quando la domanda richiede fatti aggiornati. Imposta AGENT_MODEL su una stringa di modello supportata dal tuo account, come openai: o anthropic: seguita dal nome di un modello; va bene qualsiasi modello chat con tool calling.

Il system prompt conta quanto il codice. Chiedere all'agente di cercare solo informazioni più recenti dei suoi dati di addestramento e di citare i link mantiene le risposte fondate e limita il numero di ricerche a pagamento.

agent.py
"""An agent that decides when to search (LangChain 1.0 or later)."""
import os

from langchain.agents import create_agent

from search_tool import google_search

agent = create_agent(
    model=os.environ["AGENT_MODEL"],  # a provider:model string, such as one of your OpenAI or Anthropic models
    tools=[google_search],
    system_prompt="Answer with current facts. Use google_search when you need information newer than your training data, and cite the links you used.",
)

result = agent.invoke({"messages": [{"role": "user", "content": "What changed in Google's search results pages this year?"}]})
print(result["messages"][-1].content)

Come faccio la stessa cosa con LlamaIndex?

Scrivi una funzione semplice con type hint e docstring, poi avvolgila con FunctionTool.from_defaults. LlamaIndex legge il nome, gli hint e la docstring per costruire lo schema dello strumento, come fa LangChain. Aggiungi lo strumento a qualsiasi agente LlamaIndex che accetta una lista di strumenti.

LlamaIndex FunctionTool
"""The same search as a LlamaIndex FunctionTool."""
import os

import requests
from llama_index.core.tools import FunctionTool


def google_search(query: str, gl: str = "us", hl: str = "en") -> str:
    """Search Google for current information and return the top results with title, link and snippet."""
    r = requests.get(
        "https://serpcrypto.com/api/v1/search",
        params={"q": query, "gl": gl, "hl": hl},
        headers={"Authorization": "Bearer " + os.environ["SERPCRYPTO_API_KEY"]},
        timeout=90,
    )
    r.raise_for_status()
    results = r.json().get("organic_results", [])[:5]
    return "\n\n".join(f"{x['title']}\n{x['link']}\n{x.get('snippet', '')}" for x in results)


search_tool = FunctionTool.from_defaults(fn=google_search)
# Pass search_tool in the tools list of your LlamaIndex agent.

Lo strumento deve restituire JSON o testo?

Testo, nella maggior parte dei casi. I modelli leggono bene un testo breve ed etichettato, e costa meno token rispetto a un JSON annidato. Restituisci JSON solo quando un passaggio successivo della tua catena lo analizza, per esempio per memorizzare le posizioni.

Mantieni i link nell'output. Permettono al modello di citare le fonti e a te di verificare in seguito su quali pagine si è basata una risposta.

Come faccio a controllare i costi di ricerca in un agente?

Ogni chiamata allo strumento che riesce è un credito. Tre abitudini tengono basso il conteggio: dire al modello nel system prompt quando non cercare, limitare il numero di chiamate allo strumento per esecuzione nel tuo loop dell'agente e mettere in cache le risposte per le domande ripetute nel tuo codice.

Un pack di 100.000 ricerche costano 56,25 USD e I crediti di ricerca prepagati non scadono mai: le ricerche non utilizzate restano sul tuo account finché non le usi, quindi un mese tranquillo non spreca nulla.

Domande su LangChain

Questa è un'integrazione ufficiale di LangChain?

No. È un piccolo strumento personalizzato costruito sul decoratore pubblico @tool di LangChain. Poiché è codice tuo, puoi cambiare il formato dell'output, aggiungere parametri come location o engine oppure aggiungere un secondo strumento per Google News.

Lo strumento può cercare in una città specifica?

Sì. Aggiungi un argomento location e passalo in params, scritto City, Region, Country. Vedi locations per il formato e gli esempi.

L'agente paga per le ricerche fallite?

No. 1 credito = 1 richiesta di ricerca andata a buon fine, che restituisce una pagina di risultati su qualsiasi motore supportato. Una richiesta non riuscita non viene addebitata. Una chiamata allo strumento che va in timeout o incontra un errore temporaneo non usa alcun credito.

Quali modelli possono usare questo strumento?

Qualsiasi modello chat che supporta il tool calling in LangChain o LlamaIndex. Lo strumento stesso invia solo una richiesta HTTPS, quindi non dipende dal provider del modello.

Da 0,30 USD/1K ricerche · senza KYC

Ottieni una chiave API