Neoai هو البرنامج المساعد Neovim الذي يجلب قوة GPT-4 من Openai مباشرة إلى المحرر الخاص بك. يساعدك على إنشاء رمز وإعادة كتابة النص ، وحتى الحصول على اقتراحات في السياق مع الكود الخاص بك. تم تصميم البرنامج المساعد مع واجهة سهلة الاستخدام ، مما يجعل من السهل التفاعل مع الذكاء الاصطناعى والحصول على المساعدة التي تحتاجها.
ملاحظة: هذا البرنامج المساعد في وقت مبكر تغييرات مبكرة ويخضع للتغيير.
يتمثل الدافع الأساسي وراء هذا المكون الإضافي في توفير تكامل سلس لمدعى الدردشة من الذكاء الاصطناعى ، مثل ChatGPT ، في سير عمل الترميز Neovim. الهدف من ذلك هو إنشاء أداة تعمل في وئام معك ، مما يسمح لك بطرح الأسئلة وتلقي المساعدة دون تعطيل تركيزك أو إيقاع الترميز. على عكس معظم الإضافات الموجودة ، والتي تميل إلى إعطاء الأولوية للترفيه على الإنتاجية ، يؤكد هذا البرنامج المساعد على الكفاءة والفائدة. من خلال تسهيل تجربة الترميز السلسة والسريعة الاستجابة ، فإنه يهدف إلى تعزيز الإنتاجية وجعل الترميز أكثر متعة.
لتثبيت Neoai ، يمكنك استخدام مدير البرنامج المساعد المفضل لديك. على سبيل المثال ، باستخدام VIM-plug ، أضف السطر التالي إلى init.vim
أو .vimrc
، لاحظ أنه يتطلب أيضًا التبعية NUI وتجعيدها على النظام:
Plug 'MunifTanjim/nui.nvim'
Plug 'Bryley/neoai.nvim'
ثم قم بتشغيل :PlugInstall
لتثبيت المكونات الإضافية.
من أجل lazy.nvim:
return {
" Bryley/neoai.nvim " ,
dependencies = {
" MunifTanjim/nui.nvim " ,
},
cmd = {
" NeoAI " ,
" NeoAIOpen " ,
" NeoAIClose " ,
" NeoAIToggle " ,
" NeoAIContext " ,
" NeoAIContextOpen " ,
" NeoAIContextClose " ,
" NeoAIInject " ,
" NeoAIInjectCode " ,
" NeoAIInjectContext " ,
" NeoAIInjectContextCode " ,
},
keys = {
{ " <leader>as " , desc = " summarize text " },
{ " <leader>ag " , desc = " generate git message " },
},
config = function ()
require ( " neoai " ). setup ({
-- Options go here
})
end ,
}
ل Packer:
use ({
" Bryley/neoai.nvim " ,
require = { " MunifTanjim/nui.nvim " },
cmd = {
" NeoAI " ,
" NeoAIOpen " ,
" NeoAIClose " ,
" NeoAIToggle " ,
" NeoAIContext " ,
" NeoAIContextOpen " ,
" NeoAIContextClose " ,
" NeoAIInject " ,
" NeoAIInjectCode " ,
" NeoAIInjectContext " ,
" NeoAIInjectContextCode " ,
},
config = function ()
require ( " neoai " ). setup ({
-- Options go here
})
end ,
})
لاستخدام هذا البرنامج المساعد ، تأكد من أن لديك مفتاح Openai API يمكن إنشاؤه هنا. احفظ هذا المفتاح في متغيرات البيئة الخاصة بك مثل OPENAI_API_KEY
.
ملاحظة مهمة : هذا البرنامج المساعد ليس مسؤولاً عن عمليات الشراء غير المقصودة التي تم إجراؤها إلى Openai. أثناء استخدام هذا البرنامج المساعد ، أوصيك كثيرًا بالتحقق من استخدام حسابك وحدود الإعداد ، لذلك لا تنفق المزيد مما يمكنك تحمله.
يقدم هذا البرنامج المساعد 3 أوضاع أو طرق للتفاعل مع نماذج الذكاء الاصطناعى.
في الوضع الافتراضي ، يفتح واجهة المستخدم الرسومية على الجانب باستخدام أمر :NeoAI
، مما يتيح لك الدردشة مع النموذج. تشبه هذه العملية ما تحصل عليه عند استخدامه في متصفح ، ولكن الآن أصبح أكثر ملاءمة من قبل واجهة المستخدم الرسومية داخل المحرر الخاص بك.
في المخزن المؤقت للمطالبة ، يمكنك إرسال النص بالضغط على Enter أثناء وجوده في وضع إدراج. بالإضافة إلى ذلك ، يمكنك إدخال سطر جديد باستخدام Control Enter. يمكن تغيير هذا التعيين في التكوين.
لاحظ أيضًا أن المكون الإضافي يحتوي على ميزة يتم فيها حفظ الإخراج من النموذج تلقائيًا إلى سجل g
ويتم حفظ جميع مقتطفات الرمز إلى سجل c
يمكن تغيير هذه في التكوين.
يعمل وضع السياق بشكل مشابه للوضع العادي. ومع ذلك ، لديك القدرة على تقديم معلومات إضافية حول ما تريد تغييره. على سبيل المثال ، إذا كنت تقرأ رمز شخص آخر وتحتاج إلى وصف لما يفعله ، فيمكنك تسليط الضوء على الرمز في المخزن المؤقت عبر الوضع المرئي. بعد ذلك ، يمكنك تشغيل :NeoAIContext
واكتب شيئًا مثل "يرجى توضيح هذا الرمز لي" في المخزن المؤقت للمطالبة.
بالإضافة إلى ذلك ، يمكنك تسليط الضوء على بعض النصوص وطلب "إصلاح علامات الترقيم والقواعد في هذا النص" للحصول على إصدار أفضل من النص.
لاحظ أنه إذا قمت بتشغيل الأمر دون أي اختيار ، فسيتم تمرير المخزن المؤقت بالكامل.
يُعرف الوضع النهائي باسم "وضع الحقن" باستخدام :NeoAIInject
. يعمل هذا الوضع بدون واجهة المستخدم الرسومية ، مما يسمح لك بإرسال موجه بسرعة إلى النموذج وإدراج الإخراج الناتج تلقائيًا أسفل المؤشر. كل هذا يمكن القيام به دون فتح واجهة المستخدم الرسومية. بالإضافة إلى ذلك ، هناك وضع فرعي داخل وضع الحقن يمكن تنفيذه مع السياق.
تتمثل إحدى ميزات هذا المكون الإضافي في إنشاء اختصارات ، والتي يتم شرحها أدناه. يتضمن البرنامج المساعد اختصارات مدمجة ؛ أول إعادة تنسيق تم إعادة تهيئة النص لتحسين قابلية القراءة ، مع وجود مفتاح افتراضي هو <leader>as
(A لـ AI و S للتلخيص).
الاختصار المدمج الآخر هو توليد رسائل الالتزام بالتوليد التلقائي لك:
تحذير : كن على علم بأن الإفراط في استخدام هذه الميزة قد يؤدي إلى تراكم البيانات المرسلة إلى النموذج ، مما قد يؤدي إلى ارتفاع تكاليف. لتجنب ذلك ، يوصى بإجراء ارتباطات أصغر أو استخدام الميزة بشكل متكرر. من الضروري تتبع استخدامك ، والذي يمكن مراقبته من خلال هذا الرابط
لإعداد المكون الإضافي ، أضف الكود التالي مع القيم الافتراضية إلى init.lua
(أو وضعت ضمن خيار config
إذا كنت تستخدم lazy.nvim أو packer.nvim.
require ( " neoai " ). setup ({
-- Below are the default options, feel free to override what you would like changed
ui = {
output_popup_text = " NeoAI " ,
input_popup_text = " Prompt " ,
width = 30 , -- As percentage eg. 30%
output_popup_height = 80 , -- As percentage eg. 80%
submit = " <Enter> " , -- Key binding to submit the prompt
},
models = {
{
name = " openai " ,
model = " gpt-3.5-turbo " ,
params = nil ,
},
},
register_output = {
[ " g " ] = function ( output )
return output
end ,
[ " c " ] = require ( " neoai.utils " ). extract_code_snippets ,
},
inject = {
cutoff_width = 75 ,
},
prompts = {
context_prompt = function ( context )
return " Hey, I'd like to provide some context for future "
.. " messages. Here is the code/text that I want to refer "
.. " to in our upcoming conversations: nn "
.. context
end ,
},
mappings = {
[ " select_up " ] = " <C-k> " ,
[ " select_down " ] = " <C-j> " ,
},
open_ai = {
api_key = {
env = " OPENAI_API_KEY " ,
value = nil ,
-- `get` is is a function that retrieves an API key, can be used to override the default method.
-- get = function() ... end
-- Here is some code for a function that retrieves an API key. You can use it with
-- the Linux 'pass' application.
-- get = function()
-- local key = vim.fn.system("pass show openai/mytestkey")
-- key = string.gsub(key, "n", "")
-- return key
-- end,
},
},
shortcuts = {
{
name = " textify " ,
key = " <leader>as " ,
desc = " fix text with AI " ,
use_context = true ,
prompt = [[
Please rewrite the text to make it more readable, clear,
concise, and fix any grammatical, punctuation, or spelling
errors
]] ,
modes = { " v " },
strip_function = nil ,
},
{
name = " gitcommit " ,
key = " <leader>ag " ,
desc = " generate git commit message " ,
use_context = false ,
prompt = function ()
return [[
Using the following git diff generate a consise and
clear git commit message, with a short title summary
that is 75 characters or less:
]] .. vim . fn . system ( " git diff --cached " )
end ,
modes = { " n " },
strip_function = nil ,
},
},
})
تقبل وظيفة الإعداد جدول الخيارات لتكوين المكون الإضافي. الخيارات المتاحة هي كما يلي:
output_popup_text
: نص الرأس الموضح في نافذة الإخراج المنبثقة (الافتراضي: "neoai").input_popup_text
: نص رأس مبين في نافذة الإدخال المنبثقة (الافتراضي: "موجه").width
: عرض النافذة كنسبة مئوية (على سبيل المثال ، 30 = 30 ٪ ، الافتراضي: 30).output_popup_height
: ارتفاع الناتج المنبثقة كنسبة مئوية (على سبيل المثال ، 80 = 80 ٪ ، الافتراضي: 80).submit
: ملزمة مفتاح لتقديم المطالبة. إذا تم تعيينها ، فسيتم تعيينها لإدراج سطر جديد. (تقصير: "").models
: قائمة النماذج التي يجب استخدامها:name
: اسم مزود النموذج (على سبيل المثال. "Openai")model
: إما سلسلة من اسم النموذج لاستخدامها أو قائمة أسماء النماذجparams
: جدول المعلمات لتمريره إلى النموذج (على سبيل المثال ، درجة الحرارة ، TOP_P)register_output
: جدول يحتوي على سجل كمفتاح ودالة يأخذ الإخراج الخام من الذكاء الاصطناعى ويؤدي إلى إخراج ما تريد حفظه في هذا السجل. مثال: register_output = {
[ " g " ] = function ( output )
return output
end ,
[ " c " ] = require ( " neoai.utils " ). extract_code_snippets ,
}
cutoff_width
: عند الحقن ، إذا أصبح النص أطول من هذه القيمة ، فيجب أن ينتقل إلى سطر جديد. إذا تم ضبطها على لا شيء ، يتم تجاهل الطول (افتراضي: 75).context_prompt
: وظيفة تقوم بإنشاء المطالبة المراد استخدامها عند استخدام أوضاع السياق. مثال: context_prompt = function ( context )
return " Hi ChatGPT, I'd like to provide some context for future "
.. " messages. Here is the code/text that I want to refer "
.. " to in our upcoming conversations: nn "
.. context
end
open_api_key_env
(deprecated ، استخدم api_key.env
بدلاً من ذلك): متغير البيئة الذي يحتوي على مفتاح API Openai. القيمة الافتراضية هي "openai_api_key".api_key.env
: متغير البيئة الذي يحتوي على مفتاح API Openai. القيمة الافتراضية هي "openai_api_key".api_key.value
: مفتاح API Openai ، والذي يأخذ الأسبقية على api_key .env
.api_key.get
: وظيفة تسترد مفتاح API Openai. لتنفيذ مثال ، راجع قسم الإعداد. لها الأسبقية العليا. mappings
: جدول يحتوي على الإجراءات التالية التي يمكن أن تكون مفاتيح:
select_up
: حدد نافذة الإخراج عندما في نافذة الإدخالselect_down
: حدد نافذة الإدخال عندما تكون في نافذة الإخراج القيمة هي أن مفاتيح (ق) لهذا الإجراءات أو nil
إذا لم يكن هناك إجراء
shortcuts
: مجموعة من الاختصارات. كل اختصار هو جدول يحتوي على:name
: سلسلة. اسم الاختصار ، يمكن أن يؤدي إلى استخدام: neoaishortcutkey
: قيمة keybind للاستماع أو لا شيء إذا لم يكن هناك مفاتيح للاختصار.desc
سلسلة أو لا شيء. وصف keybind إن وجدuse_context
: إذا كان يجب استخدام السياق من التحديد/المخزن المؤقت.prompt
: مطالبة إرسال أو وظيفة لإنشاء موجه لإرساله.modes
: قائمة من الأوضاع لتعيين keybind لأعلى لـ "n" لـ Normal ، "V" لـ Visual.strip_function
: وظيفة الشريط لاستخدامها (اختياري). تبديل الذكية نافذة neoai. إذا تم إغلاق النافذة ، فسيتم فتحها وإرسالها الاختيارية [موجه]. إذا كانت النافذة مفتوحة وتركيزها ، فسيتم إغلاقها ، وأخيراً إذا كانت النافذة مفتوحة ولكنها غير مركزة ، فستركز على النافذة وإرسال [موجه] الاختياري.
تبديل نافذة neoai. إذا تم إغلاق النافذة ، فسيتم فتحها وإرسالها الاختيارية [موجه]. إذا كانت النافذة مفتوحة ، فسيتم إغلاقها.
يفتح نافذة Neoai ويرسل [موجه] الاختياري.
يغلق نافذة Neoai.
تبديل الذكية نافذة neoai مع السياق. إذا تم إغلاق النافذة ، فسيتم فتحها وإرسالها الاختيارية [موجه]. إذا كانت النافذة مفتوحة وتركيزها ، فسيتم إغلاقها ، وأخيراً إذا كانت النافذة مفتوحة ولكنها غير مركزة ، فستركز على النافذة وإرسال [موجه] الاختياري. السياق المستخدم لهذا الأمر هو النص المحدد بصريًا أو المخزن المؤقت بأكمله إذا لم يتم تحديد أي اختيار.
يفتح نافذة neoai مع السياق ويرسل [موجه] الاختياري. السياق المستخدم لهذا الأمر هو النص المحدد بصريًا أو المخزن المؤقت بأكمله إذا لم يتم تحديد أي اختيار.
يغلق نافذة Neoai مع السياق.
يرسل [موجه] إلى الذكاء الاصطناعي ويحقق استجابة الذكاء الاصطناعى مباشرة في المخزن المؤقت دون فتح نافذة neoai.
يرسل [موجه] إلى الذكاء الاصطناعي ويحقق استجابة الذكاء الاصطناعى مباشرة في المخزن المؤقت دون فتح نافذة neoai. سيتم تجريد الاستجابة من كل شيء باستثناء قصاصات الكود.
يرسل [موجه] إلى الذكاء الاصطناعى مع السياق ويحقق استجابة منظمة العفو الدولية مباشرة في المخزن المؤقت دون فتح نافذة neoai. السياق المستخدم لهذا الأمر هو النص المحدد بصريًا أو المخزن المؤقت بأكمله إذا لم يتم تحديد أي اختيار.
يرسل [موجه] إلى الذكاء الاصطناعى مع السياق ويحقق استجابة الذكاء الاصطناعى مباشرة في المخزن المؤقت دون فتح نافذة neoai. سيتم تجريد الاستجابة من كل شيء باستثناء قصاصات الكود. السياق المستخدم لهذا الأمر هو النص المحدد بصريًا أو المخزن المؤقت بأكمله إذا لم يتم تحديد أي اختيار.
يؤدي إلى اختصار Neoai الذي يتم إنشاؤه في التكوين عبر اسمه بدلاً من ربط المفاتيح.
مرخصة بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. تحقق من ملف الترخيص للحصول على التفاصيل.