app_v2.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. from flask import Flask, request, jsonify
  2. from flask_cors import CORS # 跨域支持
  3. from typing import Dict, Any, List
  4. import logging
  5. import traceback
  6. from chat import gen_title, generate_text
  7. app = Flask(__name__)
  8. CORS(app) # 允许所有域访问(生产环境应限制)
  9. logging.basicConfig(level=logging.INFO)
  10. logger = logging.getLogger("TextGenerationAPI")
  11. @app.route('/api/description', methods=['POST'])
  12. def request_description():
  13. """文本生成核心接口
  14. 请求体要求(JSON格式):
  15. {
  16. "plm_info": "商品详细信息文本",
  17. "img": "https://example.com/image.jpg",
  18. "graphic_label": ["标签1", "标签2"]
  19. }
  20. """
  21. try:
  22. data = request.get_json()
  23. if not data:
  24. return jsonify({"error": "请求体必须为JSON格式"}), 400
  25. logger.info(f"收到请求数据:{data}")
  26. required_fields = ["spu","reference_url",'plm_info', 'img', 'graphic_label']
  27. missing = [field for field in required_fields if field not in data]
  28. if missing:
  29. return jsonify({"error": f"缺少必要字段: {missing}"}), 400
  30. if not isinstance(data['graphic_label'], list) or \
  31. not all(isinstance(item, str) for item in data['graphic_label']):
  32. return jsonify({"error": "graphic_label必须是字符串列表"}), 400
  33. en,kw = generate_text(
  34. plm_info=data['plm_info'],
  35. img=data['img'],
  36. graphic_label=data['graphic_label']
  37. )
  38. return jsonify({
  39. "spu": data['spu'], # 示例请求ID(实际应生成唯一标识)
  40. "result":{"descr":en,
  41. "keywords":kw}
  42. }), 200
  43. except Exception as e:
  44. logger.error(f"处理失败: {str(e)}\n{traceback.format_exc()}")
  45. return jsonify({
  46. "error": "服务器内部错误",
  47. "detail": str(e)
  48. }), 500
  49. @app.route('/api/title', methods=['POST'])
  50. def request_title():
  51. """文本生成核心接口
  52. 请求体要求(JSON格式):
  53. {
  54. "plm_info": "商品详细信息文本",
  55. "img": "https://example.com/image.jpg",
  56. "graphic_label": ["标签1", "标签2"]
  57. }
  58. """
  59. try:
  60. data = request.get_json()
  61. if not data:
  62. return jsonify({"error": "请求体必须为JSON格式"}), 400
  63. logger.info(f"收到请求数据:{data}")
  64. required_fields = ["spu","reference_title",'desc', 'tags']
  65. missing = [field for field in required_fields if field not in data]
  66. if missing:
  67. return jsonify({"error": f"缺少必要字段: {missing}"}), 400
  68. logger.info(f"11111111111数据完整:{data}")
  69. if not isinstance(data['tags'], list) or \
  70. not all(isinstance(item, str) for item in data['tags']) :
  71. return jsonify({"error": "tags必须是字符串列表"}), 400
  72. logger.info(f"数据完整:{data}")
  73. result = gen_title(
  74. info=data['desc'],
  75. tags=data['tags'],
  76. referencr_title=data["reference_title"]
  77. )
  78. # 5. 构造标准化响应
  79. return jsonify({
  80. "spu": data['spu'], # 示例请求ID(实际应生成唯一标识)
  81. "result":result
  82. }), 200
  83. except Exception as e:
  84. # 异常处理与日志记录
  85. logger.error(f"处理失败: {str(e)}\n{traceback.format_exc()}")
  86. return jsonify({
  87. "error": "服务器内部错误",
  88. "detail": str(e)
  89. }), 500
  90. if __name__ == '__main__':
  91. # 启动服务(生产环境应使用WSGI服务器)
  92. app.run(host='0.0.0.0', port=6868, debug=False)