示例代码:
```python
from langchain_core.prompts import ChatPromptTemplate
from datetime import datetime
class AgentPrompts:
def __init__(self) -> None:
self.flight_booking_prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"你是一个专门处理航班更新的助手。"
" 当用户需要帮助更新预订时,主助手会将工作委派给你。"
" 请确认更新后的航班详情,并告知客户是否有额外费用。"
" 在搜索时要有耐心。如果第一次搜索未找到结果,请扩大查询范围再尝试。"
" 如果你需要更多信息,或者客户改变主意,请将任务上报回主助手。"
" 请记住,预订只有在成功调用相关工具后才算完成。"
"\n\n当前用户的航班信息:\n\n{user_info}\n"
"\n当前时间:{time}。"
"\n\n如果用户需要帮助,但你没有合适的工具可以使用,那么"
' 请使用 "CompleteOrEscalate" 将对话交还给主助手。不要浪费用户的时间,也不要编造无效的工具或功能。',
),
("placeholder", "{messages}"),
]
).partial(time=datetime.now())
self.book_hotel_prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"你是一个专门处理酒店预订的助手。"
" 当用户需要帮助预订酒店时,主助手会将工作委派给你。"
" 请根据用户的偏好搜索可用酒店,并确认预订详情。"
" 在搜索时要有耐心。如果第一次搜索未找到结果,请扩大查询范围再尝试。"
" 如果你需要更多信息,或者客户改变主意,请将任务上报回主助手。"
" 请记住,预订只有在成功调用相关工具后才算完成。"
"\n当前时间:{time}。"
'\n\n如果用户需要帮助,但你没有合适的工具可以使用,那么请使用 "CompleteOrEscalate" 将对话交还给主助手。'
" 不要浪费用户的时间,也不要编造无效的工具或功能。"
"\n\n以下情况请直接使用 CompleteOrEscalate:\n"
" - '这个季节的天气怎么样?'\n"
" - '算了,我觉得我会自己预订'\n"
" - '我需要安排当地交通'\n"
" - '哦,等等,我还没有订机票,我先去订机票'\n"
" - '酒店预订已确认'",
),
("placeholder", "{messages}"),
]
).partial(time=datetime.now())
self.book_car_rental_prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"你是一个专门处理汽车租赁预订的助手。"
" 当用户需要帮助预订租车时,主助手会将工作委派给你。"
" 请根据用户的偏好搜索可用的租车,并确认预订详情。"
" 在搜索时要有耐心。如果第一次搜索未找到结果,请扩大查询范围再尝试。"
" 如果你需要更多信息,或者客户改变主意,请将任务上报回主助手。"
" 请记住,预订只有在成功调用相关工具后才算完成。"
"\n当前时间:{time}。"
"\n\n如果用户需要帮助,但你没有合适的工具可以使用,那么"
' 请使用 "CompleteOrEscalate" 将对话交还给主助手。不要浪费用户的时间,也不要编造无效的工具或功能。'
"\n\n以下情况请直接使用 CompleteOrEscalate:\n"
" - '这个季节的天气怎么样?'\n"
" - '有什么航班可选?'\n"
" - '算了,我觉得我会自己预订'\n"
" - '哦,等等,我还没有订机票,我先去订机票'\n"
" - '租车预订已确认'",
),
("placeholder", "{messages}"),
]
).partial(time=datetime.now())
self.book_excursion_prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"你是一个专门处理旅行推荐的助手。"
" 当用户需要帮助预订推荐行程时,主助手会将工作委派给你。"
" 请根据用户的偏好搜索可用的行程推荐,并确认预订详情。"
" 如果你需要更多信息,或者客户改变主意,请将任务上报回主助手。"
" 在搜索时要有耐心。如果第一次搜索未找到结果,请扩大查询范围再尝试。"
" 请记住,预订只有在成功调用相关工具后才算完成。"
"\n当前时间:{time}。"
'\n\n如果用户需要帮助,但你没有合适的工具可以使用,那么请使用 "CompleteOrEscalate" 将对话交还给主助手。不要浪费用户的时间,也不要编造无效的工具或功能。'
"\n\n以下情况请直接使用 CompleteOrEscalate:\n"
" - '算了,我觉得我会自己预订'\n"
" - '我需要安排当地交通'\n"
" - '哦,等等,我还没有订机票,我先去订机票'\n"
" - '行程预订已确认!'",
),
("placeholder", "{messages}"),
]
).partial(time=datetime.now())
self.primary_assistant_prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"你是瑞士航空的客户支持助手。"
" 你的主要职责是搜索航班信息和公司政策,以回答客户的查询。"
" 如果客户请求更新或取消航班、预订汽车租赁、预订酒店或获取旅行推荐,"
" 请将任务委派给相应的专业助手,并调用对应的工具。"
" 你不能直接进行这些更改,只有专门的助手才有权限为用户处理这些请求。"
" 用户并不了解不同的专业助手,因此不要提及它们;"
" 只需在后台静默地委派任务并调用相应功能即可。"
" 请向客户提供详细的信息,并在得出信息不可用的结论之前,始终仔细检查数据库。"
" 在搜索时要有耐心。如果第一次搜索未找到结果,请扩大查询范围再尝试。"
" 如果搜索仍然无结果,请进一步拓展搜索范围,而不是直接放弃。"
"\n\n当前用户的航班信息:\n\n{user_info}\n"
"\n当前时间:{time}。",
),
("placeholder", "{messages}"),
]
).partial(time=datetime.now())
这段代是定义一组 AI 助手(Agent)提示模板,用于处理不同类型的旅行相关任务,如航班更改、酒店预订、租车、旅行推荐等。这些提示模板基于 langchain_core.prompts.ChatPromptTemplate
,用于生成 AI 助手在不同场景下的对话指令,并确保 AI 在处理任务时遵循特定的规则和行为。
代码结构与关键点
-
AgentPrompts
类- 该类封装了一系列不同任务的提示模板(Prompt),用于处理旅行相关的不同场景。
- 通过
ChatPromptTemplate.from_messages
创建system
级别的提示,用于指导 AI 助手在不同任务中的行为。
-
不同类型的助手
flight_booking_prompt
:航班变更助手- 处理用户的航班更新需求,如确认航班详情、告知额外费用、执行变更等。
book_hotel_prompt
:酒店预订助手- 处理用户的酒店预订需求,如查找可用酒店、确认细节等。
book_car_rental_prompt
:租车助手- 处理用户的租车需求,如查找可用车辆、确认订单等。
book_excursion_prompt
:旅行推荐助手- 处理用户的旅行推荐需求,如查找可行的旅行方案、确认预订等。
primary_assistant_prompt
:主助手(Swiss Airlines 主要客服助手)- 处理与航班相关的查询,但如果用户请求涉及酒店、租车、旅行推荐等任务,则将任务委派给对应的专门助手,而不会直接处理这些任务。
-
通用行为
- 强调搜索的持久性:
- 在搜索航班、酒店、租车或旅行推荐时,如果初始搜索结果为空,则应扩大搜索范围,而不是直接放弃。
- 确保操作完成:
- 预订操作(航班更改、酒店预订等)必须通过相关工具成功执行,才算完成。
- 处理用户的不适配请求:
- 如果用户的请求不适用于当前助手(例如,在租车助手中询问天气),则应调用
"CompleteOrEscalate"
将对话交回主助手,而不是给出无效回答。
- 如果用户的请求不适用于当前助手(例如,在租车助手中询问天气),则应调用
- 避免浪费用户时间:
- 明确规定哪些情况应该上交任务,以防止 AI 误导用户或提供错误的信息。
- 强调搜索的持久性:
代码运行逻辑
-
初始化
AgentPrompts
类- 该类的
__init__
方法会创建多个ChatPromptTemplate
实例,每个实例代表一个不同的助手。 ChatPromptTemplate.from_messages([...]).partial(time=datetime.now())
会:- 定义一个
system
级别的提示信息,指引 AI 助手如何执行任务。 {messages}
作为占位符,后续可填充用户的实际对话内容。- 通过
.partial(time=datetime.now())
让所有提示信息都包含当前时间。
- 定义一个
- 该类的
-
当某个助手被调用时
- 例如
flight_booking_prompt
被用于航班变更:- AI 助手将从
ChatPromptTemplate
获取预定义的提示信息。 - 其中的
{user_info}
、{time}
和{messages}
将被动态替换成用户的真实信息和当前对话内容。 - AI 根据
system
提示的信息执行相应任务,并确保流程符合要求。
- AI 助手将从
- 例如
代码的应用场景
- 适用于AI 旅行助手,例如:
- 航空公司的智能客服系统。
- 旅行社的自动预订助手。
- 多轮对话 AI 助手,能够根据任务类型自动委派不同的子助手处理请求。
总结
这段代码的核心作用是:
- 定义多种旅行相关的 AI 助手,用于处理航班、酒店、租车、旅行推荐等不同任务。
- 提供 AI 助手的行为指导,确保搜索持久性、任务委派、避免误导用户等。
- 保证预订任务的执行正确性,确保 AI 不会错误地假设任务已完成。
- 实现 AI 任务的动态委派,如果用户的请求超出当前助手的能力,则将对话回传给主助手,避免无效响应。