跳到主要内容

Prompt Repetition

langchain4j-community-prompt-repetition 是一个可选的社区模块,为 LangChain4j 的两个集成点提供现成的提示词重复(prompt repetition)集成:

  • AI Services 输入护栏(input guardrails)
  • RAG 查询转换

它受论文 Prompt Repetition Improves Non-Reasoning LLMs 启发,该论文报告了在一系列非推理工作负载上的收益。在 LangChain4j 中,该模块通过框架原生组件暴露核心的重复输入转换,并为真实应用添加了保守的默认值。

该模块为实验性功能,效果取决于工作负载。在大规模推广前,请在你自己的提示词、模型与任务上验证。

它是什么

提示词重复会将文本改写为如下形式:

Q -> Q\nQ

在 LangChain4j 中,可以应用于两个不同位置:

  • 在非 RAG 的 AI Services 调用之前,使用 PromptRepeatingInputGuardrail
  • 在高级 RAG 流水线的检索之前,使用 RepeatingQueryTransformer

对于 RAG,重复应仅应用于检索查询,而不应应用于发送给模型的最终增强提示词。

Maven 依赖

如果你已经在使用社区模块,建议导入社区 BOM:

<dependencyManagement>
<dependencies>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-bom</artifactId>
<version>${latest version here}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

然后添加 prompt repetition 模块:

<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-prompt-repetition</artifactId>
</dependency>

也可以直接声明该模块:

<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-prompt-repetition</artifactId>
<version>${latest version here}</version>
</dependency>

组件

该模块提供三个主要 API:

  • PromptRepeatingInputGuardrail 在调用模型前,重复符合条件的单文本用户输入
  • RepeatingQueryTransformer 在高级 RAG 流水线中重复检索查询
  • PromptRepetitionPolicy 包含两个集成点共用的重复规则

所有这些 API 都标记为 @Experimental

非 RAG 用法

对于非 RAG 的 AI Services 调用,将 PromptRepeatingInputGuardrail 挂到 AiServices builder:

PromptRepetitionPolicy policy = PromptRepetitionPolicy.builder()
.mode(PromptRepetitionMode.AUTO)
.maxChars(8_000)
.build();

Assistant assistant = AiServices.builder(Assistant.class)
.chatModel(chatModel)
.inputGuardrails(new PromptRepeatingInputGuardrail(policy))
.build();

当你想在模型调用前改写用户输入,且不处理已增强的 RAG 提示词时,这是首选集成点。

RAG 用法

对于 RAG,仅重复检索查询:

PromptRepetitionPolicy policy = PromptRepetitionPolicy.builder()
.mode(PromptRepetitionMode.AUTO)
.maxChars(8_000)
.build();

RetrievalAugmentor retrievalAugmentor = DefaultRetrievalAugmentor.builder()
.queryTransformer(new RepeatingQueryTransformer(policy))
.build();

这样可将转换保留在检索阶段,避免在已注入检索内容后再次复制最终提示词。

模式

PromptRepetitionPolicy 支持三种模式:

  • NEVER:禁用重复
  • ALWAYS:重复符合条件的输入
  • AUTO:保守模式,会跳过已重复文本、非常长的输入,以及看起来要求显式推理的提示词

AUTO 是评估时最安全的起点。

安全性与约束

  • PromptRepeatingInputGuardrail 仅改写符合条件的单文本用户输入
  • 它不适合作为多模态请求的主要集成点
  • 默认情况下,当 RAG 增强已经发生时,该护栏会跳过请求
  • 在 RAG 设置中,请使用 RepeatingQueryTransformer 重复检索查询,而不是重复最终增强提示词
  • 该模块为实验性功能,因此 API 与行为可能在未来版本中变化

何时使用

当你希望在 LangChain4j 中以现成方式应用提示词重复时使用本模块,而不是将其当作通用的默认提示词策略。

  • PromptRepetitionMode.AUTO 开始
  • 优先用于非推理或低推理工作负载
  • 在你自己的提示词、模型与任务上用 A/B 测试评估
  • 除非有明确理由放宽,否则保持默认安全约束
  • 将改进视为依赖工作负载,而非保证收益