我正在使用Wit.ai创建一个聊天机器人,并尝试实现更具会话风格的交互。目前我有几个故事都需要一个位置才能运作但有些相关。以下是我现在与机器人交互的示例:
What is the weather in Los Angeles, CA?
Bot response
How many people live in Los Angeles, CA?
Bot response
但是我希望我的聊天机器人能够记住我在谈论洛杉矶所以互动会是这样的:
What is the weather in Los Angeles, CA?
Bot Response
How many people live there?
Bot Response
即使正在执行两个不同的故事。目前我能够通过添加一个额外的函数(我使用与使用合并相同的方式)和单个代码来实现这一点,我的代码从实体中提取值并存储它们以供以后根据会话信息使用:
session_info = {}
def _init_store(session_id):
global session_info
print "session info", session_info
if session_id in session_info:
pass
else:
s_info = {}
session_info[session_id] = s_info
def get_stored_info(session_id, key):
global session_info
try:
return session_info[session_id][key]
except:
return None
def add_stored_info(session_id, key, data):
_init_store(session_id)
global session_info
try:
session_info[session_id][key] = data
return True
except:
return False
我已经阅读了所有文档,并对他们所说的内容感到有些困惑。文档说这是关于上下文的:
Converse允许您构建会话应用。它允许你 预测您的应用应该在对话中的任何给定状态下执行的操作 基于当前上下文和用户查询。
上下文是您设法告诉Wit.ai当前的对象 谈话的状态。 Wit.ai能够预测下一步行动 你的机器人应该通过比较 - 除其他事项 - 上下文 在您的故事中描述了您发送给/ converse的故事 端点。 Wit永远不会自己更新上下文,你必须 管理您身边的上下文对象。通常有一个背景 每个会话的对象。除了帮助Wit.ai预测下一个 动作,上下文用于在模板中创建动态答案。
我读到这意味着机智将传递我管理的上下文对象并且不对其进行任何更改,这意味着我负责从中添加和删除键。然而,我还发现this表明“对话感知实体提取”尚未实现,所以我很困惑,如果这是可行的。
此外,我发现当我查看传递给每个故事执行函数的request['context']
的值时,无论之前添加或删除了什么,上下文的值都只是一个空字典,即使它在上面说,你的背景永远不会被机智所触动。
这可以用机智本身做,还是有机智的方式来达到这个目的,或者我现在正在做的最好的事情是什么?如果我不得不猜测它似乎还不支持但它似乎是一个基本的聊天机器人功能,而且文档很模糊,我也可能只是忽略了这样做的正确方法。任何帮助将不胜感激。我正在使用python以防万一与任何人相关。
答案 0 :(得分:1)
它应该按照你描述的方式工作。是的Wit不会更新上下文,因此如果您想保留/记住某些内容以供日后使用,则必须使用客户端操作将其存储在上下文中。在您的示例中,您将实体机智/位置的值存储在上下文键中,假设为loc
在你的'有多少人住在那里?'的故事中,你将有一个客户端操作检查context.loc是否存在,如果没有,将通过分支la https://wit.ai/docs/recipes#build-a-slot-based-bot食谱要求它/ p>