暑くなってきたので、「AIしげちゃん」が扇風機の電源をON/OFFできるようにした
同じネタをずっと引きずってますが、暑くなってきたので、「AIしげちゃん」から扇風機の電源をON/OFFできるようにしました。
水冷のゲーミングPCを置いて、生成AIやらCGやらでブン回しているのに、僕の仕事部屋にはエアコンがないんです💦
あまりエアコンが好きではないので、自宅では未だエアコンをつけずに過ごしているエコ人間ですが、年々、夏の暑さがひどくなってきて、そろそろ人間もPCもヤバいよなあ...
コードは以下のような感じ。ChatGPT の Function Calling でスマートリモコン(Nature Remo)の Cloud API を呼び出して、扇風機の電源を赤外線でON/OFFしています。
using System.Collections.Generic;
using System.Threading;
using Cysharp.Threading.Tasks;
using Newtonsoft.Json;
using ChatdollKit.Dialog;
using ChatdollKit.Dialog.Processor;
using System.Net.Http;
using ChatdollKit.LLM;
namespace ChatdollKit.Kazz
{
public class ElectricFanSkill : LLMFunctionSkillBase
{
public string FunctionName = @"set_electricfan";
public string FunctionDescription = @"仕事部屋の扇風機の電源を入れたり切ったりします。扇風機の電源の状態は「on」または「off」で答えてください。";
public string InstructionPrompt = @"以下は仕事部屋の扇風機の電源の状態です。あなた自身の言葉でユーザーに伝えてください。";
private const string TOKEN_REMO
= @"*************************************";
public override ILLMTool GetToolSpec()
{
// Make function spec for ChatGPT Function Calling
var func = new LLMTool(FunctionName, FunctionDescription);
func.AddProperty("power_state", new Dictionary<string, object>() { { "type", "string" } });
return func;
}
protected override async UniTask<FunctionResponse> ExecuteFunction(
string argumentsJsonString, Request request, State state, User user, CancellationToken token)
{
// Parse arguments
var arguments = JsonConvert.DeserializeObject<Dictionary<string, string>>(argumentsJsonString);
var powerState = arguments["power_state"];
string signals = string.Empty;
string message = string.Empty;
switch (powerState)
{
case "off":
signals = @"***********************************";
message = @"扇風機の電源を切りました。";
break;
case "on":
default:
signals = @"***********************************";
message = @"扇風機の電源を入れました。";
break;
}
try
{
string url = "https://api.nature.global/1/signals/" + signals + "/send";
var httpClient = new HttpClient();
var httpRequest = new HttpRequestMessage(HttpMethod.Post, url);
httpRequest.Headers.Add("accept", "application/json");
httpRequest.Headers.Add("Authorization", "Bearer " + TOKEN_REMO);
var deviceResponse = await httpClient.SendAsync(httpRequest);
}
catch
{
message = @"扇風機の電源の制御ができませんでした。";
}
return new FunctionResponse(
InstructionPrompt + $"\n\n{message}");
}
}
}
「AIしげちゃん」は、今のところ 以下のようなことができます。
WeatherSkill
気象庁の気象情報APIを利用し、指定した地域の天気予報を答える。SensorSkill
環境センサー(Nature Remo)と連携し、温湿度の値や照度、不快指数を答える。CeilingLightSkill
スマートリモコン(Nature Remo)と連携し、部屋の照明を点けたり消したりする。TapeLightSkill
スマートリモコン(Nature Remo)と連携し、テープライトを点けたり消したりする。ElectricFanSkill
スマートリモコン(Nature Remo)と連携し、扇風機の電源を入れたり切ったりする。
まあ、ほとんどは スマートリモコンを制御して実現しているだけですが、生成AIが現実の世界に影響を及ぼすのが面白いです。