如何在机器人之间共享上下文?

How to share a context between bots?

我正在使用 Microsoft 机器人框架来实现一个简单的机器人到机器人通信场景。就我而言,我有一个 master-bot 和一个 skill-bot。我已经完成了他们的整合,以便大师点可以将对话传递给技能,技能可以继续。 我需要在机器人之间共享一些状态。所以,我创建了一个状态 属性 访问器:

    public static readonly string UserContextPropertyName = $"{typeof(RootBot<T>).FullName}.UserContextProperty";

    private readonly IStatePropertyAccessor<PatientResponce> _userContext;

并在OnTurnAsync方法中使用它

    await _userContext.SetAsync(turnContext, patientResponce);

很好,除了这个新的 属性 在技能的 OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken) turnContext 中不可用

为什么不 persist/pass-through?

P.S。在通过调用将对话传递给技能之前,我确实保存了状态:

  await _conversationState.SaveChangesAsync(turnContext, force: true, cancellationToken: cancellationToken);

P.S.S我也用

  var userState = new UserState(new BlobsStorage("..."))
  services.AddSingleton(userState);

Startup.cs中作为存储模型

好的,有一个解决方法,但对我来说没问题 - 也许有人觉得它有用:有一个 属性

turnContext.Activity.Value

好像是为附件设计的;它没有定义的类型 - 它只是一个对象。

所以我所做的只是将我的上下文作为序列化的 json 字符串存储在那里,并在另一端捕获它。我认为这是一个次优的解决方案——所以如果你这样做的话要小心装箱-取消开销