Python 8天极速入门笔记(大模型工程师专用):第五篇-函数(def定义,大模型代码复用核心)
一、开篇回顾 今日目标回顾Day4掌握了if判断、for/while循环及两者结合用法能实现模型参数校验、批量处理prompt和对话历史等逻辑但代码复用性差——相同逻辑如参数校验每次使用都需重复编写今日学习函数解决代码复用问题让大模型开发更高效。今日目标熟练掌握函数的基础定义def关键字、调用方法理解函数的核心作用掌握函数的参数必选参数、默认参数和返回值return适配大模型开发场景学会封装大模型相关函数参数校验、批量调用、对话处理实现代码复用了解函数的基础易错点能独立编写、调用简单函数提升大模型脚本开发效率。二、核心知识点兼顾Python基础与大模型场景一函数的核心概念与作用大模型开发必备1. 核心定义函数是一段封装好的、可重复调用的代码块用于实现特定功能如模型参数校验、批量调用大模型调用时只需输入参数无需重复编写代码。2. 核心作用贴合大模型场景代码复用将常用逻辑如参数校验、prompt批量处理封装成函数每次使用直接调用避免重复编写简化代码将复杂逻辑拆分成多个函数让大模型脚本结构更清晰便于维护和修改提升效率后续开发大模型脚本、RAG应用时可直接调用已封装的函数大幅节省开发时间。3. 生活类比函数就像大模型开发中的“工具模板”——比如“模型参数校验工具”提前做好模板封装函数每次需要校验参数时只需输入参数工具就会自动输出校验结果无需重新制作模板。二函数的基础语法def定义调用1. 基础定义语法必记语法格式注意缩进函数体缩进4个空格def 函数名(参数1, 参数2, ...):函数体实现特定功能的代码return 返回值可选无返回值可省略关键说明def定义函数的关键字必须放在函数名前面函数名自定义名称遵循Python命名规则字母、数字、下划线组成不能以数字开头不能用关键字建议见名知意如check_model_params参数函数的输入用于接收外部传递的数据如模型参数temperature、max_tokens可无参数、1个或多个函数体实现函数功能的核心代码必须缩进return用于返回函数执行结果如参数校验的结果、批量处理后的prompt列表无返回值时可省略省略时函数默认返回None。2. 函数的调用核心步骤语法格式函数名(参数值1, 参数值2, ...)调用时需传入与参数对应的数值无参数则无需传入示例简单函数无参数、无返回值#定义函数打印大模型调用提示 def print_model_prompt(): print(开始调用大模型正在生成响应...) print(响应生成完成) # 调用函数直接写函数名括号 print_model_prompt() # 可重复调用无需重复编写函数体代码 print_model_prompt()示例大模型场景定义函数校验模型温度参数# 定义函数校验模型temperature参数 def check_temperature(temp): # 函数体实现校验逻辑 if 0 temp 1.0: return ✅ 温度参数合法 else: return ❌ 温度参数不合法需在0-1.0之间 # 调用函数传入参数如0.8、1.2接收返回值 result1 check_temperature(0.8) result2 check_temperature(1.2) # 打印返回结果 print(result1) # 输出✅ 温度参数合法 print(result2) # 输出❌ 温度参数不合法需在0-1.0之间3. 易错点提醒新手必看忘记写def关键字直接定义函数名会报错函数体未缩进或缩进不一致会被视为非函数内代码执行逻辑异常调用函数时参数数量与定义时不一致如定义时需1个参数调用时传入2个或0个会报错混淆函数定义和调用def 函数名() 是定义函数名() 是调用不可只定义不调用否则函数不会执行。三函数的参数大模型场景重点核心说明参数是函数与外部交互的桥梁大模型开发中常用参数传递模型配置temperature、max_tokens、prompt、对话历史等数据重点掌握2种参数必选参数、默认参数。1. 必选参数必填参数定义函数调用时必须传入的参数不传入会报错顺序与定义时一致示例大模型场景封装函数批量处理单个prompt# 定义函数处理单个prompt必选参数prompt def process_prompt(prompt): # 函数功能给prompt添加前缀适配大模型输入 processed_prompt f请基于以下需求生成专业回答{prompt} return processed_prompt # 调用函数必须传入prompt参数否则报错 prompt1 process_prompt(介绍大模型参数调优方法) prompt2 process_prompt(Python调用qwen-7b的步骤) print(prompt1) # 输出请基于以下需求生成专业回答介绍大模型参数调优方法 print(prompt2) # 输出请基于以下需求生成专业回答Python调用qwen-7b的步骤2. 默认参数可选参数定义函数定义时给参数指定默认值调用时可传入新值覆盖默认值也可不传使用默认值语法格式def 函数名(参数1, 参数2默认值):示例大模型场景封装函数调用大模型时设置默认参数# 定义函数模拟大模型调用默认参数modelqwen-7btemperature0.7 def call_model(prompt, modelqwen-7b, temperature0.7): print(f调用模型{model}) print(f温度参数{temperature}) print(fPrompt{prompt}) return f模型{model}响应基于{prompt}生成回答 # 调用方式1只传必选参数prompt使用默认模型和温度 response1 call_model(什么是RAG技术) print(response1, \n) # 调用方式2传入prompt和model覆盖默认模型保留默认温度 response2 call_model(Python列表用法, modelchatglm3-6b) print(response2, \n) # 调用方式3传入所有参数覆盖所有默认值 response3 call_model(大模型原理, modelllama-7b, temperature0.8) print(response3)大模型场景默认参数非常实用可将常用的模型配置如默认模型、默认温度设为默认参数调用时无需重复传入减少代码冗余。3. 参数使用易错点默认参数必须放在必选参数后面如def call_model(prompt, modelqwen-7b) 正确def call_model(modelqwen-7b, prompt) 错误调用函数时可按位置传参如call_model(prompt, chatglm3-6b)也可按关键字传参如call_model(promptprompt, modelchatglm3-6b)推荐关键字传参更清晰不易出错默认参数的值只在函数定义时生效后续修改默认参数变量不会影响函数内的默认值。四函数的返回值return关键字1. 核心作用将函数执行的结果返回给调用者供后续代码使用如参数校验结果、处理后的prompt、大模型响应等。2. 基础用法无返回值函数体中无return或return后无内容默认返回None可用于只执行操作不返回结果如打印提示单个返回值return 单个结果如字符串、数字、列表、字典多个返回值return 结果1, 结果2, ...本质是返回一个元组可直接用多个变量接收。3. 示例大模型场景多个返回值批量校验模型参数#定义函数校验模型temperature和max_tokens两个参数返回校验结果和参数状态 def check_model_params(temperature, max_tokens): # 校验温度 temp_status 合法 if 0 temperature 1.0 else 不合法 # 校验max_tokens token_status 合法 if 256 max_tokens 1024 else 不合法 # 多个返回值返回两个参数的状态和整体校验结果 total_status 全部合法 if temp_status 合法 and token_status 合法 else 部分不合法 return temp_status, token_status, total_status # 调用函数接收多个返回值 temp_stat, token_stat, total_stat check_model_params(0.7, 512) print(f温度参数状态{temp_stat}) print(fmax_tokens状态{token_stat}) print(f整体校验结果{total_stat}) # 另一个测试案例 temp_stat2, token_stat2, total_stat2 check_model_params(1.2, 200) print(f\n温度参数状态{temp_stat2}) print(fmax_tokens状态{token_stat2}) print(f整体校验结果{total_stat2})4. 易错点提醒return语句执行后函数会立即终止后续代码不会执行如return后面的print语句不会打印接收多个返回值时变量数量需与返回值数量一致否则会报错或出现变量赋值异常。三、今日实操代码可直接复制贴合大模型场景实操1基础函数定义与调用入门必练# 实操1定义并调用函数实现模型参数单个校验 # 1. 定义函数校验max_tokens参数 def check_max_tokens(tokens): if 256 tokens 1024: return f✅ max_tokens{tokens}配置合理 elif tokens 256: return f⚠️ max_tokens{tokens}过少建议≥256 else: return f⚠️ max_tokens{tokens}过多建议≤1024 # 2. 调用函数测试不同参数 print(check_max_tokens(512)) print(check_max_tokens(200)) print(check_max_tokens(1536)) # 实操1拓展定义无参数、无返回值函数打印大模型调用提示 def model_call_tip(): print(*30) print(开始调用大模型...) print(参数校验中...) print(调用成功正在生成响应...) print(*30) # 调用函数 model_call_tip()实操2函数参数练习必选默认参数大模型场景# 实操2封装函数模拟大模型调用支持自定义参数 def mock_model_call(prompt, modelqwen-7b, temperature0.7, max_tokens1024): # 打印调用信息 print(f【模型调用信息】) print(f模型{model}) print(f温度{temperature}最大tokens{max_tokens}) print(fPrompt{prompt}) # 返回模拟响应 return f【模拟响应】基于{model}模型针对{prompt}生成专业回答实际开发替换为真实API调用 # 调用方式1只传必选参数prompt response1 mock_model_call(介绍Python函数的用法) print(response1, \n) # 调用方式2传入prompt和部分默认参数 response2 mock_model_call(RAG如何结合大模型, modelchatglm3-6b, temperature0.8) print(response2, \n) # 调用方式3传入所有参数覆盖默认值 response3 mock_model_call(大模型参数调优技巧, modelllama-7b, temperature0.6, max_tokens512) print(response3)实操3函数返回值练习多个返回值批量处理# 实操3封装函数批量处理对话历史返回有效对话和无效对话 def filter_chat_history(chat_history): valid_chat [] # 有效对话 invalid_chat [] # 无效对话空内容、纯空格 for msg in chat_history: # 检查对话是否包含必要的键 if role not in msg or content not in msg: invalid_chat.append(msg) continue # 过滤空内容、纯空格的对话 if msg[content].strip() ! : valid_chat.append(msg) else: invalid_chat.append(msg) # 多个返回值有效对话列表、无效对话列表 return valid_chat, invalid_chat # 测试函数 test_chat [ {role: user, content: Python函数怎么用}, {role: assistant, content: }, {role: user, content: }, {role: assistant, content: 函数需用def定义调用时传入参数即可}, {role: user, content: 函数返回值怎么获取} ] valid, invalid filter_chat_history(test_chat) print(有效对话, valid) print(无效对话, invalid) # 实操3拓展调用函数后批量调用大模型回答有效用户问题 print(\n批量回答有效用户问题) for msg in valid: if msg[role] user: print(f\n用户问题{msg[content]}) print(f大模型响应针对该问题的专业解答实际开发替换为真实API调用)实操4综合实操封装大模型批量调用函数# 实操4综合封装实现大模型批量调用参数校验 def batch_call_model(prompts, modelqwen-7b, temperature0.7, max_tokens1024): 功能批量调用大模型先校验参数再处理prompt最后模拟调用 参数 prompts必选参数prompt列表 model默认参数调用的模型默认qwen-7b temperature默认参数温度默认0.7 max_tokens默认参数最大生成tokens默认1024 返回值批量调用结果列表 # 第一步校验参数合法性 params_valid True if not (0 temperature 1.0): print(f❌ 温度参数{temperature}不合法需在0-1.0之间) params_valid False if not (256 max_tokens 2048): print(f❌ max_tokens参数{max_tokens}不合法需在256-2048之间) params_valid False if not params_valid: return [] # 第二步处理prompt过滤无效prompt valid_prompts [p for p in prompts if p.strip() ! ] if not valid_prompts: print(❌ 无有效prompt无法批量调用) return [] # 第三步批量模拟调用大模型 call_results [] for idx, prompt in enumerate(valid_prompts, start1): response f模型{model}温度{temperature}响应基于{prompt}生成专业回答 call_results.append({ prompt序号: idx, prompt: prompt, 模型: model, 响应结果: response }) print(f\n第{idx}个prompt调用完成) return call_results # 调用综合函数 test_prompts [ 介绍RAG技术的应用场景, , Python如何封装大模型调用函数, , 大模型参数调优有哪些技巧 ] results batch_call_model(test_prompts, modelchatglm3-6b, temperature0.8, max_tokens768) print(\n批量调用结果) for res in results: print(res)四、易错点汇总新手避坑函数定义时忘记写def关键字或函数名不符合Python命名规则如以数字开头、使用关键字函数体未缩进、缩进不一致或缩进使用空格和Tab混用建议统一用4个空格缩进调用函数时参数数量、类型与函数定义不一致如定义时需传入数字却传入字符串默认参数位置错误将默认参数放在必选参数前面return语句使用错误return后多写逗号如return a, b, 会返回元组、return语句后还有可执行代码不会执行函数内使用未定义的变量如参数名拼写错误或引用了函数外部未传入的变量混淆函数的“定义”和“调用”只定义函数不调用导致函数无法执行。五、今日练习10分钟巩固1. 定义一个函数接收一个模型名称必选参数和温度参数默认值0.7返回模型调用提示如“调用模型qwen-7b温度0.7准备生成响应”2. 封装一个函数批量校验模型配置列表要求temperature在0.5-0.9之间max_tokens在512-1024之间返回合法配置、不合法配置及不合法原因3. 定义一个函数接收prompt列表和前缀默认值“请详细回答”过滤无效prompt后给每个有效prompt添加前缀返回处理后的列表并统计有效prompt数量4. 综合练习封装一个函数实现“参数校验→prompt处理→批量模拟调用”的完整流程返回每个prompt的调用结果要求包含函数说明文档注释。六、次日预告Day6将讲解Python函数的进阶用法函数嵌套、匿名函数lambda以及大模型开发中常用的模块导入如import语句学会模块导入后可直接使用第三方库如transformers、requests调用真实大模型API摆脱模拟调用向实战更进一步