web_search.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536
  1. from typing import Type
  2. from langchain.utilities import BingSearchAPIWrapper
  3. from pydantic import BaseModel, Field
  4. from app.core.tools.base_tool import BaseTool
  5. from config.llm import tool_settings
  6. class WebSearchToolInput(BaseModel):
  7. query: str = Field(
  8. ...,
  9. description="Search query. Use a format suitable for Bing and, if necessary, "
  10. "use Bing's advanced search function",
  11. )
  12. class WebSearchTool(BaseTool):
  13. name: str = "web_search"
  14. description: str = (
  15. "A tool for performing a Bing search and extracting snippets and webpages "
  16. "when you need to search for something you don't know or when your information "
  17. "is not up to date. "
  18. "Input should be a search query."
  19. )
  20. args_schema: Type[BaseModel] = WebSearchToolInput
  21. _bing_search_api_wrapper = BingSearchAPIWrapper(
  22. bing_search_url=tool_settings.BING_SEARCH_URL,
  23. bing_subscription_key=tool_settings.BING_SUBSCRIPTION_KEY,
  24. k=tool_settings.WEB_SEARCH_NUM_RESULTS,
  25. )
  26. def run(self, query: str) -> dict:
  27. return self._bing_search_api_wrapper.results(query=query, num_results=tool_settings.WEB_SEARCH_NUM_RESULTS)