快轉到主要內容

ShellGPT,Linux命令行整合ChatGPT,讓AI輔助你寫程式

分類   開源AI應用 大型語言模型
標籤   LLaMA AI Linux ChatGPT
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

我們知道ChatGPT可以輔助人們寫程式,Github還推出了Copilot整合到VS Cdoe輔助生成程式碼。

那麼如果想在終端機直接調用ChatGPT輔助寫程式呢?比如,臨時寫個ffmpeg轉檔指令,或者清除檔案的小程式?不想花費腦細胞去google指令解法,那麼我們就可以運用ShellGPT軟體來解決程式相關問題。

ShellGPT作者製作的酷酷宣傳影片

ShellGPT將ChatGPT與電腦終端機直接整合,你可以在命令行與ChatGPT對話,它可以針對你系統的情況回答問題。因為是AI生成的回答,ShellGPT實用性比起機械性應答的 The Fuck指令工具要泛用多了。

ShellGPT的設計是跨平台的,不論你是Linux的Bash,macOS Zsh,還是Windows Powershell,都可以安裝ShellGPT!

這可不只是單純聊天而已喔!搭配Bash shell的各種文字處理功能,能達到更多好玩的操作。

比如:

  1. 將man指令輸出的內容餵給ChatGPT,總結manpage內容
  2. 讀取程式碼檔案,再請ChatGPT解釋每行的邏輯,一行一行對照著修改。
  3. 餵給多行文本,讓ChatGPT立即按照程式碼生成一個說明文件。
  4. 利用Linux Bash的管道(pipe),把程式輸出的內容餵給ChatGPT處理。
  5. 寫個複雜的Regexp,幫我批次操作檔案

在終端機裡面操作,你就不用離開視窗去看瀏覽器的AI回應了!

1. 安裝ShellGPT
#

ShellGPT由Farkhod Sadykov開發,原始碼位於 Github。Github上有一個同名軟體也叫ShellGPT,跟這個沒有關係。

在安裝之前,你得先選擇要使用線上模型或離線模型。

線上模型
#

線上AI模型就是ChatGPT,支援多語言的AI,也很聰明,但免費帳號額度不多。

  1. 你需要到 OpenAI網站付費購買API Key

  2. 透過Python pip安裝安裝ShellGPT:

pip install shell-gpt
  1. 初始化ShellGPT,填入API Key
sgpt

離線模型
#

離線模型是指 LLaMA這類的開源模型,適合注重隱私的用戶使用。雖然使用無限制,但是LLM的 硬體要求偏高,本機跑語言模型所耗費的硬體資源可能都超過你的IDE了。

  1. ShellGPT得搭配 Ollama的API存取語言模型。

  2. 安裝LiteLLM版的shell-gpt

pip install shell-gpt[litellm]
  1. 編輯~/.config/shell_gpt/.sgptrc,加入以下選項
DEFAULT_MODEL=ollama/mistral:7b-instruct
OPENAI_USE_FUNCTIONS=false
USE_LITELLM=true
  1. 初始化ShellGPT,程式詢問API Key的時候隨便填個字串
sgpt
  1. Ollama會視你的CPU和GPU硬體狀況分配運算資源,如果發現佔用太高就重啟Ollama服務:
sudo systemctl restart ollama

2. ShellGPT操作
#

初次啟動的時候,sgpt會讀取你的系統資訊,彙整報告。日後生成的指令建議應該也會以你當前的系統為準。

理論上如果你模型選的對的話,你是可以用中文問AI問題的,比如ChatGPT就支援中文,但Ollama提供的模型則不一定。

你可以執行sgpt --install-integration啟用命令行整合,這樣的話在打完指令按下Ctrl + I,你目前所打的指令就會當成提示詞傳給ShellGPT,並馬上執行。

2.1. 常用引數
#

引數彼此可以組合。

預設模式下,sgpt指令後面加上引號,就是一般聊天模式,可以問一些程式相關的問題,例如怎麼移除孤立套件?它會考慮你的發行版再做回應。

sgpt "How to remove orphaned packages on my system?"

輸出

To remove orphaned packages in Ubuntu, you can use the apt-get command with the autoremove option. Run sudo apt-get autoremove. This command will remove packages that were installed as dependencies but are no longer needed. Be sure to use it with caution, as it may remove packages unintentionally if used incorrectly. If you prefer using a package manager other than apt-get, such as apt or snap, the command might be slightly different but the concept remains the same: removing dependencies that are no longer required.

加上--shell-s引數讓AI給出建議後直接執行指令。比如詢問「怎麼批次重新命名目前目錄下所有檔案?」ShellGPT會顯示建議指令,再問你要不要執行?

sgpt -s "Add date to the beginning of all filenames in this directory "

輸出,按E執行,按D解釋,按A停止

for i in *; do mv "$i" "${DATE-%*}-$(basename "$i")"; done && date +%Y%m%d%H%M%S

[E]xecute, [D]escribe, [A]bort:

你也可以把資料或shell script餵給AI,讓它規劃指令

sgpt -s "Execute this script ten times" < findfile.sh

如果你不是很懂命令行(那你是怎麼安裝這軟體的?),那麼可以加上--describe-shell-d引數,讓ShellGPT解釋某指令的用途

sgpt -d "awk"

輸出

