自定义和语音增强策略会忽略明确配置的 redteamProvider,并使用远程生成
作者: he-yufeng创建于 2026年9月17日更新于 2026年9月17日
描述错误
custom 和 voice-crescendo 红队策略具有与 #10970 相同的提供者替换缺陷(在 #10972 中修复了 iterative/crescendo):当启用远程生成时,明确配置的 redteamProvider 会在 Promptfoo 的云 API 中默默替换。在 src/redteam/providers/custom/index.ts 中,无论 shouldGenerateRemote() 是否为真,两个提供者访问器都会采用远程路径,尽管本地分支已编写以符合配置:
private async getRedTeamProvider(): Promise<ApiProvider> {
if (!this.redTeamProvider) {
if (shouldGenerateRemote()) {
this.redTeamProvider = new PromptfooChatCompletionProvider({ task: 'crescendo', ... });
} else {
this.redTeamProvider = await redteamProviderManager.getProvider({
provider: this.config.redteamProvider, // 仅在远程禁用时受到尊重
...
});
}
}
}
同一文件中的 `getScoringProvider` 具有相同的形状,而 `src/redteam/providers/voiceCrescendo/index.ts` 在 `getRedTeamProvider` 中重复了它。后果与 #10970 列出的相同:攻击者(以及对于 `custom`,评委)运行在不同于配置的模型上,提示和输出离开机器到 `api.promptfoo.app`,并且没有记录交换的信息。内容来源: promptfoo/promptfoo