In diesem Tutorial werden wir uns mit API.ai befassen, eine API, mit der wir Apps erstellen können, die die natürliche Sprache verstehen, ähnlich wie Siri. Es kann entweder Text oder Sprache als Eingabe akzeptieren, die es dann analysiert und eine JSON -Zeichenfolge zurückgibt, die durch den von uns geschriebenen Code interpretiert werden kann.
Alle Dateien, die wir in diesem Tutorial verwenden, sind in diesem Github -Repository verfügbar.
Bevor wir zum praktischen Teil übergehen, ist es wichtig, dass wir zunächst die folgenden Konzepte verstehen:
Agenten - Agenten sind Anwendungen. Wir erstellen einen Agenten als Mittel zur Gruppierung einzelner Entitäten und Absichten.
Entitäten - Entitäten sind benutzerdefinierte Konzepte, die wir in unsere Anwendung einbeziehen möchten. Sie bieten eine Möglichkeit, einem bestimmten Konzept eine Bedeutung zu geben, indem sie Beispiele hinzufügen. Eine Stichprobeneinheit wäre „Währung“. Wir definieren es, indem wir Synonyme wie "USD", "US -Dollar" oder nur "Dollar" hinzufügen. Jedes Synonym wird dann einem Referenzwert zugewiesen, der im Code verwendet werden kann. Es ist nur eine Liste von Wörtern, mit denen sich dieses Konzept beziehen kann. API.AI bietet bereits einige grundlegende Entitäten wie @sys.number, eine Entität, die sich auf eine beliebige Nummer bezieht, und @sys.email, die sich um eine Entität handelt, die sich auf eine E -Mail -Adresse bezieht. Wir können die integrierten Entitäten verwenden, indem wir @SYS als Präfix angeben.
Absichten - Absichten ermöglichen es uns zu definieren, welche Aktionen das Programm abhängig von dem, was ein Benutzer sagt, ausführen. Eine Stichprobenabsicht wäre "Währung". Anschließend listen wir alle möglichen Sätze oder Sätze auf, die der Benutzer sagen würde, wenn er die Währung konvertieren möchte. Zum Beispiel könnte ein Benutzer sagen: "Wie viel kostet @sys.number: number @currency: from currency in @currency: tocurrency?". In diesem Beispiel haben wir 2 Entitäten verwendet: @sys.number und @currency. Durch die Verwendung des Dickdarms nach der Entität können wir einen Alias für diese Entität definieren. Dieser Alias kann dann in unserem Code verwendet werden, um den Wert der Entität zu erhalten. Wir müssen dieselbe Entität einen anderen Alias geben, damit wir sie in unserem Code getrennt behandeln können. Damit Menschen die oben genannte Absicht verstehen können, müssen wir nur die Wesenheiten durch die tatsächlichen Werte ersetzen. Ein Benutzer könnte also sagen: "Wie viel kostet 900 US -Dollar in japanischen Yen?" Für die Tocurrency @Currency.
Kontexte - Kontexte repräsentieren den aktuellen Kontext eines Benutzerausdrucks. Zum Beispiel könnte ein Benutzer sagen: "Wie viel kostet 55 US -Dollar im japanischen Yen?" API.AI verwendet in diesem Fall das, was zuvor vom Benutzer gesprochen wurde, „Wie viel ist 55 US -Dollar“ als Kontext für den zweiten Ausdruck.
Aliase - Aliase bieten eine Möglichkeit, sich auf eine bestimmte Entität in Ihrem Code zu beziehen, wie wir bereits in der Erklärung für die Absichten gesehen haben.
Domänen-Domänen sind vordefinierte Wissenspakete. Wir können sie als eine Sammlung integrierter Einheiten und Absichten in der Api.ai vorstellen. Mit anderen Worten, sie sind Tricks, die API.AI mit wenig bis gar keinem Setup oder Codierung durchführen kann. Ein Benutzer kann beispielsweise sagen: "Suchen Sie Videos von Pikachu auf YouTube." Und API.ai würde bereits wissen, wie man das analysiert, und gibt "Pikachu" als Suchbegriff und "YouTube" als Dienst zurück. Von dort aus können wir einfach die zurückgegebenen Daten verwenden, um zu YouTube zu navigieren und nach „Pikachu“ zu suchen. In JavaScript geht es nur darum, den Ort festzulegen.
<span>window.location.href = "https://www.youtube.com/results?search_query=pikachu";</span>
integrieren müssen
Jetzt, da wir die Hauptkonzepte verstehen, können wir mit dem Erstellen einer einfachen App fortfahren. Das erste, was wir erstellen werden, ist eine App, um die aktuelle Zeit an einem bestimmten Ort zu erhalten.
Wenn Sie dies noch nicht getan haben, melden Sie sich für ein kostenloses Konto auf der Website der API.AI an, überprüfen Sie Ihre E-Mail-Adresse und melden Sie sich dann mit Ihren Anmeldeinformationen an.
Gehen Sie als nächstes zur Seite der Agenten und erstellen Sie einen neuen Agenten, indem Sie auf die Schaltfläche "Agent erstellen" klicken. Sobald auf der Seite ein neuer Agent erstellt wird, geben Sie den Namen, die Beschreibung und die Sprache ein und speichern Sie.
Auf diese Weise erhalten Sie den Abonnementschlüssel, den Entwicklerzugriffs -Token und den Client Access Token. Sie können diese verwenden, um Anforderungen an die API zu stellen, entweder vom Client (Browser) oder vom Server. Ein Vorteil der Erstellung der Anfragen vom Server besteht darin, Ihre Anmeldeinformationen versteckt zu halten.
Der von uns erstellte Agent verwendet Domänen. Dies bedeutet, dass wir keine Entitäten und Absichten einrichten müssen. Was wir brauchen, ist ein wenig Hilfe von zwei Google -APIs: Geocoding -API und Timezone -API. Die Geokodierungs -API wird verwendet, um den Ort, den wir von API.AI erhalten, in Koordinaten umzuwandeln. Anschließend verwenden wir diese Koordinaten, um die TimeZone -API abzufragen, um die aktuelle Zeit für diesen Ort zu erhalten. Gehen Sie zu Ihrer Google -Konsole und aktivieren Sie die Timezone -API. Für die Geokodierungs -API müssen keine API -Schlüssel geliefert werden, sodass wir sie nicht aktivieren müssen.
Als nächstes installieren Sie Guzzle. Wir werden Guzzle 5 verwenden, um eine Anfrage an api.ai.
zu stellen<span>window.location.href = "https://www.youtube.com/results?search_query=pikachu";</span>
Erstellen Sie dann eine neue PHP -Datei (time.php) und fügen Sie den folgenden Code hinzu, damit wir Guzzle aus unserer Datei verwenden können.
<span>composer require guzzlehttp/guzzle:~5.0</span>
Danach definieren Sie Ihre API -Schlüssel:
<span><?php </span><span>require 'vendor/autoload.php'; </span><span> </span><span>use GuzzleHttp\Client; </span><span> </span><span>$client = new Client();</span>
In einer realen App können Sie wahrscheinlich die Anmeldeinformationen außerhalb der App -Logik in einer Art lokaler Konfigurationsdatei behalten.
Wir können jetzt eine Anfrage an api.ai stellen. Um eine Anfrage zu stellen, müssen wir als Header im Entwicklerzugriffsstoken und als Abonnementschlüssel weitergeben. Wir geben dann den Körper der Anfrage als JSON weiter. Die Anforderungsbehörde sollte die Abfrage und die Langschlüssel enthalten. Die Abfrage wird über eine Postanfrage von der kundenseitig eingereicht. Ein Beispiel für eine Anfrage für diese App wäre: "Wie spät ist es in Barcelona, Spanien?" oder "Wie ist die aktuelle Zeit in Ikebukuro, Japan?". Die zurückgegebene Antwort ist eine JSON -Zeichenfolge, daher konvertieren wir sie in ein Array, indem wir die JSON -Methode für die $ Antwort aufrufen.
<span>$google_api_key = 'YOUR_GOOGLE_API_KEY'; </span><span>$apiai_key = 'YOUR_API_AI_AGENT_DEVELOPER_ACCESS_TOKEN'; </span><span>$apiai_subscription_key = 'YOUR_API_AI_SUBSCRIPTION_KEY';</span>
Hier ist eine Beispielantwort, die wir erhalten, wenn wir die obige Anfrage stellen:
<span>$query = $_POST['query']; //the users query </span><span> </span><span>$response = $client->post('https://api.api.ai/v1/query', array( </span><span> 'headers' => array( </span><span> 'Authorization' => "Bearer {$apiai_key}", </span><span> 'ocp-apim-subscription-key' => $apiai_subscription_key, </span><span> 'Content-Type' => 'application/json; charset=utf-8' </span><span> ), </span><span> 'json' => array( </span><span> "query" => $query, </span><span> "lang" => "en" </span><span> ) </span><span>)); </span><span> </span><span>$result = $response->json();</span>
Wenn wir einen Status von 200 erhalten, bedeutet dies, dass die Anfrage erfolgreich war. Die Daten, die wir benötigen, werden im Ergebniselement gespeichert. In diesem Fall müssen wir den Ort nur aus den Parametern extrahieren. Wenn ein Ort nicht zurückgegeben wird, sagen wir dem Benutzer nur, dass der Ort nicht gefunden wird.
<span>window.location.href = "https://www.youtube.com/results?search_query=pikachu";</span>
Wenn ein Ort gefunden wird, stellen wir eine Anfrage an die Google Geocoding -API ein, um den Ort in Koordinaten umzuwandeln. Wenn der Status in Ordnung ist, bedeutet dies, dass wir ein Ergebnis erhalten haben. Also extrahieren wir einfach die Breiten- und Längenwerte aus dem ersten Ergebnis.
<span>composer require guzzlehttp/guzzle:~5.0</span>
Als nächstes erhalten wir den aktuellen Unix -Zeitstempel. Wir geben diesen Wert zusammen mit dem Breitengrad und Längengrad als Abfrage für unsere Anfrage an die Google TimeZone -API. Anschließend extrahieren wir die Zeitzoneid, mit der wir die TimeZone mit der Methode DATE_DEFAULT_TIMEZONE_SET vorübergehend festlegen können. Schließlich geben wir nur die formatierte Zeit an den Benutzer aus.
<span><?php </span><span>require 'vendor/autoload.php'; </span><span> </span><span>use GuzzleHttp\Client; </span><span> </span><span>$client = new Client();</span>
Gehen wir mit der Kundenseite fort. Erstellen Sie eine index.html -Datei mit dem folgenden Code:
<span>$google_api_key = 'YOUR_GOOGLE_API_KEY'; </span><span>$apiai_key = 'YOUR_API_AI_AGENT_DEVELOPER_ACCESS_TOKEN'; </span><span>$apiai_subscription_key = 'YOUR_API_AI_SUBSCRIPTION_KEY';</span>
Wir verwenden JQuery (für die Ereignishandhabung) und Responsive-Voice.js. Die Responsive-Voice-Bibliothek ermöglicht es uns, Text in Sprache umzuwandeln. Wir verwenden es, um die Ergebnisse zu sprechen, die wir vom Server erhalten.
Wir haben auch Spracherkenntnisse.js, die wir zum Konvertieren von Sprache in Text verwenden. Dies verwendet die Web -Sprach -API. Leider wird es zum Zeitpunkt des Schreibens immer noch nur teilweise bei einigen Browsern unterstützt. Daher wird dieses Tutorial angenommen, dass Sie Chrome verwenden (was es unterstützt).
erläutern wir die obige Datei. Erstens ist die globale Variable, mit der wir das aktuelle Spracherkennungsobjekt speichern werden.
<span>$query = $_POST['query']; //the users query </span><span> </span><span>$response = $client->post('https://api.api.ai/v1/query', array( </span><span> 'headers' => array( </span><span> 'Authorization' => "Bearer {$apiai_key}", </span><span> 'ocp-apim-subscription-key' => $apiai_subscription_key, </span><span> 'Content-Type' => 'application/json; charset=utf-8' </span><span> ), </span><span> 'json' => array( </span><span> "query" => $query, </span><span> "lang" => "en" </span><span> ) </span><span>)); </span><span> </span><span>$result = $response->json();</span>
Als nächstes kommt die Startrekognitionsmethode. Dies erstellt ein neues Spracherkennungsobjekt. Dadurch wird der Benutzer aufgefordert, das Mikrofon zu verwenden. Als nächstes setzen wir die Sprache auf Englisch und beginnen die Spracherkennung. Wir hören dann auf das OnStart -Event zu. Wenn dieses Ereignis ausgelöst wird, bedeutet dies, dass die Spracherkennung begonnen hat. Wir nennen die UpdateRec -Methode, wenn dies geschieht, was den Text der Schaltfläche zum Starten und Stoppen der Spracherkennung ändert. Wir hören auch auf das OnResult -Ereignis zu, das ausgelöst wird, wenn der Benutzer seit einigen Sekunden aufgehört hat. Dies enthält die Ergebnisse der Spracherkennung. Wir müssen die Ergebnisse durchlaufen und das Transkriptelement in jedem einzelnen verwenden, um den von uns benötigten Text zu erhalten. Sobald dies erledigt ist, rufen wir die SetInput -Methode auf, die den Wert des Abfrage -Textfelds ändert, und die Send -Methode, die die Abfrage an den Server übermittelt. Als nächstes nennen wir die StopRecognition -Methode, um die Spracherkennung zu stoppen und die Benutzeroberfläche zu aktualisieren. Wir müssen auch das gleiche im beruflichen Ereignis tun.
Array ( [id] => eb69f468-6e1a-41c9-883d-6ac7c71cd187 1739117986 => 2015-05-16T09:19:47.519Z [result] => Array ( [source] => domains [resolvedQuery] => What's the current time in Barcelona Spain? [speech] => [action] => clock.time [parameters] => Array ( [location] => Barcelona Spain ) [metadata] => Array ( [inputContexts] => Array ( ) [outputContexts] => Array ( ) [contexts] => Array ( ) ) ) [status] => Array ( [code] => 200 [errorType] => success ) )
Hier ist die UpdateRec -Methode.
<span>if(!empty($result['result']) && !empty($result['result']['parameters']['location'])){ </span><span> $location = $result['result']['parameters']['location']; </span><span> </span><span>}else{ </span><span> echo "Sorry, I could not find that location."; </span><span>}</span>
setInput -Methode.
<span>$place_response = $client->get("http://maps.googleapis.com/maps/api/geocode/json?address={$location}&sensor=false"); </span><span> </span><span>$place_result = $place_response->json(); </span><span> </span><span>if($place_result['status'] == 'OK'){ </span><span> </span><span> $lat = $place_result['results'][0]['geometry']['location']['lat']; </span><span> $lng = $place_result['results'][0]['geometry']['location']['lng']; </span><span>}</span>
StopRecognition -Methode.
<span>$timestamp = time(); //get the current unix timestamp </span><span> </span><span>$time_response = $client->get("https://maps.googleapis.com/maps/api/timezone/json?location={$lat},{$lng}×tamp={$timestamp}&key={$google_api_key}"); </span><span> </span><span>$time_result = $time_response->json(); </span><span> </span><span>if($time_result['status'] == 'OK'){ </span><span> $timezone = $time_result['timeZoneId']; </span><span> </span><span> date_default_timezone_set($timezone); </span><span> </span><span> echo 'It's currently ' . date('l, F j, Y g:i A') . ' in ' . $location; </span><span>}</span>
Abgesehen davon haben wir auch die SwitchRecognition -Methode, die jedes Mal aufgerufen wird, wenn der Benutzer auf die Schaltfläche klickt, um die Spracherkennung auszulösen, um zu starten oder zu stoppen.
<span><!DOCTYPE html> </span><span><html lang="en"> </span><span><head> </span><span> <meta charset="UTF-8"> </span><span> <title>time</title> </span><span> <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> </span><span> <script src="responsive-voice.js"></script> </span><span></head> </span><span><body> </span><span> <div> </span><span> <input type="text" id="query" name="query"> <button id="rec">Speak</button> </span><span> </div> </span><span> <div id="response"></div> </span><span> <script src="speech-recognition.js"></script> </span><span> <script src="main.js"></script> </span><span></body> </span><span></html></span>
Wenn der Benutzer die Eingabetaste im Abfragefeld drückt, wird auch die Abfrage an den Server gelöst.
<span>window.location.href = "https://www.youtube.com/results?search_query=pikachu";</span>
Der größte Teil des Codes in der Datei der Spracherkenntnis.
Weiter ist die main.js -Datei, in der wir unsere Abfrage an den Server senden. Sobald wir eine Antwort erhalten haben, verwenden wir Responsive-Voice, um sie auszusprechen und auch im Antwortbehälter auszugeben. Auf diese Weise können wir die Antwort visuell überprüfen.
<span>composer require guzzlehttp/guzzle:~5.0</span>
Erstellen Sie zuerst einen neuen Agenten und nennen Sie es CurrencyConverter.
In
<span><?php </span><span>require 'vendor/autoload.php'; </span><span> </span><span>use GuzzleHttp\Client; </span><span> </span><span>$client = new Client();</span>
In
im Abschnitt "Aktion" definieren wir die Aktion oder Methode, die wir ausführen möchten, wenn diese spezifische Absicht verwendet wird. In diesem Fall werden wir nichts definieren, weil wir nur eine App erstellen, die nur eine Sache tut.Der Abschnitt "Erfüllung" definiert eine Vorlage für die Sprache, die wir ausgeben möchten, sobald die Absicht verwendet wird. Zum Beispiel können wir Folgendes platzieren:
<span>$google_api_key = 'YOUR_GOOGLE_API_KEY'; </span><span>$apiai_key = 'YOUR_API_AI_AGENT_DEVELOPER_ACCESS_TOKEN'; </span><span>$apiai_subscription_key = 'YOUR_API_AI_SUBSCRIPTION_KEY';</span>
Sobald Sie fertig sind, klicken Sie auf die Schaltfläche "Speichern", um die Absicht zu speichern.
Jetzt sind wir bereit, mit dem Code fortzufahren. Erstellen Sie eine Exchange-rate.php-Datei in Ihrem Arbeitsverzeichnis und fügen Sie den folgenden Code hinzu:
<span>window.location.href = "https://www.youtube.com/results?search_query=pikachu";</span>
Wie Sie aus dem obigen Code sehen können, ist es im Grunde genommen das gleiche wie früher in unserer vorherigen App. Nur dieses Mal haben wir die Variable $ currencyLayer_apikey hinzugefügt. Dies speichert den API -Schlüssel, den wir von CurrencyLayer.com erhalten haben, einer API, mit der wir den aktuellen Wechselkurs von einer Währung zu einer anderen erhalten können. Wenn Sie mitmachen möchten, melden Sie sich für einen API -Schlüssel an.
Als nächstes überprüfen wir, ob es Ergebnisse gibt, und extrahieren die Daten, die wir benötigen. In diesem Fall müssen wir die Währung erhalten, die der Benutzer konvertieren möchte, die Währung in und dann in den Betrag.
<span>composer require guzzlehttp/guzzle:~5.0</span>
wir stellen dann eine Anfrage an die API und extrahieren den Wechselkurs aus den Ergebnissen:
<span><?php </span><span>require 'vendor/autoload.php'; </span><span> </span><span>use GuzzleHttp\Client; </span><span> </span><span>$client = new Client();</span>
Die Ergebnisse, die wir aus der API erhalten, sehen so aus:
<span>$google_api_key = 'YOUR_GOOGLE_API_KEY'; </span><span>$apiai_key = 'YOUR_API_AI_AGENT_DEVELOPER_ACCESS_TOKEN'; </span><span>$apiai_subscription_key = 'YOUR_API_AI_SUBSCRIPTION_KEY';</span>
Jetzt, da wir den aktuellen Wechselkurs haben, müssen wir nur noch den Zinssatz mit dem Betrag multiplizieren, den der Benutzer bereitgestellt hat, und dann das Ergebnis ausgeben.
<span>$query = $_POST['query']; //the users query </span><span> </span><span>$response = $client->post('https://api.api.ai/v1/query', array( </span><span> 'headers' => array( </span><span> 'Authorization' => "Bearer {$apiai_key}", </span><span> 'ocp-apim-subscription-key' => $apiai_subscription_key, </span><span> 'Content-Type' => 'application/json; charset=utf-8' </span><span> ), </span><span> 'json' => array( </span><span> "query" => $query, </span><span> "lang" => "en" </span><span> ) </span><span>)); </span><span> </span><span>$result = $response->json();</span>
Auf der Client-Seite verwenden wir immer noch dieselben HTML und Dateien, die wir früher in unserer ersten App verwendet haben. Sie können die gleichen Dateien in Ihr Arbeitsverzeichnis einfügen, wenn Sie folgen.
Array ( [id] => eb69f468-6e1a-41c9-883d-6ac7c71cd187 1739117986 => 2015-05-16T09:19:47.519Z [result] => Array ( [source] => domains [resolvedQuery] => What's the current time in Barcelona Spain? [speech] => [action] => clock.time [parameters] => Array ( [location] => Barcelona Spain ) [metadata] => Array ( [inputContexts] => Array ( ) [outputContexts] => Array ( ) [contexts] => Array ( ) ) ) [status] => Array ( [code] => 200 [errorType] => success ) )
Der einzige Unterschied ist die URL, an die wir die Anfrage senden. Zeigen Sie darauf, wo Ihre Exchange-Rate.php serviert wird:
<span>if(!empty($result['result']) && !empty($result['result']['parameters']['location'])){ </span><span> $location = $result['result']['parameters']['location']; </span><span> </span><span>}else{ </span><span> echo "Sorry, I could not find that location."; </span><span>}</span>
In diesem Tutorial haben wir gelernt, wie man api.ai zum Erstellen von Sprach-fähige PHP-Apps verwendet. Der Browser -Support ist immer noch ziemlich begrenzt, da die Web -Sprach -API immer noch nicht weit verbreitet ist. API.AI unterstützt jedoch andere Plattformen neben dem Web. Android, Cordova, .NET, iOS sind einige Beispiele. Dies bedeutet, dass wir API.AI verwenden können, ohne mir Sorgen um die Unterstützung auf diesen Plattformen zu machen. Schauen Sie sich die Dokumente an, wenn Sie mehr erfahren möchten. Die Dateien, die wir in diesem Tutorial verwendet haben, sind in diesem Github -Repository verfügbar.
Kann ich andere Spracherkennungs -APIs mit PHP verwenden? . Einige beliebte Alternativen zu API.AI sind IBM Watson, Microsoft Azure Cognitive Services und Google Cloud Speech-to-Text. Diese APIs liefern auch PHP -SDKs, mit denen Sie sie in Ihre PHP -Anwendung integrieren können.
Wie kann ich in meiner sprachgesteuerten PHP-App mit verschiedenen Sprachen umgehen? So können Sie Ihren Agenten schulen, um in verschiedenen Sprachen Spracheingaben zu verstehen und darauf zu reagieren. Beim Senden von Sprachdaten an den Agenten können Sie die Sprache in der Anfrage angeben. Der Agent verarbeitet dann die Spracheingabe basierend auf der angegebenen Sprache. KI für Text-to-Speech in Ihrer PHP-App. API.AI bietet Methoden zum Umwandeln von Text in Sprache. Sie können diese Methoden verwenden, um Ihre App dem Benutzer Antworten oder Anweisungen auszusprechen.
Das obige ist der detaillierte Inhalt vonSprachgesteuerte PHP -Apps mit API.ai. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!