🙆‍♀️

shell_gpt(OpenAI APIのCLI)の紹介と最強コンバータの作成

2023/02/13に公開

概要

shell_gpt はOpenAIのChatGPTのベースとなっているtext-davinci-003のAPIを使ったCLIです。
https://github.com/TheR1D/shell_gpt

機能

基本的な機能は下記の2つでシンプルですが非常に有用です。

  • シェルコマンドの作成と実行
  • 単純な問い合わせ

単純な問い合わせの例です。

ChatGPTのように質問など解答してくれます。(なぜか日本語がうまく出力されません)

sgpt "grepコマンドについて説明して"

# The grep command is a command-line utility used for searching plain-text data for lines that match a given pattern. It was originally developed for Unix-like systems, for which it remains an official standard, but its use has since expanded to Find Any File on Windows, OS X, and other operating systems. The grep command works by searching its input for lines that match a given pattern, and then prints those matching lines to the standard output.

シェルコマンドを作成する例

かなり複雑なコマンドも作ってくれますし、自分では気づかないような便利なコマンドを作ってくれることもあります。

sgpt --shell "srcディレクトリから再帰的に'hoge'か'foo'を含むテキストを探す"

# grep -r 'hoge\|foo' src/

応用して最強コンバーターを作る

下記の記事で解説しているのですが、ChatGPTやOpenAIのAPIは最強のテキストコンバーターとして機能します。
https://qiita.com/devneko/items/7621ee3803105d2bf3d3

shell_gptのおかげで、コマンドをでそれを実現するのが簡単になりましたので、CLIの最強コンバーターを作ってみます。

下記のシェル関数を定義して, .bashrc もしくは .zshrc などに入れておきます。

function to {
  sgpt "convert to $1: $(cat $2)"
}

完了です。

Java to Ruby

# Java to Ruby
to ruby A.java

変換前

class A {
    private String aField1;
    String f() {
        return "A";
    }
}
class B {
    private String bField1;
    private A a;
    String callA() {
        return this.a.f();
    }
}
class C {
    private B b;
    String call() {
        return this.b.callA();
    }
}

変換後

class A
  attr_accessor :aField1

  def f
    return "A"
  end
end

class B
  attr_accessor :bField1
  attr_accessor :a

  def callA
    return self.a.f
  end
end

class C
  attr_accessor :b

  def call
    return self.b.callA
  en

Json to Toml

cat a.json
# {"foo": 1, "bar": {"hoge": "piyo"}}

to toml a.json
# foo = 1
# [bar]
# hoge = "piyo"

MathML to LaTeX

cat sample.mathml
# <math>
#   <mfrac>
#     <mrow>
#       <mi>a</mi>
#       <mo>+</mo>
#       <mn>1</mn>
#     </mrow>
#     <mi>b</mi>
#   </mfrac>
# </math>

to latex sample.mathml
# \frac{a + 1}{b}

感想

sgptのおかげではありますが、たった三行でとんでもないコマンドができてしまいました。
OpenAIのAPIは非常に小さい労力ですごいものを作り出せるポテンシャルがあります。
2023年はとんでもない量のChatGPTアプリケーションが生まれるでしょう。楽しみで仕方ありません。

Discussion