Unverified Commit b814f0b7 authored by Yeuoly's avatar Yeuoly Committed by GitHub

feat: bing search (#2375)

parent 65bec16f
...@@ -4,6 +4,7 @@ from core.tools.entities.user_entities import UserToolProvider ...@@ -4,6 +4,7 @@ from core.tools.entities.user_entities import UserToolProvider
position = { position = {
'google': 1, 'google': 1,
'bing': 2,
'wikipedia': 2, 'wikipedia': 2,
'dalle': 3, 'dalle': 3,
'webscraper': 4, 'webscraper': 4,
......
from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController
from core.tools.errors import ToolProviderCredentialValidationError
from core.tools.provider.builtin.bing.tools.bing_web_search import BingSearchTool
from typing import Any, Dict, List
class BingProvider(BuiltinToolProviderController):
def _validate_credentials(self, credentials: Dict[str, Any]) -> None:
try:
BingSearchTool().fork_tool_runtime(
meta={
"credentials": credentials,
}
).invoke(
user_id='',
tool_parameters={
"query": "test",
"result_type": "link"
},
)
except Exception as e:
raise ToolProviderCredentialValidationError(str(e))
identity:
author: Dify
name: bing
label:
en_US: Bing
zh_Hans: Bing
pt_BR: Bing
description:
en_US: Bing Search
zh_Hans: Bing 搜索
pt_BR: Bing Search
icon: icon.png
credentials_for_provider:
subscription_key:
type: secret-input
required: true
label:
en_US: Bing subscription key
zh_Hans: Bing subscription key
pt_BR: Bing subscription key
placeholder:
en_US: Please input your Bing subscription key
zh_Hans: 请输入你的 Bing subscription key
pt_BR: Please input your Bing subscription key
help:
en_US: Get your Bing subscription key from Bing
zh_Hans: 从 Bing 获取您的 Bing subscription key
pt_BR: Get your Bing subscription key from Bing
url: https://www.microsoft.com/cognitive-services/en-us/bing-web-search-api
server_url:
type: text-input
required: false
label:
en_US: Bing endpoint
zh_Hans: Bing endpoint
pt_BR: Bing endpoint
placeholder:
en_US: Please input your Bing endpoint
zh_Hans: 请输入你的 Bing 端点
pt_BR: Please input your Bing endpoint
help:
en_US: An endpoint is like "https://api.bing.microsoft.com/v7.0/search"
zh_Hans: 例如 "https://api.bing.microsoft.com/v7.0/search"
pt_BR: An endpoint is like "https://api.bing.microsoft.com/v7.0/search"
default: https://api.bing.microsoft.com/v7.0/search
from core.tools.tool.builtin_tool import BuiltinTool
from core.tools.entities.tool_entities import ToolInvokeMessage
from typing import Any, Dict, List, Union
from os import path
from requests import get
class BingSearchTool(BuiltinTool):
url = 'https://api.bing.microsoft.com/v7.0/search'
def _invoke(self,
user_id: str,
tool_parameters: Dict[str, Any],
) -> Union[ToolInvokeMessage, List[ToolInvokeMessage]]:
"""
invoke tools
"""
key = self.runtime.credentials.get('subscription_key', None)
if not key:
raise Exception('subscription_key is required')
server_url = self.runtime.credentials.get('server_url', None)
if not server_url:
server_url = self.url
query = tool_parameters.get('query', None)
if not query:
raise Exception('query is required')
market = tool_parameters.get('market', 'US')
lang = tool_parameters.get('language', 'en')
market_code = f'{lang}-{market}'
accept_language = f'{lang},{market_code};q=0.9'
headers = {
'Ocp-Apim-Subscription-Key': key,
'Accept-Language': accept_language
}
params = {
'q': query,
'mkt': market_code
}
response = get(server_url, headers=headers, params=params)
if response.status_code != 200:
raise Exception(f'Error {response.status_code}: {response.text}')
response = response.json()
# get the first 5 results
search_results = response['webPages']['value'][:5]
results = []
for result in search_results:
results.append(self.create_text_message(
text=f'{result["name"]}: {result["url"]}'
))
return results
\ No newline at end of file
identity:
name: bing_web_search
author: Dify
label:
en_US: BingWebSearch
zh_Hans: 必应网页搜索
pt_BR: BingWebSearch
description:
human:
en_US: A tool for performing a Bing SERP search and extracting snippets and webpages.Input should be a search query.
zh_Hans: 一个用于执行 Bing SERP 搜索并提取片段和网页的工具。输入应该是一个搜索查询。
pt_BR: A tool for performing a Bing SERP search and extracting snippets and webpages.Input should be a search query.
llm: A tool for performing a Bing SERP search and extracting snippets and webpages.Input should be a search query.
parameters:
- name: query
type: string
required: true
label:
en_US: Query string
zh_Hans: 查询语句
pt_BR: Query string
human_description:
en_US: used for searching
zh_Hans: 用于搜索网页内容
pt_BR: used for searching
llm_description: key words for searching
form: llm
- name: market
type: select
label:
en_US: Market
zh_Hans: 市场
pt_BR: Market
human_description:
en_US: market takes responsibility for the region
zh_Hans: 市场决定了搜索结果的地区
pt_BR: market takes responsibility for the region
required: false
form: form
default: US
options:
- value: AR
label:
en_US: Argentina
zh_Hans: 阿根廷
pt_BR: Argentina
- value: AU
label:
en_US: Australia
zh_Hans: 澳大利亚
pt_BR: Australia
- value: AT
label:
en_US: Austria
zh_Hans: 奥地利
pt_BR: Austria
- value: BE
label:
en_US: Belgium
zh_Hans: 比利时
pt_BR: Belgium
- value: BR
label:
en_US: Brazil
zh_Hans: 巴西
pt_BR: Brazil
- value: CA
label:
en_US: Canada
zh_Hans: 加拿大
pt_BR: Canada
- value: CL
label:
en_US: Chile
zh_Hans: 智利
pt_BR: Chile
- value: CO
label:
en_US: Colombia
zh_Hans: 哥伦比亚
pt_BR: Colombia
- value: CN
label:
en_US: China
zh_Hans: 中国
pt_BR: China
- value: CZ
label:
en_US: Czech Republic
zh_Hans: 捷克共和国
pt_BR: Czech Republic
- value: DK
label:
en_US: Denmark
zh_Hans: 丹麦
pt_BR: Denmark
- value: FI
label:
en_US: Finland
zh_Hans: 芬兰
pt_BR: Finland
- value: FR
label:
en_US: France
zh_Hans: 法国
pt_BR: France
- value: DE
label:
en_US: Germany
zh_Hans: 德国
pt_BR: Germany
- value: HK
label:
en_US: Hong Kong
zh_Hans: 香港
pt_BR: Hong Kong
- value: IN
label:
en_US: India
zh_Hans: 印度
pt_BR: India
- value: ID
label:
en_US: Indonesia
zh_Hans: 印度尼西亚
pt_BR: Indonesia
- value: IT
label:
en_US: Italy
zh_Hans: 意大利
pt_BR: Italy
- value: JP
label:
en_US: Japan
zh_Hans: 日本
pt_BR: Japan
- value: KR
label:
en_US: Korea
zh_Hans: 韩国
pt_BR: Korea
- value: MY
label:
en_US: Malaysia
zh_Hans: 马来西亚
pt_BR: Malaysia
- value: MX
label:
en_US: Mexico
zh_Hans: 墨西哥
pt_BR: Mexico
- value: NL
label:
en_US: Netherlands
zh_Hans: 荷兰
pt_BR: Netherlands
- value: NZ
label:
en_US: New Zealand
zh_Hans: 新西兰
pt_BR: New Zealand
- value: NO
label:
en_US: Norway
zh_Hans: 挪威
pt_BR: Norway
- value: PH
label:
en_US: Philippines
zh_Hans: 菲律宾
pt_BR: Philippines
- value: PL
label:
en_US: Poland
zh_Hans: 波兰
pt_BR: Poland
- value: PT
label:
en_US: Portugal
zh_Hans: 葡萄牙
pt_BR: Portugal
- value: RU
label:
en_US: Russia
zh_Hans: 俄罗斯
pt_BR: Russia
- value: SA
label:
en_US: Saudi Arabia
zh_Hans: 沙特阿拉伯
pt_BR: Saudi Arabia
- value: SG
label:
en_US: Singapore
zh_Hans: 新加坡
pt_BR: Singapore
- value: ZA
label:
en_US: South Africa
zh_Hans: 南非
pt_BR: South Africa
- value: ES
label:
en_US: Spain
zh_Hans: 西班牙
pt_BR: Spain
- value: SE
label:
en_US: Sweden
zh_Hans: 瑞典
pt_BR: Sweden
- value: CH
label:
en_US: Switzerland
zh_Hans: 瑞士
pt_BR: Switzerland
- value: TW
label:
en_US: Taiwan
zh_Hans: 台湾
pt_BR: Taiwan
- value: TH
label:
en_US: Thailand
zh_Hans: 泰国
pt_BR: Thailand
- value: TR
label:
en_US: Turkey
zh_Hans: 土耳其
pt_BR: Turkey
- value: GB
label:
en_US: United Kingdom
zh_Hans: 英国
pt_BR: United Kingdom
- value: US
label:
en_US: United States
zh_Hans: 美国
pt_BR: United States
- name: language
type: select
label:
en_US: Language
zh_Hans: 语言
pt_BR: Language
human_description:
en_US: language takes responsibility for the language of the search result
zh_Hans: 语言决定了搜索结果的语言
pt_BR: language takes responsibility for the language of the search result
required: false
default: en
form: form
options:
- value: ar
label:
en_US: Arabic
zh_Hans: 阿拉伯语
pt_BR: Arabic
- value: bg
label:
en_US: Bulgarian
zh_Hans: 保加利亚语
pt_BR: Bulgarian
- value: ca
label:
en_US: Catalan
zh_Hans: 加泰罗尼亚语
pt_BR: Catalan
- value: zh-hans
label:
en_US: Chinese (Simplified)
zh_Hans: 中文(简体)
pt_BR: Chinese (Simplified)
- value: zh-hant
label:
en_US: Chinese (Traditional)
zh_Hans: 中文(繁体)
pt_BR: Chinese (Traditional)
- value: cs
label:
en_US: Czech
zh_Hans: 捷克语
pt_BR: Czech
- value: da
label:
en_US: Danish
zh_Hans: 丹麦语
pt_BR: Danish
- value: nl
label:
en_US: Dutch
zh_Hans: 荷兰语
pt_BR: Dutch
- value: en
label:
en_US: English
zh_Hans: 英语
pt_BR: English
- value: et
label:
en_US: Estonian
zh_Hans: 爱沙尼亚语
pt_BR: Estonian
- value: fi
label:
en_US: Finnish
zh_Hans: 芬兰语
pt_BR: Finnish
- value: fr
label:
en_US: French
zh_Hans: 法语
pt_BR: French
- value: de
label:
en_US: German
zh_Hans: 德语
pt_BR: German
- value: el
label:
en_US: Greek
zh_Hans: 希腊语
pt_BR: Greek
- value: he
label:
en_US: Hebrew
zh_Hans: 希伯来语
pt_BR: Hebrew
- value: hi
label:
en_US: Hindi
zh_Hans: 印地语
pt_BR: Hindi
- value: hu
label:
en_US: Hungarian
zh_Hans: 匈牙利语
pt_BR: Hungarian
- value: id
label:
en_US: Indonesian
zh_Hans: 印尼语
pt_BR: Indonesian
- value: it
label:
en_US: Italian
zh_Hans: 意大利语
pt_BR: Italian
- value: jp
label:
en_US: Japanese
zh_Hans: 日语
pt_BR: Japanese
- value: kn
label:
en_US: Kannada
zh_Hans: 卡纳达语
pt_BR: Kannada
- value: ko
label:
en_US: Korean
zh_Hans: 韩语
pt_BR: Korean
- value: lv
label:
en_US: Latvian
zh_Hans: 拉脱维亚语
pt_BR: Latvian
- value: lt
label:
en_US: Lithuanian
zh_Hans: 立陶宛语
pt_BR: Lithuanian
- value: ms
label:
en_US: Malay
zh_Hans: 马来语
pt_BR: Malay
- value: ml
label:
en_US: Malayalam
zh_Hans: 马拉雅拉姆语
pt_BR: Malayalam
- value: mr
label:
en_US: Marathi
zh_Hans: 马拉地语
pt_BR: Marathi
- value: nb
label:
en_US: Norwegian
zh_Hans: 挪威语
pt_BR: Norwegian
- value: pl
label:
en_US: Polish
zh_Hans: 波兰语
pt_BR: Polish
- value: pt-br
label:
en_US: Portuguese (Brazil)
zh_Hans: 葡萄牙语(巴西)
pt_BR: Portuguese (Brazil)
- value: pt-pt
label:
en_US: Portuguese (Portugal)
zh_Hans: 葡萄牙语(葡萄牙)
pt_BR: Portuguese (Portugal)
- value: pa
label:
en_US: Punjabi
zh_Hans: 旁遮普语
pt_BR: Punjabi
- value: ro
label:
en_US: Romanian
zh_Hans: 罗马尼亚语
pt_BR: Romanian
- value: ru
label:
en_US: Russian
zh_Hans: 俄语
pt_BR: Russian
- value: sr
label:
en_US: Serbian
zh_Hans: 塞尔维亚语
pt_BR: Serbian
- value: sk
label:
en_US: Slovak
zh_Hans: 斯洛伐克语
pt_BR: Slovak
- value: sl
label:
en_US: Slovenian
zh_Hans: 斯洛文尼亚语
pt_BR: Slovenian
- value: es
label:
en_US: Spanish
zh_Hans: 西班牙语
pt_BR: Spanish
- value: sv
label:
en_US: Swedish
zh_Hans: 瑞典语
pt_BR: Swedish
- value: ta
label:
en_US: Tamil
zh_Hans: 泰米尔语
pt_BR: Tamil
- value: te
label:
en_US: Telugu
zh_Hans: 泰卢固语
pt_BR: Telugu
- value: th
label:
en_US: Thai
zh_Hans: 泰语
pt_BR: Thai
- value: tr
label:
en_US: Turkish
zh_Hans: 土耳其语
pt_BR: Turkish
- value: uk
label:
en_US: Ukrainian
zh_Hans: 乌克兰语
pt_BR: Ukrainian
- value: vi
label:
en_US: Vietnamese
zh_Hans: 越南语
pt_BR: Vietnamese
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment