You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 09:40:57