process.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import utils,json
  2. from stores.mysql_store import MysqlStore
  3. from models.project_data import ProjectModel, ProjectItemModel
  4. from ai.fast_gpt import FastGPTAi
  5. class Process:
  6. def __init__(self):
  7. self._logger= utils.get_logger()
  8. self._store= MysqlStore()
  9. self._ai = FastGPTAi()
  10. self._data={}
  11. def run(self, project: ProjectModel) ->bool:
  12. try:
  13. self._logger.info(f"开始处理数据:{project.project_no}")
  14. self._store.update_project_status(project.id,22)
  15. project_items = self._store.query_project_items_by_project(project.id)
  16. text = self.prompt_template(project,project_items)
  17. items = self.call_ai_process(text)
  18. self._store.update_project_item_standard_no_batch(items)
  19. self._store.update_project_status(project.id,12)
  20. self._logger.info(f"处理数据完成:{project.project_no}")
  21. return True
  22. except Exception as e:
  23. self._logger.error(f"处理数据失败:{e}")
  24. self._store.update_project_status(project.id,12)
  25. return False
  26. @staticmethod
  27. def prompt_template(project, items) ->str:
  28. text = f"""
  29. 请分析提供的json数据,要求:
  30. 1. 根据工作内容、类型、项目名称、规格型号、数量、单位查找计算出定额编号
  31. 2. 工程的工作内容及类型:{project.work_content}"""
  32. text += """
  33. 3. 提供的数据结构化信息:```typescript
  34. export interface item {
  35. i: // ID
  36. n: string; //物料名称
  37. m: string; //型号规格
  38. u:string; //单位
  39. c: float; //数量
  40. }
  41. ```
  42. 4. 需返回的结构体:```typescript
  43. export interface item {
  44. i: int; // ID 与提供的ID保持一致
  45. s: string; // 定额编号
  46. }
  47. ```
  48. 5. 返回结构体item的数组的json数组格式,压缩成一行。
  49. 6. 数据如下:
  50. """
  51. item_ai_json = ProjectItemModel.list_to_ai_json(items)
  52. text += json.dumps(item_ai_json,ensure_ascii=False, separators=(',', ':'))
  53. return text
  54. def call_ai_process(self, message:str) ->list[ProjectItemModel]:
  55. try:
  56. api_key = utils.get_config_value("fastgpt.api_key_process")
  57. self._logger.info(f"开始调用AI:\n {message}")
  58. json_data = self._ai.call_ai(message,api_key)
  59. self._logger.info(f"AI返回结果:{json_data}")
  60. data=[]
  61. for item in json_data:
  62. data.append(ProjectItemModel(
  63. item_id=item["i"],
  64. standard_no=item["s"]
  65. ))
  66. return data
  67. except Exception as e:
  68. self._logger.error(f"AI调用失败:{e}")
  69. return []