ImageMagickの引数とか本当に覚えられないじゃないですか。
そんなとき、ChatGPTに「ImageMagickで、a.pngの色を反転してb.jpgに保存する方法を教えて」と聞けば、
結構正確なコマンドを返してくれてマジで便利です。
でも、コードをコピペするのももはや面倒です。
そこで、出力されたコードをその場で実行できるようにしてみました。
using System.Diagnostics; using System.Net.Http.Headers; using System.Text; using System.Text.Json; using System.Text.Json.Nodes; // https://platform.openai.com/docs/guides/chat const string apiKey = "(APIKEY)"; async Task<string> Send(HttpClient httpClient, IEnumerable<(string Role, string Content)> history) { var json = new { model = "gpt-3.5-turbo", messages = history.Select(x => new { role = x.Role, content = x.Content }), }; var content = JsonSerializer.Serialize(json); var request = new HttpRequestMessage { Method = HttpMethod.Post, RequestUri = new Uri("https://api.openai.com/v1/chat/completions"), Headers = { Authorization = new AuthenticationHeaderValue("Bearer", apiKey) }, }; request.Content = new StringContent(content, Encoding.UTF8, "application/json"); var response = await httpClient.SendAsync(request); if (response.IsSuccessStatusCode) { var resultString = await response.Content.ReadAsStringAsync(); var message = JsonNode.Parse(resultString)?["choices"]?[0]?["message"]?["content"]?.ToString().Trim() ?? ""; return message; } else { throw new Exception($"Error: {response.StatusCode}"); } } var httpClient = new HttpClient(); var history = new[] { (Role: "user", Content: $@"以下のことを実行するbashスクリプトを書いてください。 - {args[0]} 出力には説明は含まず、スクリプトの中にコメントとして記述してください。"), }; var result = await Send(httpClient, history); var file = $"{DateTime.Now:yyyyMMdd_HHmmss}.bash"; Console.WriteLine(result); File.WriteAllText(file, result); Console.WriteLine("---"); Console.WriteLine("実行しますか?"); var r = Console.ReadLine()?.ToLowerInvariant(); if (r == "yes" || r == "y") { var startInfo = new ProcessStartInfo { FileName = "/bin/bash", Arguments = file, }; var proc = new Process { StartInfo = startInfo, }; proc.Start(); }
さらにもう一歩
コードを表示することなく勝手に実行することで、
本当に作業をお願いできるアシスタントができました。
(流石に何し出すか怖いのでDocker上で仕事してもらってます。)
ChatGPTのAPI使って、チャットで命令すれば本当に実行してくれるアシスタント出来ちゃった
— きゅぶんず (@kyubuns) 2023年3月5日
すごすぎる pic.twitter.com/P8VfCJ9W8K
今はまだトンチンカンなことしだしますが、いつか本当に作業をお願いできる日も近そうですね。