Skip to content

Commit f48fcc1

Browse files
authored
Merge pull request #68 from MetaGLM/feature/web-search-0410
Feature/web search 0410
2 parents 9a730e7 + beaa987 commit f48fcc1

File tree

8 files changed

+161
-0
lines changed

8 files changed

+161
-0
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from zhipuai import ZhipuAI
2+
import zhipuai
3+
4+
import logging
5+
import logging.config
6+
7+
8+
def test_web_search(logging_conf):
9+
logging.config.dictConfig(logging_conf) # type: ignore
10+
client = ZhipuAI() # 填写您自己的APIKey
11+
try:
12+
response = client.web_search.web_search(
13+
search_engine="search-std",
14+
search_query="2025特朗普向中国加征了多少关税"
15+
)
16+
print(response)
17+
18+
except zhipuai.core._errors.APIRequestFailedError as err:
19+
print(err)
20+
except zhipuai.core._errors.APIInternalError as err:
21+
print(err)
22+
except zhipuai.core._errors.APIStatusError as err:
23+
print(err)
24+

zhipuai/_client.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ def __init__(
6262
self.tools = api_resource.Tools(self)
6363
self.videos = api_resource.Videos(self)
6464
self.assistant = api_resource.Assistant(self)
65+
self.web_search = api_resource.WebSearchApi(self)
6566

6667
@property
6768
@override

zhipuai/api_resource/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@
3434
Assistant,
3535
)
3636

37+
from .web_search import (
38+
WebSearchApi
39+
)
40+
3741
__all__ = [
3842
'Videos',
3943
'AsyncCompletions',
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from .web_search import WebSearchApi
2+
3+
__all__ = ['WebSearchApi']
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
from __future__ import annotations
2+
3+
from typing import TYPE_CHECKING, List, Union, Dict, Optional
4+
from ...types.sensitive_word_check import SensitiveWordCheckRequest
5+
from ...core import NOT_GIVEN, Body, Headers, NotGiven, BaseAPI, maybe_transform, StreamResponse, deepcopy_minimal
6+
7+
import httpx
8+
9+
from ...core import (
10+
make_request_options,
11+
)
12+
import logging
13+
14+
from ...types.web_search import web_search_create_params
15+
from ...types.web_search.web_search_resp import WebSearchResp
16+
17+
logger = logging.getLogger(__name__)
18+
19+
if TYPE_CHECKING:
20+
from ..._client import ZhipuAI
21+
22+
__all__ = ["WebSearchApi"]
23+
24+
25+
class WebSearchApi(BaseAPI):
26+
def __init__(self, client: "ZhipuAI") -> None:
27+
super().__init__(client)
28+
29+
def web_search(
30+
self,
31+
*,
32+
request_id: Optional[str] | NotGiven = NOT_GIVEN,
33+
search_engine: Optional[str] | NotGiven = NOT_GIVEN,
34+
search_query: Optional[str] | NotGiven = NOT_GIVEN,
35+
user_id: Optional[str] | NotGiven = NOT_GIVEN,
36+
sensitive_word_check: Optional[SensitiveWordCheckRequest] | NotGiven = NOT_GIVEN,
37+
extra_headers: Headers | None = None,
38+
extra_body: Body | None = None,
39+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
40+
) -> WebSearchResp:
41+
42+
body = deepcopy_minimal(
43+
{
44+
"request_id": request_id,
45+
"search_engine": search_engine,
46+
"search_query": search_query,
47+
"user_id": user_id,
48+
"sensitive_word_check": sensitive_word_check
49+
})
50+
return self._post(
51+
"/web_search",
52+
body= maybe_transform(body, web_search_create_params.WebSearchCreatParams),
53+
options=make_request_options(
54+
extra_headers=extra_headers, extra_body=extra_body, timeout=timeout
55+
),
56+
cast_type=WebSearchResp
57+
)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
2+
from .web_search_create_params import (
3+
WebSearchCreatParams
4+
)
5+
6+
__all__ = ["WebSearchCreatParams"]
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
2+
from __future__ import annotations
3+
4+
from typing import Union, Optional, List
5+
from typing_extensions import Literal, Required, TypedDict
6+
from ...types.sensitive_word_check import SensitiveWordCheckRequest
7+
8+
9+
__all__ = ["WebSearchCreatParams"]
10+
11+
12+
class WebSearchCreatParams(TypedDict):
13+
14+
search_engine: str
15+
"""搜索引擎"""
16+
17+
search_query: str
18+
"""搜索query文本"""
19+
20+
request_id: str
21+
"""由用户端传参,需保证唯一性;用于区分每次请求的唯一标识,用户端不传时平台会默认生成。"""
22+
23+
user_id: str
24+
"""用户端。"""
25+
26+
sensitive_word_check: Optional[SensitiveWordCheckRequest]
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from typing import List, Optional
2+
3+
from ...core import BaseModel
4+
5+
__all__ = [
6+
"SearchIntentResp",
7+
"SearchResultResp",
8+
]
9+
10+
11+
class SearchIntentResp(BaseModel):
12+
query: str
13+
# 搜索优化 query
14+
intent: str
15+
# 判断的意图类型
16+
keywords: str
17+
# 搜索关键词
18+
19+
20+
class SearchResultResp(BaseModel):
21+
title: str
22+
# 标题
23+
link: str
24+
# 链接
25+
content: str
26+
# 内容
27+
icon: str
28+
# 图标
29+
media: str
30+
# 来源媒体
31+
refer: str
32+
# 角标序号 [ref_1]
33+
34+
class WebSearchResp(BaseModel):
35+
created: Optional[int] = None
36+
request_id: Optional[str] = None
37+
id: Optional[str] = None
38+
search_intent: Optional[SearchIntentResp]
39+
search_result: Optional[SearchResultResp]
40+

0 commit comments

Comments
 (0)