agentrun-inner-test 0.0.46__py3-none-any.whl → 0.0.64__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- agentrun/__init__.py +34 -1
- agentrun/agent_runtime/__endpoint_async_template.py +40 -0
- agentrun/agent_runtime/api/control.py +1 -1
- agentrun/agent_runtime/endpoint.py +79 -0
- agentrun/credential/api/control.py +1 -1
- agentrun/integration/agentscope/__init__.py +2 -1
- agentrun/integration/agentscope/builtin.py +23 -0
- agentrun/integration/builtin/__init__.py +2 -0
- agentrun/integration/builtin/knowledgebase.py +137 -0
- agentrun/integration/crewai/__init__.py +2 -1
- agentrun/integration/crewai/builtin.py +23 -0
- agentrun/integration/google_adk/__init__.py +2 -1
- agentrun/integration/google_adk/builtin.py +23 -0
- agentrun/integration/langchain/__init__.py +2 -1
- agentrun/integration/langchain/builtin.py +23 -0
- agentrun/integration/langgraph/__init__.py +2 -1
- agentrun/integration/langgraph/builtin.py +23 -0
- agentrun/integration/pydantic_ai/__init__.py +2 -1
- agentrun/integration/pydantic_ai/builtin.py +23 -0
- agentrun/knowledgebase/__client_async_template.py +173 -0
- agentrun/knowledgebase/__init__.py +53 -0
- agentrun/knowledgebase/__knowledgebase_async_template.py +438 -0
- agentrun/knowledgebase/api/__data_async_template.py +414 -0
- agentrun/knowledgebase/api/__init__.py +19 -0
- agentrun/knowledgebase/api/control.py +606 -0
- agentrun/knowledgebase/api/data.py +624 -0
- agentrun/knowledgebase/client.py +311 -0
- agentrun/knowledgebase/knowledgebase.py +748 -0
- agentrun/knowledgebase/model.py +270 -0
- agentrun/memory_collection/__client_async_template.py +178 -0
- agentrun/memory_collection/__init__.py +37 -0
- agentrun/memory_collection/__memory_collection_async_template.py +457 -0
- agentrun/memory_collection/api/__init__.py +5 -0
- agentrun/memory_collection/api/control.py +610 -0
- agentrun/memory_collection/client.py +323 -0
- agentrun/memory_collection/memory_collection.py +844 -0
- agentrun/memory_collection/model.py +162 -0
- agentrun/model/api/control.py +1 -1
- agentrun/sandbox/aio_sandbox.py +11 -4
- agentrun/sandbox/api/control.py +1 -1
- agentrun/sandbox/browser_sandbox.py +2 -2
- agentrun/sandbox/model.py +0 -13
- agentrun/toolset/api/control.py +1 -1
- agentrun/toolset/toolset.py +1 -0
- agentrun/utils/__data_api_async_template.py +1 -0
- agentrun/utils/config.py +12 -0
- agentrun/utils/control_api.py +27 -0
- agentrun/utils/data_api.py +1 -0
- {agentrun_inner_test-0.0.46.dist-info → agentrun_inner_test-0.0.64.dist-info}/METADATA +4 -2
- {agentrun_inner_test-0.0.46.dist-info → agentrun_inner_test-0.0.64.dist-info}/RECORD +53 -34
- {agentrun_inner_test-0.0.46.dist-info → agentrun_inner_test-0.0.64.dist-info}/WHEEL +0 -0
- {agentrun_inner_test-0.0.46.dist-info → agentrun_inner_test-0.0.64.dist-info}/licenses/LICENSE +0 -0
- {agentrun_inner_test-0.0.46.dist-info → agentrun_inner_test-0.0.64.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"""KnowledgeBase 客户端 / KnowledgeBase Client
|
|
2
|
+
|
|
3
|
+
此模块提供知识库管理的客户端API。
|
|
4
|
+
This module provides the client API for knowledge base management.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Optional
|
|
8
|
+
|
|
9
|
+
from alibabacloud_agentrun20250910.models import (
|
|
10
|
+
CreateKnowledgeBaseInput,
|
|
11
|
+
ListKnowledgeBasesRequest,
|
|
12
|
+
UpdateKnowledgeBaseInput,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
from agentrun.utils.config import Config
|
|
16
|
+
from agentrun.utils.exception import HTTPError
|
|
17
|
+
|
|
18
|
+
from .api.control import KnowledgeBaseControlAPI
|
|
19
|
+
from .knowledgebase import KnowledgeBase
|
|
20
|
+
from .model import (
|
|
21
|
+
KnowledgeBaseCreateInput,
|
|
22
|
+
KnowledgeBaseListInput,
|
|
23
|
+
KnowledgeBaseListOutput,
|
|
24
|
+
KnowledgeBaseUpdateInput,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class KnowledgeBaseClient:
|
|
29
|
+
"""KnowledgeBase 客户端 / KnowledgeBase Client
|
|
30
|
+
|
|
31
|
+
提供知识库的创建、删除、更新和查询功能。
|
|
32
|
+
Provides create, delete, update and query functions for knowledge bases.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
def __init__(self, config: Optional[Config] = None):
|
|
36
|
+
"""初始化客户端 / Initialize client
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
config: 配置对象,可选 / Configuration object, optional
|
|
40
|
+
"""
|
|
41
|
+
self.__control_api = KnowledgeBaseControlAPI(config)
|
|
42
|
+
|
|
43
|
+
async def create_async(
|
|
44
|
+
self, input: KnowledgeBaseCreateInput, config: Optional[Config] = None
|
|
45
|
+
):
|
|
46
|
+
"""创建知识库(异步) / Create knowledge base asynchronously
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
input: 知识库输入参数 / KnowledgeBase input parameters
|
|
50
|
+
config: 配置对象,可选 / Configuration object, optional
|
|
51
|
+
|
|
52
|
+
Returns:
|
|
53
|
+
KnowledgeBase: 创建的知识库对象 / Created knowledge base object
|
|
54
|
+
|
|
55
|
+
Raises:
|
|
56
|
+
ResourceAlreadyExistError: 资源已存在 / Resource already exists
|
|
57
|
+
HTTPError: HTTP 请求错误 / HTTP request error
|
|
58
|
+
"""
|
|
59
|
+
try:
|
|
60
|
+
result = await self.__control_api.create_knowledge_base_async(
|
|
61
|
+
CreateKnowledgeBaseInput().from_map(input.model_dump()),
|
|
62
|
+
config=config,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
return KnowledgeBase.from_inner_object(result)
|
|
66
|
+
except HTTPError as e:
|
|
67
|
+
raise e.to_resource_error(
|
|
68
|
+
"KnowledgeBase", input.knowledge_base_name
|
|
69
|
+
) from e
|
|
70
|
+
|
|
71
|
+
async def delete_async(
|
|
72
|
+
self, knowledge_base_name: str, config: Optional[Config] = None
|
|
73
|
+
):
|
|
74
|
+
"""删除知识库(异步)/ Delete knowledge base asynchronously
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
knowledge_base_name: 知识库名称 / KnowledgeBase name
|
|
78
|
+
config: 配置 / Configuration
|
|
79
|
+
|
|
80
|
+
Raises:
|
|
81
|
+
ResourceNotExistError: 知识库不存在 / KnowledgeBase not found
|
|
82
|
+
"""
|
|
83
|
+
try:
|
|
84
|
+
result = await self.__control_api.delete_knowledge_base_async(
|
|
85
|
+
knowledge_base_name, config=config
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
return KnowledgeBase.from_inner_object(result)
|
|
89
|
+
|
|
90
|
+
except HTTPError as e:
|
|
91
|
+
raise e.to_resource_error(
|
|
92
|
+
"KnowledgeBase", knowledge_base_name
|
|
93
|
+
) from e
|
|
94
|
+
|
|
95
|
+
async def update_async(
|
|
96
|
+
self,
|
|
97
|
+
knowledge_base_name: str,
|
|
98
|
+
input: KnowledgeBaseUpdateInput,
|
|
99
|
+
config: Optional[Config] = None,
|
|
100
|
+
):
|
|
101
|
+
"""更新知识库(异步)/ Update knowledge base asynchronously
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
knowledge_base_name: 知识库名称 / KnowledgeBase name
|
|
105
|
+
input: 知识库更新输入参数 / KnowledgeBase update input parameters
|
|
106
|
+
config: 配置 / Configuration
|
|
107
|
+
|
|
108
|
+
Returns:
|
|
109
|
+
KnowledgeBase: 更新后的知识库对象 / Updated knowledge base object
|
|
110
|
+
|
|
111
|
+
Raises:
|
|
112
|
+
ResourceNotExistError: 知识库不存在 / KnowledgeBase not found
|
|
113
|
+
"""
|
|
114
|
+
try:
|
|
115
|
+
result = await self.__control_api.update_knowledge_base_async(
|
|
116
|
+
knowledge_base_name,
|
|
117
|
+
UpdateKnowledgeBaseInput().from_map(input.model_dump()),
|
|
118
|
+
config=config,
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
return KnowledgeBase.from_inner_object(result)
|
|
122
|
+
except HTTPError as e:
|
|
123
|
+
raise e.to_resource_error(
|
|
124
|
+
"KnowledgeBase", knowledge_base_name
|
|
125
|
+
) from e
|
|
126
|
+
|
|
127
|
+
async def get_async(
|
|
128
|
+
self, knowledge_base_name: str, config: Optional[Config] = None
|
|
129
|
+
):
|
|
130
|
+
"""获取知识库(异步)/ Get knowledge base asynchronously
|
|
131
|
+
|
|
132
|
+
Args:
|
|
133
|
+
knowledge_base_name: 知识库名称 / KnowledgeBase name
|
|
134
|
+
config: 配置 / Configuration
|
|
135
|
+
|
|
136
|
+
Returns:
|
|
137
|
+
KnowledgeBase: 知识库对象 / KnowledgeBase object
|
|
138
|
+
|
|
139
|
+
Raises:
|
|
140
|
+
ResourceNotExistError: 知识库不存在 / KnowledgeBase not found
|
|
141
|
+
"""
|
|
142
|
+
try:
|
|
143
|
+
result = await self.__control_api.get_knowledge_base_async(
|
|
144
|
+
knowledge_base_name, config=config
|
|
145
|
+
)
|
|
146
|
+
return KnowledgeBase.from_inner_object(result)
|
|
147
|
+
except HTTPError as e:
|
|
148
|
+
raise e.to_resource_error(
|
|
149
|
+
"KnowledgeBase", knowledge_base_name
|
|
150
|
+
) from e
|
|
151
|
+
|
|
152
|
+
async def list_async(
|
|
153
|
+
self,
|
|
154
|
+
input: Optional[KnowledgeBaseListInput] = None,
|
|
155
|
+
config: Optional[Config] = None,
|
|
156
|
+
):
|
|
157
|
+
"""列出知识库(异步)/ List knowledge bases asynchronously
|
|
158
|
+
|
|
159
|
+
Args:
|
|
160
|
+
input: 分页查询参数 / Pagination query parameters
|
|
161
|
+
config: 配置 / Configuration
|
|
162
|
+
|
|
163
|
+
Returns:
|
|
164
|
+
List[KnowledgeBaseListOutput]: 知识库列表 / KnowledgeBase list
|
|
165
|
+
"""
|
|
166
|
+
if input is None:
|
|
167
|
+
input = KnowledgeBaseListInput()
|
|
168
|
+
|
|
169
|
+
results = await self.__control_api.list_knowledge_bases_async(
|
|
170
|
+
ListKnowledgeBasesRequest().from_map(input.model_dump()),
|
|
171
|
+
config=config,
|
|
172
|
+
)
|
|
173
|
+
return [KnowledgeBaseListOutput.from_inner_object(item) for item in results.items] # type: ignore
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""KnowledgeBase 模块 / KnowledgeBase Module"""
|
|
2
|
+
|
|
3
|
+
from .api import (
|
|
4
|
+
BailianDataAPI,
|
|
5
|
+
get_data_api,
|
|
6
|
+
KnowledgeBaseControlAPI,
|
|
7
|
+
KnowledgeBaseDataAPI,
|
|
8
|
+
RagFlowDataAPI,
|
|
9
|
+
)
|
|
10
|
+
from .client import KnowledgeBaseClient
|
|
11
|
+
from .knowledgebase import KnowledgeBase
|
|
12
|
+
from .model import (
|
|
13
|
+
BailianProviderSettings,
|
|
14
|
+
BailianRetrieveSettings,
|
|
15
|
+
KnowledgeBaseCreateInput,
|
|
16
|
+
KnowledgeBaseListInput,
|
|
17
|
+
KnowledgeBaseListOutput,
|
|
18
|
+
KnowledgeBaseProvider,
|
|
19
|
+
KnowledgeBaseUpdateInput,
|
|
20
|
+
ProviderSettings,
|
|
21
|
+
RagFlowProviderSettings,
|
|
22
|
+
RagFlowRetrieveSettings,
|
|
23
|
+
RetrieveInput,
|
|
24
|
+
RetrieveSettings,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
__all__ = [
|
|
28
|
+
# base
|
|
29
|
+
"KnowledgeBase",
|
|
30
|
+
"KnowledgeBaseClient",
|
|
31
|
+
"KnowledgeBaseControlAPI",
|
|
32
|
+
# data api
|
|
33
|
+
"KnowledgeBaseDataAPI",
|
|
34
|
+
"RagFlowDataAPI",
|
|
35
|
+
"BailianDataAPI",
|
|
36
|
+
"get_data_api",
|
|
37
|
+
# enums
|
|
38
|
+
"KnowledgeBaseProvider",
|
|
39
|
+
# provider settings
|
|
40
|
+
"ProviderSettings",
|
|
41
|
+
"RagFlowProviderSettings",
|
|
42
|
+
"BailianProviderSettings",
|
|
43
|
+
# retrieve settings
|
|
44
|
+
"RetrieveSettings",
|
|
45
|
+
"RagFlowRetrieveSettings",
|
|
46
|
+
"BailianRetrieveSettings",
|
|
47
|
+
# api model
|
|
48
|
+
"KnowledgeBaseCreateInput",
|
|
49
|
+
"KnowledgeBaseUpdateInput",
|
|
50
|
+
"KnowledgeBaseListInput",
|
|
51
|
+
"KnowledgeBaseListOutput",
|
|
52
|
+
"RetrieveInput",
|
|
53
|
+
]
|
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
"""KnowledgeBase 高层 API / KnowledgeBase High-Level API
|
|
2
|
+
|
|
3
|
+
此模块定义知识库资源的高级API。
|
|
4
|
+
This module defines the high-level API for knowledge base resources.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import asyncio
|
|
8
|
+
from typing import Any, Dict, List, Optional
|
|
9
|
+
|
|
10
|
+
from agentrun.utils.config import Config
|
|
11
|
+
from agentrun.utils.log import logger
|
|
12
|
+
from agentrun.utils.model import PageableInput
|
|
13
|
+
from agentrun.utils.resource import ResourceBase
|
|
14
|
+
|
|
15
|
+
from .api.data import get_data_api
|
|
16
|
+
from .model import (
|
|
17
|
+
BailianProviderSettings,
|
|
18
|
+
BailianRetrieveSettings,
|
|
19
|
+
KnowledgeBaseCreateInput,
|
|
20
|
+
KnowledgeBaseImmutableProps,
|
|
21
|
+
KnowledgeBaseListInput,
|
|
22
|
+
KnowledgeBaseListOutput,
|
|
23
|
+
KnowledgeBaseMutableProps,
|
|
24
|
+
KnowledgeBaseProvider,
|
|
25
|
+
KnowledgeBaseSystemProps,
|
|
26
|
+
KnowledgeBaseUpdateInput,
|
|
27
|
+
RagFlowProviderSettings,
|
|
28
|
+
RagFlowRetrieveSettings,
|
|
29
|
+
RetrieveInput,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class KnowledgeBase(
|
|
34
|
+
KnowledgeBaseMutableProps,
|
|
35
|
+
KnowledgeBaseImmutableProps,
|
|
36
|
+
KnowledgeBaseSystemProps,
|
|
37
|
+
ResourceBase,
|
|
38
|
+
):
|
|
39
|
+
"""知识库资源 / KnowledgeBase Resource
|
|
40
|
+
|
|
41
|
+
提供知识库的完整生命周期管理,包括创建、删除、更新、查询。
|
|
42
|
+
Provides complete lifecycle management for knowledge bases, including create, delete, update, and query.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
@classmethod
|
|
46
|
+
def __get_client(cls):
|
|
47
|
+
"""获取客户端实例 / Get client instance
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
KnowledgeBaseClient: 客户端实例 / Client instance
|
|
51
|
+
"""
|
|
52
|
+
from .client import KnowledgeBaseClient
|
|
53
|
+
|
|
54
|
+
return KnowledgeBaseClient()
|
|
55
|
+
|
|
56
|
+
@classmethod
|
|
57
|
+
async def create_async(
|
|
58
|
+
cls, input: KnowledgeBaseCreateInput, config: Optional[Config] = None
|
|
59
|
+
):
|
|
60
|
+
"""创建知识库(异步)/ Create knowledge base asynchronously
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
input: 知识库输入参数 / KnowledgeBase input parameters
|
|
64
|
+
config: 配置 / Configuration
|
|
65
|
+
|
|
66
|
+
Returns:
|
|
67
|
+
KnowledgeBase: 创建的知识库对象 / Created knowledge base object
|
|
68
|
+
"""
|
|
69
|
+
return await cls.__get_client().create_async(input, config=config)
|
|
70
|
+
|
|
71
|
+
@classmethod
|
|
72
|
+
async def delete_by_name_async(
|
|
73
|
+
cls, knowledge_base_name: str, config: Optional[Config] = None
|
|
74
|
+
):
|
|
75
|
+
"""根据名称删除知识库(异步)/ Delete knowledge base by name asynchronously
|
|
76
|
+
|
|
77
|
+
Args:
|
|
78
|
+
knowledge_base_name: 知识库名称 / KnowledgeBase name
|
|
79
|
+
config: 配置 / Configuration
|
|
80
|
+
"""
|
|
81
|
+
return await cls.__get_client().delete_async(
|
|
82
|
+
knowledge_base_name, config=config
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
@classmethod
|
|
86
|
+
async def update_by_name_async(
|
|
87
|
+
cls,
|
|
88
|
+
knowledge_base_name: str,
|
|
89
|
+
input: KnowledgeBaseUpdateInput,
|
|
90
|
+
config: Optional[Config] = None,
|
|
91
|
+
):
|
|
92
|
+
"""根据名称更新知识库(异步)/ Update knowledge base by name asynchronously
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
knowledge_base_name: 知识库名称 / KnowledgeBase name
|
|
96
|
+
input: 知识库更新输入参数 / KnowledgeBase update input parameters
|
|
97
|
+
config: 配置 / Configuration
|
|
98
|
+
|
|
99
|
+
Returns:
|
|
100
|
+
KnowledgeBase: 更新后的知识库对象 / Updated knowledge base object
|
|
101
|
+
"""
|
|
102
|
+
return await cls.__get_client().update_async(
|
|
103
|
+
knowledge_base_name, input, config=config
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
@classmethod
|
|
107
|
+
async def get_by_name_async(
|
|
108
|
+
cls, knowledge_base_name: str, config: Optional[Config] = None
|
|
109
|
+
):
|
|
110
|
+
"""根据名称获取知识库(异步)/ Get knowledge base by name asynchronously
|
|
111
|
+
|
|
112
|
+
Args:
|
|
113
|
+
knowledge_base_name: 知识库名称 / KnowledgeBase name
|
|
114
|
+
config: 配置 / Configuration
|
|
115
|
+
|
|
116
|
+
Returns:
|
|
117
|
+
KnowledgeBase: 知识库对象 / KnowledgeBase object
|
|
118
|
+
"""
|
|
119
|
+
return await cls.__get_client().get_async(
|
|
120
|
+
knowledge_base_name, config=config
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
@classmethod
|
|
124
|
+
async def _list_page_async(
|
|
125
|
+
cls, page_input: PageableInput, config: Config | None = None, **kwargs
|
|
126
|
+
):
|
|
127
|
+
return await cls.__get_client().list_async(
|
|
128
|
+
input=KnowledgeBaseListInput(
|
|
129
|
+
**kwargs,
|
|
130
|
+
**page_input.model_dump(),
|
|
131
|
+
),
|
|
132
|
+
config=config,
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
@classmethod
|
|
136
|
+
async def list_all_async(
|
|
137
|
+
cls,
|
|
138
|
+
*,
|
|
139
|
+
provider: Optional[str] = None,
|
|
140
|
+
config: Optional[Config] = None,
|
|
141
|
+
) -> List[KnowledgeBaseListOutput]:
|
|
142
|
+
"""列出所有知识库(异步)/ List all knowledge bases asynchronously
|
|
143
|
+
|
|
144
|
+
Args:
|
|
145
|
+
provider: 提供商 / Provider
|
|
146
|
+
config: 配置 / Configuration
|
|
147
|
+
|
|
148
|
+
Returns:
|
|
149
|
+
List[KnowledgeBaseListOutput]: 知识库列表 / KnowledgeBase list
|
|
150
|
+
"""
|
|
151
|
+
return await cls._list_all_async(
|
|
152
|
+
lambda kb: kb.knowledge_base_id or "",
|
|
153
|
+
config=config,
|
|
154
|
+
provider=provider,
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
async def update_async(
|
|
158
|
+
self, input: KnowledgeBaseUpdateInput, config: Optional[Config] = None
|
|
159
|
+
):
|
|
160
|
+
"""更新知识库(异步)/ Update knowledge base asynchronously
|
|
161
|
+
|
|
162
|
+
Args:
|
|
163
|
+
input: 知识库更新输入参数 / KnowledgeBase update input parameters
|
|
164
|
+
config: 配置 / Configuration
|
|
165
|
+
|
|
166
|
+
Returns:
|
|
167
|
+
KnowledgeBase: 更新后的知识库对象 / Updated knowledge base object
|
|
168
|
+
"""
|
|
169
|
+
if self.knowledge_base_name is None:
|
|
170
|
+
raise ValueError(
|
|
171
|
+
"knowledge_base_name is required to update a KnowledgeBase"
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
result = await self.update_by_name_async(
|
|
175
|
+
self.knowledge_base_name, input, config=config
|
|
176
|
+
)
|
|
177
|
+
self.update_self(result)
|
|
178
|
+
|
|
179
|
+
return self
|
|
180
|
+
|
|
181
|
+
async def delete_async(self, config: Optional[Config] = None):
|
|
182
|
+
"""删除知识库(异步)/ Delete knowledge base asynchronously
|
|
183
|
+
|
|
184
|
+
Args:
|
|
185
|
+
config: 配置 / Configuration
|
|
186
|
+
"""
|
|
187
|
+
if self.knowledge_base_name is None:
|
|
188
|
+
raise ValueError(
|
|
189
|
+
"knowledge_base_name is required to delete a KnowledgeBase"
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
return await self.delete_by_name_async(
|
|
193
|
+
self.knowledge_base_name, config=config
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
async def get_async(self, config: Optional[Config] = None):
|
|
197
|
+
"""刷新知识库信息(异步)/ Refresh knowledge base info asynchronously
|
|
198
|
+
|
|
199
|
+
Args:
|
|
200
|
+
config: 配置 / Configuration
|
|
201
|
+
|
|
202
|
+
Returns:
|
|
203
|
+
KnowledgeBase: 刷新后的知识库对象 / Refreshed knowledge base object
|
|
204
|
+
"""
|
|
205
|
+
if self.knowledge_base_name is None:
|
|
206
|
+
raise ValueError(
|
|
207
|
+
"knowledge_base_name is required to refresh a KnowledgeBase"
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
result = await self.get_by_name_async(
|
|
211
|
+
self.knowledge_base_name, config=config
|
|
212
|
+
)
|
|
213
|
+
self.update_self(result)
|
|
214
|
+
|
|
215
|
+
return self
|
|
216
|
+
|
|
217
|
+
async def refresh_async(self, config: Optional[Config] = None):
|
|
218
|
+
"""刷新知识库信息(异步)/ Refresh knowledge base info asynchronously
|
|
219
|
+
|
|
220
|
+
Args:
|
|
221
|
+
config: 配置 / Configuration
|
|
222
|
+
|
|
223
|
+
Returns:
|
|
224
|
+
KnowledgeBase: 刷新后的知识库对象 / Refreshed knowledge base object
|
|
225
|
+
"""
|
|
226
|
+
return await self.get_async(config=config)
|
|
227
|
+
|
|
228
|
+
# =========================================================================
|
|
229
|
+
# 数据链路方法 / Data API Methods
|
|
230
|
+
# =========================================================================
|
|
231
|
+
|
|
232
|
+
def _get_data_api(self, config: Optional[Config] = None):
|
|
233
|
+
"""获取数据链路 API 实例 / Get data API instance
|
|
234
|
+
|
|
235
|
+
根据当前知识库的 provider 类型返回对应的数据链路 API。
|
|
236
|
+
Returns the corresponding data API based on current knowledge base provider type.
|
|
237
|
+
|
|
238
|
+
Args:
|
|
239
|
+
config: 配置 / Configuration
|
|
240
|
+
|
|
241
|
+
Returns:
|
|
242
|
+
KnowledgeBaseDataAPI: 数据链路 API 实例 / Data API instance
|
|
243
|
+
|
|
244
|
+
Raises:
|
|
245
|
+
ValueError: 如果 provider 未设置 / If provider is not set
|
|
246
|
+
"""
|
|
247
|
+
if self.provider is None:
|
|
248
|
+
raise ValueError("provider is required to get data API")
|
|
249
|
+
|
|
250
|
+
provider = (
|
|
251
|
+
self.provider
|
|
252
|
+
if isinstance(self.provider, KnowledgeBaseProvider)
|
|
253
|
+
else KnowledgeBaseProvider(self.provider)
|
|
254
|
+
)
|
|
255
|
+
|
|
256
|
+
# 转换 provider_settings 和 retrieve_settings 为正确的类型
|
|
257
|
+
# Convert provider_settings and retrieve_settings to correct types
|
|
258
|
+
converted_provider_settings = None
|
|
259
|
+
converted_retrieve_settings = None
|
|
260
|
+
|
|
261
|
+
if provider == KnowledgeBaseProvider.BAILIAN:
|
|
262
|
+
# 百炼设置 / Bailian settings
|
|
263
|
+
if self.provider_settings:
|
|
264
|
+
if isinstance(self.provider_settings, BailianProviderSettings):
|
|
265
|
+
converted_provider_settings = self.provider_settings
|
|
266
|
+
elif isinstance(self.provider_settings, dict):
|
|
267
|
+
converted_provider_settings = BailianProviderSettings(
|
|
268
|
+
**self.provider_settings
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
if self.retrieve_settings:
|
|
272
|
+
if isinstance(self.retrieve_settings, BailianRetrieveSettings):
|
|
273
|
+
converted_retrieve_settings = self.retrieve_settings
|
|
274
|
+
elif isinstance(self.retrieve_settings, dict):
|
|
275
|
+
converted_retrieve_settings = BailianRetrieveSettings(
|
|
276
|
+
**self.retrieve_settings
|
|
277
|
+
)
|
|
278
|
+
|
|
279
|
+
elif provider == KnowledgeBaseProvider.RAGFLOW:
|
|
280
|
+
# RagFlow 设置 / RagFlow settings
|
|
281
|
+
if self.provider_settings:
|
|
282
|
+
if isinstance(self.provider_settings, RagFlowProviderSettings):
|
|
283
|
+
converted_provider_settings = self.provider_settings
|
|
284
|
+
elif isinstance(self.provider_settings, dict):
|
|
285
|
+
converted_provider_settings = RagFlowProviderSettings(
|
|
286
|
+
**self.provider_settings
|
|
287
|
+
)
|
|
288
|
+
|
|
289
|
+
if self.retrieve_settings:
|
|
290
|
+
if isinstance(self.retrieve_settings, RagFlowRetrieveSettings):
|
|
291
|
+
converted_retrieve_settings = self.retrieve_settings
|
|
292
|
+
elif isinstance(self.retrieve_settings, dict):
|
|
293
|
+
converted_retrieve_settings = RagFlowRetrieveSettings(
|
|
294
|
+
**self.retrieve_settings
|
|
295
|
+
)
|
|
296
|
+
|
|
297
|
+
return get_data_api(
|
|
298
|
+
provider=provider,
|
|
299
|
+
knowledge_base_name=self.knowledge_base_name or "",
|
|
300
|
+
config=config,
|
|
301
|
+
provider_settings=converted_provider_settings,
|
|
302
|
+
retrieve_settings=converted_retrieve_settings,
|
|
303
|
+
credential_name=self.credential_name,
|
|
304
|
+
)
|
|
305
|
+
|
|
306
|
+
async def retrieve_async(
|
|
307
|
+
self,
|
|
308
|
+
query: str,
|
|
309
|
+
config: Optional[Config] = None,
|
|
310
|
+
) -> Dict[str, Any]:
|
|
311
|
+
"""检索知识库(异步)/ Retrieve from knowledge base asynchronously
|
|
312
|
+
|
|
313
|
+
根据当前知识库的 provider 类型和配置执行检索。
|
|
314
|
+
Executes retrieval based on current knowledge base provider type and configuration.
|
|
315
|
+
|
|
316
|
+
Args:
|
|
317
|
+
query: 查询文本 / Query text
|
|
318
|
+
config: 配置 / Configuration
|
|
319
|
+
|
|
320
|
+
Returns:
|
|
321
|
+
Dict[str, Any]: 检索结果 / Retrieval results
|
|
322
|
+
"""
|
|
323
|
+
data_api = self._get_data_api(config)
|
|
324
|
+
return await data_api.retrieve_async(query, config=config)
|
|
325
|
+
|
|
326
|
+
@classmethod
|
|
327
|
+
async def _safe_get_kb_async(
|
|
328
|
+
cls,
|
|
329
|
+
kb_name: str,
|
|
330
|
+
config: Optional[Config] = None,
|
|
331
|
+
) -> Any:
|
|
332
|
+
"""安全获取知识库(异步)/ Safely get knowledge base asynchronously
|
|
333
|
+
|
|
334
|
+
Args:
|
|
335
|
+
kb_name: 知识库名称 / Knowledge base name
|
|
336
|
+
config: 配置 / Configuration
|
|
337
|
+
|
|
338
|
+
Returns:
|
|
339
|
+
Any: 知识库对象或异常 / Knowledge base object or exception
|
|
340
|
+
"""
|
|
341
|
+
try:
|
|
342
|
+
return await cls.get_by_name_async(kb_name, config=config)
|
|
343
|
+
except Exception as e:
|
|
344
|
+
return e
|
|
345
|
+
|
|
346
|
+
@classmethod
|
|
347
|
+
async def _safe_retrieve_kb_async(
|
|
348
|
+
cls,
|
|
349
|
+
kb_name: str,
|
|
350
|
+
kb_or_error: Any,
|
|
351
|
+
query: str,
|
|
352
|
+
config: Optional[Config] = None,
|
|
353
|
+
) -> Dict[str, Any]:
|
|
354
|
+
"""安全执行知识库检索(异步)/ Safely retrieve from knowledge base asynchronously
|
|
355
|
+
|
|
356
|
+
Args:
|
|
357
|
+
kb_name: 知识库名称 / Knowledge base name
|
|
358
|
+
kb_or_error: 知识库对象或异常 / Knowledge base object or exception
|
|
359
|
+
query: 查询文本 / Query text
|
|
360
|
+
config: 配置 / Configuration
|
|
361
|
+
|
|
362
|
+
Returns:
|
|
363
|
+
Dict[str, Any]: 检索结果 / Retrieval results
|
|
364
|
+
"""
|
|
365
|
+
if isinstance(kb_or_error, Exception):
|
|
366
|
+
logger.warning(
|
|
367
|
+
f"Failed to get knowledge base '{kb_name}': {kb_or_error}"
|
|
368
|
+
)
|
|
369
|
+
return {
|
|
370
|
+
"data": f"Failed to retrieve: {kb_or_error}",
|
|
371
|
+
"query": query,
|
|
372
|
+
"knowledge_base_name": kb_name,
|
|
373
|
+
"error": True,
|
|
374
|
+
}
|
|
375
|
+
try:
|
|
376
|
+
return await kb_or_error.retrieve_async(query, config=config)
|
|
377
|
+
except Exception as e:
|
|
378
|
+
logger.warning(
|
|
379
|
+
f"Failed to retrieve from knowledge base '{kb_name}': {e}"
|
|
380
|
+
)
|
|
381
|
+
return {
|
|
382
|
+
"data": f"Failed to retrieve: {e}",
|
|
383
|
+
"query": query,
|
|
384
|
+
"knowledge_base_name": kb_name,
|
|
385
|
+
"error": True,
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
@classmethod
|
|
389
|
+
async def multi_retrieve_async(
|
|
390
|
+
cls,
|
|
391
|
+
query: str,
|
|
392
|
+
knowledge_base_names: List[str],
|
|
393
|
+
config: Optional[Config] = None,
|
|
394
|
+
) -> Dict[str, Any]:
|
|
395
|
+
"""多知识库检索(异步)/ Multi knowledge base retrieval asynchronously
|
|
396
|
+
|
|
397
|
+
根据知识库名称列表进行检索,自动获取各知识库的配置并执行检索。
|
|
398
|
+
如果某个知识库查询失败,不影响其他知识库的查询。
|
|
399
|
+
Retrieves from multiple knowledge bases by name list, automatically fetching
|
|
400
|
+
configuration for each knowledge base and executing retrieval.
|
|
401
|
+
If one knowledge base fails, it won't affect other knowledge bases.
|
|
402
|
+
|
|
403
|
+
Args:
|
|
404
|
+
query: 查询文本 / Query text
|
|
405
|
+
knowledge_base_names: 知识库名称列表 / List of knowledge base names
|
|
406
|
+
config: 配置 / Configuration
|
|
407
|
+
|
|
408
|
+
Returns:
|
|
409
|
+
Dict[str, Any]: 检索结果,按知识库名称分组 / Retrieval results grouped by knowledge base name
|
|
410
|
+
"""
|
|
411
|
+
# 1. 根据 knowledge_base_names 并发获取各知识库配置(安全方式)
|
|
412
|
+
# Fetch all knowledge bases concurrently by name (safely)
|
|
413
|
+
knowledge_base_results = await asyncio.gather(*[
|
|
414
|
+
cls._safe_get_kb_async(name, config=config)
|
|
415
|
+
for name in knowledge_base_names
|
|
416
|
+
])
|
|
417
|
+
|
|
418
|
+
# 2. 并发执行各知识库的检索(安全方式)
|
|
419
|
+
# Execute retrieval for each knowledge base concurrently (safely)
|
|
420
|
+
retrieve_results = await asyncio.gather(*[
|
|
421
|
+
cls._safe_retrieve_kb_async(
|
|
422
|
+
kb_name, kb_or_error, query, config=config
|
|
423
|
+
)
|
|
424
|
+
for kb_name, kb_or_error in zip(
|
|
425
|
+
knowledge_base_names, knowledge_base_results
|
|
426
|
+
)
|
|
427
|
+
])
|
|
428
|
+
|
|
429
|
+
# 3. 合并返回结果,按知识库名称分组
|
|
430
|
+
# Merge results, grouped by knowledge base name
|
|
431
|
+
results: Dict[str, Any] = {}
|
|
432
|
+
for kb_name, result in zip(knowledge_base_names, retrieve_results):
|
|
433
|
+
results[kb_name] = result
|
|
434
|
+
|
|
435
|
+
return {
|
|
436
|
+
"results": results,
|
|
437
|
+
"query": query,
|
|
438
|
+
}
|