はじめに
今流行のOpenAIでGoogleの代わりに質問に答えるようにしました。
【変更】2023-2-18
speak.shは長文だとカットされるので、行単位に処理するようにしました。(。で改行)speak.shはgoogletts-cli.plを使用しています。
【変更】2023-3-3
chatGPTのAPIが公開されたので、それに変更しました。コストがGPT3の1/10だそうです。APIキーはGPT3のものと共通です。pipとopenaiのupgradeが必要な場合があります。
使用方法
■単独で使用する方法
python3 /home/xxxx/ai.py 電気料金の節約方法
■Googlehomeで質問し、回答を喋らす
Google Assitant V2 対策(IFTTTの変数入力の実現)
の記事でtask.jsを改造する。
下記の行を追加してください。
} else if(value1 === "AI") {
command = "python3 /home/XXXXX/ai.py " + value2 + " >> /dev/null 2>&1 &";
var execSync = require('child_process').exec;
execSync(command) ;
自分:OK グーグル タスクリストに追加
自分:OK グーグル タスク (ルーティンでタスク=タスクリストに追加と定義した場合)
GoogleHome:追加するものを教えて下さい
自分:AI電気料金の節約方法
GPT-3で質問に回答するプログラム(ai.py)
# -*- coding: utf-8 -*-
import requests
import openai
import argparse
import subprocess
import time
# 起動オプション取り出し
parser = argparse.ArgumentParser()
parser.add_argument("param")
args = parser.parse_args()
text = args.param
print(text)
# Set the API key
openai.api_key = "XXXXXXXXXXXXX"
def generate_answer(prompt):
# OpenAI API request to generate answer
response = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
max_tokens=1024,
n=1,
stop=None,
temperature=0.5,
)
answer = response["choices"][0]["text"]
return answer
answer=generate_answer(text)
say= answer
say = say.replace('\n','') #文字列の置換(改行を全角空白)
say = say.replace(' ',' ') #文字列の置換(半角空白を全角空白)
say = say.replace('。','。\n') #文字列の置換(半角空白を全角空白)
f = open('myfile.txt', 'w')
f.write(say)
f.close()
print(say)
f = open('myfile.txt', 'r', encoding='UTF-8')
datalist=f.readlines()
for data in datalist:
cmd = "/home/xxxxx/speak.sh" + ' ' + data;
subprocess.run(cmd, shell=True)
f.close()
chatGPTで質問に回答するプログラム(ai.py)
# -*- coding: utf-8 -*-
import requests
import openai
import argparse
import subprocess
import time
# 起動オプション取り出し
parser = argparse.ArgumentParser()
parser.add_argument("param")
args = parser.parse_args()
text = args.param
print(text)
# Set the API key
openai.api_key = "XXXXXXXXXXXXX"
res = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{
"role": "system",
"content": "日本語で返答してください。"
},
{
"role": "user",
"content": text
},
],
)
answer = res["choices"][0]["message"]["content"]
print(answer)
say= answer
say = say.replace('\n','') #文字列の置換(改行を全角空白)
say = say.replace(' ',' ') #文字列の置換(半角空白を全角空白)
say = say.replace('。','。\n') #文字列の置換(半角空白を全角空白)
f = open('myfile.txt', 'w')
f.write(say)
f.close()
print(say)
f = open('myfile.txt', 'r', encoding='UTF-8')
datalist=f.readlines()
for data in datalist:
cmd = "/home/xxxxx/speak.sh" + ' ' + data;
subprocess.run(cmd, shell=True)
f.close()