Hızlı yanıt
Bir LangChain agent'a web search tool'u nasıl veririm?
langchain_core.tools içindeki @tool ile bir Python fonksiyonunu dekore edin, https://serpcrypto.com/api/v1/search çağırmasını sağlayın ve kısa metin döndürsün, ardından agent'ı oluştururken tools=[...] içinde iletin. SerpCrypto ile agent'ın çalıştırdığı her arama 1 krediye mal olur, $0,30/1K arama'den başlar ve başarısız çağrılar ücretsizdir. Krediler kripto ile ödenir, KYC olmadan.
Arama aracını nasıl yazarım?
Bir LangChain aracı, docstring içeren tiplenmiş bir fonksiyondur. Dekoratör, imzayı argüman şemasına ve docstring'i modelin okuduğu açıklamaya dönüştürür; dolayısıyla ikisi de özen ister. Argümanları modelin onları düşünmesini istediğiniz şekilde adlandırın: bir sorgu, bir ülke, bir dil.
Tüm JSON'u değil metin döndürün. Başlık, link ve snippet içeren beş sonuç, ham yanıtın token'larının küçük bir kısmıyla modele yanıtlaması ve kaynak göstermesi için yeterli olur. Hata durumunda raise etmek yerine kısa bir mesaj döndürün, böylece agent açıklayabilir veya yeniden deneyebilir.
"""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."Bir agent'ın ne zaman arama yapacağına nasıl izin veririm?
Aracı, LangChain 1.0'dan itibaren kullanılabilen create_agent öğesine iletin. Model açıklamayı okur ve soru güncel bilgi gerektirdiğinde aracı çağırır. AGENT_MODEL değerini hesabınızın desteklediği bir model string'ine ayarlayın, örneğin openai: veya anthropic: ve ardından bir model adı; tool calling destekleyen her chat model çalışır.
System prompt, kod kadar önemlidir. Agent'tan yalnızca eğitim verisinden daha yeni bilgiler için arama yapmasını ve linkleri kaynak göstermesini istemek, yanıtları temellendirir ve ücretli aramaların sayısını sınırlar.
"""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)Aynısını LlamaIndex ile nasıl yaparım?
Tip ipuçları ve docstring içeren düz bir fonksiyon yazın, ardından FunctionTool.from_defaults ile sarın. LlamaIndex, tıpkı LangChain gibi, araç şemasını oluşturmak için adı, tip ipuçlarını ve docstring'i okur. Aracı, araç listesi kabul eden herhangi bir LlamaIndex agent'ına ekleyin.
"""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.Araç JSON mu yoksa metin mi döndürmeli?
Çoğu durumda metin. Modeller kısa, etiketli metni iyi okur ve bu, iç içe JSON'dan daha az token'a mal olur. JSON'u yalnızca zincirinizin sonraki bir adımı onu ayrıştırdığında döndürün, örneğin sıralamaları saklamak için.
Linkleri çıktıda tutun. Modelin kaynaklarını kaynak göstermesini ve sonradan bir yanıtın hangi sayfalara dayandığını kontrol etmenizi sağlarlar.
Bir agent'ta arama maliyetlerini nasıl kontrol ederim?
Başarılı olan her tool call bir krediye eşittir. Üç alışkanlık sayıyı düşük tutar: system prompt'ta modele ne zaman arama yapmaması gerektiğini söyleyin, agent döngünüzde çalıştırma başına tool call sayısını sınırlayın ve tekrarlanan soruların yanıtlarını kendi kodunuzda cache'leyin.
100.000 arama içeren bir pack $56,25 fiyatındadır ve Ön ödemeli arama kredileri hiçbir zaman sona ermez: kullanılmayan aramalar siz kullanana kadar hesabınızda kalır, böylece sakin bir ay hiçbir şeyi boşa harcamaz.
LangChain soruları
Bu resmi bir LangChain entegrasyonu mu?
Hayır. LangChain'in genel @tool dekoratörü üzerine kurulmuş küçük bir özel araçtır. Kod sizin olduğu için çıktı formatını değiştirebilir, location veya engine gibi parametreler ekleyebilir ya da Google News için ikinci bir araç ekleyebilirsiniz.
Araç belirli bir şehirde arama yapabilir mi?
Evet. Bir location argümanı ekleyin ve params içinde, City, Region, Country biçiminde iletin. Format ve örnekler için locations bölümüne bakın.
Agent başarısız aramalar için ödeme yapar mı?
Hayır. 1 kredi = desteklenen herhangi bir motorda bir sayfa sonuç döndüren 1 başarılı arama isteği. Başarısız olan istek ücretlendirilmez. Zaman aşımına veya geçici bir hataya takılan bir tool call hiç kredi kullanmaz.
Bu aracı hangi modeller kullanabilir?
LangChain veya LlamaIndex'te tool calling destekleyen her chat model. Aracın kendisi yalnızca bir HTTPS isteği gönderir, dolayısıyla model sağlayıcısına bağlı değildir.