Source code for langchain_community.utilities.google_search
"""调用谷歌搜索的工具。"""
from typing import Any, Dict, List, Optional
from langchain_core._api.deprecation import deprecated
from langchain_core.pydantic_v1 import BaseModel, Extra, root_validator
from langchain_core.utils import get_from_dict_or_env
[docs]@deprecated(
since="0.0.33",
removal="0.3.0",
alternative_import="langchain_google_community.GoogleSearchAPIWrapper",
)
class GoogleSearchAPIWrapper(BaseModel):
"""包装了Google搜索API。
改编自:从https://stackoverflow.com/questions/
37083058/ 改编的指令
待办事项:使用文档
1. 安装google-api-python-client
- 如果您还没有Google账号,请注册。
- 如果您从未创建过Google APIs控制台项目,请阅读管理项目页面并在Google API控制台中创建项目。
- 使用pip install google-api-python-client安装库
2. 启用自定义搜索API
- 转到Cloud Console中的API和服务→仪表板面板。
- 点击启用API和服务。
- 搜索Custom Search API并点击它。
- 点击启用。
URL:https://console.cloud.google.com/apis/library/customsearch.googleapis
.com
3. 创建API密钥:
- 转到Cloud Console中的API和服务 → 凭据面板。
- 选择创建凭据,然后从下拉菜单中选择API密钥。
- API密钥创建对话框显示您新创建的密钥。
- 您现在有一个API_KEY
或者,您可以在此处生成API密钥:
https://developers.google.com/custom-search/docs/paid_element#api_key
4. 设置自定义搜索引擎,以便搜索整个网络
- 在此处创建自定义搜索引擎:https://programmablesearchengine.google.com/。
- 在“搜索内容”中选择“搜索整个网络”选项。
创建搜索引擎后,您可以单击它并在概述页面上找到“搜索引擎ID”。"""
search_engine: Any #: :meta private:
google_api_key: Optional[str] = None
google_cse_id: Optional[str] = None
k: int = 10
siterestrict: bool = False
class Config:
"""此pydantic对象的配置。"""
extra = Extra.forbid
def _google_search_results(self, search_term: str, **kwargs: Any) -> List[dict]:
cse = self.search_engine.cse()
if self.siterestrict:
cse = cse.siterestrict()
res = cse.list(q=search_term, cx=self.google_cse_id, **kwargs).execute()
return res.get("items", [])
@root_validator()
def validate_environment(cls, values: Dict) -> Dict:
"""验证环境中是否存在API密钥和Python包。"""
google_api_key = get_from_dict_or_env(
values, "google_api_key", "GOOGLE_API_KEY"
)
values["google_api_key"] = google_api_key
google_cse_id = get_from_dict_or_env(values, "google_cse_id", "GOOGLE_CSE_ID")
values["google_cse_id"] = google_cse_id
try:
from googleapiclient.discovery import build
except ImportError:
raise ImportError(
"google-api-python-client is not installed. "
"Please install it with `pip install google-api-python-client"
">=2.100.0`"
)
service = build("customsearch", "v1", developerKey=google_api_key)
values["search_engine"] = service
return values
[docs] def run(self, query: str) -> str:
"""通过GoogleSearch运行查询并解析结果。"""
snippets = []
results = self._google_search_results(query, num=self.k)
if len(results) == 0:
return "No good Google Search Result was found"
for result in results:
if "snippet" in result:
snippets.append(result["snippet"])
return " ".join(snippets)
[docs] def results(
self,
query: str,
num_results: int,
search_params: Optional[Dict[str, str]] = None,
) -> List[Dict]:
"""运行查询通过GoogleSearch并返回元数据。
参数:
query:要搜索的查询。
num_results:要返回的结果数量。
search_params:要传递的搜索参数。
返回:
一个包含以下键的字典列表:
snippet - 结果的描述。
title - 结果的标题。
link - 结果的链接。
"""
metadata_results = []
results = self._google_search_results(
query, num=num_results, **(search_params or {})
)
if len(results) == 0:
return [{"Result": "No good Google Search Result was found"}]
for result in results:
metadata_result = {
"title": result["title"],
"link": result["link"],
}
if "snippet" in result:
metadata_result["snippet"] = result["snippet"]
metadata_results.append(metadata_result)
return metadata_results