빠른 답변
LangChain 에이전트에 웹 검색 도구를 어떻게 제공하나요?
langchain_core.tools의 @tool으로 Python 함수를 데코레이트하고, https://serpcrypto.com/api/v1/search을 호출해 짧은 텍스트를 반환하도록 만든 다음, 에이전트를 생성할 때 tools=[...]에 전달하세요. SerpCrypto 기준으로 에이전트가 실행하는 검색마다 1 크레딧이 들며, US$0.30/1K 검색부터 시작하고 실패한 호출은 무료입니다. 크레딧은 KYC 없이 암호화폐로 결제합니다.
검색 도구는 어떻게 작성하나요?
LangChain 도구는 docstring이 있는 타입 지정 함수입니다. 데코레이터는 시그니처를 인자 스키마로, docstring을 모델이 읽는 설명으로 변환하므로 둘 다 신경 써야 합니다. 인자는 모델이 생각해야 하는 방식으로 이름을 붙이세요. 예를 들어 쿼리, 국가, 언어 등입니다.
전체 JSON이 아닌 텍스트를 반환하세요. 제목, 링크, 스니펫이 포함된 결과 5개면 모델이 답변하고 인용하기에 충분하며, 원본 응답에 비해 토큰을 훨씬 적게 씁니다. 오류 시 예외를 발생시키지 말고 짧은 메시지를 반환하여 에이전트가 설명하거나 다시 시도할 수 있게 하세요.
"""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."에이전트가 언제 검색할지 어떻게 결정하게 하나요?
LangChain 1.0부터 사용할 수 있는 create_agent에 도구를 전달하세요. 모델은 설명을 읽고 질문에 최신 사실이 필요할 때 도구를 호출합니다. AGENT_MODEL에는 계정이 지원하는 모델 문자열(예: openai: 또는 anthropic: 뒤에 모델 이름)을 설정하세요. 도구 호출을 지원하는 채팅 모델이면 무엇이든 됩니다.
시스템 프롬프트도 코드만큼 중요합니다. 학습 데이터보다 새로운 정보에만 검색을 사용하고 링크를 인용하도록 에이전트에 요청하면 답변이 근거에 기반하고 유료 검색 횟수가 제한됩니다.
"""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)LlamaIndex로 같은 작업을 어떻게 하나요?
타입 힌트와 docstring을 갖춘 일반 함수를 작성한 뒤 FunctionTool.from_defaults으로 감싸세요. LlamaIndex는 LangChain과 마찬가지로 이름, 힌트, docstring을 읽어 도구 스키마를 만듭니다. 도구 목록을 받는 LlamaIndex 에이전트라면 무엇이든 이 도구를 추가할 수 있습니다.
"""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.도구는 JSON을 반환해야 하나요, 텍스트를 반환해야 하나요?
대부분의 경우 텍스트를 반환하세요. 모델은 짧고 라벨이 붙은 텍스트를 잘 읽으며, 중첩된 JSON보다 토큰이 적게 듭니다. 체인의 다음 단계에서 파싱해야 할 때(예: 순위 저장)만 JSON을 반환하세요.
출력에 링크를 유지하세요. 그러면 모델이 출처를 인용할 수 있고, 나중에 어떤 페이지를 바탕으로 답변했는지 확인할 수 있습니다.
에이전트에서 검색 비용은 어떻게 관리하나요?
성공하는 도구 호출 하나당 1 크레딧입니다. 다음 세 가지 습관으로 횟수를 줄일 수 있습니다. 시스템 프롬프트에서 언제 검색하지 말아야 할지 모델에 알려주고, 에이전트 루프에서 실행당 도구 호출 수를 제한하며, 반복되는 질문의 답변을 코드에서 캐시하세요.
검색 100,000회 팩은 US$56.25이고 선불 검색 크레딧은 만료되지 않습니다: 사용하지 않은 검색은 사용할 때까지 계정에 남아 있습니다이므로, 조용한 달에도 낭비되지 않습니다.
LangChain 관련 질문
이것은 공식 LangChain 통합인가요?
아니요. LangChain의 공개 @tool 데코레이터로 만든 작은 커스텀 도구입니다. 여러분의 코드이므로 출력 형식을 바꾸거나 location, engine 같은 파라미터를 추가하거나, Google News용 두 번째 도구를 추가할 수도 있습니다.
도구로 특정 도시를 검색할 수 있나요?
예. location 인자를 추가하고 City, Region, Country 형식으로 작성하여 params에 전달하세요. 형식과 예시는 locations를 참고하세요.
에이전트가 실패한 검색에도 비용을 지불하나요?
아니요. 1 크레딧 = 성공한 검색 요청 1건이며, 지원되는 모든 엔진에서 결과 한 페이지를 반환합니다. 실패한 요청은 과금되지 않습니다. 타임아웃이나 일시적 오류가 발생한 도구 호출은 크레딧을 사용하지 않습니다.
어떤 모델이 이 도구를 사용할 수 있나요?
LangChain이나 LlamaIndex에서 도구 호출을 지원하는 채팅 모델이면 무엇이든 됩니다. 도구 자체는 HTTPS 요청만 보내므로 모델 제공자에 의존하지 않습니다.