Skip to content

Commit 3f47dc3

Browse files
fix: bedrock knowledge base null exception (#2165)
* fix: null exception * refactor: 使用 Dify 插件标准日志系统替换文件日志 - 移除文件写入方式 (/tmp/bedrock.log) - 使用 plugin_logger_handler 实现标准日志输出 - 日志现在输出到 plugin-daemon 容器,便于 Kubernetes 环境下的日志收集和监控 - 保持原有 log() 函数接口不变,确保代码兼容性 * Update extensions/aws_bedrock_knowledge_base/endpoints/aws_bedrock_knowledge_base.py Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> * fix: code review * fix: upgrade version 0.0.4 --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
1 parent 900bc0d commit 3f47dc3

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

extensions/aws_bedrock_knowledge_base/endpoints/aws_bedrock_knowledge_base.py

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,48 @@
44
from werkzeug.wrappers import Request, Response
55
from dify_plugin import Endpoint
66
from typing import Mapping
7+
import logging
8+
from dify_plugin.config.logger_format import plugin_logger_handler
9+
10+
logger = logging.getLogger(__name__)
11+
logger.setLevel(logging.INFO)
12+
logger.addHandler(plugin_logger_handler)
13+
14+
15+
def log(msg):
16+
logger.info(msg)
717

818

919
class Knowledgebaseretrieval(Endpoint):
1020
def _invoke(self, r: Request, values: Mapping, settings: Mapping) -> Response:
11-
body = r.get_json()
21+
log("Knowledge base retrieval invoked.22")
22+
23+
try:
24+
body = r.get_json()
25+
except Exception as e:
26+
log(f"Failed to parse JSON: {e}")
27+
return Response(
28+
response=json.dumps({"records": []}),
29+
status=200,
30+
content_type="application/json"
31+
)
32+
33+
log(f"Request: method={r.method}, url={r.url}, headers={dict(r.headers)}, data={body}")
1234

1335
retrieval_setting = body.get('retrieval_setting')
1436
query = body.get('query')
1537
knowledge_id = body.get('knowledge_id')
1638

39+
log(f"Received request - knowledge_id: {knowledge_id}, query: {query}, retrieval_setting: {retrieval_setting}")
40+
41+
if not knowledge_id:
42+
log("knowledge_id is empty, returning empty records")
43+
return Response(
44+
response=json.dumps({"records": []}),
45+
status=200,
46+
content_type="application/json"
47+
)
48+
1749
client = boto3.client(
1850
"bedrock-agent-runtime",
1951
aws_secret_access_key=settings.get("aws_secret_access_key"),
@@ -22,6 +54,7 @@ def _invoke(self, r: Request, values: Mapping, settings: Mapping) -> Response:
2254
)
2355

2456
try:
57+
log(f"Calling bedrock-agent-runtime retrieve API with knowledgeBaseId: {knowledge_id}")
2558
response = client.retrieve(
2659
knowledgeBaseId=knowledge_id,
2760
retrievalConfiguration={
@@ -31,10 +64,13 @@ def _invoke(self, r: Request, values: Mapping, settings: Mapping) -> Response:
3164
retrievalQuery={"text": query},
3265
)
3366

67+
log(f"API response status: {response.get('ResponseMetadata', {}).get('HTTPStatusCode')}")
68+
3469
results = []
3570
if response.get("ResponseMetadata") and response.get("ResponseMetadata").get("HTTPStatusCode") == 200:
3671
if response.get("retrievalResults"):
3772
retrieval_results = response.get("retrievalResults")
73+
log(f"Retrieved {len(retrieval_results)} results from knowledge base")
3874
for retrieval_result in retrieval_results:
3975
# filter out results with score less than threshold
4076
if retrieval_result.get("score") < retrieval_setting.get("score_threshold", .0):
@@ -47,6 +83,7 @@ def _invoke(self, r: Request, values: Mapping, settings: Mapping) -> Response:
4783
}
4884
results.append(result)
4985

86+
log(f"Returning {len(results)} results after filtering")
5087
return Response(
5188
response=json.dumps({"records": results}),
5289
status=200,
@@ -55,6 +92,7 @@ def _invoke(self, r: Request, values: Mapping, settings: Mapping) -> Response:
5592

5693
except botocore.exceptions.ClientError as error:
5794
error_code = error.response['Error']['Code']
95+
log(f"AWS ClientError: {error_code} - {error.response['Error'].get('Message')}")
5896
if error_code == "InvalidSignatureException":
5997
return Response(
6098
response=json.dumps({"error_code": 1002, "error_msg": "Wrong AWS secret access key"}),

extensions/aws_bedrock_knowledge_base/manifest.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version: 0.0.3
1+
version: 0.0.4
22
type: plugin
33
author: langgenius
44
name: aws_bedrock_knowledge_base

0 commit comments

Comments
 (0)