AI 'A3RT'를 사용하여 Java로 토크 앱을 만들어 보았습니다.

이 기사는 리크루트가 제공하는 AI 「A3RT」의 「Talk API」를 이용해 토크 앱을 작성한다. ) 하는 GW를 가지고 남은 여가인 기사이다.

소개



AI "A3RT"에 대해서는 공식 사이트을 참조하십시오.

제공된 API


  • Listing API
  • Image Influence API
  • Text Classification API
  • Text Suggest API
  • Proofreading API
  • Talk API

  • 이번에는 Talk API를 사용하여 간단한 토크 앱을 만들어 봅니다.

    환경·준비


  • Windows10
  • JDK1.8.0_121

  • API를 실행하기 위해서는 API KEY가 필요하므로 여기 으로 발행한다.

    샘플 코드



    표준 입력으로 취득한 캐릭터 라인을 API에 POST로 송신해 결과를 얻는, 이것을 루프 하는 것만의 간단한 사양. bye를 입력하면 종료됩니다.
    만든 환경이 Proxy 있는 환경이었기 때문에 샘플 코드에는 Proxy 주위의 기술이 있지만, Proxy가 없는 환경이면 불필요합니다.
    그리고, 응답의 캐릭터가 일부 unicode 캐릭터 라인이므로, 그것을 보통의 캐릭터 라인으로 변환하는 처리가 있다.
    에러 핸들링은 느슨해지므로 용서를.
    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.InetSocketAddress;
    import java.net.Proxy;
    import java.net.URL;
    
    public class SmallTalkApp {
    
        public static void main(String[] args) {
            while (true) {
                HttpURLConnection conn = null;
                try {
                    //標準入力
                    System.out.print("[me]");
                    BufferedReader br
                            = new BufferedReader(new InputStreamReader(System.in));
                    String input = br.readLine();
    
                    if (input == null || input.isEmpty()) {
                        continue;
                    } else if (input.equals("bye")) {
                        System.out.println("終了");
                        return;
                    }
    
                    //送信データ
                    //発行したAPI KEYを書く
                    String data = "apikey=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&query=" + input;
    
                    //HTTP接続
                    URL url = new URL("https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk");
                    //Proxy設定(ネット環境でProxyがある場合のみ)
                    Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxyhost", 9999));
                    conn = (HttpURLConnection) url.openConnection(proxy);
                    conn.setDoInput(true);
                    conn.setDoOutput(true);
                    conn.setRequestMethod("POST");
                    conn.setUseCaches(false);
    
                    //POST送信
                    try (DataOutputStream dos = new DataOutputStream(conn.getOutputStream())) {
                        dos.writeBytes(data);
                    }
    
                    //レスポンス受信
                    int rescode = conn.getResponseCode();
                    if (rescode == HttpURLConnection.HTTP_OK) {
                        try (BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()))) {
                            StringBuilder buf = new StringBuilder();
                            String line;
    
                            while ((line = reader.readLine()) != null) {
                                buf.append(line);
                            }
                            System.out.println(convertToOiginal(buf.toString()));
                        }
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                } finally {
                    if (conn != null) {
                        conn.disconnect();
                    }
                }
            }
        }
    
        /**
         * unicode文字列を文字列に変換(u\3042 ⇒ あ)
         *
         * @param unicode unicode文字列を含む文字列
         * @return 文字列
         */
        private static String convertToOiginal(String unicode) {
            String tmp = unicode;
            while (tmp.indexOf("\\u") > 0) {
                String str = tmp.substring(tmp.indexOf("\\u"), tmp.indexOf("\\u") + 6);
                int c = Integer.parseInt(str.substring(2), 16);
                tmp = tmp.replaceFirst("\\" + str, new String(new int[]{c}, 0, 1));
            }
            return tmp;
        }
    }
    
    

    결과



    대화 할 수 있습니다 (흰 눈
    [me]お疲れ様です。
    {"status": 0, "message": "ok", "results": [{"perplexity": 0.7773633993386415, "reply": "私はそんなに嫌いじゃないですよ"}]}
    [me]ありがとうございます。
    {"status": 0, "message": "ok", "results": [{"perplexity": 0.07521183094611102, "reply": "あなたはよくするんですか?"}]}
    [me]はい、します。あなたはよくするんですか?
    {"status": 0, "message": "ok", "results": [{"perplexity": 1.5817458708187506, "reply": "私のですか?秘密ですよ"}]}
    [me]お願いします。教えてください!
    {"status": 0, "message": "ok", "results": [{"perplexity": 2.4087016492196223, "reply": "あなたはよくするんですか?"}]}
    [me]私も秘密です
    {"status": 0, "message": "ok", "results": [{"perplexity": 0.23161212785866075, "reply": "あなたはよくするんですか?"}]}
    [me]休みは何をしますか?
    {"status": 0, "message": "ok", "results": [{"perplexity": 7.697953651890003, "reply": "あなたはよく確認するんですね?"}]}
    [me]
    

    결론



    이 AI는 아직 공개되었기 때문에 앞으로의 학습에 기대합시다.

    좋은 웹페이지 즐겨찾기