--- title: "02-func_gen_bygpt" created: 2026-04-02 tags: - 项目 aliases: - func_gen_bygpt --- # func_gen_bygpt.py ### `func_gen_bygpt.py` — 兜底生成器 解析结果为空时,把该学校的 HTML 样本发给大模型,自动生成新的 `gen_func_code_{key}_tmp.py`(幂等保护:文件已存在则跳过,不重复调用大模型)。 ## 代码 ```python # -*- 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}") ``` --- **项目分区导航**:[[01-func_call|func_call]] ⬅️ | 02-func_gen_bygpt | ➡️ [[03-gen_000xx|gen_000xx]]