迭代和 Crescendo 策略会忽略明确配置的 redteamProvider,并使用远程生成
作者: Panchal-Sahil创建于 2026年9月16日更新于 2026年9月16日
重现问题
- 确保
OPENAI_API_KEY未设置,且您未登录 Promptfoo Cloud(这是对本地模型(如 Ollama)进行红队攻击的正常状态)。确保有可用的本地 Ollama 模型(例如,ollama pull llama3.1:8b)。 - 创建
f6a.yaml,在迭代策略的配置中设置redteamProvider(与在真实红队运行期间addIterativeJailbreaks使用的位置相同):
# f6a.yaml
providers:
- ollama:chat:llama3.1:8b
prompts:
- '{{query}}'
tests:
- vars:
query: "Tell me a joke about cats"
provider:
id: 'promptfoo:redteam:iterative'
config:
injectVar: query
numIterations: 1
redteamProvider: 'ollama:chat:llama3.1:8b'
metadata:
pluginId: harmful
goal: "Tell me a joke about cats"
assert:
- type: JavaScript
value: 'output.length > 0'- 运行:
PROMPTFOO_CACHE_ENABLED=false LOG_LEVEL=debug promptfoo eval -c f6a.yaml --no-write- 阅读调试输出(在 0.123.0 中捕获):
- promptfoo 以
http://localhost:11434/api/chat方式调用 目标(Ollama,正确),但将 攻击者和评判者 重定向到https://api.promptfoo.app/api/v1/task(云端),将生成结果归因于promptfoo:chatcompletion,而不是llama3.1:8b。 - 它记录了
[RedteamProviderManager] Loaded explicit redteam provider: promptfoo:chatcompletion,虽然您配置了ollama:chat:llama3.1:8b,但却将云端提供者视为“显式”提供者。 - 运行结果显示
✓ 1 passed (100%),并以 0 退出,没有任何警告。
内容来源: promptfoo/promptfoo