123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- # -*- coding: utf-8 -*-
- """
- @author: yq
- @time: 2024/12/18
- @desc: 策略流节点解析
- """
- import json
- import re
- import time
- import pandas as pd
- from PIL import Image
- from openpyxl import load_workbook
- from commom import f_get_save_path, call_llm, f_file_upload, GeneralException
- from enums import ResultCodesEnum
- from prompt import f_get_prompt_parse_node, f_get_prompt_parse_flow
- def _f_parse_flow(ws):
- image = ws._images[0]
- img = Image.open(image.ref).convert("RGB")
- save_path = f_get_save_path("流程图.png")
- img.save(save_path)
- time.sleep(1)
- file_id = f_file_upload(save_path)
- prompt = f_get_prompt_parse_flow()
- prompt = [
- {
- "type": "text",
- "text": prompt
- },
- {
- "type": "image",
- "file_id": file_id
- }
- ]
- prompt = json.dumps(prompt, ensure_ascii=False)
- print(prompt)
- llm_answer = call_llm(prompt, "object_string")
- print(llm_answer)
- save_path = f_get_save_path("flow.py")
- with open(save_path, mode="w", encoding="utf8") as f:
- f.write(llm_answer)
- def _f_parse_node(df: pd.DataFrame, sheet_name):
- rules = ""
- for idx, row in df.iterrows():
- var_name = row["变量"]
- var_name = var_name.replace("\n", " ")
- rule_content = row["逻辑"]
- rule_out = row["输出"]
- rules = f"{rules}规则{idx + 1}: 变量:{var_name} 逻辑:{rule_content} 输出:{rule_out}\n"
- prompt = f_get_prompt_parse_node(sheet_name, rules)
- print(prompt)
- llm_answer = call_llm(prompt)
- llm_answer = re.findall(r"```python\n(.*)\n```", llm_answer, flags=re.DOTALL)[0]
- func_name = re.findall(r"def (.*)\(data", llm_answer)[0]
- save_path = f_get_save_path(f"{func_name}.py", "node")
- print(llm_answer)
- with open(save_path, mode="w", encoding="utf8") as f:
- f.write(llm_answer)
- def f_parse_strategy(file_path):
- wb = load_workbook(file_path)
- excel = pd.ExcelFile(file_path)
- sheet_names = excel.sheet_names
- if "流程图" not in sheet_names:
- GeneralException(ResultCodesEnum.NOT_FOUND, message=f"sheet【流程图】不存在")
- for sheet_name in sheet_names:
- if sheet_name == "流程图":
- _f_parse_flow(wb["流程图"])
- continue
- df = excel.parse(sheet_name=sheet_name)
- _f_parse_node(df, sheet_name)
- wb.close()
- excel.close()
- if __name__ == "__main__":
- f_parse_strategy("./cache/策略节点配置demo.xlsx")
|