|
@@ -1,18 +1,15 @@
|
|
|
-from click import prompt
|
|
|
-
|
|
|
import utils,json
|
|
|
|
|
|
from stores.mysql_store import MysqlStore
|
|
|
from models.project_data import ProjectModel, ProjectItemModel
|
|
|
-from ui.project_views import project_item_list
|
|
|
+from ai.fast_gpt import FastGPTAi
|
|
|
|
|
|
|
|
|
class Process:
|
|
|
def __init__(self):
|
|
|
self._logger= utils.get_logger()
|
|
|
self._store= MysqlStore()
|
|
|
- self._ai_helper = utils.AiHelper()
|
|
|
- self._ai_sys_prompt = "查询给定数据的标准编号信息,返回压缩的json字符传"
|
|
|
+ self._ai = FastGPTAi()
|
|
|
self._data={}
|
|
|
|
|
|
def run(self, project: ProjectModel) ->bool:
|
|
@@ -20,9 +17,10 @@ class Process:
|
|
|
self._logger.info(f"开始处理数据:{project.project_no}")
|
|
|
self._store.update_project_status(project.id,22)
|
|
|
project_items = self._store.query_project_items_by_project(project.id)
|
|
|
- text = self.prompt_template(project_items)
|
|
|
- self._logger.info(f"开始调用AI:{text}")
|
|
|
- self._store.update_project_status(project.id,32)
|
|
|
+ text = self.prompt_template(project,project_items)
|
|
|
+ items = self.call_ai_process(text)
|
|
|
+ self._store.update_project_item_standard_no_batch(items)
|
|
|
+ self._store.update_project_status(project.id,12)
|
|
|
self._logger.info(f"处理数据完成:{project.project_no}")
|
|
|
return True
|
|
|
except Exception as e:
|
|
@@ -31,12 +29,14 @@ class Process:
|
|
|
return False
|
|
|
|
|
|
@staticmethod
|
|
|
- def prompt_template( items) ->str:
|
|
|
- text = """
|
|
|
- 请分析提供的json数据。要求:
|
|
|
- 1. 根据项目名称,规格型号,数量,单位 查找计算出 定额编号
|
|
|
- 2. 提供的数据结构化信息:```typescript
|
|
|
- export interface device {
|
|
|
+ def prompt_template(project, items) ->str:
|
|
|
+ text = f"""
|
|
|
+ 请分析提供的json数据,要求:
|
|
|
+ 1. 根据工作内容、类型、项目名称、规格型号、数量、单位查找计算出定额编号
|
|
|
+ 2. 工程的工作内容及类型:{project.work_content}"""
|
|
|
+ text += """
|
|
|
+ 3. 提供的数据结构化信息:```typescript
|
|
|
+ export interface item {
|
|
|
i: // ID
|
|
|
n: string; //物料名称
|
|
|
m: string; //型号规格
|
|
@@ -44,20 +44,34 @@ class Process:
|
|
|
c: float; //数量
|
|
|
}
|
|
|
```
|
|
|
- 3. 需返回的结构体:```typescript
|
|
|
- export interface device {
|
|
|
- i: int; // ID
|
|
|
+ 4. 需返回的结构体:```typescript
|
|
|
+ export interface item {
|
|
|
+ i: int; // ID 与提供的ID保持一致
|
|
|
s: string; // 定额编号
|
|
|
}
|
|
|
```
|
|
|
- 4. 返回结构体device的数组的json数组格式,压缩成一行
|
|
|
- 数据如下:
|
|
|
+ 5. 返回结构体item的数组的json数组格式,压缩成一行。
|
|
|
+ 6. 数据如下:
|
|
|
"""
|
|
|
item_ai_json = ProjectItemModel.list_to_ai_json(items)
|
|
|
text += json.dumps(item_ai_json,ensure_ascii=False, separators=(',', ':'))
|
|
|
return text
|
|
|
|
|
|
- def call_ai(self, system_prompt:str, prompt:str) ->list[ProjectItemModel]:
|
|
|
- pass
|
|
|
+ def call_ai_process(self, message:str) ->list[ProjectItemModel]:
|
|
|
+ try:
|
|
|
+
|
|
|
+ self._logger.info(f"开始调用AI:\n {message}")
|
|
|
+ json_data = self._ai.call_ai(message)
|
|
|
+ self._logger.info(f"AI返回结果:{json_data}")
|
|
|
+ data=[]
|
|
|
+ for item in json_data:
|
|
|
+ data.append(ProjectItemModel(
|
|
|
+ item_id=item["i"],
|
|
|
+ standard_no=item["s"]
|
|
|
+ ))
|
|
|
+ return data
|
|
|
+ except Exception as e:
|
|
|
+ self._logger.error(f"AI调用失败:{e}")
|
|
|
+ return []
|
|
|
|
|
|
|