dialogflow-cx - 如何使用 dialogflow_cx python 库检测 end_interaction 信号?
问题描述
我正在使用 DialogFlow CX python 库进行代理集成。一旦我通过 发送请求detect_intent
,我希望能够在响应中检查一个标志,该标志确定与代理的交互是否已经结束。
为此,我在ResponseMessage
数据类型响应中找到了一个名为end_interaction
. 我用我的一个代理对此进行了测试,一旦交互结束,我就可以end_interaction
在响应消息数组中看到:
# inspecting query_result.response_messages
[
text {
text: "Goodbye."
},
end_interaction {
}
]
现在,问题是我想在收到信号时触发一些操作,但是由于end_interaction
每当我尝试检查它时该字段被发送为空返回我False
:
# Both response messages from the example above return False under a bool
bool(query_result.response_messages[0].end_interaction) == False # text message response
bool(query_result.response_messages[1].end_interaction) == False # end_interaction signal
我已经尝试了很多事情,例如使用isinstance
and进行检查hasattr
,但是由于数据类型始终具有attr ,因此它们会True
针对所有情况返回。ResponseMessage
end_interaction
非常感谢您对查找如何检测和检查此信号的任何帮助!谢谢!
解决方案
要检测和检查end_interaction字段,可以在 detect_intent 中使用以下内容:
any("end_interaction" in d for d in response.query_result.response_messages )
请注意,如果在response_messages列表中找到end_interaction字段,则返回True ,否则返回False。您可以使用它来确定与代理的交互是否已结束。
以下是带有end_interaction字段的 detect_intent 的 python 示例代码供您参考:
def detect_intent_texts(agent, session_id, texts, language_code):
session_path = f'{agent}/sessions/{session_id}'
print(f"Session path: {session_path}\n")
client_options = None
agent_components = AgentsClient.parse_agent_path(agent)
location_id = agent_components["location"]
if location_id != "global":
api_endpoint = f"{location_id}-dialogflow.googleapis.com:443"
print(f"API Endpoint: {api_endpoint}\n")
client_options = {"api_endpoint": api_endpoint}
session_client = SessionsClient(client_options=client_options)
for text in texts:
text_input = session.TextInput(text=text)
query_input = session.QueryInput(text=text_input, language_code=language_code)
request = session.DetectIntentRequest(
session=session_path, query_input=query_input
)
response = session_client.detect_intent(request=request)
print("=" * 20)
print(f"Query text: {response.query_result.text}")
response_messages = [
" ".join(msg.text.text) for msg in response.query_result.response_messages
]
print(f"Response Messages:\n {response.query_result.response_messages}")
print(f'End of interaction: {any("end_interaction" in d for d in response.query_result.response_messages)}')
结果如下: