Skip to content

Commit f6303af

Browse files
authored
feat: replace search_knowledge API with Volcengine Viking SDK (#354)
* feat: replace search_knowledge API with Volcengine Viking SDK * fix: add sts token in viking knowledge sdk client
1 parent 7ba804f commit f6303af

File tree

1 file changed

+44
-42
lines changed

1 file changed

+44
-42
lines changed

veadk/knowledgebase/backends/vikingdb_knowledge_backend.py

Lines changed: 44 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
from veadk.knowledgebase.entry import KnowledgebaseEntry
3232
from veadk.utils.logger import get_logger
3333
from veadk.utils.misc import formatted_timestamp
34+
from volcengine.viking_knowledgebase import VikingKnowledgeBaseService
3435

3536
try:
3637
from veadk.integrations.ve_tos.ve_tos import VeTOS
@@ -113,10 +114,25 @@ class VikingDBKnowledgeBackend(BaseKnowledgebaseBackend):
113114
volcengine_project: str = "default"
114115

115116
region: str = "cn-beijing"
117+
base_url: str = "https://api-knowledgebase.mlp.cn-beijing.volces.com"
118+
host: str = "api-knowledgebase.mlp.cn-beijing.volces.com"
119+
schema: str = "https"
116120

117121
tos_config: TOSConfig | NormalTOSConfig = Field(default_factory=TOSConfig)
118122

123+
_viking_sdk_client = None
124+
119125
def model_post_init(self, __context: Any) -> None:
126+
self._set_service_info()
127+
128+
self._viking_sdk_client = VikingKnowledgeBaseService(
129+
host=self.host,
130+
ak=self.volcengine_access_key,
131+
sk=self.volcengine_secret_key,
132+
sts_token=self.session_token,
133+
scheme=self.schema,
134+
)
135+
120136
self.precheck_index_naming()
121137

122138
# check whether collection exist, if not, create it
@@ -502,8 +518,6 @@ def _search_knowledge(
502518
rerank: bool = True,
503519
chunk_diffusion_count: int | None = 0,
504520
) -> list[KnowledgebaseEntry]:
505-
SEARCH_KNOWLEDGE_PATH = "/api/knowledge/collection/search_knowledge"
506-
507521
query_param = (
508522
{
509523
"doc_filter": {
@@ -523,26 +537,17 @@ def _search_knowledge(
523537
"chunk_diffusion_count": chunk_diffusion_count,
524538
}
525539

526-
response = self._do_request(
527-
body={
528-
"name": self.index,
529-
"project": self.volcengine_project,
530-
"query": query,
531-
"limit": top_k,
532-
"query_param": query_param,
533-
"post_processing": post_precessing,
534-
},
535-
path=SEARCH_KNOWLEDGE_PATH,
536-
method="POST",
540+
response = self._viking_sdk_client.search_knowledge(
541+
collection_name=self.index,
542+
project=self.volcengine_project,
543+
query=query,
544+
limit=top_k,
545+
query_param=query_param,
546+
post_processing=post_precessing,
537547
)
538548

539-
if response.get("code") != 0:
540-
raise ValueError(
541-
f"Error during knowledge search: {response.get('code')}, message: {response.get('message')}"
542-
)
543-
544549
entries = []
545-
for result in response.get("data", {}).get("result_list", []):
550+
for result in response.get("result_list", []):
546551
doc_meta_raw_str = result.get("doc_info", {}).get("doc_meta")
547552
doc_meta_list = json.loads(doc_meta_raw_str) if doc_meta_raw_str else []
548553
metadata = {}
@@ -555,43 +560,40 @@ def _search_knowledge(
555560

556561
return entries
557562

558-
def _do_request(
559-
self,
560-
body: dict,
561-
path: str,
562-
method: Literal["GET", "POST", "PUT", "DELETE"] = "POST",
563-
) -> dict:
564-
VIKINGDB_KNOWLEDGEBASE_BASE_URL = (
565-
"https://api-knowledgebase.mlp.cn-beijing.volces.com"
566-
)
567-
full_path = f"{VIKINGDB_KNOWLEDGEBASE_BASE_URL}{path}"
568-
563+
def _set_service_info(self):
569564
env_host = getenv(
570565
"DATABASE_VIKING_BASE_URL", default_value=None, allow_false_values=True
571566
)
572567
if env_host:
573568
if env_host.startswith("http://") or env_host.startswith("https://"):
574-
full_path = f"{env_host}{path}"
569+
self.base_url = env_host
570+
split_url = env_host.split("://")
571+
self.host = split_url[-1]
572+
self.schema = split_url[0]
575573
else:
576574
raise ValueError(
577575
"DATABASE_VIKING_BASE_URL must start with http:// or https://"
578576
)
579577

580-
volcengine_access_key = self.volcengine_access_key
581-
volcengine_secret_key = self.volcengine_secret_key
582-
session_token = self.session_token
583-
584-
if not (volcengine_access_key and volcengine_secret_key):
578+
if not (self.volcengine_access_key and self.volcengine_secret_key):
585579
cred = get_credential_from_vefaas_iam()
586-
volcengine_access_key = cred.access_key_id
587-
volcengine_secret_key = cred.secret_access_key
588-
session_token = cred.session_token
580+
self.volcengine_access_key = cred.access_key_id
581+
self.volcengine_secret_key = cred.secret_access_key
582+
self.session_token = cred.session_token
583+
584+
def _do_request(
585+
self,
586+
body: dict,
587+
path: str,
588+
method: Literal["GET", "POST", "PUT", "DELETE"] = "POST",
589+
) -> dict:
590+
full_path = f"{self.base_url}{path}"
589591

590592
request = build_vikingdb_knowledgebase_request(
591593
path=path,
592-
volcengine_access_key=volcengine_access_key,
593-
volcengine_secret_key=volcengine_secret_key,
594-
session_token=session_token,
594+
volcengine_access_key=self.volcengine_access_key,
595+
volcengine_secret_key=self.volcengine_secret_key,
596+
session_token=self.session_token,
595597
method=method,
596598
data=body,
597599
)

0 commit comments

Comments
 (0)