0

我正在使用 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

我已经尝试了很多事情,例如使用isinstanceand进行检查hasattr,但是由于数据类型始终具有attr ,因此它们会True针对所有情况返回。ResponseMessageend_interaction

非常感谢您对查找如何检测和检查此信号的任何帮助!谢谢!

4

1 回答 1

0

要检测和检查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)}')

结果如下:

结果

于 2021-07-02T06:15:13.157 回答