func_gen_bygpt.py

func_gen_bygpt.py — 兜底生成器(大公司版)

auto_gen 的 func_gen_bygpt 同源:解析为空时把 HTML 样本发给大模型,自动生成新的解析函数文件。

代码

import os
from utils import project_path, ner_logger
from api.openai4o_api import call_gpt

# 大模型生成HTML解析函数的提示词模板
# 要求生成 extract_table_from_html 函数,解析HTML列表并输出指定字段的JSON
prompt = '''
写一个python函数(extract_table_from_html),入参2个(1.htmlcontext  2.tempfile)
分析下面的html,转换成列表,写入json文件,
规则:
1. 只要函数即可,不要示例:
2. 输出JSON格式
3. 列表字段(公告名称(announcement_name)、发布时间(publish_time)、链接(link)、所属部门或机构(hd_dept)、工作地点(hd_loc)、招聘人数(hd_job_num)、招聘人数(hd_job_num)、职位类别(hd_job_category))
4. 如果提取不到对应字段,赋值为空字符串""
{html_context}
'''


# 根据传入的HTML内容调用大模型,自动生成解析函数并保存到文件
def gen_func_bygpt(_key, html_context): 
    # 生成自动代码的存储路径
    codefile = f"data/gen_func_code_{_key}_tmp.py"
    
    # 如果代码文件已存在,直接返回,避免重复调用大模型
    if os.path.exists(codefile):
        ner_logger.info(f"代码文件{codefile}文件存在,无需大模型生成,直接返回")
        return 

    # 将HTML内容填充到提示词模板中
    _prompt = prompt.replace("{html_context}", html_context) 
    ner_logger.info(f"正在调用大模型生成解析函数\n{_prompt}\n")
    
    # 调用GPT接口生成Python解析代码
    _ok, _python_code = call_gpt(_prompt)
    ner_logger.info("大模型生成解析函数结束")
    
    # 生成成功后将代码写入.py文件
    if _ok:  
        with open(codefile, 'w', encoding='utf-8') as f:
            f.write(_python_code)

项目分区导航func_call ⬅️ | 03-func_gen_bygpt | ➡️ gen_00001