#10970·promptfoo

迭代和 Crescendo 策略会忽略明确配置的 redteamProvider,并使用远程生成

作者: Panchal-Sahil创建于 2026年9月16日更新于 2026年9月16日

重现问题

  1. 确保 OPENAI_API_KEY 未设置,且您未登录 Promptfoo Cloud(这是对本地模型(如 Ollama)进行红队攻击的正常状态)。确保有可用的本地 Ollama 模型(例如,ollama pull llama3.1:8b)。
  2. 创建 f6a.yaml,在迭代策略的配置中设置 redteamProvider(与在真实红队运行期间 addIterativeJailbreaks 使用的位置相同):
yaml
# 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'
  1. 运行:
bash
PROMPTFOO_CACHE_ENABLED=false LOG_LEVEL=debug promptfoo eval -c f6a.yaml --no-write
  1. 阅读调试输出(在 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