智谱搜索接口加入

This commit is contained in:
GuanYuankai 2025-04-16 16:55:41 +08:00
parent 718766abb8
commit 8cd80dcd9c
2 changed files with 44 additions and 2 deletions

View File

@ -14,7 +14,7 @@ search_local_knowledgebase:
# 搜索引擎工具配置项。推荐自己部署 searx 搜索引擎,国内使用最方便。 # 搜索引擎工具配置项。推荐自己部署 searx 搜索引擎,国内使用最方便。
search_internet: search_internet:
use: false use: false
search_engine_name: tavily search_engine_name: zhipu_search
search_engine_config: search_engine_config:
bing: bing:
bing_search_url: https://api.bing.microsoft.com/v7.0/search bing_search_url: https://api.bing.microsoft.com/v7.0/search
@ -36,6 +36,8 @@ search_internet:
search_depth: advanced search_depth: advanced
include_raw_content: True include_raw_content: True
max_results: 1 max_results: 1
zhipu_search:
zhipu_api_key: 'e2bdc39618624fd782ebcd721185645c.pcvcrTPFT69Jda8B'
top_k: 5 top_k: 5
verbose: Origin verbose: Origin
conclude_prompt: "<指令>这是搜索到的互联网信息,请你根据这些信息进行提取并有调理,简洁的回答问题。如果无法从中得到答案,请说 “无法搜索到能回答问题的内容”。 conclude_prompt: "<指令>这是搜索到的互联网信息,请你根据这些信息进行提取并有调理,简洁的回答问题。如果无法从中得到答案,请说 “无法搜索到能回答问题的内容”。

View File

@ -1,5 +1,7 @@
import uuid
from typing import Dict, List from typing import Dict, List
import requests
from langchain.docstore.document import Document from langchain.docstore.document import Document
from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.utilities.bing_search import BingSearchAPIWrapper from langchain.utilities.bing_search import BingSearchAPIWrapper
@ -107,15 +109,42 @@ def tavily_search(text, config, top_k):
# print("=== 完整搜索返回值 ===") # print("=== 完整搜索返回值 ===")
# print(search_results) # print(search_results)
return 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 = { SEARCH_ENGINES = {
"bing": bing_search, "bing": bing_search,
"duckduckgo": duckduckgo_search, "duckduckgo": duckduckgo_search,
"metaphor": metaphor_search, "metaphor": metaphor_search,
"searx": searx_search, "searx": searx_search,
"tavily": tavily_search "tavily": tavily_search,
"zhipu_search": zhipu_search
} }
# tavily的解析 # tavily的解析
# def search_result2docs_tavily(search_results) -> List[Document]: # def search_result2docs_tavily(search_results) -> List[Document]:
# docs = [] # docs = []
@ -132,6 +161,17 @@ SEARCH_ENGINES = {
def search_result2docs(search_results, engine_name) -> List[Document]: def search_result2docs(search_results, engine_name) -> List[Document]:
docs = [] 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" page_contents_key = "snippet" if engine_name != "tavily" else "content"
metadata_key = "link" if engine_name != "tavily" else "url" metadata_key = "link" if engine_name != "tavily" else "url"
for result in search_results: for result in search_results: