Skip to content

Commit f2068d4

Browse files
committed
feat(knowledgebase): add ots query
添加OTSDataAPI及相关模型配置类,扩展知识库功能支持表格存储数据源。更新依赖版本并完善相关模板文件。 Co-developed-by: Aone Copilot <noreply@alibaba-inc.com> Signed-off-by: Sodawyx <sodawyx@126.com>
1 parent da15fa7 commit f2068d4

File tree

9 files changed

+1199
-14
lines changed

9 files changed

+1199
-14
lines changed

agentrun/knowledgebase/__init__.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
get_data_api,
77
KnowledgeBaseControlAPI,
88
KnowledgeBaseDataAPI,
9+
OTSDataAPI,
910
RagFlowDataAPI,
1011
)
1112
from .client import KnowledgeBaseClient
@@ -20,6 +21,16 @@
2021
KnowledgeBaseListOutput,
2122
KnowledgeBaseProvider,
2223
KnowledgeBaseUpdateInput,
24+
OTSDenseVectorSearchConfig,
25+
OTSEmbeddingConfiguration,
26+
OTSFullTextSearchConfig,
27+
OTSMetadataField,
28+
OTSModelConfig,
29+
OTSProviderSettings,
30+
OTSRerankingConfig,
31+
OTSRetrieveSettings,
32+
OTSRRFConfig,
33+
OTSWeightConfig,
2334
ProviderSettings,
2435
RagFlowProviderSettings,
2536
RagFlowRetrieveSettings,
@@ -37,6 +48,7 @@
3748
"RagFlowDataAPI",
3849
"BailianDataAPI",
3950
"ADBDataAPI",
51+
"OTSDataAPI",
4052
"get_data_api",
4153
# enums
4254
"KnowledgeBaseProvider",
@@ -45,11 +57,21 @@
4557
"RagFlowProviderSettings",
4658
"BailianProviderSettings",
4759
"ADBProviderSettings",
60+
"OTSProviderSettings",
61+
"OTSMetadataField",
62+
"OTSEmbeddingConfiguration",
4863
# retrieve settings
4964
"RetrieveSettings",
5065
"RagFlowRetrieveSettings",
5166
"BailianRetrieveSettings",
5267
"ADBRetrieveSettings",
68+
"OTSRetrieveSettings",
69+
"OTSDenseVectorSearchConfig",
70+
"OTSFullTextSearchConfig",
71+
"OTSRerankingConfig",
72+
"OTSRRFConfig",
73+
"OTSWeightConfig",
74+
"OTSModelConfig",
5375
# api model
5476
"KnowledgeBaseCreateInput",
5577
"KnowledgeBaseUpdateInput",

agentrun/knowledgebase/__knowledgebase_async_template.py

