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}")
💬 评论