أداة إنتاجية سطر الأوامر مدعوم من نماذج لغة كبيرة من الذكاء الاصطناعي (LLM). توفر أداة سطر الأوامر هذه توليد مبسط من أوامر Shell ، ومقتطفات التعليمات البرمجية ، والوثائق ، والقضاء على الحاجة إلى موارد خارجية (مثل بحث Google). يدعم Linux و MacOs و Windows ومتوافق مع جميع القذائف الرئيسية مثل PowerShell و CMD و Bash و Zsh ، إلخ.
pip install shell-gpt بشكل افتراضي ، يستخدم Shellgpt طراز Openai's API و GPT-4. ستحتاج إلى مفتاح API ، يمكنك إنشاء مفتاح هنا. ستتم مطالبتك بالمفتاح الذي سيتم تخزينه بعد ذلك في ~/.config/shell_gpt/.sgptrc . Openai API ليس مجانيًا ، يرجى الرجوع إلى أسعار Openai لمزيد من المعلومات.
نصيحة
بدلاً من ذلك ، يمكنك استخدام نماذج المصادر المفتوحة المستضافة محليًا والتي تتوفر مجانًا. لاستخدام النماذج المحلية ، ستحتاج إلى تشغيل خادم LLM الخاص بك مثل Ollama. لإعداد Shellgpt مع Ollama ، يرجى اتباع هذا الدليل الشامل.
❗ لا يتم تحسين shellgpt للنماذج المحلية وقد لا تعمل كما هو متوقع.
تم تصميم Shellgpt لتحليل المعلومات واستردادها بسرعة. إنه مفيد للطلبات المباشرة التي تتراوح من التكوينات الفنية إلى المعرفة العامة.
sgpt " What is the fibonacci sequence "
# -> The Fibonacci sequence is a series of numbers where each number ... تقبل Shellgpt موجه من كل من stdin وسيطة سطر الأوامر. سواء كنت تفضل إدخال الأنابيب من خلال المحطة أو تحديدها مباشرة كوسائط ، فقد تم تغطيتك sgpt . على سبيل المثال ، يمكنك بسهولة إنشاء رسالة ارتكاب git استنادًا إلى Diff:
git diff | sgpt " Generate git commit message, for my changes "
# -> Added main feature details into README.mdيمكنك تحليل السجلات من مصادر مختلفة عن طريق تمريرها باستخدام stdin ، جنبا إلى جنب مع موجه. على سبيل المثال ، يمكننا استخدامه لتحليل السجلات بسرعة ، وتحديد الأخطاء والحصول على اقتراحات للحلول الممكنة:
docker logs -n 20 my_app | sgpt " check logs, find errors, provide possible solutions " Error Detected: Connection timeout at line 7.
Possible Solution: Check network connectivity and firewall settings.
Error Detected: Memory allocation failed at line 12.
Possible Solution: Consider increasing memory allocation or optimizing application memory usage.
يمكنك أيضًا استخدام جميع أنواع عوامل إعادة التوجيه لتمرير المدخلات:
sgpt " summarise " < document.txt
# -> The document discusses the impact...
sgpt << EOF
What is the best way to lear Golang?
Provide simple hello world example.
EOF
# -> The best way to learn Golang...
sgpt <<< " What is the best way to learn shell redirects? "
# -> The best way to learn shell redirects is through... هل سبق لك أن وجدت نفسك تنسى أوامر Shell الشائعة ، مثل find ، وتحتاج إلى البحث عن بناء الجملة عبر الإنترنت؟ مع -خيار --shell أو اختصار -s ، يمكنك إنشاء وتنفيذ الأوامر التي تحتاجها بسرعة في المحطة.
sgpt --shell " find all json files in current folder "
# -> find . -type f -name "*.json"
# -> [E]xecute, [D]escribe, [A]bort: e SHELL GPT على دراية بنظام التشغيل و $SHELL التي تستخدمها ، فسيوفر الأمر shell لنظام معين لديك. على سبيل المثال ، إذا طلبت من sgpt تحديث نظامك ، فسيقوم بإرجاع أمر استنادًا إلى نظام التشغيل الخاص بك. إليك مثال باستخدام MacOS:
sgpt -s " update my system "
# -> sudo softwareupdate -i -a
# -> [E]xecute, [D]escribe, [A]bort: eنفس المطالبة ، عند استخدامها في Ubuntu ، ستولد اقتراحًا مختلفًا:
sgpt -s " update my system "
# -> sudo apt update && sudo apt upgrade -y
# -> [E]xecute, [D]escribe, [A]bort: eلنجربه مع Docker:
sgpt -s " start nginx container, mount ./index.html "
# -> docker run -d -p 80:80 -v $(pwd)/index.html:/usr/share/nginx/html/index.html nginx
# -> [E]xecute, [D]escribe, [A]bort: e لا يزال بإمكاننا استخدام الأنابيب لتمرير المدخلات إلى sgpt وإنشاء أوامر Shell:
sgpt -s " POST localhost with " < data.json
# -> curl -X POST -H "Content-Type: application/json" -d '{"a": 1, "b": 2}' http://localhost
# -> [E]xecute, [D]escribe, [A]bort: e تطبيق سحر Shell إضافي في مطالبة لدينا ، في هذا المثال تمرير أسماء الملفات على ffmpeg :
ls
# -> 1.mp4 2.mp4 3.mp4
sgpt -s " ffmpeg combine $( ls -m ) into one video file without audio. "
# -> ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -filter_complex "[0:v] [1:v] [2:v] concat=n=3:v=1 [v]" -map "[v]" out.mp4
# -> [E]xecute, [D]escribe, [A]bort: e إذا كنت ترغب في تمرير أمر shell الذي تم إنشاؤه باستخدام الأنبوب ، فيمكنك استخدام --no-interaction . سيؤدي ذلك إلى تعطيل الوضع التفاعلي وسيطبع الأمر الذي تم إنشاؤه إلى stdout. في هذا المثال ، نستخدم pbcopy لنسخ الأمر الذي تم إنشاؤه إلى الحافظة:
sgpt -s " find all json files in current folder " --no-interaction | pbcopy هذه ميزة مفيدة للغاية ، والتي تتيح لك استخدام إكمال sgpt Shell مباشرة في المحطة الخاصة بك ، دون الحاجة إلى كتابة sgpt مع المطالبة والوسائط. يتيح تكامل Shell استخدام shellgpt مع مفاتيح hotkeys في المحطة الخاصة بك ، بدعم من كل من قذائف Bash و Zsh. تضع هذه الميزة إكمال sgpt مباشرة في المخزن المؤقت للمحطة (خط الإدخال) ، مما يسمح بتحرير فوري للأوامر المقترحة.
لتثبيت تكامل shell ، قم بتشغيل sgpt --install-integration وأعد تشغيل المحطة الخاصة بك لتطبيق التغييرات. سيؤدي هذا إلى إضافة أسطر قليلة إلى ملف .bashrc أو .zshrc . بعد ذلك ، يمكنك استخدام Ctrl+l (افتراضيًا) لاستدعاء Shellgpt. عندما تضغط على Ctrl+l ، فإنه سيحل محل خط الإدخال الحالي (المخزن المؤقت) بأمر مقترح. يمكنك بعد ذلك تحريره واضغط فقط على Enter للتنفيذ.
باستخدام المعلمة --code أو -c ، يمكنك طلب إخراج رمز نقي على وجه التحديد ، على سبيل المثال:
sgpt --code " solve 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 )نظرًا لأنه رمز Python صالح ، يمكننا إعادة توجيه الإخراج إلى ملف:
sgpt --code " solve classic fizz buzz problem using Python " > fizz_buzz.py
python fizz_buzz.py
# 1
# 2
# Fizz
# 4
# Buzz
# ...يمكننا أيضًا استخدام الأنابيب لتمرير الإدخال:
cat fizz_buzz.py | sgpt --code " Generate comments for each line of my code " # Loop through numbers 1 to 100
for i in range ( 1 , 101 ):
# Check if number is divisible by both 3 and 5
if i % 3 == 0 and i % 5 == 0 :
# Print "FizzBuzz" if number is divisible by both 3 and 5
print ( "FizzBuzz" )
# Check if number is divisible by 3
elif i % 3 == 0 :
# Print "Fizz" if number is divisible by 3
print ( "Fizz" )
# Check if number is divisible by 5
elif i % 5 == 0 :
# Print "Buzz" if number is divisible by 5
print ( "Buzz" )
# If number is not divisible by 3 or 5, print the number itself
else :
print ( i ) غالبًا ما يكون من المهم الحفاظ على محادثة وتذكرها. تقوم sgpt بإنشاء حوار محادثة مع كل إكمال LLM المطلوب. يمكن أن يتطور الحوار بواحدة (وضع الدردشة) أو بشكل تفاعلي ، في حلقة الاستبدال (وضع الاسترداد). يعتمد كلا الاتجاهين على نفس الكائن الأساسي ، يسمى جلسة الدردشة. تقع الجلسة في CHAT_CACHE_PATH القابلة للتكوين.
لبدء محادثة ، استخدم خيار --chat متبوعًا باسم جلسة فريد ومطالبة.
sgpt --chat conversation_1 " please remember my favorite number: 4 "
# -> I will remember that your favorite number is 4.
sgpt --chat conversation_1 " what would be my favorite number + 4? "
# -> Your favorite number is 4, so if we add 4 to it, the result would be 8. يمكنك استخدام جلسات الدردشة لتحسين اقتراحات GPT بشكل متكرر من خلال توفير تفاصيل إضافية. --chat الممكن استخدام خيارات --code أو --shell
sgpt --chat conversation_2 --code " make a request to localhost using python " import requests
response = requests . get ( 'http://localhost' )
print ( response . text )دعنا نطلب من LLM إضافة التخزين المؤقت لطلبنا:
sgpt --chat conversation_2 --code " add caching " import requests
from cachecontrol import CacheControl
sess = requests . session ()
cached_sess = CacheControl ( sess )
response = cached_sess . get ( 'http://localhost' )
print ( response . text )ينطبق الشيء نفسه على أوامر shell:
sgpt --chat conversation_3 --shell " what is in current folder "
# -> ls
sgpt --chat conversation_3 " Sort by name "
# -> ls | sort
sgpt --chat conversation_3 " Concatenate them using FFMPEG "
# -> ffmpeg -i "concat:$(ls | sort | tr 'n' '|')" -codec copy output.mp4
sgpt --chat conversation_3 " Convert the resulting file into an MP3 "
# -> ffmpeg -i output.mp4 -vn -acodec libmp3lame -ac 2 -ab 160k -ar 48000 final_output.mp3 لسرد جميع الجلسات من وضع المحادثة ، استخدم خيار --list-chats أو -lc :
sgpt --list-chats
# .../shell_gpt/chat_cache/conversation_1
# .../shell_gpt/chat_cache/conversation_2 لإظهار جميع الرسائل المتعلقة بمحادثة محددة ، استخدم خيار --show-chat متبوعًا باسم الجلسة:
sgpt --show-chat conversation_1
# user: please remember my favorite number: 4
# assistant: I will remember that your favorite number is 4.
# user: what would be my favorite number + 4?
# assistant: Your favorite number is 4, so if we add 4 to it, the result would be 8. يوجد وضع مفيد للغاية (قراءة - حلقة طباعة val -eval) ، والذي يتيح لك الدردشة بشكل تفاعلي مع طرز GPT. لبدء جلسة دردشة في وضع الاسترداد ، استخدم خيار --repl متبوعًا باسم جلسة فريد. يمكنك أيضًا استخدام "Temp" كاسم جلسة لبدء جلسة استبدال مؤقت. لاحظ أن --chat و --repl تستخدم نفس الكائن الأساسي ، حتى تتمكن من استخدام --chat لبدء جلسة الدردشة ثم استلامها مع --repl لمواصلة المحادثة في وضع الاسترداد.
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 ...
>>> How can I use Python with REPL?
To use Python with REPL, you can simply open a terminal or command prompt ...
يمكن أن يعمل وضع REPL مع -خيارات --shell و --code ، مما يجعله مفيدًا للغاية لأوامر shell التفاعلية وتوليد الكود:
sgpt --repl temp --shell
Entering shell REPL mode, type [e] to execute commands or press Ctrl+C to exit.
>>> What is in current folder?
ls
>>> Show file sizes
ls -lh
>>> Sort them by file sizes
ls -lhS
>>> e (enter just e to execute commands, or d to describe them)
لتوفير استخدام موجه متعدد الأسعار ثلاثية الأسعار """ :
sgpt --repl temp
Entering REPL mode, press Ctrl+C to exit.
>>> """
... Explain following code:
... import random
... print(random.randint(1, 10))
... """
It is a Python script that uses the random module to generate and print a random integer.
يمكنك أيضًا إدخال وضع REPLE مع موجه الأولي عن طريق تمريره كوسيطة أو stdin أو حتى كلاهما:
sgpt --repl temp < my_app.py Entering REPL mode, press Ctrl+C to exit.
──────────────────────────────────── Input ────────────────────────────────────
name = input("What is your name?")
print(f"Hello {name}")
───────────────────────────────────────────────────────────────────────────────
>>> What is this code about?
The snippet of code you've provided is written in Python. It prompts the user...
>>> Follow up questions...
مكالمات الوظائف هي ميزة قوية يوفرها Openai. يسمح LLM بتنفيذ وظائف في نظامك ، والتي يمكن استخدامها لإنجاز مجموعة متنوعة من المهام. لتثبيت الوظائف الافتراضية تشغيل:
sgpt --install-functions لدى Shellgpt طريقة مريحة لتحديد الوظائف واستخدامها. من أجل إنشاء وظيفتك المخصصة ، انتقل إلى ~/.config/shell_gpt/functions وإنشاء ملف .py جديد باسم الوظيفة. داخل هذا الملف ، يمكنك تحديد وظيفتك باستخدام بناء الجملة التالي:
# execute_shell_command.py
import subprocess
from pydantic import Field
from instructor import OpenAISchema
class Function ( OpenAISchema ):
"""
Executes a shell command and returns the output (result).
"""
shell_command : str = Field (..., example = "ls -la" , descriptions = "Shell command to execute." )
class Config :
title = "execute_shell_command"
@ classmethod
def execute ( cls , shell_command : str ) -> str :
result = subprocess . run ( shell_command . split (), capture_output = True , text = True )
return f"Exit code: { result . returncode } , Output: n { result . stdout } " سيتم تمرير تعليق docstring داخل الفصل إلى Openai API كوصف للوظيفة ، إلى جانب أوصاف title والمعلمات. سيتم استدعاء وظيفة execute إذا قررت LLM استخدام وظيفتك. في هذه الحالة ، نسمح LLM بتنفيذ أي أوامر shell في نظامنا. نظرًا لأننا نعيد إخراج الأمر ، فستتمكن LLM من تحليله وتحديد ما إذا كان مناسبًا للمطالبة. فيما يلي مثال على كيفية تنفيذ الوظيفة بواسطة LLM:
sgpt " What are the files in /tmp folder? "
# -> @FunctionCall execute_shell_command(shell_command="ls /tmp")
# -> The /tmp folder contains the following files and directories:
# -> test.txt
# -> test.json لاحظ أنه إذا كانت الوظيفة (Execute_Shell_Command) لسبب ما ستعيد خطأً ، فقد تحاول LLM إنجاز المهمة بناءً على الإخراج. لنفترض أننا لم نقم بتثبيت jq في نظامنا ، ونطلب من LLM تحليل ملف JSON:
sgpt " parse /tmp/test.json file using jq and return only email value "
# -> @FunctionCall execute_shell_command(shell_command="jq -r '.email' /tmp/test.json")
# -> It appears that jq is not installed on the system. Let me try to install it using brew.
# -> @FunctionCall execute_shell_command(shell_command="brew install jq")
# -> jq has been successfully installed. Let me try to parse the file again.
# -> @FunctionCall execute_shell_command(shell_command="jq -r '.email' /tmp/test.json")
# -> The email value in /tmp/test.json is johndoe@example.من الممكن أيضًا ربط مكالمات وظائف متعددة في المطالبة:
sgpt " Play music and open hacker news "
# -> @FunctionCall play_music()
# -> @FunctionCall open_url(url="https://news.ycombinator.com")
# -> Music is now playing, and Hacker News has been opened in your browser. Enjoy!هذا مجرد مثال بسيط على كيفية استخدام مكالمات الوظائف. إنها حقًا ميزة قوية يمكن استخدامها لإنجاز مجموعة متنوعة من المهام المعقدة. لقد خصصنا فئة في مناقشات GitHub لمشاركة الوظائف ومناقشتها. قد تنفذ LLM الأوامر المدمرة ، لذا يرجى استخدامها على مسؤوليتك الخاصة
تتيح لك Shellgpt إنشاء أدوار مخصصة ، والتي يمكن استخدامها لإنشاء رمز أو أوامر Shell أو لتلبية احتياجاتك المحددة. لإنشاء دور جديد ، استخدم خيار- --create-role متبوعًا باسم الدور. سيُطلب منك تقديم وصف لهذا الدور ، إلى جانب التفاصيل الأخرى. سيؤدي ذلك إلى إنشاء ملف JSON في ~/.config/shell_gpt/roles مع اسم الدور. داخل هذا الدليل ، يمكنك أيضًا تحرير أدوار sgpt الافتراضية ، مثل Shell و Code و Default . استخدم خيار --list-roles لسرد جميع الأدوار المتوفرة ، وخيار --show-role لعرض تفاصيل دور محدد. إليك مثال على الدور المخصص:
sgpt --create-role json_generator
# Enter role description: Provide only valid json as response.
sgpt --role json_generator " random: user, password, email, address " {
"user" : " JohnDoe " ,
"password" : " p@ssw0rd " ,
"email" : " [email protected] " ,
"address" : {
"street" : " 123 Main St " ,
"city" : " Anytown " ,
"state" : " CA " ,
"zip" : " 12345 "
}
}إذا كان وصف الدور يحتوي على عبارة "تطبيق العدوى" (حساسة للحالة) ، فسيتم عرض الدردشات باستخدام تنسيق Markdown.
التحكم في ذاكرة التخزين المؤقت باستخدام- --cache (افتراضي) و --no-cache . ينطبق هذا التخزين المؤقت على جميع طلبات sgpt إلى Openai API:
sgpt " what are the colors of a rainbow "
# -> The colors of a rainbow are red, orange, yellow, green, blue, indigo, and violet. في المرة القادمة ، سيحصل الاستعلام الدقيق نفسه على نتائج من ذاكرة التخزين المؤقت المحلية على الفور. لاحظ أن sgpt "what are the colors of a rainbow" --temperature 0.5 ستقدم طلبًا جديدًا ، لأننا لم نقدم --temperature (ينطبق على --top-probability ) على الطلب السابق.
هذه مجرد بعض الأمثلة على ما يمكننا القيام به باستخدام نماذج Openai GPT ، أنا متأكد من أنك ستجدها مفيدة لحالات الاستخدام المحددة الخاصة بك.
يمكنك إعداد بعض المعلمات في ملف تكوين وقت التشغيل ~/.config/shell_gpt/.sgptrc :
# API key, also it is possible to define OPENAI_API_KEY env.
OPENAI_API_KEY=your_api_key
# Base URL of the backend server. If "default" URL will be resolved based on --model.
API_BASE_URL=default
# Max amount of cached message per chat session.
CHAT_CACHE_LENGTH=100
# Chat cache folder.
CHAT_CACHE_PATH=/tmp/shell_gpt/chat_cache
# Request cache length (amount).
CACHE_LENGTH=100
# Request cache folder.
CACHE_PATH=/tmp/shell_gpt/cache
# Request timeout in seconds.
REQUEST_TIMEOUT=60
# Default OpenAI model to use.
DEFAULT_MODEL=gpt-4o
# Default color for shell and code completions.
DEFAULT_COLOR=magenta
# When in --shell mode, default to "Y" for no input.
DEFAULT_EXECUTE_SHELL_CMD=false
# Disable streaming of responses
DISABLE_STREAMING=false
# The pygment theme to view markdown (default/describe role).
CODE_THEME=default
# Path to a directory with functions.
OPENAI_FUNCTIONS_PATH=/Users/user/.config/shell_gpt/functions
# Print output of functions when LLM uses them.
SHOW_FUNCTIONS_OUTPUT=false
# Allows LLM to use functions.
OPENAI_USE_FUNCTIONS=true
# Enforce LiteLLM usage (for local LLMs).
USE_LITELLM=false
الخيارات الممكنة لـ DEFAULT_COLOR : أسود ، أحمر ، أخضر ، أصفر ، أزرق ، أرجواني ، سماوي ، أبيض ، Bright_black ، bright_red ، bright_green ، bright_yellow ، bright_blue ، bright_magenta ، bright_cyan ، bright_white. الخيارات الممكنة لـ CODE_THEME : https://pygments.org/styles/
╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────╮
│ prompt [PROMPT] The prompt to generate completions for. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --model TEXT Large language model to use. [default: gpt-4o] │
│ --temperature FLOAT RANGE [0.0<=x<=2.0] Randomness of generated output. [default: 0.0] │
│ --top-p FLOAT RANGE [0.0<=x<=1.0] Limits highest probable tokens (words). [default: 1.0] │
│ --md --no-md Prettify markdown output. [default: md] │
│ --editor Open $EDITOR to provide a prompt. [default: no-editor] │
│ --cache Cache completion results. [default: cache] │
│ --version Show version. │
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Assistance Options ─────────────────────────────────────────────────────────────────────────────────────╮
│ --shell -s Generate and execute shell commands. │
│ --interaction --no-interaction Interactive mode for --shell option. [default: interaction] │
│ --describe-shell -d Describe a shell command. │
│ --code -c Generate only code. │
│ --functions --no-functions Allow function calls. [default: functions] │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Chat Options ───────────────────────────────────────────────────────────────────────────────────────────╮
│ --chat TEXT Follow conversation with id, use "temp" for quick session. [default: None] │
│ --repl TEXT Start a REPL (Read–eval–print loop) session. [default: None] │
│ --show-chat TEXT Show all messages from provided chat id. [default: None] │
│ --list-chats -lc List all existing chat ids. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Role Options ───────────────────────────────────────────────────────────────────────────────────────────╮
│ --role TEXT System role for GPT model. [default: None] │
│ --create-role TEXT Create role. [default: None] │
│ --show-role TEXT Show role. [default: None] │
│ --list-roles -lr List roles. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯
قم بتشغيل الحاوية باستخدام متغير بيئة OPENAI_API_KEY ، وحجم Docker لتخزين ذاكرة التخزين المؤقت. ضع في اعتبارك تعيين متغيرات البيئة OS_NAME و SHELL_NAME وفقًا لتفضيلاتك.
docker run --rm
--env OPENAI_API_KEY=api_key
--env OS_NAME= $( uname -s )
--env SHELL_NAME= $( echo $SHELL )
--volume gpt-cache:/tmp/shell_gpt
ghcr.io/ther1d/shell_gpt -s " update my system " مثال على المحادثة ، باستخدام الاسم المستعار ومتغير بيئة OPENAI_API_KEY :
alias sgpt= " docker run --rm --volume gpt-cache:/tmp/shell_gpt --env OPENAI_API_KEY --env OS_NAME= $( uname -s ) --env SHELL_NAME= $( echo $SHELL ) ghcr.io/ther1d/shell_gpt "
export OPENAI_API_KEY= " your OPENAI API key "
sgpt --chat rainbow " what are the colors of a rainbow "
sgpt --chat rainbow " inverse the list of your last answer "
sgpt --chat rainbow " translate your last answer in french " يمكنك أيضًا استخدام Dockerfile المقدمة لبناء صورتك الخاصة:
docker build -t sgpt .إذا كنت ترغب في إرسال طلباتك إلى مثيل Ollama وتشغيل shellgpt داخل حاوية Docker ، فأنت بحاجة إلى ضبط Dockerfile وإنشاء الحاوية بنفسك: هناك حاجة إلى حزمة Litellm ويجب ضبط متغيرات ENV بشكل صحيح.
مثال Dockerfile:
FROM python:3-slim
ENV DEFAULT_MODEL=ollama/mistral:7b-instruct-v0.2-q4_K_M
ENV API_BASE_URL=http://10.10.10.10:11434
ENV USE_LITELLM=true
ENV OPENAI_API_KEY=bad_key
ENV SHELL_INTERACTION=false
ENV PRETTIFY_MARKDOWN=false
ENV OS_NAME="Arch Linux"
ENV SHELL_NAME=auto
WORKDIR /app
COPY . /app
RUN apt-get update && apt-get install -y gcc
RUN pip install --no-cache /app[litellm] && mkdir -p /tmp/shell_gpt
VOLUME /tmp/shell_gpt
ENTRYPOINT ["sgpt"]