
大模型提示词设计输入一段文本机构化输出import torch from transformers import AutoModelForCausalLM, AutoTokenizer def main(): 简历结构化信息抽取入口函数 功能加载本地Qwen3.5-0.8B对话大模型读取简历文本抽取指定字段并输出结构化JSON 输出结果自动保存至指定文件路径 # 模型加载配置 # 模型路径指向解压后的Qwen3.5对话模型文件夹 model_path ./Qwen3_5‑0_8B try: # 加载分词器大模型对话推理必需组件 tokenizer AutoTokenizer.from_pretrained(model_path, trust_remote_codeTrue) # 加载Qwen3.5大模型自动分配权重到GPU model AutoModelForCausalLM.from_pretrained( model_path, torch_dtypetorch.float16, device_mapauto, trust_remote_codeTrue ) # 切换模型为评估推理模式禁用Dropout等训练层保证推理稳定性 model.eval() except Exception as e: print(f【错误】模型加载失败{str(e)}) return # Prompt模板构建函数 def construct_extract_prompt(resume_content: str) - str: 构造信息抽取提示词遵循Qwen对话模板规范 :param resume_content: 原始简历文本 :return: 组装完成、可送入模型的对话prompt字符串 # 构造对话消息列表遵循通义千问对话格式规范 messages [ { role: system, content: 你是简历信息抽取助手严格遵循输出格式约束仅返回指定结构JSON禁止额外文字输出。 }, { role: user, content: 从下面简历文本提取4个字段姓名、年龄、工作年限、岗位。 硬性输出规则 1. 仅输出一行标准JSON禁止任何多余文字、解释文本、换行、Markdown标记 2. JSON的键固定为姓名、年龄、工作年限、岗位 3. 信息缺失时对应字段值填写未知 输出样例{姓名:李四, 年龄:23, 工作年限:2年, 岗位:运营} 简历原文 {resume_text} .format(resume_textresume_content) } ] # 使用Qwen内置对话模板格式化消息追加生成提示符 prompt_str tokenizer.apply_chat_template(messages, tokenizeFalse, add_generation_promptTrue) return prompt_str # 用户输入简历文本 try: resume_input input(请输入简历文本) if len(resume_input.strip()) 0: print(【警告】简历输入为空将使用空文本进行抽取字段全部返回未知) except Exception as e: print(f【错误】读取用户输入失败{str(e)}) return # 模型推理生成 prompt construct_extract_prompt(resume_input) # 文本转token张量自动迁移到模型所在设备(GPU) model_inputs tokenizer([prompt], return_tensorspt).to(model.device) # 推理阶段禁用梯度计算节省显存、加速推理 with torch.no_grad(): outputs model.generate( **model_inputs, max_new_tokens256, # 最大新生成token上限足够容纳JSON结果 temperature0.0, # 温度设为0关闭随机性保证输出格式稳定 do_sampleFalse, # 关闭采样贪心解码结构化输出专用 pad_token_idtokenizer.eos_token_id ) # 截取模型新生成的token剔除输入prompt部分 output_tokens outputs[0][len(model_inputs[input_ids][0]) :] result_text tokenizer.decode(output_tokens, skip_special_tokensTrue) # 控制台打印结构化抽取结果 print(f\n结构化抽取结果\n{result_text}) # 结果持久化保存 output_file_path r3_答题卡\result\Q2\output.txt try: with open(output_file_path, w, encodingutf-8) as f: f.write(result_text) print(f\n✅ 运行结果已保存至{output_file_path}) except Exception as e: print(f【错误】结果文件写入失败{str(e)}) print(请检查文件夹 3_答题卡\\result\\Q2 是否预先创建) return if __name__ __main__: main()