gpt4 book ai didi

c# - Microsoft Bot 框架状态管理

转载 作者:行者123 更新时间:2023-12-03 22:01:08 24 4
gpt4 key购买 nike

我们正在更新 MBF 机器人,以便在 Azure 表存储中管理其状态。我们根据文档更改了代码来注册我们的表格存储提供程序:

protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
var builder = new ContainerBuilder();
var store = new TableBotDataStore("...");

builder.Register(c => store)
.Keyed<IBotDataStore<BotData>>(AzureModule.Key_DataStore)
.AsSelf()
.SingleInstance();

builder.Register(c => new CachingBotDataStore(store,
CachingBotDataStoreConsistencyPolicy
.ETagBasedConsistency))
.As<IBotDataStore<BotData>>()
.AsSelf()
.InstancePerLifetimeScope();

var config = GlobalConfiguration.Configuration;

var container = builder.Build();
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
}

现在,在对话框中我们使用以下内容来存储和加载用户数据:

context.PrivateConversationData.SetValue<UserData>(UserDataRepositoryKey, userData);

有趣的是,对话框状态似乎得到了维护,但我们看不到 Azure 表中的任何内容,我真的怀疑是否有任何调用正在访问该存储。该文档对于如何正确使用状态非常不清楚。

问题:

  1. 我们的容器注册看起来正确吗?它应该在 app_start 处还是我们应该为每个请求注册它?

  2. 我们是否在对话期间使用正确的方法来存储状态?

最佳答案

您似乎没有更新Conversation 容器。您需要使用 Conversation.UpdateContainer 方法。

Conversation.UpdateContainer(
builder =>
{
builder.Register(c => store)
.Keyed<IBotDataStore<BotData>>(AzureModule.Key_DataStore)
.AsSelf()
.SingleInstance();

builder.Register(c => new CachingBotDataStore(store,
CachingBotDataStoreConsistencyPolicy
.ETagBasedConsistency))
.As<IBotDataStore<BotData>>()
.AsSelf()
.InstancePerLifetimeScope();


});

有关该主题的文档可以在 https://learn.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-state-azure-table-storage 找到和一个样本 https://github.com/Microsoft/BotBuilder-Azure/tree/master/CSharp/Samples/AzureTable .

关于c# - Microsoft Bot 框架状态管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47650345/

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