awk is a powerful text-processing command in Unix/Linux that applies a user-defined function to each record (line by default) of a file or input stream, producing output selectively based on specified conditions. Arguments are the files to be processed, and options can include setting fields, delimiters, and action for specific events like {print} or {next}. For example: awk '{print $1}' file.txt prints the first field of each line in file.txt.

使用--code-c引數,要求ShellGPT只回傳程式碼,不要有任何解釋。為了方便閱讀,ShellGPT會以Markdown格式回傳程式碼。

sgpt -c "Implement Ant colony optimization in Python"

輸出 (太長了略過剩下的)

import heapq
import random

class AntColonyOptimization:
    def __init__(self, graph, pheromone_initialization, evaporation_rate, alpha, beta, q, number_of_ants):
        self.graph = graph
        self.pheromone_initialization = pheromone_initialization
        self.evaporation_rate = evaporation_rate
        self.alpha = alpha
        self.beta = beta
...

在這裡,Bash的重新導向符號都可以搭配ShellGPT使用,例如使用管線輸入輸出文本內容

cat log.txt | sgpt "Find errors and provide solutions"

輸入單一檔案

sgpt "Summarize this document" < document.txt

還可以輸出ShellGPT的回應到其他檔案,加上--no-interaction就不會有指令操作提示

sgpt -c "Implement Ant colony optimization in Python" --no-interaction | main.py

2.2. Chat模式
#

跟網頁版ChatGPT雷同,ShellGPT可以儲存對話工作階段(session),但是你必須指定--chat引導才可以保存對話,我們上面都沒有加,所以每次跟AI對話都是獨立的,無法連貫。

用指令sgpt --list-chats列出對話工作階段。預設的快取目錄是在/tmp,重開機後會被系統清除,如果有需要長期保存對話紀錄請編輯~/.config/shell_gpt/.sgptrc變更快取位置。

sgpt --chat "對話名稱"新增對話工作階段,比如新增conversation1

sgpt --chat conversation1 "Here is my temporary access code for XXX.com. Please remember it. Code: 123456"

輸出:

I have noted down the temporary access code you provided, which is 123456 for your account on XXX.com. Please keep in mind that this information should be kept confidential to ensure security.

如此一來,之後只要指定對話紀錄名稱,就可以進入該對話跟AI討論事情,讓它「回想」之前聊天的事情。

sgpt --chat conversation1 "What is my temporary access code for XXX.com?"

輸出

I believe the temporary access code you provided earlier was 123456 for your account on XXX.com. Remember, its essential to keep such information confidential for security reasons.

善用對話工作階段,我們就可以斷斷續續的進行多個專案:

cd ~/Projects

sgpt --chat project1 -s "Make a new directroy and intitalize git repository"

sgpt --chat project1 -c "Create a simple game with Pygame" --no-interaction | main.py

sgpt --chat project1 -c "Provide solutions for adding logic for the detection of keyboard events"

sgpt --chat conversation1 "What is my temporary access code for XXX.com?"

2.3. REPL模式
#

這個模式會讓ShellGPT進入互動式的對話狀態。

跟Chat Mode一樣,REPL也可以建立多個工作階段。不過單純對話太無聊,加入-s-c引數,直接讓它開始生成程式碼吧。

sgpt --repl project2 --shell

進入後就可以下指令了,在按Ctrl+C前對話都不會中止。如果要給出多行提示詞,請用Python註解的樣式""" """框起來。

互動式的對話也可以用來問程式碼問題:

sgpt --repl project2 < main.py

2.4. OpenAI的Function Calling
#

讓你執行複雜程式碼的功能,讓你可以餵給自己的資料給AI處理。此功能只有ChatGPT才有。

這部份比較複雜,請參考 作者解說

3. 建立多重ShellGPT機器人
#

AI能夠處理簡單的資料流,所以建立自己的多用途機器人是絕對可行的。

ShellGPT會拒絕回答跟系統管理無關的問題,這跟它提示詞的角色設定有關。這時你可以修改~/.config/shell_gpt/roles的json檔案,修改提示詞部份,變更他的角色(role)。

{
"name": "ShellGPT",
"role": "You are ShellGPT\nYou are programming and system administration assistant.\nYou are managing Linux/Ubuntu 22.04.4 LTS operating system with bash shell.\nP    rovide short responses in about 100 words, unless you are specifically asked for more details.\nIf you need to store any data, assume it will be stored in the conversation.\nAPPLY MARK    DOWN formatting when possible."
}

或者用--create-role參數,在~/.config/shell_gpt/roles建立新角色

sgpt --create-role image_converter

再用--role切換角色,依照JSON檔案所定義的提示詞內容,回答的指令也會不一樣。比如我這個是轉檔圖片機器人,不用指定程式名稱,它就會吐出Image Magick指令出來

sgpt --role image_converter -s "batch convert png to avif"

相關文章

Kanban Desktop,在PC桌面放一隻Live2D桌寵!支援AI智慧聊天
分類   開源AI應用 大型語言模型
標籤   Desktop Mascot Live2D ChatGPT LLaMA AI
Meta的LLaMA開源大型語言模型與相關軟體介紹
分類   開源AI應用 大型語言模型
標籤   LLaMA AI Large Language Model ChatGPT
Text Generation WebUI:如何下載大型語言模型(LLM)
分類   開源AI應用 大型語言模型
標籤   LLaMA AI Large Language Model

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。