在使用 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
不知道你是否已经解决了这个问题。但如果您将方法
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
方法的格式有所不同。