传递到prompts.py文件的JSON数据格式不正确(Promptfoo)

问题描述 投票:0回答:1

在使用 promptfoo 工具时,我遇到了将数据传递给prompt_generator.py 脚本的问题。期望数据采用正确的 JSON 格式,但收到的数据显示格式错误。

重现步骤:

1。创建prompt_generator文件:

%%writefile prompt_generator.py

import sys
import json

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")
    print(generate_prompt(json.loads(data)))

2。创建 prompfooconfig.yaml 文件:

%%writefile promptfooconfig.yaml
prompts:
  - 'prompt_generator.py:generate_prompt'
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'

记录数据文件:

Log data: '{vars:{question:question1,document:document1}}'
Log data: '{vars:{question:question2,document:document2}}'

此字符串会导致 JSON 解码错误,特别是“期望属性名称包含在双引号中”。

应该是这样的:

{
  "vars": {
    "question": "question1",
    "document": "document1"
  }
}

我不知道是我做错了什么还是提示foo

python json
1个回答
0
投票

不知道你是否已经解决了这个问题。但如果您将方法

generate_prompt
替换为:

,它就会起作用
def generate_prompt(context):
    document = context["vars"]["document"]
    question = context["vars"]["question"]
    
    return json.dumps(f"""Document.
{document}
Question: {question}
"RELEVANT" or "NOT_RELEVANT":""")

我认为使用

json.dumps
方法的格式有所不同。

© www.soinside.com 2019 - 2024. All rights reserved.