Lines changed: 119 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,16 @@
2626
KnowledgeBaseProvider,
2727
KnowledgeBaseSystemProps,
2828
KnowledgeBaseUpdateInput,
29+
OTSDenseVectorSearchConfig,
30+
OTSEmbeddingConfiguration,
31+
OTSFullTextSearchConfig,
32+
OTSMetadataField,
33+
OTSModelConfig,
34+
OTSProviderSettings,
35+
OTSRerankingConfig,
36+
OTSRetrieveSettings,
37+
OTSRRFConfig,
38+
OTSWeightConfig,
2939
RagFlowProviderSettings,
3040
RagFlowRetrieveSettings,
3141
RetrieveInput,
@@ -302,8 +312,6 @@ def _get_data_api(self, config: Optional[Config] = None):
302312
if isinstance(self.provider_settings, ADBProviderSettings):
303313
converted_provider_settings = self.provider_settings
304314
elif isinstance(self.provider_settings, dict):
305-
# ADB provider_settings 使用 PascalCase 键名,需要转换为 snake_case
306-
# ADB provider_settings uses PascalCase keys, need to convert to snake_case
307315
converted_provider_settings = ADBProviderSettings(
308316
db_instance_id=self.provider_settings.get(
309317
"DBInstanceId", ""
@@ -323,8 +331,6 @@ def _get_data_api(self, config: Optional[Config] = None):
323331
if isinstance(self.retrieve_settings, ADBRetrieveSettings):
324332
converted_retrieve_settings = self.retrieve_settings
325333
elif isinstance(self.retrieve_settings, dict):
326-
# ADB retrieve_settings 使用 PascalCase 键名,需要转换为 snake_case
327-
# ADB retrieve_settings uses PascalCase keys, need to convert to snake_case
328334
converted_retrieve_settings = ADBRetrieveSettings(
329335
top_k=self.retrieve_settings.get("TopK"),
330336
use_full_text_retrieval=self.retrieve_settings.get(
@@ -344,6 +350,115 @@ def _get_data_api(self, config: Optional[Config] = None):
344350
),
345351
)
346352

353+
elif provider == KnowledgeBaseProvider.OTS:
354+
# OTS 设置 / OTS settings (camelCase → snake_case)
355+
if self.provider_settings:
356+
if isinstance(self.provider_settings, OTSProviderSettings):
357+
converted_provider_settings = self.provider_settings
358+
elif isinstance(self.provider_settings, dict):
359+
ps = self.provider_settings
360+
361+
metadata = None
362+
raw_metadata = ps.get("metadata")
363+
if raw_metadata and isinstance(raw_metadata, list):
364+
metadata = [
365+
OTSMetadataField(
366+
name=m.get("name", ""),
367+
type=m.get("type", ""),
368+
)
369+
for m in raw_metadata
370+
]
371+
372+
embedding_config = None
373+
raw_ec = ps.get("embeddingConfiguration")
374+
if raw_ec and isinstance(raw_ec, dict):
375+
embedding_config = OTSEmbeddingConfiguration(
376+
provider=raw_ec.get("provider", ""),
377+
model=raw_ec.get("model", ""),
378+
dimension=raw_ec.get("dimension", 0),
379+
url=raw_ec.get("url"),
380+
api_key=raw_ec.get("apiKey"),
381+
)
382+
383+
converted_provider_settings = OTSProviderSettings(
384+
ots_instance_name=ps.get("otsInstanceName", ""),
385+
tags=ps.get("tags"),
386+
metadata=metadata,
387+
embedding_configuration=embedding_config,
388+
)
389+
390+
if self.retrieve_settings:
391+
if isinstance(self.retrieve_settings, OTSRetrieveSettings):
392+
converted_retrieve_settings = self.retrieve_settings
393+
elif isinstance(self.retrieve_settings, dict):
394+
rs = self.retrieve_settings
395+
396+
dvsc = None
397+
raw_dvsc = rs.get("denseVectorSearchConfiguration")
398+
if raw_dvsc and isinstance(raw_dvsc, dict):
399+
dvsc = OTSDenseVectorSearchConfig(
400+
number_of_results=raw_dvsc.get("numberOfResults"),
401+
)
402+
403+
ftsc = None
404+
raw_ftsc = rs.get("fullTextSearchConfiguration")
405+
if raw_ftsc and isinstance(raw_ftsc, dict):
406+
ftsc = OTSFullTextSearchConfig(
407+
number_of_results=raw_ftsc.get("numberOfResults"),
408+
)
409+
410+
reranking = None
411+
raw_rr = rs.get("rerankingConfiguration")
412+
if raw_rr and isinstance(raw_rr, dict):
413+
rrf_config = None
414+
raw_rrf = raw_rr.get("rrfConfiguration")
415+
if raw_rrf and isinstance(raw_rrf, dict):
416+
rrf_config = OTSRRFConfig(
417+
dense_vector_search_weight=raw_rrf.get(
418+
"denseVectorSearchWeight"
419+
),
420+
full_text_search_weight=raw_rrf.get(
421+
"fullTextSearchWeight"
422+
),
423+
k=raw_rrf.get("k"),
424+
)
425+
426+
weight_config = None
427+
raw_wc = raw_rr.get("weightConfiguration")
428+
if raw_wc and isinstance(raw_wc, dict):
429+
weight_config = OTSWeightConfig(
430+
dense_vector_search_weight=raw_wc.get(
431+
"denseVectorSearchWeight"
432+
),
433+
full_text_search_weight=raw_wc.get(
434+
"fullTextSearchWeight"
435+
),
436+
)
437+
438+
model_config = None
439+
raw_mc = raw_rr.get("modelConfiguration")
440+
if raw_mc and isinstance(raw_mc, dict):
441+
model_config = OTSModelConfig(
442+
provider=raw_mc.get("provider"),
443+
model=raw_mc.get("model"),
444+
)
445+
446+
reranking = OTSRerankingConfig(
447+
type=raw_rr.get("type"),
448+
number_of_results=raw_rr.get("numberOfResults"),
449+
rrf_configuration=rrf_config,
450+
weight_configuration=weight_config,
451+
model_configuration=model_config,
452+
)
453+
454+
converted_retrieve_settings = OTSRetrieveSettings(
455+
search_type=rs.get("searchType"),
456+
dense_vector_search_configuration=dvsc,
457+
full_text_search_configuration=ftsc,
458+
reranking_configuration=reranking,
459+
filter=rs.get("filter"),
460+
)
461+
347462
return get_data_api(
348463
provider=provider,
349464
knowledge_base_name=self.knowledge_base_name or "",

0 commit comments

Comments
 (0)