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

使用promptfoo时传入prompt_generator.py的JSON格式错误问题求助

解决promptfoo传入Python脚本的非标准JSON格式问题

问题核心

使用promptfoo调用自定义prompt_generator.py脚本时,传入的数据是类似'{vars:{question:question1,document:document1}}'的Python字面量格式,而非标准JSON,导致json.loads()解析时触发"Expecting property name enclosed in double quotes"错误。

原因

promptfoo默认以Python字面量格式向外部脚本传递上下文数据,不是标准JSON结构,因此无法直接用JSON解析器处理。

解决方案

方案1:修改Python脚本解析逻辑

用ast.literal_eval()替代json.loads(),该方法可以安全解析Python字面量格式的数据,同时去除外层包裹的单引号:

修改后的prompt_generator.py代码:

import sys
import ast

def generate_prompt(context):
    document = context["vars"]["document"]
    question = context["vars"]["question"]
    
    return f"""Document.
{document}
Question: {question}
"RELEVANT" or "NOT_RELEVANT":"""

if __name__ == '__main__':
    data = sys.argv[1] if len(sys.argv) > 1 else None
    with open("log_data.txt", "a") as f:
        f.write(f"Log data: {data}\n")
    # 去除外层单引号并解析Python字面量
    context_data = ast.literal_eval(data.strip("'"))
    print(generate_prompt(context_data))

方案2:配置promptfoo传递标准JSON

在prompfooconfig.yaml的prompt引用后添加format=json参数,强制promptfoo以标准JSON格式传递数据:

修改后的prompfooconfig.yaml代码:

prompts:
  - 'prompt_generator.py:generate_prompt?format=json'
providers: 
  - openai:gpt-3.5-turbo
tests:
  - vars:
      question: "question1"
      document: "document1"
    assert:
      - type: equals
        value: 'NOT_RELEVANT'
  - vars:
      question: "question2"
      document: "document2"
    assert:
      - type: equals
        value: 'RELEVANT'

此方案无需修改Python脚本,原有的json.loads(data)即可正常解析数据。

验证

运行promptfoo测试命令后,检查log_data.txt中的日志,数据应变为标准JSON格式(如{"vars": {"question": "question1", "document": "document1"}}),脚本可正常生成prompt并完成测试。

内容的提问来源于stack exchange,提问作者tbo812

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 06:05:22