From 8cd80dcd9c678908eae665adc9d61b11ddcb3b05 Mon Sep 17 00:00:00 2001 From: GuanYuankai Date: Wed, 16 Apr 2025 16:55:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=99=BA=E8=B0=B1=E6=90=9C=E7=B4=A2=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=8A=A0=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chatchat_data/tool_settings.yaml | 4 +- .../agent/tools_factory/search_internet.py | 42 ++++++++++++++++++- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/chatchat_data/tool_settings.yaml b/chatchat_data/tool_settings.yaml index ed8ed2a..a176266 100644 --- a/chatchat_data/tool_settings.yaml +++ b/chatchat_data/tool_settings.yaml @@ -14,7 +14,7 @@ search_local_knowledgebase: # 搜索引擎工具配置项。推荐自己部署 searx 搜索引擎,国内使用最方便。 search_internet: use: false - search_engine_name: tavily + search_engine_name: zhipu_search search_engine_config: bing: bing_search_url: https://api.bing.microsoft.com/v7.0/search @@ -36,6 +36,8 @@ search_internet: search_depth: advanced include_raw_content: True max_results: 1 + zhipu_search: + zhipu_api_key: 'e2bdc39618624fd782ebcd721185645c.pcvcrTPFT69Jda8B' top_k: 5 verbose: Origin conclude_prompt: "<指令>这是搜索到的互联网信息,请你根据这些信息进行提取并有调理,简洁的回答问题。如果无法从中得到答案,请说 “无法搜索到能回答问题的内容”。 diff --git a/libs/chatchat-server/chatchat/server/agent/tools_factory/search_internet.py b/libs/chatchat-server/chatchat/server/agent/tools_factory/search_internet.py index 0f46550..49fb695 100644 --- a/libs/chatchat-server/chatchat/server/agent/tools_factory/search_internet.py +++ b/libs/chatchat-server/chatchat/server/agent/tools_factory/search_internet.py @@ -1,5 +1,7 @@ +import uuid from typing import Dict, List +import requests from langchain.docstore.document import Document from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.utilities.bing_search import BingSearchAPIWrapper @@ -107,15 +109,42 @@ def tavily_search(text, config, top_k): # print("=== 完整搜索返回值 ===") # print(search_results) return search_results +def zhipu_search(text, config): + api_key = config["zhipu_api_key"] + msg = [ + { + "role": "user", + "content": text + } + ] + tool = "web-search-pro" + url = "https://open.bigmodel.cn/api/paas/v4/tools" + request_id = str(uuid.uuid4()) + data = { + "request_id": request_id, + "tool": tool, + "stream": False, + "messages": msg + } + resp = requests.post( + url, + json=data, + headers={'Authorization': api_key}, + timeout=300 + ) + print(resp.content.decode()) + return resp.content.decode() SEARCH_ENGINES = { "bing": bing_search, "duckduckgo": duckduckgo_search, "metaphor": metaphor_search, "searx": searx_search, - "tavily": tavily_search + "tavily": tavily_search, + "zhipu_search": zhipu_search } + # tavily的解析 # def search_result2docs_tavily(search_results) -> List[Document]: # docs = [] @@ -132,6 +161,17 @@ SEARCH_ENGINES = { def search_result2docs(search_results, engine_name) -> List[Document]: docs = [] + if engine_name == "zhipu_search": + try: + results = search_results["choices"][0]["message"]["tool_calls"][1]["search_result"] + except (KeyError, IndexError) as e: + print(f"结构异常: {e}") + results = [] + # 遍历并处理每个结果 + for idx, result in enumerate(search_results, 1): + docs.append(result.get('content', '无内容')) + print(f"内容:\n{result.get('content', '无内容')}\n") + return docs page_contents_key = "snippet" if engine_name != "tavily" else "content" metadata_key = "link" if engine_name != "tavily" else "url" for result in search_results: