我们听到的一个常见抱怨是,默认的提示模板并非对所有模型都同样有效。当 OpenAI 发布 ChatGPT API 时,这个问题在本周变得尤为突出。这个新的 API 具有一个全新的界面(这需要新的抽象概念),因此许多用户注意到旧的提示不再有效。尽管我们迅速添加了对这个模型的支持,但许多用户注意到,对 GPT-3 效果良好的提示模板在聊天设置中效果不佳。
所有链都公开了自定义这些提示模板的方法,因此始终可以选择让用户传入效果更好的提示。但我们希望做得更好。拥有带有默认提示模板的链的目标之一是提供“开箱即用”的功能。如果不同的模型期望不同类型的提示,这就会失效。
我们对此的解决方案是引入 PromptSelector
的概念。我们不会为每个链定义默认的 PromptTemplate
,而是转向为每个链定义一个 PromptSelector
。如果用户未指定提示,PromptSelector
将根据传入的模型选择要使用的 PromptTemplate
。
有关此操作的示例,请查看以下示例
Python
代码片段
PROMPT_SELECTOR = ConditionalPromptSelector(
default_prompt=PROMPT, conditionals=[(is_chat_model, CHAT_PROMPT)]
)
在 JS/TS 中
代码片段
export const QA_PROMPT_SELECTOR = new ConditionalPromptSelector(
DEFAULT_QA_PROMPT,
[[isChatModel, CHAT_PROMPT]]
);
这两个示例都显示了相同的内容。我们定义了一个默认提示,但如果满足条件(isChatModel
),我们会切换到不同的提示。这也可以扩展到任意列表的“条件”和相应的提示“
这是一个非常简单的概念,但我们希望它能为我们(和其他开发者)提供灵活性,以便为任何模型定义“开箱即用”的链。尽管当前的用例是在 ChatModels(如 ChatGPT)与更传统的模型(如 GPT-3)之间切换提示,但我们也设想这允许在不同的模型提供商(例如 OpenAI 与 Cohere)甚至模型版本(例如 GPT-3 与 GPT-4)之间进行切换。
过渡到这些选择器需要一些时间,但我们从一些更流行的链开始,并打算尽快完成过渡。与往常一样,非常感谢社区的反馈和帮助!