gpt4 book ai didi

node.js - MS Bot 框架中可用的状态保存方法存在困惑

转载 作者:太空宇宙 更新时间:2023-11-03 23:23:00 25 4
gpt4 key购买 nike

我正在 Node.JS 中使用 MS Bot 框架开发一个机器人。我正在查看有关保存/检索用户与机器人对话状态的各种方法的文档。

根据我的理解,对于每个机器人,每个用户都是不同的对话。例如我有 2 个机器人,BOT-A 和 BOT-B。具有 Skype ID abc.skype 的用户可以访问这些机器人。对于每个机器人,将使用不同的对话 ID 和用户 ID 来识别该用户。 IE。对于 BOT-A,用户的对话 ID 将为“ABC”;对于 BOT-B,用户的对话 ID 将为“XYZ”。 session对象中的userID字段将保存可以识别用户的数据,例如用户在 channel 中公开可见的名称。

根据文档 ( saving-state )

userData stores information globally for the user across all conversations.

  1. 这里的全局是什么意思?
  2. “跨越所有对话”是什么意思?

conversationData stores information globally for a single conversation. This data is visible to everyone within the conversation so exercise with care when storing data to this property. It’s enabled by default and you can disable it using the bot's persistConversationData setting.

  1. 单一对话是什么意思?
  2. 哪些数据对所有人可见?数据如何可见每个人,当由机器人决定时,发送什么响应回复或每个用户消息?每个人都是谁?

privateConversationData stores information globally for a single conversation but it is private data specific to the current user. This data spans all dialogs so it’s useful for storing temporary state that you want cleaned up when the conversation ends.

dialogData persists information for a single dialog instance. This is essential for storing temporary information in between the steps of a waterfall in a dialog.

保存状态的实际存储机制/位置是什么?我的意思是,如果我在 session.userData 中保存一些数据并在一周后为同一用户访问它,我为什么会得到相同的数据。数据实际保存在哪里?

如果我将 persistUserDatapersistConversationData 设置为 false 会发生什么?这是否意味着用户数据和对话数据将不会被持久化。如果是,那么这本质上意味着我无法保存数据。不是吗?或者这意味着什么不同?

任何人都可以分享在同一个 session 中有多个用户的任何示例吗?或者演示这些不同数据保存方法的功能(优缺点)的示例。

我提到的资源:

https://learn.microsoft.com/en-us/bot-framework/nodejs/bot-builder-nodejs-state

最佳答案

我理解这些概念的混合,当您没有尝试多个 channel 并查看所有消息字段时,管理起来有点困难!

关于您最初陈述的一些要点:

This user will be identified using a different conversationID & userIDfor each bot

这并不完全正确:

  • UserId:对于某些 channel ,不同机器人的 userId 可以相同,例如 SMS,其中 userId 是电话号码。对于其他人来说,它在像 Messenger 这样的机器人之间发生变化,其中 userId 是页面范围的 ID。
  • ConversationId:是的,您不能在 2 个单独的机器人中为 2 个用户使用相同的对话 ID。但在某些 channel 中,同一用户也会有多个对话 ID。在某些机器人可以进行群组对话的 channel 中,每个用户的对话 ID 都是相同的。

The userID field in session object will hold data which can identifythe user, such as user's publicly visible name in the channel.

它是User字段,包含Id(用户 key )和Name(公开可见的名称)。

<小时/>

然后回答你的问题:

userData stores information globally for the user across allconversations.

对于某个 channel ,特定 UserId 的所有对话之间的 userData 是一致的!它不是跨 channel 的,因为没有跨 channel 的 Id

<小时/>

conversationData stores information globally for a singleconversation. This data is visible to everyone within the conversationso exercise with care when storing data to this property. It’s enabledby default and you can disable it using the bot'spersistConversationData setting.

正如我所说,在某些 channel 中,机器人可以处于群组对话中,因此每个用户的对话 ID 都是相同的,并且对话数据中的信息对于对话中的每个用户都是相同的

如果您想在此对话中保留有关特定用户的信息,请使用 privateConversationData(如果必须在此对话中保留更多信息,则使用 userData)。

我认为文档非常清楚在哪里做什么:

These four properties correspond to the four data storage containersthat can be used to store data. Which properties you use to store datawill depend upon the appropriate scope for the data you are storing,the nature of the data that you are storing, and how long you want thedata to persist. For example, if you need to store user data that willbe available across multiple conversations, consider using theuserData property. If you need to temporarily store local variablevalues within the scope of a dialog, consider using the dialogDataproperty. If you need to temporarily store data that must beaccessible across multiple dialogs, consider using theconversationData property.

<小时/>

What is actual storage mechanism/location for saving state? By this Imean that if I save some data in session.userData and access it aftera week for the same user, how come I get the same data. Where is thedata saved actually?

如果您处于同一 channel 并获得相同的 userId,您将获得相同的数据。

提供了一个用于测试的存储(托管在机器人连接器中?),但它不是为生产而设计的,并且已被弃用。对于数据的位置,您必须使用 CosmosDB 或 TableStorage 实现自己的存储:https://learn.microsoft.com/en-us/bot-framework/nodejs/bot-builder-nodejs-state

<小时/>

What happens if I set persistUserData & persistConversationData tofalse? Does that mean userData & conversationData will not bepersisted.

是的,对话结束时不会持续。

If yes, then it essentially means that I cannot save data.Isn't it? Or does this mean something different?

不,这意味着对话结束后您将无法再次获取此数据,仅此而已。

<小时/>

Can anyone share any example where there are multiple users in sameconversations? Or an example which demonstrates capabilities(pros &cons) of these various data saving methods.

=> 例如,Slack channel ,将机器人部署在“ channel ”中(不是与机器人进行私有(private) DM 对话)!

您将看到 ConversationId 类似于 Bxxxxxxxx:Txxxxxxxx:Cxxxxxxxx,其中 Bxxxxxxxx 是您的机器人的 Slack ID,Txxxxxxxx 是您的 Slack 的团队 ID,Cxxxxxxxx 是您当前的 channel Slack 的 ID

当我查看事件字段时,我的一项测试中的示例:

  • Conversation.Id= Bxxxxxxxx:Txxxxxxxx:Cxxxxxxxx,
  • Conversation.Name= 一般,(我使用机器人的 Slack channel 的名称)
  • From.Id= Uxxxxxxxx:Txxxxxxxx,(我的 Slack 的用户 ID)
  • From.Name= nicolas,(我的 Slack 的用户名)
  • Recipient.Id= Bxxxxxxxx:Txxxxxxxx,(我的机器人的 Slack ID)
  • Recipient.Name= myBotName(我的机器人的 Slack 名称)

关于node.js - MS Bot 框架中可用的状态保存方法存在困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47792313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com