本明細書で開示する実装形態は、自動アシスタントによるルーチンの実行中にクライアントデバイス同士の間で自動アシスタントルーチンを転送するための方法、装置、および(一時的および非一時的)コンピュータ可読媒体に関する。例示的なルーチンは、自動アシスタントがユーザにその日の準備をさせるために、朝に複数の異なるアクションを順に実行する、モーニングルーチンであり得る。たとえば、モーニングルーチンは、クライアントデバイスを介して、自動アシスタントが特定の日(たとえば、当日)に向けてユーザのスケジュールを可聴的にレンダリングさせること、自動アシスタントが、器具(たとえば、コーヒーメーカー)をオンにし、次いで、ユーザが準備している間に、クライアントデバイスを介してポッドキャストを可聴的にレンダリングさせることに関連し得る。自動アシスタントがルーチンを進めるためにコンテンツをユーザにレンダリングさせるとき、それは、コンテンツをレンダリングしている、自動アシスタントを少なくとも部分的にホストするアシスタントクライアントデバイスからユーザが立ち去ることになる場合であり得る。結果として、ユーザは、アシスタントクライアントデバイスからレンダリングされるコンテンツを一時的に見ることおよび/または聴取することができない。さらに、ユーザがモーニングルーチンの実行中に自らの住宅を歩き回る場合、ユーザは、自らがそのルーチンを進めるためにコンテンツをレンダリングしているアシスタントクライアントデバイスを含む部屋を去るたびに、モーニングルーチンが停止され、開始されることを明示的に要求することが必要とされることがある。これは、結果として、ルーチンを停止および/または再開するために要求される音声発話の処理に計算および/またはネットワークリソースを浪費させる可能性がある。
クライアントデバイス同士の間のルーチンの流動的および/または自動的遷移を与えるために、またコンピュータおよび/またはネットワークのリソース消費の効率を改善するために、本明細書に記載される実装形態は、アシスタントデバイス同士の間の自動アシスタントルーチンの自動遷移を可能にする。このようにして、複雑なルーチンを含めて、ルーチンは、技術的に改善された方法で実装され得る。たとえば、ルーチンは、適応的な方法でアシスタントデバイス同士の間で分散され、所与の状況に対して改善されたデバイス挙動を可能にし得る。各デバイスが動作する方法は、ルーチンの所与のインスタンス化の適応的ニーズに従って調整され得る。ルーチンは経時的に実装され得るため、デバイス同士の間のリソース利用の最適な割振りは、その時間期間中に条件が変わるにつれて変化し得、本開示は、この要因を認識する際にデバイス挙動を適応させることができる。それらの実装形態のいくつかでは、ルーチンに関するコンテンツのレンダリングは、利用可能なクライアントデバイスの初期サブセット(たとえば、1つのみ)において最初に発生し得る。たとえば、ルーチンに関するコンテンツのレンダリングは、単一のクライアントデバイスにおいて検出されている(または、単一のクライアントデバイスにおいて最も強く検出されている)ルーチンに対する音声ショートカットコマンドフレーズ(shortcut command phrase)(以下で説明する)の結果として、単一のクライアントデバイスにおいて最初に発生し得る。別の例として、ルーチンに関するコンテンツのレンダリングは、追加または代替として、単一のクライアントデバイス付近のユーザの存在の検出の結果として単一のクライアントデバイスにおいて最初に発生し得る。ユーザの検出は、(クライアントデバイスおよび/または他のネットワーク接続されたデバイスの)1つまたは複数のセンサからのセンサデータに基づいてよく、検出は、クライアントデバイスのおよび/またはクライアントデバイスと(たとえば、ネットワークトポロジーにおいて)空間的に相関する他のネットワーク接続されたデバイスのセンサに基づいて単一のクライアントデバイス付近であると判定され得る。別の例として、ルーチンに関するコンテンツのレンダリングは、ルーチンが開始されるべき単一のクライアントデバイスとして単一のクライアントデバイスが手動で指定されている結果として、その単一のクライアントデバイスにおいて最初に発生し得る。たとえば、モーニングルーチンは、一定の時間に、かつ/または1つまたは複数のトリガイベントの検出時に、自動的にトリガされ得る。たとえば、モーニングルーチンは、一定のタイムフレーム中に発生する1つまたは複数のトリガイベントに応答してトリガされ得る。トリガイベントは、たとえば、目覚ましアラームが止められたことを示すスマートフォンからのデータ、コーヒーが入ったことを示すネットワーク接続されたコーヒーメーカーからのデータ、および/またはユーザが特定のロケーションにおいて検出されたことを示すスマートカメラからのデータを含み得る。この例を続けると、モーニングルーチンは、ルーチンに関するコンテンツが最初にレンダリングされるべき特定のクライアントデバイスを手動で指定し得る。
さらに、クライアントデバイスの初期サブセットにおけるルーチンに関するコンテンツのレンダリング中、ルーチンは、初期サブセット内にない1つまたは複数の追加の利用可能なクライアントデバイスに転送され得る。ルーチンを転送する際、追加の利用可能なクライアントデバイスは、ルーチンに関するコンテンツをレンダリングさせられる。追加の利用可能なクライアントデバイスによってレンダリングされるコンテンツは、初期サブセットのクライアントデバイスによってまだレンダリングされていないルーチンに関するコンテンツを含み、クライアントデバイスによってすでにレンダリングされたコンテンツのうちのいくつかの「リプレイ」(たとえば、転送に先立って初期サブセットのクライアントデバイスによってレンダリングされた可聴コンテンツの最後の5秒のリプレイ)を随意に含み得る。ルーチンを転送する際、初期サブセットのクライアントデバイスにおけるルーチンに関するコンテンツのレンダリングは、随意に中断され得る。初期サブセットのクライアントデバイスにおけるコンテンツのレンダリングの中断は、追加の利用可能なクライアントデバイスにおけるコンテンツのレンダリングの初期化に先立って、またはそれと同時に発生し得る。初期サブセットのクライアントデバイスにおけるコンテンツのレンダリングの中断はまた、追加の利用可能なクライアントデバイスにおけるコンテンツのレンダリングに続いて漸進的に発生し得る(たとえば、可聴コンテンツの音量は、漸進的に、減じられ、次いで、追加の利用可能なクライアントデバイスにおけるコンテンツのレンダリングの初期化に続いて停止され得る)。初期サブセットのクライアントデバイスにおけるコンテンツのレンダリングの中断が発生する実装形態では、ネットワークおよび/または計算リソースは、コンテンツが初期サブセットのクライアントデバイスに転送されかつ/またはそれによってレンダリングされていない結果として保存され得る。
様々な実装形態では、初期サブセット内にない追加の利用可能なクライアントデバイスへのルーチンの転送は、追加の利用可能なクライアントデバイス付近のユーザの存在の検出に基づいて発生し得る。たとえば、ルーチンからのコンテンツは、そのような存在の検出に応答して、追加の利用可能なクライアントデバイスによって自動的にレンダリングさせられ得る。別の例として、ルーチンを転送するための可聴および/または視覚プロンプトは、追加の利用可能なクライアントデバイスにおいて自動的にレンダリングさせられてよく、ルーチンからのコンテンツは、プロンプトに応答した肯定的なユーザインターフェース入力の受信に応答してレンダリングされ得る。追加の利用可能なクライアントデバイス付近のユーザの検出は、(追加の利用可能なクライアントデバイスおよび/または他のネットワーク接続されたデバイスの)1つまたは複数のセンサからのセンサデータに基づいてよく、検出は、センサが、追加の利用可能なクライアントデバイスのものであること、および/または追加の利用可能なクライアントデバイスと空間的に(たとえば、ネットワークトポロジーにおいて)相関する他のネットワーク接続されたデバイスのものであることに基づいて、追加の利用可能なクライアントデバイス付近にあると判定され得る。それらの様々な実装形態のうちのいくつかでは、クライアントデバイスの初期サブセットにおけるコンテンツのレンダリングの中断は、追加の利用可能なクライアントデバイス付近のユーザの存在の検出に応答して発生し得る。追加または代替として、クライアントデバイスの初期サブセットにおけるコンテンツのレンダリングの中断は、クライアントデバイスの初期サブセットに相関するセンサからのセンサデータに基づく、その初期サブセット付近のユーザの存在の欠如の検出に応答して発生し得る。
上述のように、いくつかの実装形態では、自動アシスタントルーチンは、ユーザの話されたまたはタイプされた自然言語入力においてショートカットフレーズまたはコマンドを検出することに応答して初期化され得る。ショートカットコマンドは、自動アシスタントに、随意に特定の順に、アクションのセットを実行させるための圧縮コマンドを提供する。場合によっては、圧縮コマンドがなければ、自動アシスタントにアクションのセットを実行させるために話される/タイプされる必要があることになるコマンドよりも長さが短いという点で、圧縮コマンドは「圧縮」されている。アクションのセットに対するより長いコマンドの代わりに、アクションのセットを実行させるための圧縮コマンドを提供することは、より少ないユーザ入力が提供される(また、送信および/または処理される)ことを可能にし、それにより、計算およびネットワークリソースを節約し得る。自動アシスタントルーチンに対する圧縮コマンドの一例として、ユーザが朝目覚めたとき、ユーザは、音声発話をキッチンアシスタントデバイス(すなわち、台所に配置されたクライアントコンピューティングデバイス)に提供することによって「おはよう」ルーチンをトリガし得る。音声発話は、たとえば、「おはよう」であってよく、この発話は、「おはよう」ルーチンを初期化するために、そのアシスタントデバイスおよび/または(そのアシスタントデバイスと通信している)リモートアシスタントデバイスによって処理され得る。たとえば、アシスタントデバイスおよび/またはリモートデバイスは、音声発話に対応するオーディオデータを処理して、音声発話をテキストに変換することができ、そのユーザに関して、「おはよう」の音声発話に応答して実行されることになる自動アシスタントアクションのセットにテキスト「おはよう」が割り当てられるとさらに判定することができる。
話されたまたはタイプされたショートカットコマンドに応答して、様々な自動アシスタントルーチンが初期化され得るが、いくつかの実装形態では、自動アシスタントルーチンは、追加または代替として、ユーザによるクライアントデバイスまたは周辺デバイスにおける仮想またはハードウェア要素の押下、クライアントデバイスのセンサを介して検出されるジェスチャの実行、クライアントデバイスにおける他の触覚入力の提供、および/または任意の他のタイプのコンピュータ可読ユーザインターフェース入力の提供に応答して初期化され得る。たとえば、グラフィカルユーザインターフェース(GUI)が、選択可能アイコンを用いてクライアントデバイスに提示されてよく、ここで、選択可能アイコンは、ユーザが自動アシスタントルーチンを初期化する示唆を提供する。ユーザが選択可能アイコン(たとえば、「おはよう」を表すGUIボタン)を選択するとき、自動アシスタントは、応答して、対応する自動アシスタントルーチンを初期化し得る。追加として、または代替として、自動アシスタントルーチンは、たとえば、自動アシスタントによるユーザの存在の検出(たとえば、音声(voice)認証および/または顔認識を使用した特定のユーザの検出)、アラーム(たとえば、関連するフォンまたは他のデバイスに設定された目覚ましアラーム)の突然の作動、アプリケーションの開始(opening)、および/または(たとえば、1つまたは複数のクライアントデバイスからの信号に基づいて)自動アシスタントによって認識され得る他のユーザアクションに応答して、自動的に初期化されてよい。
例示的な「おはよう」ルーチンは、ユーザのスケジュールをレンダリングさせる、特定の器具をオンにする、およびポッドキャストをレンダリングさせる、前述のアクションを含み得る。この場合も、自動アシスタントがそのようなショートカットコマンドに応答することを可能にすることによって、ユーザは、自動アシスタントに対応するアクションを実行させるために一連のコマンドを提供することが必要であるとは限らない(たとえば、ユーザは、音声発話を列挙する必要がないことになる:「アシスタント、私のスケジュールを読んで、私の器具をオンにして、私のポッドキャストを再生して」)。代わりに、自動アシスタントはショートカットコマンドに応答することができ、自動アシスタントは、そのショートカットコマンドに対応するアクションを識別するために、そのショートカットコマンドを処理することができる。いくつかの実装形態では、ルーチンは、個人化され、それにより、特定のショートカットコマンドまたはルーチンの実行を引き起こす他の入力は、1人のユーザに対してアクションの特定のセットを自動アシスタントによって実行させることを可能にし得るが、同じ入力は、異なるユーザに対して自動アシスタントによってアクションの異なるセットを実行させることになる。たとえば、特定のユーザは、ショートカットコマンドに応答して、アクションの第1のセットを実行するように自動アシスタントを具体的に構成することができ、特定のユーザの配偶者は、同じショートカットコマンドに応答して、アクションの第2のセットを実行するように自動アシスタントを構成することができる。自動アシスタントは、1つまたは複数のセンサ入力および/または音声署名、顔認識、画像フィード、動き特性など、1つまたは複数の判定された特性、および/または他のデータを使用して、ショートカットコマンドを提供するユーザを区別し得る。
ユーザが、「おはよう」などのショートカットコマンドをキッチンアシスタントデバイスなどのアシスタントデバイスに提供するとき、音声発話がキッチンアシスタントデバイスに向けられている結果として、ルーチンの1つまたは複数のアクションに対応するコンテンツがキッチンアシスタントデバイスによって最初にレンダリングされ得る。たとえば、コンテンツは、他のデバイスがショートカットコマンドを確認応答しているにもかかわらず、キッチンアシスタントデバイスにおいて排他的に(すなわち、任意の他のクライアントデバイスにおいて同時にレンダリングされずに)最初にレンダリングされ得る。たとえば、複数のデバイスがそれらのデバイスのそれぞれの自動アシスタントインターフェースにおいてショートカットコマンドが受信されていることを確認応答し得るが、最も音の大きいおよび/または歪みが最も少ないショートカットコマンドを受信するデバイスが、自動アシスタントルーチンが初期化されることになるデバイスとして指定され得る。しかしながら、ユーザがその日の準備をするために自らの住宅を歩き回るにつれて、ルーチンは住宅内の1つまたは複数の他のアシスタントデバイスにわたって共有され得る。
たとえば、ユーザが台所を去り、自らの住宅のオフィスに入ると、キッチンアシスタントデバイスは、ユーザが台所を出て行くことを検出し得る。自動アシスタントがその日のスケジュールを可聴的にレンダリングするにつれて、ユーザが台所を出て行くことが検出され得る。検出に応答して、自動アシスタントは、ユーザが、キッチンアシスタントデバイス付近に再度検出されるか、または別のアシスタントデバイス付近で検出されるまで、スケジュールの可聴レンダリングを休止し得る。たとえば、ユーザは台所からオフィスアシスタントデバイスを含み得るオフィスに移動し得る。オフィスアシスタントデバイス付近のユーザの検出の結果として、オフィスアシスタントデバイスは、その日のユーザのスケジュールの可聴的レンダリングを再開させられ得る。さらに、オフィスアシスタントデバイスは、ユーザがオフィスアシスタントデバイス付近に引き続き検出される限り、「おはよう」ルーチンの他のまだ実行されていないアクションを実行し続けることができる。
ユーザの存在を検出するために、ユーザが、ユーザが自らの住宅を歩き回るにつれて、そのルーチンを実行し続けるように自動アシスタントに具体的に要求し得る。これは、自動アシスタントがデバイス同士の間でルーチンを遷移させるために、ユーザの存在を検出するための明示的な許可を有することを確実にし得る。ユーザの検出は、オーディオ、ビデオ、および/またはそれを通してユーザの存在が認知され得る、任意の他の媒体など、様々なモダリティを通して実現され得る。いくつかの実装形態では、アシスタントデバイスは、ユーザがアシスタントデバイスに近接しているかどうかを検証するためのユーザの音声署名を検出するために、1つまたは複数のマイクロフォンを含むオーディオサブシステムを採用し得る。追加として、または代替として、自動アシスタントは、しきい雑音量がアシスタントデバイス付近で検出されるかどうかに基づいて、ユーザの動きおよび/または存在を検出し得る。たとえば、ユーザがおはようルーチンの開始時に台所にいるが、その後でオフィスの中に入り、それにより、オフィス内の何らかの雑音量を生み出した場合、オフィス内の雑音がオフィス内のアシスタントデバイスによって検出され得る。結果として、自動アシスタントは、生成された雑音量がルーチンを転送するためのしきい値を満たすと判定し、したがって、ルーチンをキッチンアシスタントデバイスからオフィスアシスタントデバイスに転送させることができる。
いくつかの実装形態では、ルーチンの転送は、学習された挙動に基づいてよく、それにより、ユーザが、雑音を必ずしも生み出さずに、デバイス同士の間でルーチンを転送させることを可能にする。たとえば、ユーザは、自らの台所内のルーチンを初期化させ、ルーチンの実行中、音声発話を使用して、自らのオフィスへのルーチンの転送を自動アシスタントに具体的に要求し得る。1回または複数回のこの転送の明示的な要求の後、自動アシスタントは、台所内の動きセンサおよび/またはオフィス内の動きセンサなど、他のセンサ入力に基づいて先制して転送させることを学習し得る。たとえば、キッチンデバイスにおける自動アシスタントルーチンの初期化は、ユーザの住宅の台所内の照明に対する動きセンサからのセンサ出力を介した台所内のユーザの検出に応答してトリガされ得る。その後、ユーザは自らのオフィス内に入ることができ、ユーザのオフィス内の別個の照明に対する別の動きセンサからのセンサ出力を介してオフィス内のユーザが検出される。照明および動きセンサがホームネットワーク上で自動アシスタントと通信し、したがって、動きセンサに空間的に対応するクライアントデバイスによってルーチンのコンテンツのレンダリングを実行させることができるにつれて、自動アシスタントは、この挙動を学習し得る。
デバイス同士の間でルーチンを転送する、いくつかの実装形態では、自動アシスタントは、ルーチンインスタンスを記憶する1つまたは複数のデータベースに従って動作し得る。ルーチンインスタンスは、自動アシスタントを少なくとも部分的にホストし得る、1つまたは複数のサーバデバイスおよび/またはクライアントデバイスにおいて記憶され得る。たとえば、リモートサーバデバイスは、自動アシスタントに対する自動アシスタントインターフェースを提供するクライアントデバイスが随意にアクセス可能であり得るルーチンインスタンスを記憶し得る。ルーチンが第1のクライアントデバイスにおいて初期化されるとき、ルーチンインスタンスは、ルーチンが第1のクライアントデバイスにおいて初期化されていることを示すように生成または更新され得る。たとえば、ルーチンインスタンスは、「modify morning_routine.status.Active=1;modify morning_routine.device.DeviceID=3」などのコマンドを通して初期化され得る。「DeviceID」スロットは、ルーチンが初期化されているロケーションまたはデバイス(たとえば、キッチンデバイス)を示し得、「Active」スロットは、ルーチンがアクティブであるか否かを示すことができる。「morning_routine」機能に関連する値は、ユーザの住宅内の複数の異なるデバイス、ならびに、ユーザのアカウントに関連付けられ得る任意の他のデバイスにとってアクセス可能であり得る。
ユーザがデバイス同士の間でルーチンを転送させるとき、第1のクライアントデバイス(すなわち、「DeviceID=3」)は、「morning_routine」機能のステータスを管理するリモートサーバデバイスに信号を送信することができ、ここで、信号は、「morning_routine」機能のステータスを修正させる。たとえば、第1のクライアントデバイスからの信号は、「modify morning_routine.action.Read_Daily_Schedule.pause=1」など、リモートサーバデバイスにおいてコマンドを実行させ、ルーチンの特定のアクション(たとえば、「Read_Daily_Schedule」)を休止させることができる。たとえば、ルーチンの特定のアクションを休止させることは、第1のクライアントデバイスにルーチンに対応するコンテンツのレンダリングを中断させ得る。第1のクライアントデバイスは、たとえば、リモートサーバから第1のクライアントデバイスに送信された中断コマンド、または、第1のクライアントデバイスへのコンテンツのストリーミングのリモートサーバによる中止に応答して、コンテンツのレンダリングを中断させられ得る。ユーザが後でホームオフィス内のアシスタントデバイスなど、第2のクライアントデバイス付近で検出されるとき、第2のクライアントデバイスは、リモートサーバデバイスに、ルーチンに関連するロケーションまたはデバイスを修正させることができる。たとえば、ルーチンが依然としてアクティブである間に、ユーザが自らのホームオフィス内に移動したとの判定に応答して、コマンド「modify morning_routine.DeviceID=2;modify morning_routine.action.Read_Daily_Schedule.pause=0」が実行され得る。前述のコマンドは、「DeviceID」スロット値を「2」(すなわち、ホームオフィスデバイス識別子)に変更させ、「pause」スロット値を「0」に変更させ、それにより、第2のクライアントデバイスにおいて「Read_Daily_Schedule」のアクションを休止解除させることができる。自動アシスタントは、次いで、引き続きユーザの日常のスケジュールを第2のクライアントデバイスにおいてレンダリングさせることができ、第1のクライアントデバイスはスタンバイモードに戻ってよい。
いくつかの実装形態では、デバイス同士の間のルーチンの転送の制限が設けられてよい。たとえば、配偶者と暮らすユーザは、自らがその「おはよう」ルーチンを初期化したとき、配偶者の邪魔をしないことを望むことがある。たとえば、配偶者は、一般に、「おはよう」ルーチンが自動アシスタントによって実行されている間、ホームジム内で瞑想していることがある。自動アシスタントが配偶者の邪魔をしないことを確実にするために、ユーザは、「アシスタント、「おはよう」ルーチンを絶対にジムアシスタントデバイスに転送しないで」など、明示的な命令を提供することができる。応答して、「おはよう」ルーチンに関連するスロット値は、「modify morning_routine.deny.DeviceID=1」などのコマンドによって修正され得る。スロット値「DeviceID=1」は、ジムアシスタントデバイスを指すことができ、「deny」は、自動アシスタントが「おはよう」ルーチンをジムアシスタントデバイスに転送する能力を拒否する制限を指すことができる。
いくつかの実装形態では、第1のユーザは、第1のルーチンをキッチンアシスタントデバイスにおいて実行させることができ、第2のユーザは、第2のルーチンをオフィスアシスタントデバイスにおいて実行させることができ、ここで、キッチンアシスタントデバイスとオフィスアシスタントデバイスは両方とも、同じ住宅内にある。第1のユーザが台所を去るとき、第1のルーチンは休止され得るが、ユーザがオフィスの中に入るとき、オフィスアシスタントデバイスは、オフィスアシスタントデバイスへの第1のルーチンの転送可能性を制限し得る。このようにして、第1のルーチンは、少なくとも第2のルーチンが完了するまで、第2のルーチンを邪魔しないことになる。第1のユーザがオフィス内に留まる間に第2のルーチンがオフィスアシスタントデバイスにおいて完了するとき、第1のルーチンは、オフィスアシスタントデバイスにおいて再開され得る。さもなければ、第1のユーザが第2のルーチン中にオフィスを去り、台所に戻るとき、第1のルーチンは、キッチンアシスタントデバイスにおいて再開され得る。
いくつかの実装形態では、ルーチンを実行する際、自動アシスタントは、1つまたは複数のローカルおよび/またはリモートエージェントとインターフェースする。たとえば、3つのアクションを含むルーチンの場合、自動アシスタントは、第1のアクションを実行する際、第1のエージェントと、第2のアクションを実行する際、第2のエージェントと、また第3のアクションを実行する際、第3のエージェントとインターフェースし得る。本明細書で使用される「エージェント」は、自動アシスタントによって利用される1つまたは複数のコンピューティングデバイスおよび/またはソフトウェアを指す。状況によっては、エージェントは、自動アシスタントとは別個であってよく、かつ/または1つまたは複数の通信チャネル上で自動アシスタントと通信し得る。それらの状況のうちのいくつかでは、自動アシスタントは、第1のネットワークノードから、エージェントの機能性のうちのすべてまたはその態様を実装する第2のネットワークノードにデータ(たとえば、エージェントコマンド)を送信し得る。状況によっては、エージェントは、自動アシスタントを管理する当事者とは別個の当事者によって管理されるという点で、第三者(3P)エージェントであり得る。いくつかの他の状況では、エージェントは、自動アシスタントを管理する同じ当事者によって管理されるという点で、第一者(1P)エージェントであり得る。
エージェントは、起動要求および/または他のエージェントコマンドを(たとえば、ネットワーク上でかつ/またはAPIを介して)自動アシスタントから受信するように構成される。エージェントコマンドの受信に応答して、エージェントは、エージェントコマンドに基づいて応答コンテンツを生成し、応答コンテンツに基づいているユーザインターフェース出力を提供するために応答コンテンツを送信する。たとえば、エージェントは、自動アシスタントによって、応答コンテンツに基づいている出力を提供するために応答コンテンツを自動アシスタントに送信し得る。別の例として、エージェント自体が出力を提供し得る。たとえば、ユーザは、クライアントデバイスを介して自動アシスタントと対話してよく(たとえば、自動アシスタントは、クライアントデバイス上で実装されてよく、かつ/またはクライアントデバイスとネットワーク通信していてよく)、エージェントは、クライアントデバイス上にインストールされたアプリケーションまたはクライアントデバイスからリモートで実行可能であるが、クライアントデバイス上で「ストリーミング可能な」アプリケーションであってよい。アプリケーションが起動されるとき、アプリケーションは、クライアントデバイスによって実行され得、かつ/またはクライアントデバイスによって先頭に導かれ得る(たとえば、そのコンテンツはクライアントデバイスのディスプレイを引き継ぐことができる)。
状況によっては、本明細書で開示する技法による特定のエージェントの起動に応答して、人間対自動アシスタントダイアログは、特定のエージェントに少なくとも一時的に(実際にまたは事実上)転送され得る。たとえば、特定のエージェントの応答コンテンツに基づく出力は、ダイアログ、および出力に応答して受信されるさらなるユーザ入力を進めるためにユーザに提供され得る。さらなるユーザ入力(または、その変換)は、特定のエージェントに提供され得る。特定のエージェントは、ダイアログを進めるために提供するためのさらなる出力を生成するために使用され得るさらなる応答コンテンツを生成する際に、その独自のセマンティックエンジンおよび/または他の構成要素を利用し得る。たとえば、特定のエージェントが特定のエージェントダイアログ(たとえば、プロンプトの代わりに、応答または解決策)を終了する応答コンテンツを提供するまで、ユーザの追加のユーザインターフェース入力が特定のエージェントダイアログを終了する(たとえば、代わりに、自動アシスタントまたは別のエージェントから応答を起動する)までなど、この一般プロセスが続いてよい。
状況によっては、自動アシスタントは、ダイアログが特定のエージェントに事実上転送されるとき、媒介として依然としてサービスし得る。たとえば、ユーザの自然言語入力が音声入力である場合に媒介としてサービスする際、自動アシスタントは、音声入力をテキストに変換し、テキスト(および、随意に、テキストの注釈)を特定のエージェントに提供し、応答コンテンツを特定のエージェントから受信し、ユーザに提示するために特定の応答コンテンツに基づく出力を提供し得る。また、たとえば、媒介としてサービスする際、自動アシスタントは、特定のエージェントのユーザ入力および/または応答コンテンツを解析して、特定のエージェントとのダイアログが終了されるべきかどうか、ユーザが代替エージェントに転送されるべきかどうか、グローバルパラメータ値が特定のエージェントダイアログに基づいて更新されるべきかどうか、などを判定し得る。状況によっては、ダイアログは、実際に特定のエージェントに転送されてよく(転送されると、自動アシスタントが媒介としてサービスせずに)、また随意に、(たとえば、特定のエージェントを介した意図の完了に応答して)特定のエージェントによる終了など、1つまたは複数の条件の発生時に自動アシスタントに転送され戻されてよい。
上記は、本明細書で開示する様々な実装形態の概要として提供される。これらの様々な実装形態に関して、追加の詳細、ならびに追加の実装形態が本明細書で提供される。
いくつかの実装形態では、自動アシスタントルーチンが初期化されていると判定するステップなどの動作を含む、1つまたは複数のプロセッサによって実装される方法が記載される。自動アシスタントルーチンは、自動アシスタントにとってアクセス可能な1つまたは複数のエージェントを介して実行されることになるアクションのセットに対応し得る。自動アシスタントルーチンの初期化は、リンクされたクライアントデバイスのエコシステムに関連付けられ得る。この方法は、自動アシスタントルーチンが初期化されているとの判定に応答して、リンクされたクライアントデバイスの初期サブセットに自動アシスタントルーチンのアクションのうちの1つまたは複数の実行の際に生成される初期コンテンツをレンダリングさせるステップをさらに含み得る。この方法はまた、リンクされたクライアントデバイスの初期サブセットによる初期コンテンツのレンダリングの後またはその間、少なくとも1つのセンサからのセンサデータに基づいて、ユーザがリンクされたクライアントデバイスの追加のクライアントデバイス付近に存在すると判定するステップを含み得る。追加のクライアントデバイスは、初期サブセットから除外されてよく、初期コンテンツをレンダリングしなくてもよい。この方法は、ユーザが追加のクライアントデバイス付近に存在するとの判定に応答して、追加のクライアントデバイスに自動アシスタントルーチンの実行の際に生成されるさらなるコンテンツをレンダリングさせるステップをさらに含み得る。
いくつかの実装形態では、この方法は、ユーザが初期サブセットのリンクされたクライアントデバイスのうちのいずれの付近にも存在しないと判定するステップと、ユーザが初期サブセットのリンクされたクライアントデバイスのうちのいずれの付近にも存在しないとの判定に応答して、自動アシスタントルーチンの実行の際に生成される任意のコンテンツのレンダリングをリンクされたクライアントデバイスの初期サブセットにおいて中断させるステップとをさらに含み得る。
いくつかの実装形態では、ユーザが初期サブセットのリンクされたクライアントデバイスのうちのいずれの付近にも存在しないと判定するステップは、ユーザが追加のクライアントデバイス付近に存在すると判定することに先立って発生し得る。さらに、自動アシスタントルーチンの実行の際に生成される任意のコンテンツのレンダリングをリンクされたクライアントデバイスの初期サブセットにおいて中断させるステップは、追加のクライアントデバイスによる、自動アシスタントルーチンの実行の際に生成される任意のコンテンツのレンダリングに先立って発生し得る。
いくつかの実装形態では、ユーザが初期サブセットのリンクされたクライアントデバイスのうちのいずれの付近にも存在しないと判定するステップは、少なくとも1つの追加のセンサからの追加のセンサデータに基づき得る。いくつかの実装形態では、少なくとも1つの追加のセンサからの追加のセンサデータは、少なくとも1つの追加のセンサが初期サブセットのリンクされたクライアントデバイスのうちの少なくとも1つと一体であること、および少なくとも1つの追加のセンサが、デバイストポロジーにおいて、初期サブセットのリンクされたクライアントデバイスのうちの少なくとも1つと空間的に相関していることのうちの1つまたは両方に基づいて、ユーザが初期サブセットのリンクされたクライアントデバイスのうちのいずれの付近にも存在しないと判定する際に利用され得る。
いくつかの実装形態では、ユーザがリンクされたクライアントデバイスのうちのいずれの付近にも存在しないと判定するステップは、ユーザが追加のクライアントデバイスの付近に存在すると判定するステップを含み得る。いくつかの実装形態では、この方法は、ルーチンのステータスを記憶するステップであって、ルーチンのステータスが、自動アシスタントルーチンの実行の際に生成される任意のコンテンツのレンダリングがリンクされたクライアントデバイスの初期サブセットにおいて中断されたときのルーチンの状態を示す、記憶するステップをさらに含み得る。この方法は、ルーチンのステータスに基づいて、追加のクライアントデバイスにおいてレンダリングされることになるさらなるコンテンツを判定するステップをさらに含み得る。
いくつかの実装形態では、この方法は、ルーチンの記憶されたステータスに基づいて、リンクされたクライアントデバイスの初期サブセットによってレンダリングされる初期コンテンツの部分を判定するステップを含み得る。この方法はまた、ユーザが追加のクライアントデバイス付近に存在するとの判定に応答して、自動アシスタントルーチンの実行の際に生成されるさらなるコンテンツをレンダリングするのに先立って、追加のクライアントデバイスに初期コンテンツのその部分をレンダリングさせるステップを含み得る。
いくつかの実装形態では、リンクされたクライアントデバイスの初期サブセットは、単一のクライアントデバイスであってよく、この方法は、単一のクライアントデバイスによって検出されたユーザのユーザインターフェース入力に応答して、単一のクライアントデバイスによって送信されたデータを受信するステップをさらに含み得る。自動アシスタントルーチンが初期化されていると判定するステップは、ユーザインターフェース入力が自動アシスタントルーチンに適合するとの判定に基づいてよく、単一のクライアントデバイスは、ユーザインターフェース入力が単一のクライアントデバイスによって送信されていることに基づいて、データの初期サブセットをレンダリングさせられ得る。
いくつかの実装形態では、ユーザインターフェース入力は、自動アシスタントルーチンに対するショートカットフレーズを含む音声発話を含み、データはオーディオデータを含む。この方法はまた、テキストを生成するためにオーディオデータの音声(speech)対テキスト処理を実行するステップを含み得る。ユーザインターフェース入力が自動アシスタントルーチンに適合すると判定するステップは、生成されたテキストがショートカットフレーズを含むと判定するステップと、ショートカットフレーズが自動アシスタントルーチンに関連して記憶されると判定するステップとを含み得る。
いくつかの実装形態では、少なくとも1つのセンサからのセンサデータは、少なくとも1つのセンサが追加のクライアントデバイスと一体であること、または、少なくとも1つのセンサが、デバイストポロジーにおいて、追加のクライアントデバイスと空間的に相関していることに基づいて、ユーザが追加のクライアントデバイス付近に存在すると判定する際に利用され得る。
いくつかの実装形態では、センサデータに基づいて、ユーザが追加のクライアントデバイス付近に存在すると判定するステップは、ユーザが追加のクライアントデバイスのしきい値距離内にいると判定するステップを含み得る。いくつかの実装形態では、センサデータに基づいて、ユーザが追加のクライアントデバイス付近に存在すると判定するステップは、センサデータが任意のユーザの存在を示している少なくとも1つの特性を含むと判定するステップを含み得る。いくつかの実装形態では、自動アシスタントルーチンは、ユーザのユーザプロファイルに関連して記憶されてよく、センサデータに基づいて、ユーザが追加のクライアントデバイス付近に存在すると判定するステップは、センサデータがユーザプロファイルに関連してやはり記憶される、少なくとも1つの特性を含むと判定するステップを含み得る。
他の実装形態では、自動アシスタントルーチンが第1のクライアントデバイスにおいて初期化されているという第1の電子通知を受信するステップなどの動作を含む、1つまたは複数のプロセッサによって実装される方法が記載される。自動アシスタントルーチンは、自動アシスタントにとってアクセス可能な1つまたは複数のエージェントによって実行されることになるアクションのセットに対応し得る。この方法は、1つまたは複数のエージェントのエージェントに、自動アシスタントルーチンを進めるためにアクションのセットのアクションの実行を初期化させるステップをさらに含み得る。アクションは、第1のクライアントデバイスに、ユーザに提示するためのコンテンツをレンダリングさせることができ、コンテンツは、アクションの実行の際にエージェントによって生成されるデータに基づき得る。この方法はまた、ユーザが第1のクライアントデバイスから離れて再配置されているという第2の通知を受信するステップと、第2の通知の受信に応答して、第1のクライアントデバイスにおけるコンテンツのレンダリングを少なくとも一時的に停止させるステップとを含み得る。この方法は、ユーザが第2のクライアントデバイス付近に検出されているという第3の通知を受信するステップと、第3の通知の受信に応答して、第2のクライアントデバイスに、自動アシスタントルーチンを進めるためにユーザに提示するための追加のコンテンツをレンダリングさせるステップとをさらに含み得る。
いくつかの実装形態では、この方法は、第1の通知の受信に応答して、ルーチンインスタンスデータを生成するステップであって、ルーチンインスタンスデータが、自動アシスタントルーチンに関する情報を提供し、ルーチンインスタンスデータが、第1のクライアントデバイス、およびエージェントによって実行されているアクションのステータスを識別する、生成するステップを含み得る。
いくつかの実装形態では、この方法は、第2の通知の受信に応答して、エージェントにアクションの実行を少なくとも一時的に停止させるようにルーチンインスタンスデータを修正するステップを含み得る。エージェントは、アクションの実行中、アクションを実行し続けるかどうかを判定するために、ルーチンインスタンスデータに少なくとも周期的にアクセスする。
いくつかの実装形態では、この方法は、第3の通知の受信に応答して、エージェントにアクションの実行を再開させるようにルーチンインスタンスデータを修正するステップ、またはエージェントにアクションの実行を再開させるためのコマンドをエージェントに送信するステップを含み得る。
いくつかの実装形態では、第2の通知は、第1のクライアントデバイスと通信しているセンサからのセンサデータに基づいて、ユーザがもはや第1のクライアントデバイス付近に検出可能でないとの第1のクライアントデバイスによる判定に応答して、第1のクライアントデバイスから受信され得る。いくつかの実装形態では、センサは、第1のクライアントデバイスおよび第2のクライアントデバイスに対する共通ネットワークに接続された第3のデバイスと一体である。
いくつかの実装形態では、自動アシスタントルーチンは、ユーザによる第1のクライアントデバイスの自動アシスタントインターフェースへの音声発話の提供に応答して、第1のクライアントデバイスにおいて初期化されてよく、第1のクライアントデバイスに、ユーザに対するコンテンツをレンダリングさせるステップは、第1のクライアントデバイスに第1のクライアントデバイスの自動アシスタントインターフェースから可聴出力を提供させるステップを含む。
さらに他の実装形態では、第1のクライアントデバイスから送信されたデータをリモートサーバデバイスにおいて受信するステップ、およびリモートサーバデバイスにおいて、データが自動アシスタントアクションのセットに対応する自動アシスタントルーチンの初期化に対する要求に対応すると判定するステップなどの動作を含む、1つまたは複数のプロセッサによって実装される方法が記載される。この方法はまた、データが要求に対応するとの判定に応答して、自動アシスタントアクションのセットのアクションに関するコンテンツをリモートサーバデバイスにおいて生成するステップを含み得る。この方法は、第1のクライアントデバイスからの自動アシスタントルーチンの初期化に対する要求に対応するデータの受信に応答して、第1のクライアントデバイスにアクションに関するコンテンツをレンダリングさせるために、アクションに関するコンテンツを第1のクライアントデバイスに送信するステップと、第1のクライアントデバイスによるアクションに関するコンテンツのレンダリング中、リモートサーバデバイスにおいて、ユーザが、自動アシスタントルーチンが第2のクライアントデバイスにおいて続けられることに対する関心を直接的または間接的に示したと判定するステップとをさらに含み得る。この方法はまた、ユーザが、自動アシスタントルーチンが第2のクライアントデバイスにおいて続けられることに対する関心を示したとの判定に応答して、自動アシスタントルーチンを進めるために追加のデータを第2のクライアントデバイスにおいてレンダリングするステップを含み得る。
いくつかの実装形態では、この方法は、第1のクライアントデバイスからの自動アシスタントルーチンの初期化に対する要求に対応するデータの受信に応答して、リモートサーバデバイスが、自動アシスタントルーチンのステータスを第1のクライアントデバイスにおいてアクティブとして識別するルーチンインスタンスデータを記憶するステップを含み得る。さらに、第2のクライアントデバイスにおいて自動アシスタントルーチンを続けることに対するユーザの関心の判定に応答して、リモートサーバデバイスは、自動アシスタントルーチンが、第1のクライアントデバイスにおいて非アクティブであること、または第2のクライアントデバイスにおいてアクティブであることを示すように、ルーチンインスタンスデータを修正する。
いくつかの実装形態では、この方法は、第1のクライアントデバイスにおいて、自動アシスタントルーチンが第1のクライアントデバイスにおいて非アクティブであること、または第2のクライアントデバイスにおいてアクティブであることを示すように、ルーチンインスタンスデータがリモートサーバデバイスにおいて修正されていると判定するステップを含み得る。追加として、この方法は、ルーチンインスタンスデータが修正されているとの判定に応答して、第1のクライアントデバイスにおけるデータのレンダリングを終えるステップを含み得る。
いくつかの実装形態では、この方法は、第1のクライアントデバイスまたはリモートサーバデバイスにおいて、ルーチンインスタンスデータを生成するステップであって、ルーチンインスタンスデータが、自動アシスタントルーチンを初期化したユーザまたはデバイス、自動アシスタントルーチンが初期化された時間、またはアクションのセットのアクションのステータスをさらに識別する、生成するステップを含み得る。いくつかの実装形態では、追加のコンテンツは、第1のクライアントデバイスにおいて前にレンダリングされたデータの少なくとも部分を含み得る。
いくつかの実装形態では、この方法は、ユーザが、自動アシスタントルーチンが第2のクライアントデバイスにおいて続けられることに対する関心を直接的または間接的に示したとの判定に応答して、第2のクライアントデバイスにローカルエリアネットワーク上で第1のクライアントデバイスのメモリバッファから追加のコンテンツを受信させるステップを含み得る。
さらに他の実装形態では、第1のクライアントデバイスを介して自動アシスタントルーチンを実行するために自動アシスタントを初期化するステップなどの動作を含む、1つまたは複数のプロセッサによって実装される方法が記載される。自動アシスタントルーチンは、自動アシスタントによって実行されるアクションのセットに対応し得る。この方法はまた、自動アシスタントルーチンに関する情報を提供するルーチンインスタンスデータを生成するステップであって、情報が、自動アシスタントルーチンに割り当てられたデバイスとして第1のクライアントデバイスを識別する、生成するステップを含み得る。この方法は、第1のクライアントデバイスに自動アシスタントルーチンを進めるためにアクションのセットのアクションに対応するコンテンツをレンダリングさせるステップをさらに含み得る。この方法はまた、第1のクライアントデバイスと通信しているセンサからのセンサデータに基づいて、ユーザが第1のクライアントデバイスにより近接しなくなったと判定するステップを含み得る。この方法は、ユーザが第1のクライアントデバイスにより近接しなくなったとの判定に応答して、第1のクライアントデバイスにおけるコンテンツのレンダリングを少なくとも一時的に停止させるステップをさらに含み得る。この方法はまた、自動アシスタントルーチンが第1のクライアントデバイスにおいて少なくとも一時的に停止されていることを示すようにルーチンインスタンスデータを修正するステップを含み得る。この方法は、ユーザが自動アシスタントにとってアクセス可能である第2のクライアントデバイスにより近接したとき、自動アシスタントに、ルーチンインスタンスデータに従って、第2のクライアントデバイスを介して自動アシスタントルーチンの実行を再開させるステップをさらに含み得る。
いくつかの実装形態では、ルーチンインスタンスデータを修正するステップは、ルーチンが少なくとも一時的に停止されているとき、アクションのセットの1つまたは複数のアクションが完了していること、または進行中であることを示すように、ルーチンインスタンスデータを修正するステップを含む。
いくつかの実装形態では、この方法は、ユーザが第2のクライアントデバイスにより近接したとき、自動アシスタントルーチンに関連するルーチン許可にアクセスするステップと、ルーチン許可に基づいて、自動アシスタントルーチンが第2のクライアントデバイスへの転送を許可されていると判定するステップとを含み得る。
いくつかの実装形態では、この方法は、自動アシスタントルーチンが第2のクライアントデバイスにおいて再開されているとき、自動アシスタントルーチンが第2のクライアントデバイスにおいて再開されていることを示すように、ルーチンインスタントデータを修正させるステップを含み得る。
いくつかの実装形態では、ルーチンインスタンスデータを生成するステップは、情報をリモートサーバデバイスに送信するステップを含み、ルーチンインスタンスデータを修正するステップは、ルーチンインスタンスデータを修正するための要求をリモートサーバデバイスに送信するステップを含む。いくつかの実装形態では、センサは、第1のクライアントデバイスおよび第2のクライアントデバイスとは異なる第3のクライアントデバイスと一体である。
いくつかの実装形態では、自動アシスタントに第2のクライアントデバイスを介して自動アシスタントルーチンの実行を再開させるステップは、第2のクライアントデバイスにアクションのセットのアクションに対応する追加のコンテンツをレンダリングさせるステップを含む。
追加として、いくつかの実装形態は、1つまたは複数のコンピューティングデバイスの1つまたは複数のプロセッサを含み、ここで、1つまたは複数のプロセッサは、関連するメモリ内に記憶された命令を実行するように動作可能であり、ここで、命令は、前述の方法のいずれかを実行させるように構成される。いくつかの実装形態は、前述の方法のいずれかを実行するために1つまたは複数のプロセッサによって実行可能なコンピュータ命令を記憶する1つまたは複数の非一時的コンピュータ可読記憶媒体をやはり含む。
図1は、デバイス同士の間で自動アシスタントルーチンを遷移させるためのシステム100を示す。システム100は、少なくとも1つのリモートサーバデバイス102など、1つまたは複数のリモート自動アシスタントデバイス112を含み得る。多くの実装形態では、サーバデバイス102は、互いと協働して動作する「クラウドベース」サーバデバイスのクラスタを備える。自動アシスタント104はサーバデバイス102の部分として示され、サーバデバイス102は、様々な実装形態では、自動アシスタント104の機能性の少なくとも部分を実装し得る。自動アシスタント104は図1でサーバデバイス102の部分として示されているが、多くの実装形態では、自動アシスタント104は、クライアントデバイス116および128など、1つまたは複数のクライアントデバイスにおいて提供されるアシスタントアプリケーションを部分的に介して、かつサーバデバイス102において含まれるリモート自動アシスタント構成要素を部分的に介して、動作し得る。たとえば、いくつかの実装形態では、第1のクライアントデバイス116およびサーバデバイス102は、第1のクライアントデバイス116のアシスタントインターフェースを介してユーザ118によって対話され得る自動アシスタントの論理インスタンスを形成するために、互いとインターフェースし得る。さらに、第2のクライアントデバイス128およびサーバデバイス102は、第2のクライアントデバイス116のアシスタントインターフェースを介してユーザ118によって対話され得る自動アシスタントの別の論理インスタンスを形成するために、互いとインターフェースし得る。
さらに、多くの実装形態では、第1のクライアントデバイス116およびサーバデバイス102を介して形成された自動アシスタントの論理インスタンス、および第2のクライアントデバイス128およびサーバデバイス102を介して形成された自動アシスタントの論理インスタンスは、ユーザ118の観点から、自動アシスタントの単一の論理インスタンスのように見なされるものを形成し得る。たとえば、多くの実装形態では、ユーザ118は、クライアントデバイス116および128のいずれか1つを介して自動アシスタントと対話する際に同じおよび/または同様の自動アシスタント機能性を実行させることができる。たとえば、クライアントデバイス116および128は、たとえば、同じユーザアカウント(たとえば、ユーザ118および/または別個のユーザのユーザアカウント)に関連付けられること、同じネットワーク上にあること、記憶されたデバイストポロジーにおいて、互いに関連付けられること、などによって、互いに関連付けられ得る。結果として、クライアントデバイス116および128のいずれか1つは、周辺デバイスの同じセットを制御し、クライアントデバイス116および128にとって個人的なかつ/またはそれに調整されたコンテンツにアクセスし、クライアントデバイス116および128に関連付けられた(かつ/またはユーザ118に関連付けられた)自動アシスタントルーチンの実行を開始するなどのために、ユーザ118によって対話され得る。
その上、本明細書で詳細に説明するように、様々な実装形態では、自動アシスタントルーチンは、クライアントデバイス116および128のいずれか1つにおいて開始され得る。たとえば、第1のクライアントデバイス116における自動アシスタントルーチンの開始に応答して、自動アシスタントルーチンの少なくとも部分に対応するコンテンツが第1のクライアントデバイス116においてレンダリングされ(たとえば、そのクライアントデバイスにおいて排他的にレンダリングされ)得る。さらに、ユーザ118がもはや第1のクライアントデバイス116付近にいない、かつ/またはユーザが第2のクライアントデバイス128付近にいるとの判定に応答して、自動アシスタントルーチンに対応するコンテンツのレンダリングが第1のクライアントデバイス116において中断されてよく、かつ/または第2のクライアントデバイス128において開始されてよい。たとえば、ユーザ118がもはや第1のクライアントデバイス116付近にいないとの判定に応答して、第1のクライアントデバイス116における任意の自動アシスタントルーチンコンテンツのレンダリングが中断されてよい。追加または代替として、ユーザ118が第2のクライアントデバイス128付近にいるとの判定に応答して、第2のクライアントデバイス128における自動アシスタントルーチンコンテンツのレンダリングが開始されてよい。たとえば、第1のクライアントデバイス116におけるコンテンツのレンダリングが中断される場合、コンテンツのレンダリングが第2のクライアントデバイス128において再開され得る。第2のクライアントデバイス128におけるコンテンツのレンダリングは、それが、第1のクライアントデバイス116において中断された時点から再開され得るか、またはその時点に先行するが、その時点に近い時点から再開され得る(たとえば、それが中断される前の10秒から再開され得る)。また、たとえば、第1のクライアントデバイス116におけるコンテンツのレンダリングが中断されない場合、第2のクライアントデバイス128におけるコンテンツのレンダリングは、第1のクライアントデバイス116におけるコンテンツのレンダリングと同期するように開始され得る。
2つのクライアントデバイス116および128のみが図1に示されているが、多くの実装形態では、ユーザ118は、住宅130内の他のデバイス、ユーザ118の車両内の車両ベースのデバイス、および/または住宅130以外の他の構造内の他のデバイスなど、追加のおよび/または代替のデバイスを介して自動アシスタント104にアクセスし得る。そのようなデバイスのいずれか同士の間の自動アシスタントルーチンの転送は、本明細書で開示する実装形態に従って実現され得る。その上、クライアントデバイス116および128、ならびに/またはアシスタントインターフェースを有する他のデバイスが少なくともそれらのデバイス同士の間でルーチンを転送するために互いとリンクされていると判定するために、様々な技法が利用され得る。そのような技法は、たとえば、デバイスに関連するユーザアカウント、デバイスに関連するネットワーク、デバイスを互いに関連付け、随意に、デバイスを(たとえば、部屋の定義を通じて)空間的に相関させる、デバイストポロジーなどを活用し得る。
ユーザ118は、クライアントデバイス116および128のいずれか1つのアシスタントインターフェースを介して自動アシスタント104と対話し得る。アシスタントインターフェースは、1つまたは複数のモダリティを使用してユーザのユーザインターフェース入力を受信し、1つまたは複数のモダリティを使用してユーザインターフェース出力をレンダリングする。ユーザインターフェース入力モダリティは、たとえば、タイプされた/タッチ、音声、およびジェスチャモダリティを含み、モダリティに対するユーザインターフェース入力は、たとえば、クライアントデバイスのマイクロフォン(音声モダリティ)、クライアントデバイスのタッチスクリーンおよび/またはキーボード(タイプされたモダリティ)、クライアントデバイスのカメラ(ジェスチャモダリティ)などを介して受信され得る。ユーザインターフェース出力モダリティは、たとえば、可聴、グラフィカル、および/またはハプティックを含み、モダリティに対するユーザインターフェース出力は、たとえば、クライアントデバイスのスピーカ(可聴モダリティ)、クライアントデバイスのディスプレイデバイス(視覚モダリティ)、クライアントデバイスのトランスデューサ(ハプティックモダリティ)などを介してレンダリングされ得る。たとえば、ユーザは、口頭、テキスト、ジェスチャ、またはグラフィカル入力をアシスタントインターフェースに提供して、自動アシスタント104に機能(たとえば、データの提供、周辺デバイスの制御、エージェントへのアクセスなど)を実行させることによって、ユーザインターフェース入力を自動アシスタント104に提供し得る。実行される機能に対応する応答コンテンツは、次いで、スピーカ、ディスプレイスクリーン、および/またはクライアントデバイスの他のユーザインターフェース出力デバイスを介してレンダリングされ得る。いくつかの実装形態では、クライアントデバイス116および/またはクライアントデバイス128は、タッチ入力を受信するためのタッチインターフェースを含み、自動アシスタント出力をレンダリングするように駆動されることも可能であるディスプレイパネルなど、ディスプレイデバイスを含み得る。いくつかの実装形態では、クライアントデバイス116および/またはクライアントデバイス128にはディスプレイデバイスが欠如していることがあり、それにより、グラフィカルユーザインターフェース出力モダリティを提供せずに、可聴アシスタントインターフェース出力モダリティを提供する。
クライアントデバイス116および128は各々、インターネットなどのネットワークを介してサーバデバイス102と通信していることがある。クライアントデバイス116および/または128は、計算タスクをサーバデバイス102にオフロードして、たとえば、計算リソースをクライアントデバイス116および/または128において保存し、かつ/またはリモートコンピューティングデバイス102において利用可能なよりロバストなリソースを活用し得る。たとえば、自動アシスタント104の態様は、第1のクライアントデバイス116のローカルアシスタントアプリケーションを介して実装され、自動アシスタント104の他の態様を実装するサーバデバイス102とインターフェースし得る。たとえば、ローカルアシスタントアプリケーションは、1つまたは複数のローカル音声対テキストエンジン、1つまたは複数のローカルテキスト対音声エンジン、および/またはサーバデバイス102のエンジンを補足するかまたは置換する他のローカルエンジンを随意に含み得る。サーバデバイス102は、随意に、複数のスレッドを介して、複数のユーザおよびそれらの関連するアシスタントアプリケーションにサービスし得る。自動アシスタント104の態様がクライアントデバイスのローカルアシスタントアプリケーションを介して実装される実装形態では、ローカルアシスタントアプリケーションは、クライアントデバイスのオペレーティングシステムから分離された(たとえば、オペレーティングシステムの「上部」にインストールされた)アプリケーションであってよく、または代替として、クライアントデバイスのオペレーティングシステムによって直接的に実装されてもよい(たとえば、オペレーティングシステムのアプリケーションと見なされるが、それと一体である)。
いくつかの実装形態では、サーバデバイス102は、自動音声認識を実行し得、ここで、クライアントデバイスによって提供されるオーディオデータは、オーディオデータのセマンティック表現(たとえば、テキスト)に変換される。たとえば、サーバデバイス102は、アシスタントインターフェースにおいて受信されたオーディオデータを処理して、オーディオデータ内で実施されたテキストを識別することができる音声(voice)対テキストエンジン108(音声(speech)対テキストエンジンまたはSTTエンジンとも呼ばれる)を含み得る。オーディオデータをテキストに変換するためのプロセスは、音声認識アルゴリズムを含んでよく、音声認識アルゴリズムは、語または句に対応するオーディオデータのグループを識別するためにニューラルネットワークおよび/または統計モデルを採用し得る。1つの非限定的な例として、オーディオデータは、オーディオデータ内に存在する単音(phone)および/または音素(phoneme)を生成するための1つまたは複数のトレーニングされた音響モデル(たとえば、1つまたは複数の長短期(LSTM:long short-term)レイヤを備えたニューラルネットワークモデル)を使用して処理されてよく、単音および/または音素は、それらの単音および/または音素に対応するテキストを生成するために解析される。オーディオデータから変換されたテキストは、オーディオデータに対する適切な自動アシスタント応答を判定する際に、サーバデバイス102において追加の構成要素によってさらに処理され得る。さらなる処理は、テキストおよび/または1つまたは複数の関連する値によって示される意味的な意図を判定するための自然言語理解エンジンによる処理を含んでよく、意味的な意図は、応答コンテンツを生成するために利用され得る。たとえば、応答コンテンツは、意図および関連する値の指示を含むコマンドをエージェントに送信すること、およびそれに応答して応答コンテンツを受信することに基づいて、生成され得る。さらなる処理は、追加または代替として、以下でより詳細に説明する、ルーチン管理エンジン124による処理を含み得る。
ユーザ118は、自動アシスタント104に対応する自動アシスタントルーチンの様々な異なるアクションを実行させるために、第1のクライアントデバイス116または第2のクライアントデバイス118のアシスタントインターフェースにおいて提供される入力を通して自動アシスタントルーチンを初期化し得る。ルーチン管理エンジン124は、入力を対応するアクションに対する入力のマッピングを含むルーチンデータ110と比較し得る。様々なタイプの入力は、ルーチンに対する圧縮された句の音声入力、圧縮された句のタイプされた入力、ルーチンに対するグラフィカルユーザインターフェース要素に対するユーザタッピング、ルーチンに対するジェスチャ(たとえば、手の振り、および/またはカメラおよび/または他のセンサを介して検出されたユーザの身体的動き)など、対応するルーチンの実行を開始するために提供され得る。いくつかの実装形態では、自動アシスタントは、ユーザからの明示的なユーザインターフェース関与なしにルーチンを実行し得る。たとえば、自動アシスタントは、クライアントデバイスによる、特定の時間期間内のユーザの存在の検出または特定の時間期間内のユーザの音声の検出に応答して、ルーチンを実行し得る(たとえば、午前7時から9時の間のユーザの存在の検出に応答して、「おはよう」ルーチンを実行する)。
1人または複数のユーザと自動アシスタント104との間の対話は、ルーチンデータ110および/またはユーザデータ106として(たとえば、一時的に)記憶されてよく、それらは各々、サーバデバイス102、第1のクライアントデバイス116、および/または第2のクライアントデバイス128において記憶され得る。ルーチンデータ110は、たとえば、1人または複数のユーザから受信される1つまたは複数の入力および自動アシスタント104によって実行されることになる1つまたは複数のルーチンを識別する対応データを提供し得る。ルーチンは、自動アシスタント104、別個のエージェント、サーバデバイス102とは別個のデバイス、および/または自動アシスタント104と対話することが可能な任意の他のアプリケーションおよび/またはデバイスによって実行されることになるアクションのセットに対応し得る。
ルーチンは、自動アシスタント104の指示で実行されてよく、ルーチンの実行中に1人または複数のユーザによって制御され得る。ルーチンのステータスは、ルーチンデータ110を記憶するためのデータベースを含み得るリモートデバイス112において記憶され得る。ルーチンデータ110は、ルーチン識別子、ステータス識別子、ロケーション識別子、デバイス識別子、および/またはルーチンの属性を特徴付けるために使用され得る任意の他の情報など、ルーチンインスタンスデータを含み得る。
当初、ユーザが、ルーチンが初期化されることを要求するとき、第1のクライアントデバイス116のアシスタントインターフェースによってコマンドが受信され得る。自動アシスタント104は、そのコマンドがアシスタントインターフェースにおいて受信されていることを確認応答し、ルーチンに関するルーチンデータ110を生成し得る。いくつかの実装形態では、自動アシスタント104は、コマンドをユーザから受信し、問合せを実行してそのコマンドに対応するルーチンを識別し得る。ルーチンが識別されているとき、自動アシスタント104は、ルーチン管理エンジン124にデータベースにアクセスさせ、ルーチンがアクティブであることを示すように(たとえば、「modify routine.current_routine.status='1'」)ルーチンに関連するステータス識別子を修正させることができる。
ユーザがアシスタントインターフェースにおいてルーチンを初期化するとき、自動アシスタント104は、ルーチンに関連するアクションのセットを識別し、それに応じて、アクションのセットの各アクションを委任し(delegate)得る。たとえば、アクションのセット内の少なくとも1つのアクションは、別個のコンピューティングデバイスにおいてホストされるエージェントによって少なくとも部分的に実行され得る。したがって、自動アシスタント104は、エージェントと通信して、エージェントにアクションの実行を開始させることができる。アクションを実行する際、エージェントは、第1のクライアントデバイス116にエージェントによって生成されたコンテンツをレンダリングさせることができる。エージェントは、第1のクライアントデバイス116にコンテンツをレンダリングさせる際に第1のクライアントデバイス116と直接的にインターフェースし得るか、またはコンテンツを自動アシスタント104に提供し、第1のクライアントデバイス116にコンテンツ(または、そのテキスト対音声変換など、変換)をレンダリングさせることができる。自動アシスタント104は、それぞれのアクションおよび/またはルーチンのステータスを示すために、アクションおよび/またはルーチンに関連する1つまたは複数のステータス識別子を更新するためのアクションの実行中、随意に、1回以上(たとえば、周期的に)データベースにアクセスするタスクをエージェントに課すことができる。
ルーチンに対するアクションのセットのアクションの実行中、ユーザ118は、ルーチンが初期化されたデバイスから離れて再配置し得る。たとえば、ユーザ118が自らの住宅の第1の部屋120内のルーチンを初期化したとき、ユーザ118は、自らの住宅の第2の部屋122に移動することを選ぶことがある。第1の部屋120は第1のクライアントデバイス116を含んでよく、第2の部屋122は第2のクライアントデバイス128を含んでよい。いくつかの実装形態では、第1のクライアントデバイス116は、1つまたは複数のセンサからの1つまたは複数の信号を使用して、ユーザ118が第1のクライアントデバイス116に近接する程度を判定し得る。たとえば、第1のクライアントデバイス116は、オーディオ、ビデオ、触覚、温度、ロケーション、Bluetooth、および/または、ユーザ118からの許可を用いて、ユーザ118のロケーション、および/またはユーザ118がセンサ付近にいるかどうかを判定するために使用され得るセンサデータを提供することができる任意の他のタイプのセンサと通信していることがある。第1のクライアントデバイス116に対するユーザ118の近接度の程度が低減するにつれて、自動アシスタント104は、自動アシスタント104によって実行されているアクションおよび/またはルーチンを休止させることによって、ユーザ118の近接度における変化に応答し得る。たとえば、第1のクライアントデバイス116における自動アシスタントアプリケーションおよび/またはサーバデバイス102におけるリモート自動アシスタント構成要素は、センサデータを利用して、ユーザが第1のクライアントデバイス116のしきい距離内に検出されていないこと、ユーザが第1のクライアントデバイス116付近に全く検出されていないこと、および/または特定のユーザ118が、第1のクライアントデバイス116のしきい距離内に、またはその付近に全く検出されていないことを判定し得る。さらに、そのような判定に基づいて、自動アシスタント104は、ルーチンに関するコンテンツのレンダリングを第1のクライアントデバイス116において休止させることができる。コンテンツのレンダリングの休止は、第1のクライアントデバイス116における自動アシスタントアプリケーションによって(たとえば、任意のバッファリングされたコンテンツのレンダリングを中断すること、および/またはコンテンツの何らかのストリーミングを中断させるためのコマンドをリモートサーバデバイス102に送ることによって)および/またはサーバデバイス102におけるリモート自動アシスタント構成要素によって(たとえば、任意のバッファリングされたコンテンツのレンダリングを中断させるためのコマンドを第1のクライアントデバイス116に送ること、および/または第1のクライアントデバイス116に対する任意のルーチンコンテンツのストリーミングを終えることによって)実行され得る。さらに、自動アシスタント104は、ユーザ118が第1のクライアントデバイス116により近接しなくなったことを示す、かつ/またはルーチンおよび/またはアクションが休止されていることを示す信号をルーチン管理エンジン124に提供し得る。
ルーチン管理エンジン124は、それに応じて、ルーチンデータ110を更新し得る。たとえば、ルーチン管理エンジン124は、自動アシスタントルーチンおよび/またはアクションが休止されていることを反映するようにルーチンデータ110を更新させることができる。いくつかの実装形態では、ルーチン管理エンジン124は、第1のクライアントデバイス116におけるルーチンのコンテンツのレンダリングが休止されたことを反映するように、ルーチンが休止されたときのルーチンのステータス(たとえば、どのアクションが実行されているか、どのコンテンツがレンダリングされているかなど)を反映するように、かつ/またはルーチンが休止された時間に対応するタイムスタンプを示すように、ルーチンデータ110を更新し得る。複数の異なる休止されたルーチンに対するタイムスタンプは、いつ失効するかを判定するために、またはさもなければ、再開されることが可能でない特定の休止されたルーチンをレンダリングするために追跡され得る。たとえば、休止されたルーチンに対する特定のタイムスタンプが所定のしきい値に達したとき、休止されたルーチンは、再開されることが可能でないとして指定され得る。このようにして、しきい期間(たとえば、24時間)にわたって休止状態に留まる、モーニングルーチンなどのルーチンは、翌日再開されないことになり、それにより、ユーザが異なるデータを異なる日にレンダリングさせることができるアクション(たとえば、日常のスケジュールをユーザに読み聞かせるアクション)を逃すのを防止する。
ユーザ118が第1のクライアントデバイス116を離れ、それにより、ルーチンを休止させるとき、ユーザ118は、図1に提供されるように、第2の部屋122内の第2のクライアントデバイス128により近接するように移動し得る。第2のクライアントデバイス128付近のユーザの存在は、(ユーザ118が第1のクライアントデバイス116により近接しなくなったと判定するために随意に利用されるセンサデータに加えて、および/またはそれと同じ)1つまたは複数のセンサからのセンサデータに基づいて、自動アシスタント104によって判定され得る。たとえば、第2のクライアントデバイス116における自動アシスタントアプリケーションおよび/またはサーバデバイス102におけるリモート自動アシスタント構成要素は、センサデータを利用して、ユーザが第2のクライアントデバイス128のしきい距離内にいること、任意のユーザが第2のクライアントデバイス128付近に確実に検出されること、および/または特定のユーザ118が、第2のクライアントデバイス128のしきい距離内に、またはその付近に確実に検出されることを判定し得る。さらに、そのような判定に基づいて、自動アシスタント104は、ルーチンに関するコンテンツのレンダリングを第2のクライアントデバイス128において再開させることができる。たとえば、サーバデバイスは、どのコンテンツがレンダリングのために提供されることになるかを判定するために(たとえば、それにより、コンテンツが中止されたところで、または中止されたすぐ前で、そのコンテンツをピックアップさせるために)ルーチンが休止されたときのルーチンの記憶されたステータスに随意に依存して、そのコンテンツをレンダリングのために第2のクライアントデバイス128に送信させることができる。
様々な実装形態では、ユーザ118が第2のクライアントデバイス128付近に存在するとの判定に応答して、ルーチン管理エンジン124は、ルーチンデータ110の問合せを実行して、(ユーザ118および/またはクライアントデバイス128に対応する)任意のルーチンのステータスが休止または非アクティブとして示されているかどうかを判定し得る(たとえば、「modify routine.current_routine.status='0'」)。ルーチン管理エンジン124は、たとえば、所与のルーチンが休止されていると判定し、ユーザ118が第2のクライアントデバイス128の付近に存在し、かつユーザ118および/または第2のデバイスが所与のルーチンに関連付けられると判定する結果として、自動アシスタント104に第2のクライアントデバイス128を介してルーチンを再開させることができる。たとえば、ルーチン管理エンジン124は、ルーチンが休止されたときのルーチンのステータスの指示を自動アシスタント104に提供することができ、それが休止されたときのルーチンのステータスに基づいてルーチンを再開させることができる。
一例として、ルーチンがルーチンのアクションに関する現在のポッドキャストの2分地点において休止された場合、自動アシスタント104は、2分地点において、またはその付近(たとえば、その5、10、または15秒)において開始し、ポッドキャストを第2のクライアントデバイス128においてレンダリングさせることができる。自動アシスタント104は、随意に、そのレンダリングの再開を可能にするためにポッドキャストを局所的に記憶してよく、またはそのレンダリングを再開させるためにエージェントとインターフェースしてよい。たとえば、自動アシスタント104は、エージェントにポッドキャストを(クライアントデバイスに直接的にまたはサーバデバイス102を介して)提供し続けさせるためのコマンドをエージェントに提供し得る。また、たとえば、自動アシスタント104は、ルーチン管理エンジン124にポッドキャストアクションが再度アクティブであることを反映するようにルーチンデータ110を更新させることができ、エージェントは、ルーチンデータ110に(たとえば、APIを介して)アクセスして、ポッドキャストが再度アクティブであると判定し、結果として、(クライアントデバイスに直接的にまたはサーバデバイス102を介して)ポッドキャストの提供を再開し得る。
別の例として、ルーチンが、ルーチンの第1のアクションに対応する第1のコンテンツのレンダリングの完了後であるが、ルーチンの第2のアクションに対応する第2のコンテンツのいずれかのレンダリング前に休止した場合、自動アシスタント104は、第2のコンテンツを第2のクライアントデバイス128においてレンダリングさせることができる。たとえば、自動アシスタント104は、第2のコンテンツを生成および/または提供させる命令を第2のアクションに関連するエージェントに提供し得る。また、たとえば、自動アシスタント104は、ルーチン管理エンジン124に、ルーチンが再度アクティブであり、第2のアクションの実行準備が整っていることを反映するようにルーチンデータ110を更新させることができ、エージェントは、ルーチンデータ110に(たとえば、APIを介して)アクセスして、第2のアクションの実行準備が整っていると判定し、結果として、第2のコンテンツを生成および/または提供し得る。さらに別の事例として、第2のエージェントは、第2のコンテンツをサーバデバイス102にすでに提供している可能性があり、サーバデバイス102は、そのコンテンツをバッファリングした可能性があり、自動アシスタント104は、バッファリングされたコンテンツにアクセスして、第2のクライアントデバイス128を介してそれをレンダリングさせることができる。
これらのおよび他の方法で、ユーザ118がルーチン全体に関係するコンテンツを認知することを可能にするために、ルーチンからのコンテンツが様々なアシスタントデバイス同士の間で転送される間、ユーザ118は、自らの住宅130を歩き回ること、および/またはクライアントデバイス116および128にリンクされたアシスタントデバイスを含む他の環境に移動することが可能になる。これは、ユーザがコンテンツ全体を認知することを可能にし、それにより、ユーザ118がルーチンの追加の計算集約的な実行を再度要求する必要を軽減し得る。追加または代替として、別のアシスタントデバイスに転送されるとき、ルーチンのコンテンツのレンダリングが前のアシスタントデバイスにおいて中断される実装形態では、前のアシスタントデバイスにおけるリソース消費はそのような中断により低減され得、これは、前のアシスタントデバイスがルーチンのコンテンツを不要にレンダリングし続けることを防止する。
図2は、クライアントデバイス同士の間のユーザの移動に基づいて、クライアントデバイス同士の間でルーチンを転送する一例の状態図200を示す。状態図200は、1つまたは複数のプロセッサによって実行可能な命令として実施され得る。状態図200は、第1のクライアントデバイス202と、第2のクライアントデバイス204と、サーバ自動アシスタント206と、第三者エージェント208との間の通信を詳述する。構成要素同士の間の特定の対話が図2に示されているが、様々な実装形態では、それぞれの構成要素によって実行されているとして示されるいくつかの動作は、追加または代替として、代替構成要素によって実行され得る。たとえば、第1のクライアントデバイス202によって実行されるいくつかの動作は、代わりに、サーバ自動アシスタント206によって実行されてよく、その逆も同様である。サーバ自動アシスタント206およびエージェント208は各々、第1のリモートデバイス210(たとえば、クラウドベースサーバのクラスタ)および第2のリモートデバイス212においてそれぞれ少なくとも部分的にホストされ得る。サーバ自動アシスタント206は、第1のクライアントデバイス202、第2のクライアントデバイス204、第1のリモートデバイス210、および/またはエージェント208の各々にとってアクセス可能であり得る。さらに、ユーザは、第1のクライアントデバイス202および/または第2のクライアントデバイス204のいずれかにおいて、自動アシスタントインターフェースを介して自動アシスタントと対話し得る。たとえば、ユーザは、自動アシスタントを初期化して、第1のクライアントデバイス202の自動アシスタントインターフェースを介してルーチンを実行し得る。ルーチンは、随意に、自動アシスタントにとってアクセス可能である1つまたは複数のエージェントとの対話を介して自動アシスタントの指示で実行され得るアクションのセットであり得る。
ルーチンが状態図200の動作214において初期化されるとき、第1のクライアントデバイス202は、動作216に従って、第1の通知を第1のリモートデバイス210に送信し得る。第1の通知は、ユーザがルーチンを初期化したという指示を提供し、それにより、サーバ自動アシスタント206が初期化されている特定のルーチンを識別することを可能にし得る。いくつかの実装形態では、第1のクライアントデバイス202は、ユーザの音声発話に対応するオーディオデータを送ることができ、第1のリモートデバイス210は、オーディオデータを処理して、オーディオデータが、ユーザおよび/または第1のクライアントデバイス202に関連して記憶されているルーチンなど、ルーチンに対応すると判定し得る。このようにして、第1のクライアントデバイス202におけるユーザの音声発話は、第1のクライアントデバイス202においてルーチンを初期化し得る。第1のクライアントデバイス202におけるその初期化に基づくサーバ自動アシスタント206によるルーチンの識別に応答して、サーバ自動アシスタント206は、動作218に従って、ルーチンデータを生成し得る。具体的には、ルーチンデータは、第1のクライアントデバイス202および初期化されているルーチンを少なくとも識別し得る。いくつかの実装形態では、ルーチンデータは、ルーチンを識別したユーザを示し得る。たとえば、ユーザに関連する識別子が判定可能であり、識別子はルーチンデータ内に含まれる。ユーザに関連する識別子は、たとえば、第1のクライアントデバイス202において捕捉されたオーディオデータによって捕捉された音声署名に対する識別子に関連して記憶された音声署名の整合に基づいて、かつ/または第1のクライアントデバイス202において捕捉された他のセンサデータ(たとえば、カメラからの画像)に基づいて、判定され得る。
第1の通知の受信に応答して、第1のリモートデバイス210は、動作220に従って、アクションコマンドをエージェント208に提供し得る。アクションコマンドは、エージェント208が第1のクライアントデバイス202において初期化されたルーチンに対応するアクションのセットのアクションの実行を初期化するための要求を含み得る。たとえば、エージェント208は、特定の日に関するユーザのスケジュールについての情報を提供するためのスケジューリングエージェントであってよい。アクションコマンドの受信に応答して、エージェント208は、アクションの実行を開始し得る。さらに、サーバ自動アシスタント206は、ルーチンが初期化されていること、および/またはエージェント208がルーチンの対応するアクションの実行を開始したことを反映するために、動作222に従って、ルーチンデータを更新し得る。さらに、アクションの一環として、エージェント208は、動作224に従って、第1のクライアントデバイス202におけるレンダリングに関するコンテンツを提供し得る。たとえば、エージェント208は、第1のクライアントデバイス202に特定の日に関するユーザのスケジュールに対応するオーディオ出力を提供させることができる。いくつかの実装形態では、エージェント208は、データをサーバ自動アシスタント206に提供し、サーバ自動アシスタント206は、次いで、第1のクライアントデバイス202によるレンダリングのために、そのデータ(または、その変換)を第1のクライアントデバイス202に提供する。
第1のクライアントデバイス202がアクションに対応するコンテンツをレンダリングしている間、第1のクライアントデバイス202は、動作226に従って、ユーザの存在の欠如を検出し得る。たとえば、第1のクライアントデバイス202は、ユーザの存在の欠如を検出することができる1つまたは複数のセンサを含んでよく、かつ/またはそれと通信していてよい。第1のクライアントデバイス202は、センサのうちの1つまたは複数からのセンサデータに基づいて、ユーザの存在の欠如を判定し得る。ユーザの存在の欠如の判定に応答して、第1のクライアントデバイス202は、動作228に従って、第2の通知を第1のリモートデバイス210に提供し得る。第2の通知は、ユーザが、レンダリングされたデータをもはや認知していない、第1のクライアントデバイス202にもはや近接していない、かつ/またはさもなければ、ユーザが第1のクライアントデバイス202において一時的に対応可能でないことを直接的または間接的に示した、という指示を提供し得る。いくつかの他の実装形態では、第1のリモートデバイス210は、第1のクライアントデバイス202から、かつ/または第1のクライアントデバイス202付近にある他のセンサから受信されたセンサデータに基づいて、第1のクライアントデバイス202付近のユーザの存在の欠如を判定し得る。第1のクライアントデバイス202付近にある他のセンサは、たとえば、IoTデバイスのセンサを含んでよく、センサは、デバイストポロジーに基づいて(たとえば、第1のクライアントデバイス202およびセンサが同じ部屋の中にあるとして識別する、ユーザ定義されたかつ/または自動的に判定されたデバイストポロジーに基づいて)、第1のクライアントデバイス202付近にあると随意に判定され得る。
第2の通知の受信に応答して、第1のリモートデバイス210は、エージェント208によって実行されているルーチンおよび/もしくはアクション、ならびに/またはルーチンを進めるためにアクションを実行している任意の他のアプリケーションもしくはデバイスを、初期化して少なくとも一時的に停止し得る。たとえば、サーバ自動アシスタント206は、動作230に従って、ルーチンデータを更新させることができる。ルーチンデータは、ルーチンが休止されることになること、もしくは休止されていることを反映するように、かつ/またはアクションのセットの1つまたは複数のアクションが休止されていること、もしくは休止されることになることを識別するように更新され得る。いくつかの実装形態では、ルーチンデータは、ルーチンが休止されたときのルーチンのステータス、第2の通知が受信された、またはルーチンが休止された時間、ルーチンを休止させたデバイス、ルーチンを休止させたユーザ、および/または自動アシスタントルーチンに関連付けられ得る任意の他の情報を識別するように更新され得る。第1のリモートデバイス210は、エージェント208に第1のクライアントデバイス202によってレンダリングするためのデータの提供を少なくとも一時的に休止させるために、動作232に従って、休止コマンドを第2のリモートデバイス212に送信し得る。追加または代替として、第1のリモートデバイス210は、休止コマンドを第1のクライアントデバイス202に送信して、第1のクライアントデバイス202にレンダリングのために第1のクライアントデバイス202にすでに提供された任意のデータのレンダリングを中断させ(たとえば、いずれかのまだレンダリングされていない可聴コンテンツの可聴レンダリングを中断させ、かつ/またはいずれかの現在レンダリングされている視覚コンテンツのレンダリングを中断させ)得る。
(たとえば、第1のクライアントデバイスにおけるユーザ存在の欠如を判定した後の時間期間tにわたって)ルーチンが少なくとも一時的に休止されている間、第2のクライアントデバイス204は、動作234に従って、ユーザの存在を検出し得る。第2のクライアントデバイス204は、ユーザの存在の欠如を検出することが可能な1つまたは複数のセンサを含んでよく、かつ/またはそれらと通信していてよく、かつセンサのうちの1つまたは複数からのセンサデータに基づいて、ユーザの存在を判定し得る。ユーザの存在の判定に応答して、第2のクライアントデバイス204は、動作236に従って、第3の通知を第1のリモートデバイス210に提供し得る。たとえば、ユーザは、第1のクライアントデバイス202を含む第1の部屋から第2のクライアントデバイス204を含む第2の部屋に移動し得る。結果として、第2のクライアントデバイス204は、オーディオ、ビデオ、動き、温度、および/または任意の他のセンサモダリティなど、1つまたは複数のセンサを使用して、ユーザからの許可を用いて、第2の部屋内のユーザの存在を検出し得る。第3の通知は、ユーザが第2のクライアントデバイス204に近接している、および/またはさもなければ、ユーザが第2のクライアントデバイス204において現在対応可能であることを直接的または間接的に示したという指示を提供し得る。いくつかの他の実装形態では、第1のリモートデバイス210は、第2のクライアントデバイス204から、かつ/または第2のクライアントデバイス204付近にある他のセンサから受信されたセンサデータに基づいて、第2のクライアントデバイス付近の存在を判定し得る。
第1のリモートデバイス210は、第3の通知を受信し、応答して、動作238に従って、ルーチンデータを更新し得る。ルーチンデータは、ルーチンが再開されていること、もしくは再開されることになること、および/またはアクションが再開されていること、もしくは再開されることになることを示すように更新され得る。さらに、第3の通知の受信に応答して、第1のリモートデバイス210は、動作240に従って、再開コマンドを第2のリモートデバイス212に送信し得る。再開コマンドは、エージェント208にエージェント208がルーチンを進めるために前に実行したアクションの実行を再開させることができる。しかしながら、ユーザは第2のクライアントデバイス204において検出されたため、再開コマンドは、第2のクライアントデバイス204に対する識別子を含んでよく、それにより、動作242に従ってなど、任意の追加のデータが第2のクライアントデバイス204においてレンダリングするために提供されるべきであることをエージェント208に通知する。これは、第1のクライアントデバイス202および第2のクライアントデバイス204がデータを提示するために異なるモダリティを有するときに有用であり得る。たとえば、第1のクライアントデバイス202がディスプレイパネルを有さないアシスタントデバイスであり、第2のクライアントデバイス204がタブレットコンピューティングデバイスである場合、エージェント208は、第2のクライアントデバイス204に関する撮像データを含むデータをレンダリングし得る。追加または代替として、第1のリモートデバイス210は、最初に何のコマンドもエージェント208に送信せずに、任意の追加のデータを第2のクライアントデバイス204におけるレンダリングのために提供させることができる。たとえば、追加のデータは、第1のリモートデバイス210においてすでにバッファリングされている(たとえば、それを第1のクライアントデバイス202に当初提供することを予期しているものの、ルーチンを休止させるために、バッファリングされている)ことがあり、第1のリモートデバイス210は、バッファリングされた追加のデータを第2のクライアントデバイス204によってレンダリングするために、第2のクライアントデバイス204に送信させることができる。
いくつかの実装形態では、異なるユーザが第2のクライアントデバイス204において自動アシスタントに関与していることがあり、ユーザは、それにもかかわらず、第2のクライアントデバイス204によって検出され得る。しかしながら、異なるユーザが第2のクライアントデバイス204において自動アシスタントにすでに関与しているため、自動アシスタントは、異なるユーザがもはや自動アシスタントに関与しなくなるまで、または異なるユーザの存在がもはや第2のクライアントデバイス204によって検出されなくなるまで、ルーチンの再開を迂回し得る。異なるユーザがもはや第2のクライアントデバイス204において検出されないとき、動作236に関する後の動作とともに、動作236が実行され得る。たとえば、ルーチンデータは、異なるユーザが第2のクライアントデバイス204において自動アシスタントに関与していたと当初示すことがある。しかしながら、異なるユーザが自動アシスタントとの関与を完了し、ユーザが第2のクライアントデバイス204によって検出されているとき、ルーチンデータは、前に休止されたルーチンが再開されることを示すように更新され得る。
いくつかの実装形態では、自動アシスタントルーチンの転送は、第1のクライアントデバイス202付近のユーザの存在の欠如の判定を考慮せずに(たとえば、発生していても、第1のクライアントデバイス202付近のユーザの存在の欠如の何の判定もなしに)、第2のクライアントデバイス付近にユーザが検出されていることに基づいて実行され得る。このようにして、第1のクライアントデバイス202(および/または、第1のリモートデバイス210)は、自動アシスタントルーチンのコンテンツが当初第1のクライアントデバイス202においてレンダリングされている間、ユーザの存在を監視する必要があるとは限らない。いくつかの実装形態では、第2のクライアントデバイス204は、第1のクライアントデバイス202がルーチンの部分を実行するのと同時に、ルーチンの部分を実行し得る。たとえば、ルーチンに対するアクションのセットのアクションが第1のクライアントデバイス202におけるユーザに対するオーディオデータのレンダリングを含み、ユーザが第2のクライアントデバイス204付近に検出されるとき、オーディオデータは、第1のクライアントデバイス202と第2のクライアントデバイス204の両方において同時にレンダリングされ得る。追加として、または代替として、第1のクライアントデバイス202によって伝えられるオーディオの音量は、漸進的に低減されてよく、第2のクライアントデバイス204によって伝えられるオーディオの音量は、漸進的に増加されてよい。増加および/または低減の量は、随意に、それぞれ、第2のクライアントデバイス204および/または第1のクライアントデバイス202からの推定距離に比例してよい。このようにして、ユーザは、ユーザが第2のクライアントデバイス204に向かって移動しているとき、第1のクライアントデバイス202において個別に休止させるのではなく、オーディオの漸進的な変化を認知することになる。
いくつかの実装形態では、ユーザが第1のクライアントデバイス202付近にいるか、かつ/または第2のクライアントデバイス204付近にいるかを示すセンサデータを提供するセンサは、第3のクライアントデバイスと通信していることがあるか、またはそれと一体であることがある。第3のクライアントデバイスは、第1のクライアントデバイス202および第2のクライアントデバイス204がやはり接続される共通ローカルエリアネットワークに接続され得る。たとえば、第3のクライアントデバイスは、温度を監視するサーモスタット、または動きを監視するセキュリティシステムに限定されないが、これらなど、ユーザの住宅のいくつかの特徴を監視することができる「モノのインターネット」(IoT)デバイスであってよい。このようにして、自動アシスタントルーチンの転送をトリガするための信号は、自動アシスタントクライアントアプリケーションをホストするデバイスからだけではなく、複数の異なるデバイスから提供され得る。
いくつかの実装形態では、ユーザ、ユーザのグループ、アシスタントクライアントデバイス、および/または(たとえば、すべて、住宅などの構造内の)アシスタントクライアントデバイスのグループは、自動アシスタントを介してIoTデバイスと対話すること(たとえば、それを制御すること)を可能にするために、(たとえば、1つまたは複数のデータベース内で)複数の個別のIoTデバイスとリンクされ得る。たとえば、家庭内の複数のアシスタントクライアントデバイスの各々は、いずれかのユーザ(または、ユーザの限定されたグループ)がアシスタントクライアントデバイスのいずれか1つとインターフェースして、複数の個別のIoTデバイスのいずれか1つと対話することを可能にするために、家庭内の複数の個別のIoTデバイスの各々にリンクされ得る。
そのようなリンクの一例は、ユーザ作成可能であり、かつ/または自動的に作成可能であり、様々なアシスタントクライアントデバイス、様々なIoTデバイス、各々に対する識別子、および/または各々に対する属性を定義し得る、デバイストポロジー表現である。たとえば、デバイスに対する識別子は、デバイスが配置された構造の部屋(および/または、他のエリア)(たとえば、居間、台所)を指定し得、かつ/またはそのデバイスに対するニックネームおよび/またはエイリアス(たとえば、カウチランプ、玄関扉の鍵、寝室のスピーカ、キッチンアシスタントなど)を指定し得る。このようにして、デバイスの識別子は、ユーザがそれぞれのデバイスに関連付ける可能性がある、それぞれのデバイスの名前、エイリアス、および/またはロケーションであってよい。本明細書で説明するように、そのような識別子は、本明細書で開示する様々な実装形態において利用され得る。たとえば、所与のアシスタントクライアントデバイス付近の存在は、その所与のアシスタントクライアントデバイスと所与のIoTデバイスの両方が、それらが両方とも同じ部屋の中に配置されていることを示す識別子に関連付けられることに基づいて、その所与のIoTデバイスからのセンサデータに基づいて判定され得る。
いくつかの実装形態では、自動アシスタントルーチンは、自動アシスタントルーチンの転送可能性に対する制限を識別する許可に関連付けられ得る。たとえば、自動アシスタントルーチンは、ルーチンを転送させることができるユーザのセットを識別する許可に関連付けられ得る。このようにして、自動アシスタントルーチンが初期化されるときに複数の人々が第1のクライアントデバイス202付近におり、ユーザのセット内で識別されない人物が第1のクライアントデバイス202から立ち去る場合、その人物は、自動アシスタントルーチンの休止または転送をトリガしないことになる。追加として、または代替として、自動アシスタントルーチンは、自動アシスタントルーチンが転送され得るかつ/またはされ得ない、1つまたは複数のデバイスを識別する許可に関連付けられ得る。このようにして、自動アシスタントルーチンが、その自動アシスタントルーチンの転送先ではないとして、許可内で識別されるデバイスを使用している人物を邪魔するのを妨げることができる。
いくつかの実装形態では、第1のクライアントデバイス202がユーザに対してデータをレンダリングしている間に、自動アシスタントルーチンが転送されるとき、第1のクライアントデバイス202は、第1のクライアントデバイス202のメモリ内の一定量のデータをバッファリングし得る。バッファリングされたデータは、第1のクライアントデバイス202においてユーザにその後レンダリングするために配列され得る。しかしながら、ユーザが自動アシスタントルーチンを第2のクライアントデバイス204に転送させる場合、バッファリングされたデータは、ローカルエリアネットワーク上で第1のクライアントデバイス202から第2のクライアントデバイス204に送信され得る。このようにして、第2のクライアントデバイス204は、自動アシスタントルーチンを進めるためにレンダリングするためのデータを再度要求することが必要であるとは限らない。むしろ、データが第2のクライアントデバイス204に対して共通であるネットワーク上のローカルデバイスにすでにダウンロードされている場合、第2のクライアントデバイス204は、ダウンロードされたデータをそのローカルデバイスから受信し得る。
図3は、自動アシスタントルーチンをクライアントデバイス同士の間で転送させるための方法300を示す。方法300は、1つまたは複数のコンピューティングデバイス、アプリケーション、および/または自動アシスタントと対話することが可能な任意の他の装置またはモジュールによって実行され得る。方法300は、第1のクライアントデバイスにおいて自動アシスタントルーチンを実行するために自動アシスタントを初期化する動作302を含み得る。自動アシスタントは、第1のクライアントデバイスと、第1のクライアントデバイスと同じネットワークに随意に接続され得る第2のクライアントデバイスとにとってアクセス可能であり得る。自動アシスタントは、第1のクライアントデバイスの自動アシスタントインターフェースにおける自然言語入力の受信に応答して、自動アシスタントルーチンの実行を初期化し得る。たとえば、ユーザは、「アシスタント、私の掃除ルーチンを始めて」などの音声発話を第1のクライアントデバイスの自動アシスタントインターフェースに提供し得る。応答して、自動アシスタントは、音声発話内で識別されたルーチンに対応するルーチンを識別するために、ルーチンのデータベースにアクセスし得る。
方法300は、自動アシスタントルーチンに関する情報を提供するルーチンインスタンスデータを生成する動作304をさらに含み得る。この情報は、自動アシスタントルーチンに割り当てられたデバイスとして第1のクライアントデバイスを識別し得る。いくつかの実装形態では、ルーチンインスタンスデータは、第1のクライアントデバイスにおいて生成され、ユーザのアカウントに関連する複数の異なるクライアントデバイスにとってアクセス可能であるデータベースに送信され得る。ルーチンインスタンスデータは、「Instance_Data:assistant.routine.active='1';assistant.routine.deviceID='1'」など、第1のクライアントデバイスに対する識別子を提供することができ、ここで、「assistant.routine.active」変数は、自動アシスタントルーチンがアクティブであることを示し、「assistant.routine.deviceID」は、第1のクライアントデバイスに対する識別子「1」を示す。
方法300はまた、第1のクライアントデバイスに、自動アシスタントルーチンを進めるためにアクションのセットのアクションに対応するコンテンツをレンダリングさせる動作306を含み得る。自動アシスタントルーチンは、ユーザが自らの家を掃除するときに要求し得る「掃除」ルーチンに対応し得る。「掃除」ルーチンは、音楽エージェントに「掃除」プレイリストを再生させる、掃除器具(たとえば、ロボット掃除機)を開始させる、および電話呼出しをアシスタントデバイスに転送させるなどのアクションを含み得る。したがって、アクションのセットのアクションは、可聴音楽をクライアントデバイスにおいてレンダリングさせることができ、ここで、可聴音楽は音楽エージェントによって提供される。
方法300は、ユーザが第1のクライアントデバイスにより近接しなくなったと判定する動作308をさらに含み得る。動作308における判定は、第1のクライアントデバイスと通信している1つまたは複数のセンサからの1つまたは複数の信号に基づいて実行され得る。たとえば、近接センサは、第1のクライアントデバイスと一体であってよく、またはそこからリモートであってもよく、ユーザの検出された動きに応答して第1のクライアントデバイスに信号を提供し得る。信号は、ユーザからの許可を用いて、ユーザが第1のクライアントデバイスに向かって移動しているか、またはそこから離れて移動しているかを判定するために、第1のクライアントデバイスによって処理され得る。いくつかの実装形態では、センサは、ユーザに応答し得るセンサに対する、オーディオ、ビデオ、触覚、温度、および/または任意の他のモダリティであってよい。このようにして、自動アシスタントは、特定のルーチンを実行し続けるかどうか、ルーチンを別のデバイスに転送させるかどうか、かつ/またはユーザが対応可能になるまで、ルーチンを少なくとも一時的に休止させるかどうかを判定するために、そのようなセンサからのデータにアクセスし得る。
方法300はまた、ユーザが第1のクライアントデバイスにより近接しなくなったとの判定に応答して、第1のクライアントデバイスにおけるデータのレンダリングを少なくとも一時的に停止させる動作310を含み得る。ルーチンはまた、ユーザが第1のクライアントデバイスにより近接しなくなったとの判定に応答して、少なくとも一時的に停止されてもよい。このようにして、自動アシスタントは、ユーザがいずれのレンダリングされたデータも逃さないことを確実にし得、これは、ルーチンが、日常のスケジュールをレンダリングすること、受信されたメッセージを可聴的に提供すること、および/または任意の他の重要なコンテンツを発行することを含むとき、特に重要であり得る。いくつかの実装形態では、第1のクライアントデバイスは、ユーザがそのルーチンを再開させるとき、最近レンダリングされたデータを繰り返すことができるように、最近レンダリングされたデータの部分(たとえば、過去t秒にレンダリングされたデータ、ここで、tは、任意の正数である)を識別し得る。
方法300はまた、自動アシスタントルーチンが第1のクライアントデバイスにおいて少なくとも一時的に停止されていることを示すようにルーチンインスタンスデータを修正する動作312を含み得る。いくつかの実装形態では、ルーチンインスタンスデータを修正することは、リモートサーバデバイスにとってアクセス可能な表に自動アシスタントルーチンが休止されていることを示すエントリを含めさせるためのデータをリモートサーバデバイスに送信することを含み得る。リモートサーバデバイスは、ルーチンインスタンスデータをホストし、したがって、自動アシスタントルーチンのステータス、自動アシスタントルーチンが最近アクティブだったデバイス、ルーチンを受信および/または転送するための許可を有する1つまたは複数のデバイス、自動アシスタントルーチンが初期化された時間、自動アシスタントルーチンが休止した時間、自動アシスタントルーチンを初期化したユーザ、自動アシスタントルーチンを休止させたユーザ、および/または自動アシスタントルーチンに関連付けられ得る任意の他のデータなどの情報を提供し得る。
方法300は、ユーザが自動アシスタントアクセス可能デバイス付近に再配置されているかどうかを判定する動作314をさらに含み得る。動作304における判定は、第1のクライアントデバイス、リモートサーバデバイス、第2のクライアントデバイス、および/または自動アシスタントと対話することが可能な任意の他のデバイスまたは装置によって実行され得る。たとえば、いくつかの実装形態では、第2のクライアントデバイスは、第2のクライアントデバイスにおけるまたはその付近での第2のクライアントデバイスの検出に応答して、リモートサーバデバイスに指示を提供し得る。第2のクライアントデバイスは、第2のクライアントデバイスと通信している1つまたは複数のセンサからの1つまたは複数の信号を使用して、ユーザが第2のクライアントデバイスにまたはその付近にいると判定し得る。リモートサーバデバイスが第2のクライアントデバイスから指示を受信するとき、リモートサーバデバイスは、問合せを実行して、いずれかの休止された自動アシスタントルーチンが存在するかどうかを判定し得る。リモートサーバデバイスが休止された自動アシスタントルーチンが存在すると判定したとき、リモートサーバデバイスは、ルーチンインスタンスデータを第2のクライアントデバイスにプッシュし得る。応答して、第2のクライアントデバイスは、ルーチンインスタンスデータを処理し、自動アシスタントルーチンを休止解除するために自動アシスタントを起動し得る。
方法300はまた、自動アシスタントにルーチンインスタンスデータに従って、自動アシスタントルーチンの実行を再開させる動作316を含み得る。たとえば、ルーチンインスタンスデータは、アクションのセットのアクションに対応するコンテンツをレンダリングする間に自動アシスタントルーチンが休止されたことを示すため、自動アシスタントは、アクションのセットのアクションに対応する追加のコンテンツを引き続きレンダリングし得る。いくつかの実装形態では、ユーザが第1のクライアントデバイスから立ち去ったために、一定量の前にレンダリングされたコンテンツがユーザによって受信されなかった場合、自動アシスタントは、第2のクライアントデバイスに前にレンダリングされたコンテンツをレンダリングさせることができる。さもなければ、第2のクライアントデバイスは、アクションに対応する任意の追加のコンテンツをレンダリングし、少なくとも、ユーザが、異なる自動アシスタントデバイス付近に再配置されるか、またはさもなければ、第2のクライアントデバイスにおいて自動アシスタントルーチンを続ける気がないことを示すまで、アクションのセットの任意の他のアクションの実行を初期化し得る。
図4は、例示的なコンピュータシステム410のブロック図である。コンピュータシステム410は、一般に、バスサブシステム412を介していくつかの周辺デバイスと通信する、少なくとも1つのプロセッサ414を含む。これらの周辺デバイスは、たとえば、メモリ425およびファイル記憶サブシステム426を含む記憶サブシステム424と、ユーザインターフェース出力デバイス420と、ユーザインターフェース入力デバイス422と、ネットワークインターフェースサブシステム416とを含み得る。入力および出力デバイスは、コンピュータシステム410とのユーザ対話を可能にする。ネットワークインターフェースサブシステム416は、外部ネットワークに対するインターフェースを提供し、他のコンピュータシステム内の対応するインターフェースデバイスに結合される。
ユーザインターフェース入力デバイス422は、キーボード、マウス、トラックボール、タッチパッド、またはグラフィックスタブレットなどのポインティングデバイス、スキャナ、ディスプレイ内に組み込まれたタッチスクリーン、音声認識システムなどのオーディオ入力デバイス、マイクロフォン、および/または他のタイプの入力デバイスを含み得る。概して、「入力デバイス」という用語の使用は、コンピュータシステム410内にまたは通信ネットワーク上に情報を入力するためのすべての考えられるタイプのデバイスおよび方法を含むことが意図される。
ユーザインターフェース出力デバイス420は、ディスプレイサブシステム、プリンタ、ファックス機、またはオーディオ出力デバイスなどの非視覚ディスプレイを含み得る。ディスプレイサブシステムは、陰極線管(CRT)、液晶ディスプレイ(LCD)などのフラットパネルデバイス、投影デバイス、または可視画像を作成するための何らかの他の機構を含み得る。ディスプレイサブシステムはまた、オーディオ出力デバイスなどの非視覚ディスプレイを提供し得る。概して、「出力デバイス」という用語の使用は、コンピュータシステム410からユーザにまたは別の機械もしくはコンピュータシステムに情報を出力するためのすべての考えられるタイプのデバイスおよび方法を含むことが意図される。
記憶サブシステム424は、本明細書で説明するモジュールのうちのいくつかまたはすべての機能性を提供するプログラミングおよびデータ構造を記憶する。たとえば、記憶サブシステム424は、方法300の選択された態様、本明細書で論じる任意の動作を実行し、かつ/またはサーバデバイス102、自動アシスタント、リモートデバイス112、第1のクライアントデバイス116、第1のクライアントデバイス202、第2のクライアントデバイス128、第2のクライアントデバイス204、第三者エージェント208、第1のリモートデバイス210、第2のリモートデバイス212、および/または本明細書で論じる任意の他のデバイスもしくはアプリケーションのうちの1つまたは複数を実装するための論理を含み得る。
これらのソフトウェアモジュールは、概して、単独で、または他のプロセッサと組み合わせて、プロセッサ414によって実行される。記憶サブシステム424内で使用されるメモリ425は、プログラム実行中に命令およびデータを記憶するためのメインランダムアクセスメモリ(RAM)430と、固定命令が記憶される読取り専用メモリ(ROM)432とを含めて、いくつかのメモリを含み得る。ファイル記憶サブシステム426は、プログラムおよびデータファイルに対する永久記憶装置を提供し得、ハードディスクドライブ、関連するリムーバブル媒体を備えたフロッピーディスクドライブ、CD-ROMドライブ、光ドライブ、またはリムーバブルメディアカートリッジを含み得る。いくつかの実装形態の機能性を実装するモジュールは、記憶サブシステム424内に、またはプロセッサ414によってアクセス可能な他の機械の中に、ファイル記憶サブシステム426によって記憶され得る。
バスサブシステム412は、コンピュータシステム410の様々な構成要素およびサブシステムに意図されるように互いと通信させるための機構を提供する。バスサブシステム412は概略的に単一のバスとして示されているが、バスサブシステムの代替実装形態は、複数のバスを使用し得る。
コンピュータシステム410は、ワークステーション、サーバ、コンピューティングクラスタ、ブレードサーバ、サーバファーム、または何らかの他のデータ処理システムもしくはコンピューティングデバイスを含めて、様々なタイプのものであってよい。コンピュータおよびネットワークの常に変化する性質により、図4に示すコンピュータシステム410の記述は、いくつかの実装形態を示すための特定の例であることが単に意図される。図4に示したコンピュータシステムよりも多数のまたは少数の構成要素を有する、多くの他の構成のコンピュータシステム410が可能である。
本明細書で説明したシステムが、ユーザ(または、本明細書で「参加者」と呼ばれることが多い)に関する個人情報を収集するか、または個人情報を活用し得る状況において、プログラムまたは特徴がユーザ情報(たとえば、ユーザのソーシャルネットワーク、ソーシャルアクションもしくはアクティビティ、職業、ユーザの選好、またはユーザの現在の地理的ロケーションに関する情報)を収集するかどうかを制御するため、またはユーザにより関連し得るコンテンツをコンテンツサーバから受信するかどうか、かつ/またはどのように受信するかを制御するための機会がユーザに提供され得る。また、一定のデータは、個人的な識別可能情報が除去されるように、そのデータが記憶または使用される前に1つまたは複数の方法で扱われてよい。たとえば、ユーザの識別情報は、ユーザに関して何の個人的な識別可能情報も判定することができないように扱われ得るか、またはユーザの特定の地理的ロケーションを判定することができないように、(市、郵便番号、または州レベルなどに関して)地理的ロケーション情報が取得される場合、ユーザの地理的ロケーションが一般化され得る。したがって、ユーザは、ユーザに関する情報がどのように収集され、かつ/または使用されるかに対して制御を有し得る。
いくつかの実装形態が本明細書において説明され示されてきたが、これらの機能を実行し、かつ/または本明細書で説明した利点の結果および/またはそれらの利点のうちの1つまたは複数を取得するための様々な他の手段および/または構造が利用されてよく、そのような変形形態および/または変更形態の各々は、本明細書で説明する実装形態の範囲内であると見なされる。より一般的に、本明細書で説明したすべてのパラメータ、寸法、材料、および構成は、例示であることを意味し、実際のパラメータ、寸法、材料、および/または構成は、この/これらの教示が使用される特定の1つまたは複数の適用例に依存することになる。当業者は、単にルーチン実験を使用して、本明細書で説明した特定の実装形態に対する多くの均等物を認識することになるか、またはそれらを確認することが可能になる。したがって、前述の実装形態は、単なる例として提示され、添付の特許請求の範囲およびそれに対する均等物の範囲内で、具体的に説明および特許請求される以外の実装形態が実践され得ることを理解されたい。本開示の実装形態は、本明細書で説明した各個々の特徴、システム、物品、材料、キット、および/または方法に関する。加えて、2つ以上のそのような特徴、システム、物品、材料、キット、および/または方法のいずれの組合せも、そのような特徴、システム、物品、材料、キット、および/または方法が互いに矛盾しない場合、本開示の範囲内に含まれる。