Jawaban singkat
Bagaimana cara memberikan web search tool kepada agen LangChain?
Dekorasi fungsi Python dengan @tool dari langchain_core.tools, buat fungsi itu memanggil https://serpcrypto.com/api/v1/search dan mengembalikan teks pendek, lalu teruskan saat membuat agen di tools=[...]. Dengan SerpCrypto, setiap pencarian yang dijalankan agen memakai 1 kredit, mulai dari US$0,30/1K pencarian, dan panggilan yang gagal gratis. Kredit dibayar dengan kripto, tanpa KYC.
Bagaimana cara menulis search tool-nya?
Tool LangChain adalah fungsi bertipe dengan docstring. Dekorator mengubah signature menjadi skema argumen dan docstring menjadi deskripsi yang dibaca model, jadi keduanya perlu diperhatikan. Beri nama argumen sesuai cara model seharusnya memahaminya: kueri, negara, bahasa.
Kembalikan teks, bukan seluruh JSON. Lima hasil dengan judul, tautan, dan snippet sudah cukup bagi model untuk menjawab dan mengutip, dengan token jauh lebih sedikit daripada jawaban mentah. Kembalikan pesan singkat saat terjadi error alih-alih melempar exception, agar agen bisa menjelaskan atau mencoba lagi.
"""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."Bagaimana cara membiarkan agen memutuskan kapan harus mencari?
Teruskan tool ke create_agent, tersedia sejak LangChain 1.0. Model membaca deskripsi dan memanggil tool saat pertanyaan membutuhkan fakta terbaru. Setel AGENT_MODEL ke string model yang didukung akun Anda, misalnya openai: atau anthropic: diikuti nama model; model chat apa pun yang mendukung tool calling bisa dipakai.
System prompt sama pentingnya dengan kode. Meminta agen hanya mencari untuk informasi yang lebih baru dari data latihnya, dan mengutip tautan, membuat jawaban tetap berbasis fakta dan membatasi jumlah pencarian berbayar.
"""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)Bagaimana cara melakukan hal yang sama dengan LlamaIndex?
Tulis fungsi biasa dengan type hint dan docstring, lalu bungkus dengan FunctionTool.from_defaults. LlamaIndex membaca nama, type hint, dan docstring untuk membangun skema tool, sama seperti LangChain. Tambahkan tool ke agen LlamaIndex mana pun yang menerima daftar tool.
"""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.Apakah tool sebaiknya mengembalikan JSON atau teks?
Teks, dalam sebagian besar kasus. Model membaca teks pendek berlabel dengan baik, dan biaya tokennya lebih sedikit daripada JSON bersarang. Kembalikan JSON hanya jika langkah berikutnya dalam chain Anda mem-parse-nya, misalnya untuk menyimpan peringkat.
Pertahankan tautan di output. Tautan memungkinkan model mengutip sumbernya, dan memungkinkan Anda memeriksa kemudian halaman mana yang menjadi rujukan jawaban.
Bagaimana cara mengendalikan biaya pencarian di agen?
Setiap panggilan tool yang berhasil adalah satu kredit. Tiga kebiasaan menjaga jumlahnya tetap rendah: beri tahu model di system prompt kapan tidak perlu mencari, batasi jumlah panggilan tool per run di loop agen Anda, dan cache jawaban untuk pertanyaan yang berulang di kode Anda sendiri.
Satu paket 100.000 pencarian berharga US$56,25, dan Kredit pencarian prabayar tidak pernah kedaluwarsa: pencarian yang belum terpakai tetap ada di akun Anda sampai Anda menggunakannya, jadi bulan yang sepi tidak membuang apa pun.
Pertanyaan seputar LangChain
Apakah ini integrasi resmi LangChain?
Bukan. Ini tool kustom kecil yang dibangun di atas dekorator publik @tool milik LangChain. Karena ini kode Anda, Anda bisa mengubah format output, menambahkan parameter seperti location atau engine, atau menambahkan tool kedua untuk Google News.
Apakah tool bisa mencari kota tertentu?
Bisa. Tambahkan argumen location dan teruskan di params, ditulis City, Region, Country. Lihat locations untuk format dan contohnya.
Apakah agen membayar untuk pencarian yang gagal?
Tidak. 1 kredit = 1 permintaan pencarian yang berhasil, yang mengembalikan satu halaman hasil di mesin mana pun yang didukung. Permintaan yang gagal tidak dikenai biaya. Panggilan tool yang mengalami timeout atau error sementara tidak memakai kredit.
Model mana yang bisa memakai tool ini?
Model chat apa pun yang mendukung tool calling di LangChain atau LlamaIndex. Tool ini sendiri hanya mengirim permintaan HTTPS, jadi tidak bergantung pada penyedia model.