LangChain-KR项目中的PromptTemplate使用指南
什么是PromptTemplate?
PromptTemplate是LangChain框架中一个强大的工具,它允许开发者创建可重用的提示模板,通过变量替换生成最终的提示文本。在自然语言处理应用中,合理使用PromptTemplate可以显著提高开发效率和提示的一致性。
为什么需要PromptTemplate?
在构建基于大语言模型(LLM)的应用时,我们经常需要:
- 重复使用相似的提示结构
- 动态插入变量内容
- 保持提示风格的一致性
- 便于后期维护和修改
PromptTemplate正是为解决这些问题而设计的。
基本使用方法
方法1:使用from_template()创建模板
from langchain_core.prompts import PromptTemplate
# 定义包含变量的模板
template = "{country}의 수도는 어디인가요?"
# 创建PromptTemplate对象
prompt = PromptTemplate.from_template(template)
# 格式化提示
formatted_prompt = prompt.format(country="대한민국")
print(formatted_prompt)
这种方法简单直观,适合快速创建简单的提示模板。
方法2:显式指定输入变量
prompt = PromptTemplate(
template=template,
input_variables=["country"], # 显式声明变量
)
这种方式提供了额外的验证层,确保模板中使用的变量与声明的变量一致,避免运行时错误。
高级功能
部分变量(Partial Variables)
当某些变量需要在多个提示中保持相同值时,可以使用部分变量:
prompt = PromptTemplate(
template="{country1}과 {country2}의 수도는 각각 어디인가요?",
input_variables=["country1"],
partial_variables={"country2": "미국"} # 固定值
)
动态部分变量
更强大的是,我们可以使用函数作为部分变量:
from datetime import datetime
def get_today():
return datetime.now().strftime("%B %d")
prompt = PromptTemplate(
template="오늘의 날짜는 {today} 입니다. 오늘이 생일인 유명인 {n}명을 나열해 주세요.",
input_variables=["n"],
partial_variables={"today": get_today} # 动态函数
)
链式调用
PromptTemplate可以轻松集成到LangChain的处理链中:
chain = prompt | llm # 将提示模板与语言模型连接
result = chain.invoke(3) # 执行链
文件加载模板
LangChain支持从YAML等文件加载模板:
from langchain_core.prompts import load_prompt
prompt = load_prompt("prompts/fruit_color.yaml", encoding="utf-8")
formatted_prompt = prompt.format(fruit="사과")
这种方式适合管理大量复杂的提示模板。
ChatPromptTemplate
对于对话场景,可以使用ChatPromptTemplate:
from langchain_core.prompts import ChatPromptTemplate
chat_template = ChatPromptTemplate.from_messages([
("system", "당신은 친절한 AI 어시스턴트입니다. 이름은 {name} 입니다."),
("human", "반가워요!"),
("ai", "안녕하세요! 무엇을 도와드릴까요?"),
("human", "{user_input}"),
])
messages = chat_template.format_messages(
name="테디",
user_input="당신의 이름은 무엇입니까?"
)
MessagePlaceholder
当需要动态插入对话历史时,可以使用MessagePlaceholder:
from langchain_core.prompts import MessagesPlaceholder
chat_prompt = ChatPromptTemplate.from_messages([
("system", "당신은 요약 전문 AI 어시스턴트입니다."),
MessagesPlaceholder(variable_name="conversation"),
("human", "지금까지의 대화를 {word_count} 단어로 요약합니다."),
])
最佳实践
- 模板设计:保持提示清晰简洁,明确指示期望的输出格式
- 变量命名:使用有意义的变量名,便于理解和维护
- 验证:使用input_variables进行显式验证
- 组织:复杂提示考虑使用外部文件管理
- 测试:对模板进行充分测试,确保变量替换正确
总结
PromptTemplate是LangChain中管理提示的强大工具,通过本文介绍的各种方法,开发者可以:
- 创建可重用的提示结构
- 灵活处理变量替换
- 构建复杂的对话流程
- 有效管理大量提示模板
掌握这些技巧将显著提升基于大语言模型的应用程序开发效率和质量。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考