TurnPlanValidationResult
Action
无效
True
ProductAPIProvider \"api.product\"
上述两种类型都没有返回,将兜底id设置给state中活跃任务的task_id
1. 渲染回复信息添加到回复列表2. 获取下一步id3. 返回continue
生成补槽命令,启动当前活动,进入任务处理轨道
返回True
ClarifyResponder
条件成立,将成立步骤id赋值给state中活跃任务的task_id
command
list [BotMessage]
Provider对象类型及provider_id
调用validate()函数TurnPlan作为参数,进行校验
return
获取提示词模板
evaluate()函数bool(evel(evaluate))
知识块(chunks)
将当前活跃任务收集到的数据作为参数调用evaluate()函数
session = state.session.get_session 获取当前会话truns = session.get(turns) 获取本轮对话消息链式调用大模型,提示词参数对话历史:{{ history }} : HistoryBuilder.build(turns)构建当前用户消息:{{ user_message }}: HistoryBuilder.render_user_message(user_message)获取基础回复:{{ current_response }} : rendered_text or None
FlowExecutor
class KnowledgeProvider(ABC): provider_id = \"\
获取继承基类的子类组成列表即Provider对象列表
存储对话状态
events事件列表
TurnPlanner
封装id和参数参数
2.调用DialogueEngine引擎,处理消息,修改会话状态
对象类型
符合
合并
RAGProvider\"rag.default\"
创建链式调用
1.根据sender_id查询当前用户对话状态
TurnPlanValidationResult对象valid类型为boolreason为失败详细原因
_run_collect_step()
True | False
是否有活动流程
EndFlowStepcontinue
def load_prompt(file_name: str) - str: prompt_path = Path(__file__) / \"jinja2\" / f\"{file_name}.jinja2\" #构建提示词模板路径 return prompt_path.read_text(encoding='utf-8') #读取提示词模板内容返回
DialogueEngine大模型识别用户问题确认进入知识库轨道时\"intents\"字段中存储的值必须为任意Provider对象的provider_id,所以调用大模型时要有提示词规定
StartFlowCommand
否
构建提示词调用模型生成执行计划
获取TurnPlan
记录回复内容list [BotMessage]
MySQL
是
定义
创建链式调用,调用大模型
判断用户消息类型
DialogueService
active
BotMessage
OrderAPIProvider\"api.order\"
TurnPlan
dict(name : Action)
获取当前任务已收集的槽位值
不存在
3.存储DialogueState,返回ProcessResult
ConditionalLink条件边
GENERATE直接带哦用大模型生成回复消息
result
commands任务列表
SetSlotsCommand
使用jinja2渲染模板(step.template).render(slots = step.slots)
任务处理轨道
恢复任务
FallbackLink兜底
课程最后一天任务,完善engine代码将list[BotMessage]存入本轮对话并返回到前端
将active设置为None
闲聊处理轨道
直接将存储的下一步的id赋值给state中活跃任务的task_id
循环判断当前步骤类型
FAQProvider\"faq.default\"
存在
文本类型
None
clarify_message
遍历provider_ids获取provider对象
rendered_text
continue
用户前端输入消息文本消息 | 对象消息
检查处理计划是否明确、完整并且可以执行
知识库处理轨道
基类Action(ABC)
通过方法和参数远程调用
_run_collect_step
load_prompt() 加载提示词模板
不存在活动流程
intents
进行澄清
回填聚焦对象
STATIC直接渲染回复消息
取消任务
state
找出任务并从列表中移除
获取下一步id
ResponseRenderer.render()
_advance()函数遍历判断边的类型
load_prompt(\"模板文件名字\")
CommandProcessor
设置槽位
修改了全局状态中的活跃任务active
并发调用所有provider的retrieve方法获取所有知识块
自动注册,得到字典(即注册表)将Action子类创建到指定路径,系统启动是遍历此路径下模块,满足是Action子类且name重写的类添加到字典(注册表)中
获取到list[BotMessage]
REPHRASE渲染回复消息,调用大模型重写
将恢复任务设置到active
将当前任务设置到active
任务处理轨道(TaskHandler)
KnowledgeHandler
获取查询结果
ActionCall
判断槽位值是否符合要求
list [BotMessage]或者continue
provider对象定义和注册
启动任务
TaskLifecycleResponder
step.template
判断active是否为None
build_clarify_response()根据失败原因构建基础回复
根据提示词生成大模型回复
paused列表中
1. 远程调用获取槽位值2. 更新槽位值3. 获取下一步id
ActionFlowStepcontinue
对话接口 /api/chat1.转换统一消息格式,生成本轮消息标识2.调用DialogueService处理Message
有效
1. 判断当前槽位是否需要收集2. 需要收集 return3. 无需收集获取下一步id continue
DialogueEngine
{ \"task\": { \"commands\": [{ \"command\": \"start_flow\
False
根据intents获取provider_ids列表并去重
需要传入参数:1. \"reason\" -> 澄清原因2. \"clarify_message\" -> 基础回复3. \"focused_object\" -> 当前聚焦对象4. \"history\": history -> 历史对话5. \"user_message\" -> 当前用户问题
ChitchatResponder.respond
1. 获取下一步id,无其他作用2. 返回None
生成json字符串格式
返回Falise
不符合
构建提示词调用大模型获取回复
render函数判断回复模板类型
确定处理轨道任务/知识/闲聊
_advance() 获取下一步id
子类更改name字段,并重写run方法name字段与为存入id的键,task处理时获取远程调用的id必须为其中之一,所以大模型生成任务时要规范提示词,run为具体的远程调用方法
events
详细校验过程:1. TrunPlan对象中处理方式都为None2. TrunPlan对象中多个处理方式有值3. 处理方式为task时,commands为None4. 遍历commands中flow,根据类型进行不同校验 4.1. task为Start -> 校验flow是否注册在系统支持flows中 4.2 task为Cancel -> 校验flow是否在当前活跃任务或挂起任务列表中 4.3 taskResume -> 校验flow是否在挂起任务列表中 4.4 task为SetSlots -> 校验当前flow是否需要slots,且当前flow收集的slots是否为系统支持注册的slots5. 处理方式为konwledge时,intents为None6.遍历intents,其中任意intent未注册到系统支持intents集合中或intent聚焦对象类型与当前状态中聚焦对象类型不匹配
调用TurnPlan.from_dict()函数,将json字符作为参数传入,将大模型生成的计划转变为实体对象
_run_collect_step()判断是否需要收集信息
state.tasks.complete_active()将当前活动任务设为None
获取下一idcontinue
list[BotMessage]
需要传入参数:1. \"available_flows_json\" -> 任务处理支持任务2. \"knowledge_intents_json\" -> 知识库支持意图3. \"active_task_json\" -> 当前活跃任务列表4. \"paused_tasks_json”-> 挂起任务对象列表5. \"focused_object_json\" -> 聚焦任务对象6. \"current_conversation\" -> 历史会话记录7. \"user_message\" -> 用户问题
判断类型,返回BotMessage
CancelTaskCommand
ResumeTaskCommand
需填入参数user_message histroy -> HistoryBuilder.build()构建chunk -> 知识块(chunks)
需填入参数user_message histroy -> HistoryBuilder.build()构建
调用response() 函数
注册
TurnPlanValidator
准备当前会话和本轮对话记录
StaticLink无条件
记录任务状态list [BotMessage]
判断槽位值是否存在
存在活动流程
StartFlowStepcontinue
根据 id 获取注册表中的方法
Provider基类
构建链式调用
set_slots(result.slot_updates)更新state槽位值
条件不成立,进行下次循环
Provider对象需要继承基类,重命名provider_id,同时重写retrieve方法
渲染回复信息
CollectSlotStep
查询对话状态
尝试获取当前全局状态聚焦对象中获取槽位信息
ResponseFlowStepreturn list[BotMessage]