部门网站建设的意义设计师培训班费用

当前位置: 首页 > news >正文

部门网站建设的意义,设计师培训班费用,页面跳转英文,网站开发为什么采取ssh框架报时机器人源码参考[1][2]#xff0c;本文重点介绍当 tracker_store 类型为 SQL 时#xff0c;events 表的表结构以及数据是如何生成的。以及当 event_broker 类型为 SQL 时#xff0c;events 表的表结构以及数据是如何生成的。 一.报时机器人启动 [3] Rasa 对话系统启动方…  报时机器人源码参考[1][2]本文重点介绍当 tracker_store 类型为 SQL 时events 表的表结构以及数据是如何生成的。以及当 event_broker 类型为 SQL 时events 表的表结构以及数据是如何生成的。 一.报时机器人启动 [3] Rasa 对话系统启动方式详见参考文献[3]中执行程序部分这里不再赘述。如下所示 1.加载模型rasa run –cors * 2.运行 action serverrasa run actions 3.运行 Web 页面python -m http.server 8080 二.(tracker_store)endpoints.yml 和 events 表结构 使用 mysql 数据库来存储对话使用 MySQL 新建 db 为 rasa_tracker_store其中字符集和排序规则分别为 utf8mb4 – UTF-8 Unicode 和 utf8mb4_0900_ai_ci。 1.endpoints.yml 配置文件 tracker_store:type: SQLdialect: mysqlpymysqlurl: localhost # your mysql hostdb: rasa_tracker_store # name of the mysql databaseusername: root # username to access the databasepassword: root # password to access the database2.新建数据库 rasa_tracker_store 3.events 表结构 1id主键 id 2sender_id发送者 id 3type_nameevent 的类型名字 4timestamp时间戳 5intent_name意图名字 6action_nameaction 名字 7data数据 4.events 表数据内容 以用户问“今天星期几”机器答星期三为例子展开介绍。 生成的 rasa_tracker_store.events 数据表内容如下所示 1id主键 id。 这个自增主键就不用多说了。 2sender_id发送者 id。 比如oCMNVZ44YCbHIcFYAAAB。这个数据是如何来的生成的规则是什么呢 sender_id 是在 SQLTrackerStore 类中的 SQLEvent 子类中初始化的。SQLEvent 子类是 SQLAlchemy 的一部分用于在数据库中创建一个表。在这个表中sender_id 是一个字段它的类型是字符串最大长度为 255并且它被设置为非空nullableFalse并且为其创建了索引indexTrue。这意味着在数据库中sender_id 字段不能为 null并且可以被快速查找。 sender_id 是在创建 DialogueStateTracker 对象时传入的一个参数它通常用于标识对话的发送者。在 Rasa 中每个对话都有一个唯一的 sender_id这样可以区分不同的用户会话。在 from_events 类方法中sender_id 是作为第一个参数传入的。这个方法用于从一系列事件中创建一个 DialogueStateTracker 对象。这些事件会被应用到新的跟踪器上以重建其状态。生成 sender_id 的具体规则取决于你的应用当客户端是 Rasa Shell、Rasa X、HTTP API 等的时候都不相同。由于本次使用的是 Socket 方式可以顺藤摸瓜去找 sender_id 的具体生成规则这里不再细节展开。rasa/core/channels/socketio.py 如下所示 3type_nameevent 的类型名字。 比如action、session_started、user、slot、user_featurization、bot。这个数据是什么除了这个数据还有其它的类型名字吗列出全部。rasa/shared/core/events.py 如下所示 序号事件类事件类型名字备注1Event(ABC)类“event”描述对话中的事件以及它们如何影响对话状态。用户与助手进行对话期间发生的所有事情的不可变表示。告诉 rasa.shared.core.trackers.DialogueStateTracker 如何在事件发生时更新其状态。2UserUttered(Event)“user”用户对机器人说了些什么。作为副作用将在 Tracker 中创建一个新的 Turn。3DefinePrevUserUtteredFeaturization(SkipEventInMDStoryMixin)“user_featurization”存储 action 是基于文本还是意图预测的信息。4EntitiesAdded(SkipEventInMDStoryMixin)“entities”用于将提取的实体添加到 tracker 状态的事件。5BotUttered(SkipEventInMDStoryMixin)“bot”机器人对用户说了些什么。此类在故事训练中不使用因为它包含在 ActionExecuted 类中。在 Tracker 中进行了记录。6SlotSet(Event)“slot”用户已指定其对 slot 值的偏好。每个 slot 都有一个名称和一个值。此事件可用于在对话中设置 slot 的值。作为副作用Tracker 的插槽将被更新以便 tracker.slots[key]value。7Restarted(AlwaysEqualEventMixin)“restart”对话应该重新开始历史记录被擦除。与删除所有事件不同可以使用此事件来重置跟踪器状态例如忽略任何过去的用户消息并重置所有插槽。8UserUtteranceReverted(AlwaysEqualEventMixin)“rewind”机器人会撤消最近的用户消息之前的所有内容。机器人将撤消最新的 UserUttered 之后的所有事件这也意味着跟踪器上的最后一个事件通常是 action_listen机器人正在等待新的用户消息。9AllSlotsReset(AlwaysEqualEventMixin)“reset_slots”所有插槽都重置为其初始值。如果要保留对话历史记录并仅重置插槽则可以使用此事件将所有插槽设置为其初始值。10ReminderScheduled(Event)“reminder”在给定时间安排异步触发用户意图。如果需要触发的意图可以包括实体。11ReminderCancelled(Event)“cancel_reminder”取消某些工作。12ActionReverted(AlwaysEqualEventMixin)“undo”机器人撤消了最后的操作。机器人会撤消最近的操作之前的所有内容。这包括操作本身以及操作创建的任何事件例如设置插槽事件-机器人现在将使用最近操作之前的状态来预测新操作。13StoryExported(Event)“export”故事应该转储到文件。14FollowupAction(Event)“followup”排队后续操作。15ConversationPaused(AlwaysEqualEventMixin)“pause”忽略用户的消息让人类接管。作为副作用Tracker 的 paused 属性将被设置为 True。16ConversationResumed(AlwaysEqualEventMixin)“resume”机器人接管对话。PauseConversation 的反义词。作为副作用Tracker 的 paused 属性将被设置为 False。17ActionExecuted(Event)“action”操作描述了执行的操作 其结果。它包括一个操作和一个事件列表。操作将附加到 Tracker.turns 中的最新 Turn。18AgentUttered(SkipEventInMDStoryMixin)“agent”agent 对用户说了些什么。由于它包含在 ActionExecuted 类中因此此类在故事训练中不使用。在 Tracker 中进行了条目。19ActiveLoop(Event)“active_loop”如果给出了 name使用 name 激活循环否则停用活动循环。20LegacyForm(ActiveLoop)“form”旧 Form 事件的旧版处理程序。ActiveLoop 事件曾被称为 Form。这个类是为了处理旧的遗留事件这些事件是使用旧的类型名称 form 存储的。21LoopInterrupted(SkipEventInMDStoryMixin)“loop_interrupted”FormPolicy 和 RulePolicy 添加的事件。通知表单操作是否验证用户输入。22LegacyFormValidation(LoopInterrupted)“form_validation”旧 FormValidation 事件的旧版处理程序。LoopInterrupted 事件曾被称为 FormValidation。这个类是为了处理旧的遗留事件这些事件是使用旧的类型名称 form_validation 存储的。23ActionExecutionRejected(SkipEventInMDStoryMixin)“action_execution_rejected”通知 Core 操作的执行已被拒绝。24SessionStarted(AlwaysEqualEventMixin)“session_started”标记新会话会话的开始。 4timestampUnix 时间戳。 比如1704300000转换后的日期时间2024-01-03 16:40:00。Unix 时间戳是指从 1970 年 1 月 1 日 00:00:00UTC协调世界时开始的秒数。 from datetime import datetimetimestamp 1704300000 date_object datetime.utcfromtimestamp(timestamp)print(转换后的日期时间, date_object)5intent_name意图名字 比如query_weekday。报时机器人总共的意图包括 greet、goodbye、query_time、query_date、query_weekday。对应的例子如下所示 version: 3.0 nlu:- intent: greetexamples: |- 你好- 您好- hello- hi- 喂- 在么- intent: goodbyeexamples: |- 拜拜- 再见- 拜- 退出- 结束- intent: query_timeexamples: |- 现在几点了- 什么时候了- 几点了- 现在什么时候了- 现在的时间- intent: query_dateexamples: |- 今天几号- 今天是几号- 昨天几号- 明天几号- 今天的日期- 今天几号了- 明天的日期- 几号- intent: query_weekdayexamples: |- 今天星期几- 明天星期几- 昨天星期几- 今天是星期几- 星期几6action_nameaction 名字 比如action_session_start会话开始、action_listen机器人处于监听状态机器人每次回答完毕后都会处于监听状态、date日期实体、action_query_weekday自定义 action。除此之外还有哪些 action_name 呢列出全部。rasa/core/actions/action.py 如下所示 序号动作类动作名字备注1ActionNotImplementedError响应对话状态的下一个操作。2ActionBotResponse(Action)——一个动作其唯一效果是在运行时发出响应。3ActionEndToEndResponse(Action)——动作以端到端响应向用户发出响应。4ActionRetrieveResponse(ActionBotResponse)——查询响应选择器以获取适当的响应的操作。5ActionBack(ActionBotResponse)“action_back”将跟踪器状态恢复两个用户话语。6ActionListen(Action)“action_listen”任何回合中的第一个动作-机器人等待用户消息。机器人应停止采取进一步的操作并等待用户说些什么。7ActionRestart(ActionBotResponse)“action_restart”将跟踪器重置为其初始状态。如果可用则发出重启响应。8ActionSessionStart(Action)“action_session_start”应用一个对话会话开始将上一个会话中的所有 SlotSet 事件应用于新会话。9ActionDefaultFallback(ActionBotResponse)“action_default_fallback”执行回退操作并返回对话的上一个状态。10ActionDeactivateLoop(Action)“action_deactivate_loop”停用活动循环。11RemoteAction(Action)————12ActionRevertFallbackEvents(Action)“action_revert_fallback_events”撤消 TwoStageFallbackPolicy 期间完成的事件。这将撤消在 TwoStageFallbackPolicy 的回退期间完成的用户消息和机器人话语。通过这样做不需要为不同的路径编写自定义故事而只需要编写快乐的路径。这已被弃用一旦删除 TwoStageFallbackPolicy就可以删除它。13ActionUnlikelyIntent(Action)“action_unlikely_intent”一个动作指示 NLU 预测的意图是意外的。此操作可以由 UnexpecTEDIntentPolicy 预测。14ActionDefaultAskAffirmation(Action)“action_default_ask_affirmation”默认实现询问用户确认他的意图。建议使用自定义操作覆盖此默认操作以获得更有意义的确认提示。例如。具有意图的描述而不是其标识符名称。15ActionDefaultAskRephrase(ActionBotResponse)“action_default_ask_rephrase”默认实现询问用户重新表达他的意图。16ActionSendText(Action)“action_send_text”向输出通道发送文本消息。17ActionExtractSlots(Action)“action_extract_slots”每个用户回合后自动运行的默认操作。在下一个预测的操作运行之前在 MessageProcessor.handle_message…中自动执行操作。根据分配的槽映射将插槽设置为从用户消息中提取的值。18ACTION_TWO_STAGE_FALLBACK_NAME“action_two_stage_fallback”——19ACTION_VALIDATE_SLOT_MAPPINGS“action_validate_slot_mappings”——20RULE_SNIPPET_ACTION_NAME“…”—— 7data数据 取出一条 data 数据字段进行 json 显示如下所示 {event: action,timestamp: 1704297163.3703225,metadata: {model_id: 4ca8c86f1301497f9488c47c860f39fd,assistant_id: 20240103-232935-excited-category},name: action_session_start,policy: null,confidence: 1.0,action_text: null,hide_rule_turn: false }event事件的名字。列出全部timestamp时间戳。metadata-model_id模型 id。这个并不是模型的名字比如训练的报时机器人模型为 20240103-233232-windy-borzoi.tar.gz。metadata-assistant_id这个是 config.yml 文件中定义的 assistant_id: 20240103-232935-excited-category。nameaction 的名字。policy使用的策略。confidence置信度。action_text动作文本即端到端机器人响应的文本。hide_rule_turn是否隐藏规则回合。 上述字段大都来自于 ACTION_EXECUTEDrasa/shared/utils/schemas/events.pyACTION_EXECUTED 是一个字典它定义了 Rasa 中 “action” 事件的 JSON schema。这个 schema 描述了 “action” 事件的数据结构包括它的属性和这些属性的类型。如下所示 ACTION_EXECUTED {properties: {event: {const: action},policy: {type: [string, null]},confidence: {type: [number, null]},name: {type: [string, null]},hide_rule_turn: {type: boolean},action_text: {type: [string, null]},} }在 ACTION_EXECUTED schema 中相关属性解释如下所示 event: 这是一个常量值为 “action”表示这是一个 “action” 事件。policy: 这是一个字符串表示执行这个动作的策略的名称。它也可以为 null。confidence: 这是一个数字表示执行这个动作的策略的置信度。它也可以为 null。name: 这是一个字符串表示执行的动作的名称。它也可以为 null。hide_rule_turn: 这是一个布尔值表示是否隐藏规则回合。action_text: 这是一个字符串表示动作的文本。它也可以为 null。 这个 schema 用于验证 “action” 事件的数据是否符合预期的格式。如果一个 “action” 事件的数据不符合这个 schema那么在处理这个事件时Rasa 将会抛出一个错误。 5.action 和 event 间的关系 在 Rasa 中动作action和事件event是两个不同但相关的概念。如下所示 1action 动作是在对话中执行的一些操作例如向用户发送消息、调用外部服务、或者进行自定义的计算。在 Rasa 中动作通常与对话策略相关联用于决定在特定的对话状态下应该执行哪个动作。动作由自定义的动作类或内置的动作类实现它们被定义为继承自 Action 类。 2event 事件是对话中的状态更改的表示例如用户的输入、机器人的响应、槽位的更新等。在 Rasa 中对话的历史记录是一系列事件的集合。事件被用于跟踪对话的状态对话管理器使用事件来更新对话状态。不同的事件类型表示不同的对话动作和状态变化。 3两者关系 当动作执行时通常会生成一个或多个事件这些事件描述了对话状态的变化。每个对话轮次中都会有一系列事件包括用户的输入事件例如 UserUttered、动作执行事件例如 ActionExecuted、槽位更新事件例如 SlotSet、机器人响应事件例如 BotUttered等。 在对话中动作和事件密切相互关联。动作执行时会触发事件这些事件进而影响对话状态的演进。一般来说对话的历史记录中的事件序列描述了对话的全貌对话管理器利用这些事件来进行决策。
三.(event_broker)endpoints.yml 和 events 表结构 1.endpoints.yml 配置文件 使用 mysql 数据库来消息队列如下所示 event_broker:type: SQLurl: localhostport: 3306dialect: mysqlpymysqlusername: rootpassword: rootdb: rasa_event_broker2.新建数据库 rasa_tracker_store 创建数据库方式与 rasa_tracker_store 相同这里不再赘述。 3.events 表结构 生成的 rasa_event_broker.events 数据表内容如下所示 1id主键 id 2sender_id发送者 id 3data数据 4.events 表数据内容 取出一条 data 数据字段进行 json 显示如下所示 {sender_id: oCMNVZ44YCbHIcFYAAAB,event: action,timestamp: 1704297163.3703225,metadata: {model_id: 4ca8c86f1301497f9488c47c860f39fd,assistant_id: 20240103-232935-excited-category},name: action_session_start,policy: null,confidence: 1.0,action_text: null,hide_rule_turn: false }发现 event_broker.events.data 和 tracker_store.events.data 相比除了多一个 sender_id 字段其它的都是一样的。跟踪源码发现如下所示 执行顺序是先发布新的 tracker 事件集合到 event_broker然后逐一遍历 event并将其存储到 tracker_store.event 表中。
四.EventBroker 类和 SQLEventBroker(EventBroker)类 1.EventBroker 类 2.SQLEventBroker(EventBroker)类 SQLEventBroker(EventBroker)类有个内部类 SQLBrokerEvent(Base)定义了 events 的 3 个字段分别为 id、sender_id 和 data。剩下的基本是对 EventBroker 基类中方法的具体实现。rasa/core/brokers/sql.py 如下所示 五.TrackerStore 类和 SQLTrackerStore 类 1.TrackerStore 类 表示所有 TrackerStore 的公共行为和接口如下所示 2.SQLTrackerStore 类 对 TrackerStore 基类的实现包括 InMemoryTrackerStore、RedisTrackerStore、DynamoTrackerStore、MongoTrackerStore、SQLTrackerStore。SQLTrackerStore(TrackerStore, SerializedTrackerAsText)类有个内部类 SQLEvent(Base)定义了 events 的 7 个字段分别为 id、sender_id、type_name、timestamp、intent_name、action_name 和 data。剩下的基本是对 TrackerStore 基类中方法的具体实现。rasa/core/tracker_store.py 如下所示 参考文献 [1] rasa-v2024010701报时机器人源码https://github.com/ai408/nlp-engineering/tree/main/知识工程-对话系统/公众号代码/rasa-v2024010701 [2] 报时机器人的 rasa shell 执行流程分析https://z0yrmerhgi8.feishu.cn/wiki/CvASwk5SmiYkCXkqONycSxVfnJg [3] 打通 Rasa Action Server 和 LLM 接口的尝试方法https://z0yrmerhgi8.feishu.cn/wiki/UQa0wQBeJi6K7oknz2wcaSTnnNb [4] 以报时机器人为例详细介绍tracker_store和event_brokerhttps://z0yrmerhgi8.feishu.cn/wiki/SQSGwzYR7iKSNukQDKicz1Vqnvg