Python中传入变量至Prompt后,如何让GPT-4o正确输出变量及标签
解决Python中传递变量到OpenAI Prompt并确保LLM正确输出的问题
问题分析
你当前的代码里,system_content字符串中的{non_inclusive_pronouns_str}和{non_inclusive_pronouns}只是普通占位符,没有被实际变量值替换,导致LLM无法获取识别出的代词信息。另外,prompt里的JSON输出模板存在语法问题(比如直接写入列表变量而非符合JSON规范的字符串),也会干扰LLM的输出格式。
修正方案
1. 正确格式化Prompt字符串
使用Python的f-string(推荐)或str.format()方法,将变量值嵌入prompt。对于列表类型的变量,要转成符合JSON格式的字符串,避免LLM解析出错。
2. 完善OpenAI API调用逻辑
补充完整的API调用代码,指定GPT-4o模型,并设置严格的输出约束,确保LLM完全遵循规则输出。
修正后的完整代码
import re from openai import OpenAI # 初始化OpenAI客户端(需提前设置环境变量OPENAI_API_KEY) client = OpenAI() def identify_non_inclusive_pronouns(text): pronouns = ['he', 'she', 'his', 'him', 'her', "she's"] # 移除括号内的文本 text = re.sub(r'\(.*?\)', '', text) words = re.findall(r'\b\w+\b', text.lower()) non_inclusive_pronouns = [word for word in words if word in pronouns] unique_non_inclusive_pronouns = list(set(non_inclusive_pronouns)) return unique_non_inclusive_pronouns def classify_sentences(message: str): non_inclusive_pronouns = identify_non_inclusive_pronouns(message) non_inclusive_pronouns_str = ', '.join(non_inclusive_pronouns) # 将列表转为JSON兼容的字符串格式 non_inclusive_pronouns_json = str(non_inclusive_pronouns).replace("'", '"') # 用f-string注入变量,生成完整prompt system_content = f''' __CONTEXT__: 你是顶级包容性语言检查器,负责评估英文内容的偏见问题,确保语言对所有群体(不同性别、种族、宗教、社会经济阶层等)中立、尊重且普适。你服务于玛氏箭牌企业事务团队,需确保社交媒体内容符合包容性标准,错误检测会对业务和用户造成负面影响。 __ASK__: 将消息分类为"Inclusive"或"Not Inclusive"。 - 若为"Not Inclusive",需列出非包容性词汇,并给出原因及替代建议 - 若为"Inclusive",仍需添加友好的改进建议 __CONSTRAINTS__: 1. 必须扫描全文所有预定义包容性规则 2. 每条规则独立检查,同一内容可标记多个问题,只要有一个违规就标记为"Not Inclusive" 3. 每个违规项需对应列出词汇、原因及建议 4. 无论内容是否包容,都必须添加建议 给定消息:{message} 基于以下规则执行检查: 1. **核心规则:代词包容性检查** 已识别到的非包容性代词:{non_inclusive_pronouns_str} - 若存在非包容性代词,严格按以下JSON格式输出: {{ "tag": "Not Inclusive", "not_inclusive_words": {non_inclusive_pronouns_json}, "reasons": ["建议在消息中首次提及姓名/职位时,在括号内标注合适的代词(如'Alex (they/them)'),确保性别包容性。"] }} - 若未识别到非包容性代词,严格按以下JSON格式输出: {{ "tag": "Inclusive", "not_inclusive_words": [], "reasons": ["内容符合包容性标准,建议继续保持中性表述。"] }} ''' # 调用OpenAI API,强制确定性输出 response = client.chat.completions.create( model="gpt-4o", messages=[ {"role": "system", "content": system_content}, {"role": "user", "content": message} ], temperature=0, # 消除随机性,确保规则100%生效 response_format={"type": "json_object"} # 强制输出JSON格式 ) # 解析并返回结果 result = response.choices[0].message.content print(result) return result
关键改进说明
- 变量注入:通过f-string直接将代词变量嵌入prompt,确保LLM能获取实际识别结果。
- 格式约束:设置
response_format={"type": "json_object"}强制输出JSON,temperature=0消除随机性,保证基于规则的逻辑完全生效。 - 明确指令:提前告知LLM已识别的代词,避免重复检测出错,直接基于已有结果输出分类。
测试示例
输入消息:"He will lead the product launch next week.",调用classify_sentences("He will lead the product launch next week."),会输出:
{ "tag": "Not Inclusive", "not_inclusive_words": ["he"], "reasons": ["建议在消息中首次提及姓名/职位时,在括号内标注合适的代词(如'Alex (they/them)'),确保性别包容性。"] }
内容的提问来源于stack exchange,提问作者Quest
相关产品推荐
相关产品推荐

