func_gen_bygpt.py

func_gen_bygpt.py — 兜底生成器

解析结果为空时,把该学校的 HTML 样本发给大模型,自动生成新的 gen_func_code_{key}_tmp.py(幂等保护:文件已存在则跳过,不重复调用大模型)。

代码

# -*- coding: utf-8 -*-
"""
自动生成 HTML 表格解析函数
功能:传入招聘列表页 HTML → 调用大模型生成 extract_table_from_html 解析函数
输出:自动生成的 Python 解析代码文件
"""

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

# 大模型生成函数的 Prompt
prompt = '''
写一个python函数(extract_table_from_html),入参2个(1.htmlcontext  2.tempfile)
分析下面的html,转换成列表,写入json文件,
规则:
1. 只要函数即可,不要示例:
2. 输出JSON格式
3. 列表字段(公告名称(announcement_name)、发布时间(publish_time)、链接(link)、公司名称(hd_company)

{html_context}
'''

# ====================== 核心:根据 HTML 自动生成解析函数 ======================
def gen_func_bygpt(_key, html_context):
    """
    自动生成列表页解析函数
    :param _key: 唯一标识(用于生成文件名)
    :param html_context: 列表页 HTML 原文
    :return: 无返回,自动生成 Python 代码文件
    """
    # 生成代码保存路径
    codefile = f"data/gen_func_code_{_key}_tmp.py"

    # 如果代码已存在,直接跳过(避免重复调用大模型)
    if os.path.exists(codefile):
        ner_logger.info(f"代码文件 {codefile} 已存在,无需大模型生成,直接返回")
        return

    # 替换 HTML 内容到 Prompt
    _prompt = prompt.replace("{html_context}", html_context)
    ner_logger.info(f"调用大模型生成解析函数,key={_key}")

    # 调用 GPT-4o 生成代码
    _ok, _python_code = call_gpt(_prompt)
    ner_logger.info("大模型生成解析函数完成")

    # 生成成功则写入文件
    if _ok:
        # 确保目录存在
        os.makedirs("data", exist_ok=True)
        # 写入自动生成的解析函数
        with open(codefile, 'w', encoding='utf-8') as f:
            f.write(_python_code)
        ner_logger.info(f"自动生成代码已保存:{codefile}")
    else:
        ner_logger.error(f"大模型生成失败:{_python_code}")

项目分区导航func_call ⬅️ | 02-func_gen_bygpt | ➡️ gen_000xx