-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbocha_api.py
More file actions
96 lines (83 loc) · 3.43 KB
/
Copy pathbocha_api.py
File metadata and controls
96 lines (83 loc) · 3.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import requests,os,sys
from dotenv import load_dotenv
from langchain.agents import initialize_agent, Tool, AgentType
# from langchain_ollama.chat_models import ChatOllama
from langchain.tools import tool
# OPENAI_API_KEY = "YOUR-OPENAI-API-KEY"
load_dotenv()
BOCHA_API_KEY = os.getenv("BOCHA_API_KEY")
# Add the root directory to the Python path
sys.path.append(os.path.abspath(os.path.join(os.getcwd(), "..")))
# 定义Bocha Web Search工具
@tool
def bocha_websearch_tool(query: str, count: int = 5) -> str:
"""
使用Bocha Web Search API 进行网页搜索。
参数:
- query: 搜索关键词
- freshness: 搜索的时间范围
- summary: 是否显示文本摘要
- count: 返回的搜索结果数量
返回:
- 搜索结果的详细信息,包括网页标题、网页URL、网页摘要、网站名称、网站Icon、网页发布时间等。
"""
url = 'https://api.bochaai.com/v1/web-search'
headers = {
'Authorization': f'Bearer {BOCHA_API_KEY}', # 请替换为你的API密钥
'Content-Type': 'application/json'
}
data = {
"query": query,
"freshness": "noLimit", # 搜索的时间范围,例如 "oneDay", "oneWeek", "oneMonth", "oneYear", "noLimit"
"summary": True, # 是否返回长文本摘要
"count": count
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
json_response = response.json()
try:
if json_response["code"] != 200 or not json_response["data"]:
return f"搜索API请求失败,原因是: {response.msg or '未知错误'}"
webpages = json_response["data"]["webPages"]["value"]
if not webpages:
return "未找到相关结果。"
formatted_results = ""
for idx, page in enumerate(webpages, start=1):
formatted_results += (
f"引用: {idx}\n"
f"标题: {page['name']}\n"
f"URL: {page['url']}\n"
f"摘要: {page['summary']}\n"
f"网站名称: {page['siteName']}\n"
f"网站图标: {page['siteIcon']}\n"
f"发布时间: {page['dateLastCrawled']}\n\n"
)
return formatted_results.strip()
except Exception as e:
return f"搜索API请求失败,原因是:搜索结果解析失败 {str(e)}"
else:
return f"搜索API请求失败,状态码: {response.status_code}, 错误信息: {response.text}"
# 创建LangChain工具
# bocha_tool = Tool(
# name="BochaWebSearch",
# func=bocha_websearch_tool,
# description="使用Bocha Web Search API 进行搜索互联网网页,输入应为搜索查询字符串,输出将返回搜索结果的详细信息,包括网页标题、网页URL、网页摘要、网站名称、网站Icon、网页发布时间等。"
# )
# 初始化OpenAI语言模型
# llm = ChatOpenAI(
# model="gpt-4o-mini",
# temperature=0,
# openai_api_key=OPENAI_API_KEY
# )
# llm = ChatOllama(model="qwen2.5:latest",temperature=0)
# 初始化代理,包含您的自定义工具
# agent = initialize_agent(
# tools=[bocha_tool],
# llm=llm,
# agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,
# verbose=True
# )
# 使用代理进行查询
# user_question = "成都现在的天气如何"
# response = agent.invoke(user_question)
# print(response)