From 5a61c45eaffdb0428cbaa0674fa49d70b5cd9c14 Mon Sep 17 00:00:00 2001 From: Jintao Wei <2797154930@qq.com> Date: Mon, 2 Feb 2026 14:10:22 +0800 Subject: [PATCH] add bocha search tool --- src/agents/agent.py | 4 +++- src/browser/search.py | 25 +++++++++++++++++++++++++ src/config.py | 14 ++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/agents/agent.py b/src/agents/agent.py index 2018337e..506f096e 100644 --- a/src/agents/agent.py +++ b/src/agents/agent.py @@ -17,7 +17,7 @@ from src.bert.sentence import SentenceBert from src.memory import KnowledgeBase -from src.browser.search import BingSearch, GoogleSearch, DuckDuckGoSearch +from src.browser.search import BingSearch, GoogleSearch, DuckDuckGoSearch,BoChaSearch from src.browser import Browser from src.browser import start_interaction from src.filesystem import ReadCode @@ -85,6 +85,8 @@ def search_queries(self, queries: list, project_name: str) -> dict: web_search = BingSearch() elif self.engine == "google": web_search = GoogleSearch() + elif self.engine == "bocha": + web_search = BoChaSearch() else: web_search = DuckDuckGoSearch() diff --git a/src/browser/search.py b/src/browser/search.py index 030fa5fe..3958eb6f 100644 --- a/src/browser/search.py +++ b/src/browser/search.py @@ -6,6 +6,31 @@ from html import unescape import orjson +class BoChaSearch: + def __init__(self): + self.config = Config() + self.bocha_api_key = self.config.get_bocha_api_key() + self.bocha_api_endpoint = self.config.get_bocha_api_endpoint() + self.query_result = None + + def search(self, query): + headers = { + 'Authorization': f'Bearer {self.bocha_api_key}', # 请替换为你的API密钥 + 'Content-Type': 'application/json' + } + + params = {"query": query} + + try: + response = requests.post(self.bocha_api_endpoint, headers=headers, json=params) + response.raise_for_status() + self.query_result = response.json() + return self.query_result + except Exception as error: + return error + + def get_first_link(self): + return self.query_result["data"]["webPages"]["value"][0]["url"] class BingSearch: def __init__(self): diff --git a/src/config.py b/src/config.py index a3303118..18fd9408 100644 --- a/src/config.py +++ b/src/config.py @@ -48,6 +48,12 @@ def get_bing_api_endpoint(self): def get_bing_api_key(self): return self.config["API_KEYS"]["BING"] + def get_bocha_api_endpoint(self): + return self.config["API_ENDPOINTS"]["BoCha"] + + def get_bocha_api_key(self): + return self.config["API_KEYS"]["BoCha"] + def get_google_search_api_key(self): return self.config["API_KEYS"]["GOOGLE_SEARCH"] @@ -119,6 +125,14 @@ def set_bing_api_endpoint(self, endpoint): self.config["API_ENDPOINTS"]["BING"] = endpoint self.save_config() + def set_bocha_api_key(self, key): + self.config["API_KEYS"]["BoCha"] = key + self.save_config() + + def set_bocha_api_endpoint(self, endpoint): + self.config["API_ENDPOINTS"]["BoCha"] = endpoint + self.save_config() + def set_google_search_api_key(self, key): self.config["API_KEYS"]["GOOGLE_SEARCH"] = key self.save_config()