Quellcode durchsuchen

Feat: support json output for bing-search (#10904)

Xu Song vor 5 Monaten
Ursprung
Commit
8c2f62fb92

+ 35 - 0
api/core/tools/provider/builtin/bing/tools/bing_web_search.py

@@ -66,6 +66,41 @@ class BingSearchTool(BuiltinTool):
                     results.append(self.create_text_message(text=f'{related.get("displayText", "")}{url}'))
 
             return results
+        elif result_type == "json":
+            result = {}
+            if search_results:
+                result["organic"] = [
+                    {
+                        "title": item.get("name", ""),
+                        "snippet": item.get("snippet", ""),
+                        "url": item.get("url", ""),
+                        "siteName": item.get("siteName", ""),
+                    }
+                    for item in search_results
+                ]
+
+            if computation and "expression" in computation and "value" in computation:
+                result["computation"] = {"expression": computation["expression"], "value": computation["value"]}
+
+            if entities:
+                result["entities"] = [
+                    {
+                        "name": item.get("name", ""),
+                        "url": item.get("url", ""),
+                        "description": item.get("description", ""),
+                    }
+                    for item in entities
+                ]
+
+            if news:
+                result["news"] = [{"name": item.get("name", ""), "url": item.get("url", "")} for item in news]
+
+            if related_searches:
+                result["related searches"] = [
+                    {"displayText": item.get("displayText", ""), "url": item.get("webSearchUrl", "")} for item in news
+                ]
+
+            return self.create_json_message(result)
         else:
             # construct text
             text = ""

+ 8 - 3
api/core/tools/provider/builtin/bing/tools/bing_web_search.yaml

@@ -113,9 +113,9 @@ parameters:
       zh_Hans: 结果类型
       pt_BR: result type
     human_description:
-      en_US: return a list of links or texts
-      zh_Hans: 返回一个连接列表还是纯文本内容
-      pt_BR: return a list of links or texts
+      en_US: return a list of links, json or texts
+      zh_Hans: 返回一个列表,内容是链接、json还是纯文本
+      pt_BR: return a list of links, json or texts
     default: text
     options:
       - value: link
@@ -123,6 +123,11 @@ parameters:
           en_US: Link
           zh_Hans: 链接
           pt_BR: Link
+      - value: json
+        label:
+          en_US: JSON
+          zh_Hans: JSON
+          pt_BR: JSON
       - value: text
         label:
           en_US: Text