LinuxコンソールでChatGPTを利用する方法
Linux で、AI チャットボットの機能をシステムで使用するにはShellGPTを利用します
ShellGPT は、 コマンドライン版のChatGPTで AI を使用することができ、OpenAI GPT に対応しています。
今回はDebian11(bullseye
)にインストールします。
1.ChatGPT をインストールするための前提条件
①Python をインストールする
最新のLinuxディストリビューションであればプリインストールされています
インストールされているか確認する
1 2 |
# python3 --version Python 3.9.2 |
もし、インストールされていなければ下記の通りインストールする
1 |
# pt install python3 -y |
➁PIPをインストールする
PIPは、プラットフォームを超えて動作するパッケージマネージャで、必要なパッケージのインストール、アップグレード、アンインストールを行うために使用します。PIPはほとんどのLinuxディストリビューションでPythonとともにプリインストールされています。
インストールされていない場合は、次のコマンドでインストールします。
1 |
# apt-get -y install python3-pip |
Pip のバージョンを確認
1 2 |
# pip3 --version pip 20.3.4 from /usr/lib/python3/dist-packages/pip (python 3.9) |
➂venvモジュールをインストールする
venvモジュールはChatGPTでは必須ではありませんが、Linuxで孤立した仮想環境を作り、他のライブラリとの競合を避けるために推奨されます。venvモジュールをインストールするには、次のコマンドを使用します。
1 |
# apt install python3-venv |
2. OpenAI API キーを取得
2.1 事前準備
①chatgpt用ディレクトリー作成
ディレクトリー名を[commandline-chatgpt]とし、そのディレクトリーに移動する
1 2 |
# mkdir commandline-chatgpt # cd commandline-chatgpt |
➁仮想環境を作成する
venv モジュールを使用し、[chatgpt_cli]という名称の仮想環境を作成する
1 |
# python3 -m venv chatgpt_cli |
➂仮想環境をアクティブにする
1 |
# source chatgpt_cli/bin/activate |
デフォルトの Linux シェル プロンプトが次のように変更され、仮想環境の名前が括弧で囲まれて表示されます。
1 2 3 |
root@debian:~/commandline-chatgpt# ↓ (chatgpt_cli) root@debian:~/commandline-chatgpt# |
2.2 OpenAI API キーを取得
ChatGPTが提供するサービスをLinuxで利用するには、OpenAIのAPIキーが必要です。現在、OpenAIはテスト用に5ドルのクレジットを配布しています。このクレジットを使用した後、APIアクセスに必要な料金を支払う必要があります。しかし、このChatGPTのコマンドラインチャットボットのためのOpenAI APIキーを取得する手順は次の通りです
①OpenAIのウェブサイトにアクセスし、OpenAIアカウントに登録する
➁サインインして右上隅にあるプロフィールをクリックして、「View API keys」をクリックし、「Create new secret key」をクリックする
secret keyが作成されるのでコピーし、ファイルに保存するかメモを取っておく
一度しか表示されないので注意する
2.3 OpenAI API キー環境変数を作成
1 |
# export OPENAI_API_KEY=<取得したAPI key> |
環境変数を確認
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# env SHELL=/bin/bash OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxx$$$$$$$zomfy8FGe%%%%%% PWD=/root/commandline-chatgpt LOGNAME=root HOME=/root LANG=ja_JP.UTF-8 VIRTUAL_ENV=/root/commandline-chatgpt/chatgpt_cli TERM=xterm USER=root SHLVL=1 PS1=(chatgpt_cli) ${debian_chroot:+($debian_chroot)}\u@\h:\w\$ PATH=/root/commandline-chatgpt/chatgpt_cli/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin MAIL=/var/mail/root OLDPWD=/root _=/usr/bin/env |
API キーを永続的に保存する
.bashrc の末尾に下記を追加
1 2 3 |
# vi /root/.bashrc 最終行に追加 export OPENAI_API_KEY=<取得したOpenAI_API_key> |
変更を有効にする
1 |
# source /root/.bashrc |
3.ShellGPT をインストール
3.1 ShellGPT をインストール
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# pip3 install shell-gpt Collecting shell-gpt Downloading shell_gpt-0.9.1-py3-none-any.whl (22 kB) Collecting requests<3.0.0,>=2.28.2 Downloading requests-2.31.0-py3-none-any.whl (62 kB) |????????????????????????????????| 62 kB 1.5 MB/s Collecting rich<14.0.0,>=13.1.0 Downloading rich-13.3.5-py3-none-any.whl (238 kB) |????????????????????????????????| 238 kB 28.3 MB/s Collecting typer<1.0.0,>=0.7.0 Downloading typer-0.9.0-py3-none-any.whl (45 kB) |????????????????????????????????| 45 kB 2.7 MB/s Collecting click<9.0.0,>=7.1.1 Downloading click-8.1.3-py3-none-any.whl (96 kB) |????????????????????????????????| 96 kB 5.5 MB/s Collecting distro<2.0.0,>=1.8.0 Downloading distro-1.8.0-py3-none-any.whl (20 kB) Collecting urllib3<3,>=1.21.1 Downloading urllib3-2.0.2-py3-none-any.whl (123 kB) |????????????????????????????????| 123 kB 32.8 MB/s Collecting charset-normalizer<4,>=2 Downloading charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (199 kB) |????????????????????????????????| 199 kB 33.7 MB/s Collecting certifi>=2017.4.17 Downloading certifi-2023.5.7-py3-none-any.whl (156 kB) |????????????????????????????????| 156 kB 32.3 MB/s Collecting idna<4,>=2.5 Downloading idna-3.4-py3-none-any.whl (61 kB) |????????????????????????????????| 61 kB 201 kB/s Collecting markdown-it-py<3.0.0,>=2.2.0 Downloading markdown_it_py-2.2.0-py3-none-any.whl (84 kB) |????????????????????????????????| 84 kB 6.8 MB/s Collecting pygments<3.0.0,>=2.13.0 Downloading Pygments-2.15.1-py3-none-any.whl (1.1 MB) |????????????????????????????????| 1.1 MB 23.0 MB/s Collecting mdurl~=0.1 Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB) Collecting typing-extensions>=3.7.4.3 Downloading typing_extensions-4.6.2-py3-none-any.whl (31 kB) Installing collected packages: mdurl, urllib3, typing-extensions, pygments, markdown-it-py, idna, click, charset-normalizer, certifi, typer, rich, requests, distro, shell-gpt Successfully installed certifi-2023.5.7 charset-normalizer-3.1.0 click-8.1.3 distro-1.8.0 idna-3.4 markdown-it-py-2.2.0 mdurl-0.1.2 pygments-2.15.1 requests-2.31.0 rich-13.3.5 shell-gpt-0.9.1 typer-0.9.0 typing-extensions-4.6.2 urllib3-2.0.2 |
4.ShellGPT の利用
4.1 構文
1 |
# sgpt <options> <input_query> |
オプションの例
--temperature | 出力のランダム性を変更します |
--top-probablity | 最も可能性の高いトークンまたは単語のみを制限します |
--chat | 固有名で会話するときに使用 |
--shell | シェルコマンドを出力として取得するために使用 |
--execute | shellオプションの出力として受け取ったコマンドを実行する。 |
--code | コードを出力として取得する |
4.2 ShellGPTのいろいろな利用方法
①Simple queries
通常の検索エンジンとして、あらゆることを尋ねることができます
1 2 |
(chatgpt_cli) root@debian:~/commandline-chatgpt# sgpt "apache2 default config file location" The default configuration file for Apache2 on Debian GNU/Linux 11 (bullseye) is located at /etc/apache2/apache2.conf. |
1 2 |
(chatgpt_cli) root@debian:~/commandline-chatgpt#sgpt "mass of sun" The mass of the sun is approximately 1.989 x 10^30 kilograms. |
1 2 |
# sgpt "mass of sun" The mass of the Sun is approximately 1.989 x 10^30 kilograms. |
日本語で質問する場合(ただし、日本語ロケールが使用できる環境が必要)
1 2 |
(chatgpt_cli) root@debian:~/commandline-chatgpt#sgpt 月の重さは 月の重さは、約7.34×10^22 kgです。 |
1 2 |
(chatgpt_cli) root@debian:~/commandline-chatgpt#sgpt "1 hour and 30 minutes to seconds" 5400 seconds. |
➁Shell commands
--shellやショートカットの-sオプションを使えば、必要なコマンドをターミナルですぐに見つけて実行することができます
1 2 3 |
(chatgpt_cli) root@debian:~/commandline-chatgpt#sgpt --shell "make all files in current directory read only" chmod -R a-w . [E]xecute, [D]escribe, [A]bort: e |
Shell GPTは、OSと$SHELLを認識しているので、そのOSにあったシェルコマンドを提供します。例えば、sgptにシステムのアップデートを依頼すると、OSに応じたコマンドを返します。以下は、Debianで使用した場合:
1 2 3 |
(chatgpt_cli) root@debian:~/commandline-chatgpt#sgpt -s "update my system" sudo apt update && sudo apt upgrade -y [E]xecute, [D]escribe, [A]bort: e |
GPTに提案されたシェルコマンドの説明を求めると、そのコマンドが何をするのかの短い説明が返されます
1 2 3 4 5 |
(chatgpt_cli) root@debian:~/commandline-chatgpt#sgpt -s "show all txt files in current folder" ls *.txt [E]xecute, [D]escribe, [A]bort: d List all files in the current directory with a .txt extension. [E]xecute, [D]escribe, [A]bort: e |
➂Generating code
codeパラメータを使用すると、コードのみを出力することができます
たとえば、有名な「Fizz Buzz」問題のコードを表示させる場合は
1 2 3 4 5 6 7 8 9 10 |
(chatgpt_cli) root@debian:~/commandline-chatgpt#sgpt --code "Solve classic fizz buzz problem using Python" for i in range(1, 101): if i % 3 == 0 and i % 5 == 0: print("FizzBuzz") elif i % 3 == 0: print("Fizz") elif i % 5 == 0: print("Buzz") else: print(i) |
FizzBuzz問題
1から順に数を数え上げていき、3の倍数なら「Fizz」、5の倍数なら「Buzz」、両方の倍数(15の倍数)なら「Fizz Buzz」、いずれでもなければその数を言う。「1」「2」「Fizz」「4」「Buzz」「Fizz」「7」「8」「Fizz」「Buzz」「11」「Fizz」「13」「14」「Fizz Buzz」「16」…のように進行する。
これを1から与えられた値までコンピュータに実行させるプログラムを作成する課題がFizzBuzz問題
有効なpythonコードなので、出力をファイルにリダイレクトさせる
1 |
(chatgpt_cli) root@debian:~/commandline-chatgpt#sgpt --code "solve classic fizz buzz problem using Python" > fizz_buzz.py |
fizz_buzz.pyを実行すると
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
(chatgpt_cli) root@debian:~/commandline-chatgpt#python fizz_buzz.py 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz ... |
④ChatGPT
チャットセッションを開始するには、--chatオプションに続いて、固有のセッション名とプロンプトを使用します。一時的なチャット・セッションを開始するには、セッション名として "temp" を使用することもできます。
1 2 3 4 5 6 |
(chatgpt_cli) root@debian:~/commandline-chatgpt#sgpt --chat number "私の好きな数字+5は何でしょう?" あなたの好きな数字が何か教えていただけますか? (chatgpt_cli) root@debian:~/commandline-chatgpt# sgpt --chat number "私の好きな 数字:4 を覚えておいてください" 了解しました。あなたの好きな数字は4ですね。それでは、4+5は9になります。 |
⑤REPL
非常に便利なREPL(read-eval-print loop)モードがあり、GPTモデルとインタラクティブにチャットすることができます。REPLモードでチャットセッションを開始するには、--replオプションの後に固有のセッション名を付けてください。また、セッション名として "temp "を使用すると、一時的なREPLセッションを開始することができます。chatと--replは同じチャットセッションを使用するので、--chatでチャットセッションを開始し、--replでREPLモードの会話を続けることができます。REPLモードでは、会話の履歴も最初に表示されます。
1 2 3 4 5 6 7 |
(chatgpt_cli) root@debian:~/commandline-chatgpt#sgpt --repl temp Entering REPL mode, press Ctrl+C to exit. >>> What is REPL? REPL stands for Read-Eval-Print Loop. It is a programming environment that allows users to enter and execute code interactively. The environment reads the user's input, evaluates it, prints the result, and then loops back to wait for the next input. It is commonly used in interpreted languages like Python, Ruby, and JavaScript. >>> How can I use Python with REPL? To use Python with REPL, you can open a terminal or command prompt and type "python" to start the Python interpreter. This will open a Python REPL environment where you can enter Python code and see the results immediately. You can use the REPL to test out small snippets of code, experiment with different Python modules, or debug your Python programs. To exit the Python REPL, you can type "exit()" or press Ctrl+D. >>> |
REPLモードは-shellオプションと-codeオプションで動作するため、インタラクティブなシェルコマンドやコード生成に非常に便利です
1 2 3 4 5 6 7 8 9 10 |
(chatgpt_cli) root@debian:~/commandline-chatgpt#sgpt --repl temp --shell Entering shell REPL mode, type [e] to execute commands or [d] to describe the commands, press Ctrl+C to exit. >>> What is in current folder? ls >>> Show file sizes ls -l >>> Sort them by file sizes ls -lS >>> e ... |
⑥Chat sessions
現在のチャットセッションをすべて一覧表示するには、-list-chats オプションを使用します
1 2 3 4 5 |
(chatgpt_cli) root@debian:~/commandline-chatgpt#sgpt --list-chats /tmp/chat_cache/number /tmp/chat_cache/python_request /tmp/chat_cache/sh /tmp/chat_cache/temp |
特定のチャットセッションに関連するすべてのメッセージを表示するには、--show-chatオプションに続いてセッション名を使用します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
(chatgpt_cli) root@debian:~/commandline-chatgpt#sgpt --show-chat number user: ### Role name: default You are Command Line App ShellGPT, a programming and system administration assistant. You are managing Linux/Debian GNU/Linux 11 (bullseye) operating system with bash shell. Provide only plain text without Markdown formatting. Do not show any warnings or information regarding your capabilities. If you need to store any data, assume it will be stored in the chat. Request: 私の好きな番号:4 を覚えておいてください ### assistant: 了解しました。番号4を覚えておきます。 user: 私の好きな数字+5は何でしょう? assistant: あなたの好きな数字が何か教えていただけますか? user: 私の好きな数字:4 を覚えておいてください assistant: 了解しました。あなたの好きな数字は4ですね。それでは、4+5は9になります |