Skip to content

Commit a67ec81

Browse files
author
halo
committed
feat: 增加 DuckDuckGo 搜索工具的参数支持,包括 region、timeout 和 proxy
1 parent 7a2f9cf commit a67ec81

3 files changed

Lines changed: 48 additions & 24 deletions

File tree

385 Bytes
Binary file not shown.

tools/tool_duckduckgo_search/README.md

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@
1616
| 参数名 | 数据类型 | 必填 | 默认值 | 说明 |
1717
| :--- | :--- | :--- | :--- | :--- |
1818
| `query` | string || - | 搜索关键词 |
19-
| `max_results` | int || `10` | 返回的最大结果数量 |
19+
| `max_results` | int || `10` | 返回的最大结果数量(1-20) |
2020
| `search_type` | string || `text` | 搜索类型:`text`(文字搜索) 或 `image`(图片搜索) |
21+
| `region` | string || `cn-zh` | 搜索区域,如 `cn-zh`(中国)、`us-en`(美国)、`uk-en`(英国) 等 |
22+
| `timeout` | int || `15` | 请求超时时间(秒) |
23+
| `proxy` | string || `None` | 代理服务器地址,格式如 `http://proxy.example.com:8080` |
2124

2225
---
2326

@@ -28,7 +31,9 @@ from ddgs import DDGS
2831
import json
2932

3033

31-
def duckduckgo_search(query, max_results=10, search_type='text'):
34+
def duckduckgo_search(
35+
query, max_results=10, search_type="text", region="cn-zh", timeout=15, proxy=None
36+
):
3237
"""
3338
使用 DuckDuckGo 进行搜索(统一入口函数)
3439
@@ -48,27 +53,40 @@ def duckduckgo_search(query, max_results=10, search_type='text'):
4853
if max_results > 20:
4954
max_results = 20
5055
# 创建 DDGS 实例并执行搜索
51-
with DDGS() as ddgs:
52-
if search_type == 'image':
53-
results = list(ddgs.images(
54-
keywords=query,
55-
max_results=max_results
56-
))
57-
else:
58-
results = list(ddgs.text(
59-
keywords=query,
60-
max_results=max_results
61-
))
56+
ddgs = DDGS(timeout=timeout, proxy=proxy)
57+
if search_type == "image":
58+
results = list(
59+
ddgs.images(
60+
query=query,
61+
region=region,
62+
max_results=max_results,
63+
)
64+
)
65+
else:
66+
results = list(
67+
ddgs.text(query=query, region=region, max_results=max_results)
68+
)
6269

6370
# 返回 JSON 格式的结果
6471
return json.dumps(results, ensure_ascii=False, indent=2)
6572

6673
except Exception as e:
6774
error_result = {
6875
"error": str(e),
69-
"message": f"{search_type}搜索失败,请检查网络连接或稍后重试"
76+
"message": f"{search_type}搜索失败,请检查网络连接或稍后重试",
7077
}
7178
return json.dumps(error_result, ensure_ascii=False, indent=2)
79+
80+
81+
if __name__ == "__main__":
82+
query = ""
83+
max_results = 5
84+
search_type = "image"
85+
region = "cn-zh"
86+
timeout = 15
87+
result = duckduckgo_search(query, max_results, search_type, region, timeout)
88+
print(result)
89+
7290
```
7391

7492
---

tools/tool_duckduckgo_search/duckduckgo_search.py

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
import json
33

44

5-
def duckduckgo_search(query, max_results=10, search_type="text", region="cn-zh"):
5+
def duckduckgo_search(
6+
query, max_results=10, search_type="text", region="cn-zh", timeout=15, proxy=None
7+
):
68
"""
79
使用 DuckDuckGo 进行搜索(统一入口函数)
810
@@ -22,24 +24,18 @@ def duckduckgo_search(query, max_results=10, search_type="text", region="cn-zh")
2224
if max_results > 20:
2325
max_results = 20
2426
# 创建 DDGS 实例并执行搜索
25-
ddgs = DDGS()
27+
ddgs = DDGS(timeout=timeout, proxy=proxy)
2628
if search_type == "image":
2729
results = list(
2830
ddgs.images(
2931
query=query,
30-
max_results=max_results,
3132
region=region,
32-
safesearch="off",
33+
max_results=max_results,
3334
)
3435
)
3536
else:
3637
results = list(
37-
ddgs.text(
38-
query=query,
39-
max_results=max_results,
40-
region=region,
41-
safesearch="off",
42-
)
38+
ddgs.text(query=query, region=region, max_results=max_results)
4339
)
4440

4541
# 返回 JSON 格式的结果
@@ -51,3 +47,13 @@ def duckduckgo_search(query, max_results=10, search_type="text", region="cn-zh")
5147
"message": f"{search_type}搜索失败,请检查网络连接或稍后重试",
5248
}
5349
return json.dumps(error_result, ensure_ascii=False, indent=2)
50+
51+
52+
if __name__ == "__main__":
53+
query = "猫"
54+
max_results = 5
55+
search_type = "image"
56+
region = "cn-zh"
57+
timeout = 15
58+
result = duckduckgo_search(query, max_results, search_type, region, timeout)
59+
print(result)

0 commit comments

Comments
 (0)