LoginSignup
2
1

More than 1 year has passed since last update.

商談録音アプリ「キクカチ」にchat GPTで文章を要約する機能を追加してみた

Last updated at Posted at 2023-04-02

はじめに

社内で活用している「キクカチ」という音声録音アプリには、長時間にわたる会議や講演の音声を録音・共有する機能があります。しかしながら、大量の録音データを扱う場合には、データの内容を把握することが困難になることがあります。
そこで、音声データを文字に起こし、要約する機能を追加しました。これにより、データを簡潔にまとめることができ、情報を把握するのにかかる時間を短縮できます。

*私がインターンをしている、株式会社PeerLodgeの社内ハッカソンで開発したものです。

機能

  • firebaseに保存されている、音声を文字に起こしたデータを要約して、firebase上に保存&アプリ上に表示
  • 音声データを文字に起こす機能はこちらの記事で説明しています。

環境

Swift

使用したOpenAI APIのモデル

  • Whisper
  • gpt-3.5-turbo

準備

実装

APIを使用して文章を要約するファイル

import OpenAISwift
import Firebase

// OpenAI APIを使用して、与えられたテキストを要約する関数
func generatedAnswer(text: String) async -> String! {
    let env = ProcessInfo.processInfo.environment
    guard let openAI_API_Key = env["OPENAPIKEY"] else {
        print("環境変数にOpenAI API Keyを設定してください")
        return nil
    }

    let openAI = OpenAISwift(authToken: openAI_API_Key)
    do {
        let chat: [ChatMessage] = [
            // ChatMessageオブジェクトを生成して配列に追加
            ChatMessage(role: .system, content: ""),
            // ユーザーの発言をChatMessageオブジェクトに入れて配列に追加
            ChatMessage(role: .user, content: "以下の文章を200字程度で要約してください。" + text),
            // 要約された文章をChatMessageオブジェクトに入れて配列に追加
            ChatMessage(role: .assistant, content: "")
        ]
                    
        // OpenAI APIにChatMessageオブジェクトの配列を送信して要約を取得する
        let result = try await openAI.sendChat(with: chat)
        // 要約されたテキストを出力して返す
        print(result.choices.first?.message.content ?? String.self)
        return result.choices.first?.message.content
    } catch {
        // エラー処理
        print("error")
        return nil
    }
}

// Firebase上のデータを更新する関数
func updatePost(_ postId: String, _ summary: String, completion: @escaping (Bool) -> ()) {
    // UserDefaultsからcompanyIdを取得する
    let ud = UserDefaults.standard
    guard let companyId = ud.string(forKey: "companyId") else {
        return
    }
    // Firebase上のデータを更新する
    Firestore.firestore().collection("companies").document("\(companyId)").collection("posts").document("\(postId)").updateData([
        "summary": summary,
    ]) { err in
        if let err = err {
            // エラー処理
            print("Error update documet: \(err)")
            completion(false)
        }
        else {
            // 成功時の処理
            print("Document successfully update")
            completion(true)
        }
    }
}

おわりに

「キクカチ」に要約機能を追加することで、長時間の会議や講演の音声データを簡潔にまとめることができ、情報の把握にかかる時間を大幅に短縮できるようになりました。
今後AIへの指示の仕方を変えることで、要約だけではなく、内容の評価や開演点を提案することができるようになります。
これにより、ビジネスシーンやプライベートな場面での「キクカチ」の活用価値が一層高まることが期待されます。

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1