Commit af1043ad authored by uuo00_n's avatar uuo00_n

fix(security-service): 修复JSON解析逻辑以处理嵌套结构

改进JSON解析逻辑,通过括号计数准确提取嵌套JSON结构,增强异常处理
refactor(llm-service): 将敏感词检查改为异步调用
chore: 更新Dify API配置和nginx超时设置
parent 6ccbe723
......@@ -92,8 +92,8 @@ services:
- OLLAMA_BASE_URL=http://datacenter.dldzxx.cn:11434/
- OLLAMA_MODEL=deepseek-r1:14b
# Dify Configuration
- DIFY_API_URL=http://datacenter.dldzxx.cn:8089/v1
- DIFY_API_KEY=app-lkK33EQOVXXrjD9x3SKbItr7
- DIFY_API_URL=http://192.168.6.6/v1
- DIFY_API_KEY=app-sLnrbNjEi1GiTDGgL2B2DwLZ
# Redis Configuration
- REDIS_HOST=redis
- REDIS_PORT=6379
......@@ -116,8 +116,8 @@ services:
- ./microservices/security-service/app:/app/app
environment:
- JWT_SECRET=llm_filter_secure_secret_key_2025_update_must_be_32_bytes
- DIFY_API_URL=http://datacenter.dldzxx.cn:8089/v1
- DIFY_API_KEY=app-xTl0Ri6ir7cAuvngDtFe3hKP
- DIFY_API_URL=http://192.168.6.6/v1
- DIFY_API_KEY=app-ggTb0oC9WXQQm2r7KrvVUS6v
- MONGODB_URL=mongodb://mongo:27017
- MONGODB_DB_NAME=security_service_db
depends_on:
......
......@@ -10,6 +10,11 @@ http {
gzip on;
gzip_types text/plain application/xml text/css application/javascript application/json;
# 超时设置 (5分钟)
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
upstream auth_service {
server auth-service:8081;
}
......
......@@ -30,8 +30,8 @@ class Settings(BaseSettings):
OLLAMA_MODEL: str = os.getenv("OLLAMA_MODEL", "llama2")
# Dify配置
DIFY_API_URL: str = os.getenv("DIFY_API_URL", "http://datacenter.dldzxx.cn:8089/v1")
DIFY_API_KEY: str = os.getenv("DIFY_API_KEY", "app-lkK33EQOVXXrjD9x3SKbItr7")
DIFY_API_URL: str = os.getenv("DIFY_API_URL", "http://192.168.6.6/v1")
DIFY_API_KEY: str = os.getenv("DIFY_API_KEY", "app-sLnrbNjEi1GiTDGgL2B2DwLZ")
DIFY_RESPONSE_MODE: str = os.getenv("DIFY_RESPONSE_MODE", "streaming")
DIFY_MESSAGE_ENDPOINT: str = os.getenv("DIFY_MESSAGE_ENDPOINT", "chat-messages")
......
......@@ -107,7 +107,7 @@ async def add_message(conversation_id: str, user_id: str, content: str) -> Dict[
current_title = conversation.get("title", "")
# 检查敏感词
check_result = sensitive_word_filter.check_text(content)
check_result = await sensitive_word_filter.check_text(content)
contains_sensitive = check_result["contains_sensitive_words"]
sensitive_words = check_result["sensitive_words_found"]
highest_severity = check_result["highest_severity"]
......
......@@ -150,7 +150,7 @@ async def get_all_sensitive_words(
async def check_sensitive_words(text: str) -> Dict[str, Any]:
"""检查文本中是否包含敏感词"""
# 使用敏感词过滤器检查文本
result = sensitive_word_filter.check_text(text)
result = await sensitive_word_filter.check_text(text)
return result
async def record_sensitive_word_usage(
......
......@@ -9,7 +9,7 @@ class Settings(BaseSettings):
ALGORITHM: str = "HS256"
# Dify 配置
DIFY_API_URL: str = "http://datacenter.dldzxx.cn:8089/v1"
DIFY_API_URL: str = "http://192.168.6.6/v1"
DIFY_API_KEY: str = "app-lkK33EQOVXXrjD9x3SKbItr7"
# MongoDB 配置
......
......@@ -236,12 +236,35 @@ class SecurityService:
if not text:
return {}
try:
# 尝试找到第一个 {
start = text.find('{')
end = text.rfind('}') + 1
if start != -1 and end != -1:
if start == -1:
# 尝试直接解析,也许是 list [] 或者是其他合法 JSON
return json.loads(text)
# 基于括号计数来提取最外层 JSON
count = 0
end = -1
for i, char in enumerate(text[start:], start=start):
if char == '{':
count += 1
elif char == '}':
count -= 1
if count == 0:
end = i + 1
break
if end != -1:
json_str = text[start:end]
return json.loads(json_str)
# 如果没找到闭合,回退到原来的逻辑
# start = text.find('{')
# end = text.rfind('}') + 1
# ... 但原来的逻辑有问题,这里不如直接尝试解析整个 text 或者报错
return json.loads(text)
except Exception as e:
logger.warning(f"JSON extraction error: {e}. Text snippet: {text[:100]}...")
return {}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment