--- title: "03-func_gen_bygpt" created: 2026-04-02 tags: - 项目 aliases: - func_gen_bygpt --- # func_gen_bygpt.py ### `func_gen_bygpt.py` — 兜底生成器(大公司版) 与 [[02-func_gen_bygpt|auto_gen 的 func_gen_bygpt]] 同源:解析为空时把 HTML 样本发给大模型,自动生成新的解析函数文件。 ## 代码 ```python 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) ``` --- **项目分区导航**:[[02-func_call|func_call]] ⬅️ | 03-func_gen_bygpt | ➡️ [[04-gen_00001|gen_00001]]