1. 示例选择器概述
在构建基于大语言模型(LLM)的应用时,少样本提示(Few-shot Prompting)是一种非常有效的技术。它通过在提示中包含少量示例,帮助模型更好地理解任务要求。但随之而来的问题是:如何从大量候选示例中选择最合适的子集?
示例选择器(Example Selector)就是解决这个问题的关键组件。它主要解决三个核心矛盾:
- 示例数量与模型性能的关系:通常更多示例能带来更好效果,但存在收益递减点
- 提示长度与计算成本的关系:更长提示意味着更高API调用成本和延迟
- 上下文窗口限制:所有主流LLM都有固定的上下文长度限制
我在实际项目中发现,合理使用示例选择器可以将提示效率提升40%以上,同时保持模型输出质量。下面详细介绍LangChain中四种主流的示例选择策略。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 长度选择器(LengthBasedExampleSelector)
2.1 工作原理与配置
长度选择器是最基础的选择策略,它根据预设的最大长度阈值来筛选示例。其核心逻辑是:
- 计算当前提示已占用的长度
- 按优先级顺序添加示例,直到达到max_length限制
- 默认使用空格和换行符作为分隔符计算"单词"数
配置示例:
python复制from langchain.prompts import FewShotPromptTemplate
from langchain.prompts.example_selector import LengthBasedExampleSelector
examples = [
{"input": "happy", "output": "sad"},
{"input": "tall", "output": "short"},
{"input": "energetic", "output": "lethargic"},
{"input": "sunny", "output": "rainy"},
{"input": "windy", "output": "calm"},
]
example_selector = LengthBasedExampleSelector(
examples=examples,
max_length=25, # 最大长度阈值
)
prompt = FewShotPromptTemplate(
example_selector=example_selector,
# ...其他模板配置
)
2.2 实战注意事项
-
长度计算方式:
- 默认按空格/换行分割
- 可通过
get_text_length参数自定义计算逻辑 - 中文场景建议重写为按字符或分词结果计数
-
阈值设置经验:
- 一般保留20%上下文窗口作为缓冲
- 例如GPT-4的32k窗口,建议max_length设为25k左右
- 需考虑模板本身占用的基础长度
-
排序策略:
- 默认保持原始顺序
- 可通过预处理e
