123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- import boto3
- from configs import dify_config
- class ExternalDatasetTestService:
- # this service is only for internal testing
- @staticmethod
- def knowledge_retrieval(retrieval_setting: dict, query: str, knowledge_id: str):
- # get bedrock client
- client = boto3.client(
- "bedrock-agent-runtime",
- aws_secret_access_key=dify_config.AWS_SECRET_ACCESS_KEY,
- aws_access_key_id=dify_config.AWS_ACCESS_KEY_ID,
- # example: us-east-1
- region_name="us-east-1",
- )
- # fetch external knowledge retrieval
- response = client.retrieve(
- knowledgeBaseId=knowledge_id,
- retrievalConfiguration={
- "vectorSearchConfiguration": {
- "numberOfResults": retrieval_setting.get("top_k"),
- "overrideSearchType": "HYBRID",
- }
- },
- retrievalQuery={"text": query},
- )
- # parse response
- results = []
- if response.get("ResponseMetadata") and response.get("ResponseMetadata").get("HTTPStatusCode") == 200:
- if response.get("retrievalResults"):
- retrieval_results = response.get("retrievalResults")
- for retrieval_result in retrieval_results:
- # filter out results with score less than threshold
- if retrieval_result.get("score") < retrieval_setting.get("score_threshold", 0.0):
- continue
- result = {
- "metadata": retrieval_result.get("metadata"),
- "score": retrieval_result.get("score"),
- "title": retrieval_result.get("metadata").get("x-amz-bedrock-kb-source-uri"),
- "content": retrieval_result.get("content").get("text"),
- }
- results.append(result)
- return {"records": results}
|