aliyun_security.py 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. # coding=utf-8
  2. # python version >= 3.6
  3. from alibabacloud_green20220302.client import Client
  4. from alibabacloud_green20220302 import models
  5. from alibabacloud_tea_openapi.models import Config
  6. import json
  7. from loguru import logger
  8. config = Config(
  9. # 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
  10. # 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
  11. # 常见获取环境变量方式:
  12. # contentsecurity@1894469520484605.onaliyun.com
  13. access_key_id='LTAI5tEv9SCKZFpTshJpi618',
  14. access_key_secret='7N13xskcYEJzgiRLcYO1ngEVFmTq6Z',
  15. # 连接超时时间 单位毫秒(ms)
  16. connect_timeout=10000,
  17. # 读超时时间 单位毫秒(ms)
  18. read_timeout=3000,
  19. region_id='cn-hangzhou',
  20. #endpoint='green-cip-vpc.cn-hangzhou.aliyuncs.com'
  21. endpoint='green-cip.cn-hangzhou.aliyuncs.com'
  22. )
  23. clt = Client(config)
  24. class Security:
  25. @classmethod
  26. def security(cls, content):
  27. """
  28. 内容安全审核方法
  29. 返回: (是否安全, 结果字典/字符串)
  30. """
  31. serviceParameters = {
  32. 'content': content
  33. }
  34. textModerationPlusRequest = models.TextModerationPlusRequest(
  35. service='llm_response_moderation_01',
  36. service_parameters=json.dumps(serviceParameters)
  37. )
  38. try:
  39. response = clt.text_moderation_plus(textModerationPlusRequest)
  40. # HTTP请求成功
  41. if response.status_code == 200:
  42. try:
  43. # 将响应体转换为字典格式
  44. result_dict = response.body.to_map()
  45. logger.info(f'审核成功. 结果:{result_dict}')
  46. # 业务状态码检查
  47. if result_dict.get('Code') == 200:
  48. risk_level = result_dict.get('Data', {}).get('RiskLevel', '').lower()
  49. # 风险等级判断
  50. if risk_level in ["high", "medium"]:
  51. return False, json.dumps(result_dict, ensure_ascii=False)
  52. return True, json.dumps(result_dict, ensure_ascii=False)
  53. else:
  54. # 业务错误
  55. error_msg = f"业务错误. 代码:{result_dict.get('Code')}, 消息:{result_dict.get('Message', '无')}"
  56. logger.error(error_msg)
  57. return False, error_msg
  58. except Exception as parse_error:
  59. # 响应解析错误
  60. error_msg = f"响应解析错误: {str(parse_error)}"
  61. logger.error(error_msg)
  62. return False, error_msg
  63. else:
  64. # HTTP请求失败
  65. error_msg = f"API请求失败. 状态码:{response.status_code}, 响应:{str(response)}"
  66. logger.error(error_msg)
  67. return False, error_msg
  68. except Exception as e:
  69. # 全局异常处理
  70. error_msg = f"内容审核异常: {str(e)}"
  71. logger.exception(error_msg)
  72. return False, error_msg
  73. if __name__ == '__main__':
  74. is_safe, result = Security.security("测试安全边界")
  75. print(f"安全状态: {is_safe}")
  76. print(f"详细结果: {result}")