Abbey هي واجهة منظمة العفو الدولية مع أجهزة الكمبيوتر المحمولة والدردشة الأساسية والمستندات ومقاطع فيديو YouTube والمزيد. إنه ينظم مجموعة متنوعة من نماذج الذكاء الاصطناعى في حزمة خاصة مستضافة ذاتي. يمكنك تشغيل Abbey كخادم لعدة مستخدمين يستخدمون مزود المصادقة الخاص بك ، أو يمكنك تشغيله بنفسك على جهازك الخاص. Abbey قابلة للتكوين بشكل كبير ، باستخدام LLMs المختارة ، ونماذج TTS ، ونماذج OCR ، ومحركات البحث. يمكنك العثور على نسخة مستضافة من Abbey هنا ، والتي يستخدمها العديد من الطلاب والمهنيين.
وجود أي مشاكل؟ من فضلك ، يرجى نشر مشكلة أو التواصل مع المبدع مباشرة! Twitter DM @gkamer8 ، البريد الإلكتروني [email protected] ، أو بطريقة أخرى ping له - يحب ذلك.
إذا لم يكن Abbey بشكل افتراضي قابلاً للتكوين حسب رغبتك ، وكنت مريحًا في كتابة رمز الكتابة ، فيرجى التفكير في فتح العلاقات العامة مع التحسينات الخاصة بك! إضافة عمليات تكامل جديدة وحتى واجهات كاملة واضحة ؛ انظر المزيد من التفاصيل في قسم "المساهمة" أدناه.


docker compose مثبتة. انظر التفاصيل هنا.إذا كان لديك إصدار سابق من Abbey وقمت بنمط "التثبيت الجديد" مع الإعدادات.
يتضمن الإعداد استنساخ/تنزيل هذا الريبو docker compose وإنشاء .env settings.yml . فيما يلي الخطوات:
الخطوة 1: استنساخ / تنزيل هذا المستودع وانتقل داخله.
الخطوة 2: docker-compose.yml بإنشاء ملف يسمى .env للمفاتيح السرية وملف يسمى settings.yml . ثم ، أدخل هذه الملفات مفاتيح / النماذج التي تريد استخدامها. يمكنك العثور على تفاصيل حول كيفية تكوين كل نوع من التكامل خلال هذا ReadMe.
يحتوي ملف .env على أي مفاتيح API أو أسرار أخرى تحتاجها. يجب أيضًا تضمين كلمة مرور لقاعدة بيانات MySQL التي يستخدمها Abbey. .env
MYSQL_ROOT_PASSWORD="my-password"
OPENAI_API_KEY="my-openai-key"
OPENAI_COMPATIBLE_KEY="my-api-key"
ANTHROPIC_API_KEY="my-anthropic-key"
يقوم ملف settings.yml بتكوين Abbey لاستخدام النماذج والخيارات التي تريدها. على الأقل ، يجب استخدام نموذج لغة واحد على الأقل ونموذج التضمين واحد. ضع أفضل النماذج أولاً بحيث يستخدمها Abbey افتراضيًا. على سبيل المثال ، إليك ملف settings.yml يستخدم نماذج من API Openai الرسمي ، واجهة برمجة تطبيقات متوافقة مع Openai ، الأنثروبور ، وولاما:
lms:
models:
- provider: anthropic
model: "claude-3-5-sonnet-20241022"
name: "Claude 3.5 Sonnet" # optional, give a name for Abbey to use
traits: "Coding" # optional, let Abbey display what it's good for
desc: "One of the best models ever!" # optional, let Abbey show a description
accepts_images: true # optional, put true if the model is a vision model / accepts image input
context_length: 200_000 # optional, defaults to 8192
- provider: openai_compatible
model: "gpt-4o"
accepts_images: true
context_length: 128_000
- provider: ollama
model: "llama3.2"
openai_compatible:
url: "http://host.docker.internal:1234" # Use host.docker.internal for services running on localhost
ollama:
url: "http://host.docker.internal:11434" # Use host.docker.internal for services running on localhost
embeds:
models:
- provider: "openai"
model: "text-embedding-ada-002"
وبالنظر إلى أنك وضعت أيضًا المفاتيح ذات الصلة في .env ، سيكون هذا ملف إعدادات كاملة. لتكوين النماذج المختلفة ، محركات البحث ، خدمات المصادقة ، نماذج النص إلى كلام ، إلخ: يرجى البحث عن الوثائق المناسبة أدناه!
الخطوة 3: إذا كنت لا تزال تلعب مع إعداداتك ، فيمكنك تشغيل Abbey في وضع DEV بمجرد استخدام:
docker compose up
في وضع DEV ، عند تغيير الإعدادات / الأسرار الخاصة بك ، تحتاج فقط إلى إعادة تشغيل الحاويات للحصول على إعداداتك لتطبيقها ، والتي يمكن القيام بها مع:
docker compose restart backend frontend celery db_pooler
بمجرد أن تكون جاهزًا ، يمكنك تشغيل Abbey في وضع الإنتاج لإعطاء أداء أفضل:
docker compose -f docker-compose.prod.yml up --build
إذا كنت ترغب في تغيير الإعدادات / الأسرار في وضع Prod ، فأنت بحاجة إلى إعادة بناء الحاويات:
docker compose down
docker compose -f docker-compose.prod.yml up --build
الخطوة 4: الآن يجب أن يعمل Abbey على http://localhost:3000 ! ما عليك سوى زيارة عنوان URL هذا في متصفحك لبدء استخدام Abbey. في وضع DEV ، قد يستغرق تحميل ثانية.
لاحظ أن الواجهة الخلفية تعمل في http://localhost:5000 - إذا ذهبت إلى هناك ، فيجب أن ترى غنائيًا من Gilbert و Sullivan's HMS Pinafore. إذا لم يكن كذلك ، فإن الواجهة الخلفية لا تعمل.
إذا كان هناك شيء لا يعمل بشكل صحيح ، فيرجى (من فضلك) تقديم مشكلة أو التواصل مع المبدع مباشرة - @gkamer8 على Twitter أو [email protected] عبر البريد الإلكتروني.
بشكل افتراضي ، يعمل Abbey على مضيف LocalHost في Ports 3000 للواجهة الأمامية و 5000 للواجهة الخلفية. إذا كنت ترغب في تغيير هذه (بما أنك ذكي تقنية إلى حد ما) ، فستحتاج إلى تعديل ملف Docker الخاص بك ، ثم إضافة هذا إلى settings.yml الخاصة بك.
services:
backend:
public_url: http://localhost:5000 # Replace with your new user-accessible BACKEND URL
internal_url: http://backend:5000 # This probably won't change - it's where the frontend calls the backend server side, within Docker
frontend:
public_url: http://localhost:3000 # Replace with your new user-accessible FRONTEND URL
تأكد من تحديث ملف Docker الخاص بك عن طريق ، على سبيل المثال ، تغيير تعيين المنفذ للواجهة الخلفية إلى 1234: 5000 ، في حالة تغيير المنفذ. تأكد من تبديله للحصول على ملف Docker-Cormse ( docker-compose.prod.yml لبناء prod ، docker-compose.yml for dev). إليك ما سيبدو عليه الواجهة الخلفية:
backend:
# ... some stuff
ports:
- "1234:5000" # now the backend is at http://localhost:1234 in my browser
# ... some stuff
عام: تأكد من أن جميع حاويات Docker تعمل بالفعل مع docker ps . يجب أن ترى 6: الواجهة الخلفية ، الواجهة الأمامية ، الكرفس ، redis ، mysql ، و db_pooler (آسف أن هناك الكثير - يمكن لـ Abbey القيام بمهام الذكاء الاصطناعى في الخلفية وفي خيوط متعددة ، والتي تستلزم حاويات pooler و redis و celery). إذا لم يتم تشغيل المرء ، فحاول إعادة تشغيله باستخدام docker compose restart backend (أو الواجهة الأمامية ، أو الكرفس ، أو ماذا لديك). إذا استمرت في الانهيار ، فهناك فرصة جيدة لأن تكون قد أفسدت settings.yml .env خلاف ذلك ، انظر إلى السجلات.
Docker Config غير صالح: إذا كان يخبرك أن Docker الخاص بك غير صالح ، فربما تحتاج إلى ترقية Docker على جهازك إلى شيء ما> = الإصدار 2. يستفيد Abbey من بعض ميزات Docker جديدة نسبيًا مثل الافتراضيات لمتغيرات ENV وملفات التعريف. سيكون من الأسهل فقط ترقية Docker على المدى الطويل - الثقة.
تبدو الأمور فارغة / لا تتحمل / طلبات إلى الواجهة الخلفية لا يبدو أنها تعمل بشكل صحيح. أولاً ، انتقل إلى الواجهة الخلفية في المتصفح ، مثل http://localhost:5000 أو أي عنوان URL الذي وضعته في الأصل. يجب أن تعطيك رسالة مثل "القطران البريطاني هو روح مرتفعة ..." إذا رأيت ذلك ، فإن النسخ الاحتياطي قيد التشغيل ولكن تكوين عنوان URL للواجهة الخلفية خاطئ أو غير مكتمل (هل كنت تلعب معها؟). إذا لم يتم تشغيل الواجهة الخلفية الخاصة بك ، فتحقق من سجلات Docker لمزيد من المعلومات - يرجى قراءة ما يقولون!
تتعثر Docker في تنزيل/تثبيت/تشغيل صورة. هناك احتمال أن تنفد من المساحة على جهازك. أولاً ، حاول تشغيل docker system prune لتنظيف أي أشياء سيئة في Docker التي نسيتها. ثم حاول مسح المساحة على جهاز الكمبيوتر الخاص بك - ربما بما يكفي لـ ~ 10 جيجابايت على جهازك. ثم أعد تشغيل Docker وحاول مرة أخرى. إذا كنت لا تزال تحصل على مشكلات - حاول إلغاء تثبيت / إعادة تثبيت Docker.
يرفض الأمر docker compose الركض بسبب مشكلة "API" أو شيء من هذا القبيل. إذا كان Docker قيد التشغيل (Docker Desktop على Mac ، على سبيل المثال) ، فيجب عليك إعادة تشغيله. إذا لم يساعد ذلك ، فحاول تطهير/تنظيف بياناته قبل إعادة التشغيل (انقر فوق أيقونة "Bug" في سطح المكتب Docker إذا كان لديك - راجع بيانات clean/purge ). إذا لم يكن Docker قيد التشغيل ، فهذه مشكلتك! تحتاج إلى التأكد من تشغيل Docker Daemon (IE Docker Desktop على MAC).
يتم استخدام الميناء بالفعل. يعمل الدير الخلفي على المنفذ 5000 افتراضيًا ؛ تعمل الواجهة الأمامية Abbey على المنفذ 3000. من الممكن أن يستخدم شيء ما على جهاز الكمبيوتر الخاص بك بالفعل المنفذ 5000 أو المنفذ 3000. على جهاز Mac الذي يعني عادة البث. يجب أن يكون هدفك هو التحقق مما إذا كان هناك أي شيء يعمل على المنافذ 3000 أو 5000 ، وإذا كان الأمر كذلك ، لإغلاق هذه العمليات. على Mac/Linux: استخدم lsof -i :5000 أو lsof -i :3000 للتحقق مما إذا كانت أي عملية تعمل على تلك المنافذ. إذا لاحظت عملية مثل "Controlce" تعمل على Mac ، فهذا يعني "مركز التحكم" ، وربما يكون ذلك أمرًا مستقبلاً. يمكنك الذهاب إلى إعدادات النظام الخاصة بك على Mac وإلغاء تحديد "AirPlay Receiver". إذا وجدت شيئًا آخر ، فيمكنك قتله مع kill -9 YOUR_PID حيث يتم استبدال YOUR_PID بمعرف العملية (كما هو موضح باستخدام LSOF). على Windows: استخدم netstat -ano | findstr :5000 أو netstat -ano | findstr :3000 . يمكنك بعد ذلك قتل العملية باستخدام taskkill /PID YOUR_PID /F - استبدال YOUR_PID بمعرف العملية للعملية ذات الصلة.
تتم إدارة تكامل الجهات الخارجية في الإعدادات والملفات المتغيرة للبيئة. فيما يلي ملخص لأولئك المتاحين:
نماذج اللغة (LMS)
نماذج التضمين (التضمين)
نص إلى كلام (TTS)
التعرف على الأحرف البصرية (OCR)
محركات البحث (الويب)
https://api.bing.microsoft.com/v7.0/search )تخزين الملفات (التخزين)
file-storage المحلي (افتراضي)المصادقة
تتطلب بعض التكامل التكوين في الإعدادات. إذا كنت تستخدم أيًا من التكامل التالي ، فيجب عليك تحديد إعداداتها مثل ذلك:
s3:
bucket: 'your-bucket'
searxng:
url: "http://host.docker.internal:8080" # Replace with your URL
ollama:
url: "http://host.docker.internal:11434" # Replace with your URL
openai_compatible:
url: "http://host.docker.internal:12345" # Replace with your URL
هذه تذهب في embeds settings.yml lms
يتم تكوين نماذج اللغة تحت lms في settings.yml . يمكنك تحديد نماذج اللغة من أي مزود ترغب في دعمه ، بالإضافة إلى الإعدادات الافتراضية التي يتم استخدامها وراء الكواليس لأشياء مثل توليد الاختبارات والملخصات واقتراح الأسئلة. يجب أن يكون لديك LM واحد على الأقل ليعمل Abbey بشكل صحيح. تذكر تكوين إعدادات الموفر ذات الصلة إذا لزم الأمر كما هو موضح أعلاه.
lms:
defaults: # all are optional, use the optional "code" you specify to refer to each model, or use "model-provider" like "gpt-4o-openai"
chat: "llama3.2-ollama" # User chat model (user can change) - defaults to first listed model
fast: "llama3.2-ollama" # Fastest model, used for suggested questions and other places - defaults to chat model
high_performance: "gpt-4o" # Your best language model, used for generating curricula - defaults to default chat model
long_context: "gpt-4o" # Model used in long-context situations - defaults to longest context model specified
balanced: "claude-3-5-sonnet-anthropic" # Model that is in the middle for speed / accuracy - defaults to default chat model
fast_long_context: "gpt-4o-mini-openai" # A long context model that's fast, defaults to long_context model, used for summaries / key points
alt_long_context: "claude-3-5-sonnet" # A long context model used for variation in things like question generation - default to long_context
models:
- provider: openai # required - see below table for options
model: "gpt-4o" # required, code for the API
context_length: 128_000 # optional (defaults to 4096)
supports_json: true # optional, defaults to false
accepts_images: true # optional, defaults to false
name: "GPT-4o" # optional display name for the model
desc: "One of the best models ever!" # optional, lets Abbey display a description
code: "gpt-4o" # optional - defaults to 'model-provider' like 'gpt-4o-openai' - used to specify defaults above.
disabled: false # optional
# Specify more in a list...
يعطي هذا الجدول رمز المزود لكل مزود واسم مفتاح API ذي الصلة لوضعه في .env :
| مزود | رمز المزود | اسم مفتاح API | احتياجات إعداد مزود |
|---|---|---|---|
| Openai | Openai | openai_api_key | لا |
| الإنسان | الإنسان | أنثروبريك _api_key | لا |
| أولاما | أولاما | نعم | |
| Openai متوافق | Openai_Compatible | openai_compatible_key | نعم |
يتم تكوين نماذج النص إلى نماذج الكلام تحت tts في settings.yml . يمكنك تحديد نماذج TTS من أي مزود ترغب في دعمه ، بالإضافة إلى الافتراضي. نماذج TTS اختيارية تماما. تذكر تكوين إعدادات الموفر ذات الصلة إذا لزم الأمر كما هو موضح أعلاه.
tts:
default: "openai_onyx"
voices:
- provider: openai # required
voice: "onyx" # required
model: "tts-1" # required
name: "Onyx" # optional
desc: "One of the best models ever!" # optional
code: "openai_onyx" # optional, to set a default via a code (defaults to "voice-model-provider")
sample_url: "https://public-audio-samples.s3.amazonaws.com/onyx.wav" # optional
disabled: false # optional
| مزود | رمز المزود | اسم مفتاح API | احتياجات إعداد مزود |
|---|---|---|---|
| Openai | Openai | openai_api_key | لا |
| أحد عشر | Eleven_labs | Eleven_labs_api_key | لا |
| Openai متوافق | Openai_Compatible | openai_compatible_key | نعم |
يتم تكوين نماذج التضمين تحت embeds في settings.yml . في الوقت الحالي ، يتم استخدام نموذج التضمين الإلزامي الواحد بالضبط عبر الدير في وقت واحد. يتم استخدام نماذج التضمين للبحث على المستندات. تذكر تكوين إعدادات الموفر ذات الصلة إذا لزم الأمر كما هو موضح أعلاه.
embeds:
models:
- provider: "openai" # required
model: "text-embedding-ada-002" # required
| مزود | رمز المزود | اسم مفتاح API | احتياجات إعداد مزود |
|---|---|---|---|
| Openai | Openai | openai_api_key | لا |
| أولاما | أولاما | نعم | |
| Openai متوافق | Openai_Compatible | openai_compatible_key | نعم |
يتم تكوين محركات البحث تحت web في settings.yml . يتم استخدامها عند التحقق من Use Web عند الدردشة على Abbey. تذكر تكوين إعدادات الموفر ذات الصلة إذا لزم الأمر كما هو موضح أعلاه.
web:
engines:
- provider: "bing" # required
# TO USE SEARXNG, MAKE SURE YOUR SEARXNG SETTINGS ARE CORRECT - SEE [BELOW](#searxng)
- provider: "searxng"
- engine: "pubmed" # Only used for SearXNG - leave blank to search over all engines you've enabled
- provider: "searxng"
engine: "arxiv"
use_pdf: true # Some SearXNG engines give PDF URLs - this tells Abbey to go to the PDF rather than the regular result
| مزود | رمز المزود | اسم مفتاح API | احتياجات إعداد مزود |
|---|---|---|---|
| بنغ | بنغ | bing_api_key | لا |
| searxng | searxng | نعم |
Searxng لا يسمح افتراضيًا بالوصول إلى واجهة برمجة التطبيقات. عند تشغيل مثيل searxng الخاص بك ، يجب عليك التأكد من أن إعدادات searxng الخاصة بك (وليس في ريبو Abbey ، ولكن في searxng/settings.yml ) السماح JSON كتنسيق ، مثل:
search:
formats:
- html
- json
يمكنك التأكد من أن مثيل SEARXNG يعمل بشكل صحيح عندما يعمل طلب CURL التالي (استبدل عنوان URL بعنوان URL لمثيل SEARXNG - قد يكون المنفذ مختلفًا.)
curl -kLX GET --data-urlencode q='abbey ai' -d format=json http://localhost:8080
يتم تكوين واجهات برمجة تطبيقات التعرف على الأحرف البصرية تحت ocr في settings.yml . بشكل افتراضي ، لا يتم استخدام OCR. يتيح تكوين OCR اختياريًا قراءة PDFs الممسوحة ضوئيًا. يحدد Abbey تلقائيًا ما إذا كان OCR يبدو مطلوبًا.
ocr:
models:
- provider: "mathpix"
| مزود | رمز المزود | أسماء مفاتيح API | احتياجات إعداد مزود |
|---|---|---|---|
| Mathpix | Mathpix | MathPix_API_APP و MathPix_API_KEY | لا |
يتم تكوين واجهات برمجة التطبيقات للبريد الإلكتروني ضمن email في settings.yml . يتيح تكوين البريد الإلكتروني Abbey إرسال روابط إلى الأصول على Abbey عند مشاركتها ، بالإضافة إلى بضع ظروف أخرى. افتراضيًا ، لا يرسل Abbey رسائل البريد الإلكتروني. تشغيل Abbey مع ملف تعريف البريد الإلكتروني (مثل docker compose up --profile email ) يتيح لـ Abbey إرسال رسائل بريد إلكتروني إضافية تذكير لبعض القوالب.
email:
default: smtp # Refer to each service by its provider name (defaults to first specified)
services:
- provider: sendgrid # Required
email: "[email protected]" # Required
unsub_group: 24624 # Optional, only for Sendgrid
- provider: smtp # Regular email
email: "[email protected]"
| مزود | رمز المزود | أسرار إلزامية | احتياجات إعداد مزود |
|---|---|---|---|
| SendGrid | SendGrid | sendGrid_API_Key | لا |
| البريد الإلكتروني SMTP | SMTP | smtp_server ، smtp_port ، smtp_email ، و smtp_password | لا |
يتم تكوين واجهات برمجة تطبيقات تخزين الملفات تحت storage في settings.yml . بشكل افتراضي ، يقوم Abbey بتخزين جميع الملفات التي تم تحميلها في مجلد file-storage المكتوب. عند النسخ الاحتياطي للدير ، يجب عليك النسخ الاحتياطي لهذا المجلد بالإضافة إلى قاعدة البيانات. إذا كنت ترغب في استخدام S3 ، يمكنك استخدام ما يلي:
storage:
default: s3 # All new uploads go to the default provider (you don't need to set up local)
locations:
- provider: s3
| مزود | رمز المزود | أسماء مفاتيح API | احتياجات إعداد مزود |
|---|---|---|---|
| S3 | S3 | AWS_ACCESS_KEY و AWS_SECRET_KEY | لا |
| محلي | محلي | لا |
يتم تكوين مقدمي المصادقة تحت auth في settings.yml . بشكل افتراضي ، سيستخدم Abbey مستخدمًا "افتراضيًا" واحد. يتيح إعداد مقدمي المصادقة الإضافيين إعدادات متعددة المستخدمين. يمكنك استخدام مزود OAUTH2 مثل Google ، أو يمكنك استضافة مثيل KeyCloak (التعليمات أدناه). لمقدمي الخدمات مثل Google و Github ، ستحتاج إلى سر العميل ومعرف العميل. عند تسجيل Abbey ، قد تضطر إلى توفير عنوان URL حيث يمكن الوصول إلى Abbey - سيكون ذلك http://localhost:3000 افتراضيًا ، أو أي عنوان URL العام الذي تستخدمه في واجهة Abbey.
auth:
providers:
- google
- github
- keycloak
| مزود | رمز المزود | متغيرات البيئة | كيفية الحصول على معرف العميل / السر |
|---|---|---|---|
| جوجل | جوجل | google_client_id و google_secret | انظر هنا |
| جيثب | جيثب | github_client_id و github_secret | انظر هنا |
| keycloak | keycloak | keycloak_public_url ، keycloak_internal_url ، keycloak_realm ، keycloak_secret ، و keycloak_client_id | انظر أدناه |
في بيئات الإنتاج ، يجب عليك أيضًا توفير أسرار مصادقة إضافية للتعامل مع الرموز المميزة. قم بذلك عن طريق إضافة ما يلي إلى ملف البيئة الخاص بك:
CUSTOM_AUTH_SECRET="my-auth-secret"
REFRESH_TOKEN_SECRET="my-refresh-secret"
يمكنك المصادقة ذاتية الاستضافة بالكامل باستخدام keycloak. يتطلب استخدام keycloak مع Abbey إعدادات معينة - على سبيل المثال ، يجب تحديد عنوان URL للواجهة الأمامية للعالم للسماح لـ Abbey و KeyCloak بالتشغيل في نفس Docker VM. إذا كان لديك مثيل KeyCloak موجود ، فيجب عليك إنشاء عميل جديد لـ Abbey مع معرف العميل وسرية العميل التي تضعها في .env . خلاف ذلك ، فيما يلي الإرشادات إعداد مثيل جديد لـ Abbey:
فيما يلي ملف keycloak-realm.json يمكنك وضعه بجوار ملف docker-compose الذي يقوم بإعداد keycloak تلقائيًا:
{
"realm": "abbey-realm",
"enabled": true,
"loginWithEmailAllowed": true,
"duplicateEmailsAllowed": false,
"registrationEmailAsUsername": true,
"attributes": {
"frontendUrl": "http://localhost:8080"
},
"clients": [
{
"clientId": "abbey-client",
"enabled": true,
"protocol": "openid-connect",
"publicClient": false,
"secret": "not-a-secret",
"redirectUris": ["http://localhost:3000/*"]
}
],
"users": [
{
"username": "[email protected]",
"email": "[email protected]",
"enabled": true,
"emailVerified": true,
"credentials": [
{
"type": "password",
"value": "password"
}
]
}
]
}
فيما يلي خدمة مثال يمكنك تشغيلها جنبًا إلى جنب في ملف docker-compose.yml :
services:
keycloak:
image: quay.io/keycloak/keycloak:22.0.3
container_name: keycloak
environment:
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
ports:
- 8080:8080
volumes:
- ./keycloak-realm.json:/opt/keycloak/data/import/myrealm.json
command: ["start-dev", "--import-realm"]
volumes:
keycloak_data:
يتطلب keycloak أيضًا بعض الأسرار الإضافية في .env :
# The Public URL should be user accessible
KEYCLOAK_PUBLIC_URL="http://localhost:8080"
# The optional Internal URL should be accessible within Docker
KEYCLOAK_INTERNAL_URL="http://keycloak:8080"
KEYCLOAK_REALM="abbey-realm"
KEYCLOAK_SECRET="not-a-secret"
KEYCLOAK_CLIENT_ID="abbey-client"
إن إضافة هذه الخدمة + إنشاء ملف keycloak-realm.json + إدخال الأسرار في .env يجب أن يسمح لـ Abbey بـ "العمل فقط" مع KeyCloak في بيئة DEV.
افتراضيًا ، يحتوي Abbey على خدمة MySQL التي يجب عليك تقديم MYSQL_ROOT_PASSWORD في .env . يستخدم Abbey قواعد بيانات ، custom_auth للمصادقة learn لكل شيء آخر. يمكن أن تكون على نفس الخوادم أو مختلفة. اعتبارًا من الآن ، يجب أن يكون الخادم متوافقًا مع MySQL أو MySQL (وليس Postgres).
يمكنك تغيير حيث يتوفر خادم MySQL ، باستخدام متغيرات .env هذه:
MYSQL_ROOT_PASSWORD=my-root-password
# Remember that the endpoint is accessed server side, so "mysql" is the default network name
DB_ENDPOINT=mysql
DB_USERNAME=root
DB_PASSWORD=my-root-password
DB_PORT=3306
DB_NAME=learn
DB_TYPE=local # 'local' or 'deployed' --> changes how app deals with transaction settings
# You should set global transaction isolation level to READ COMMITTED when using your own database
CUSTOM_AUTH_DB_ENDPOINT=mysql
CUSTOM_AUTH_DB_USERNAME=root
CUSTOM_AUTH_DB_PASSWORD=my-root-password
CUSTOM_AUTH_DB_PORT=3306
CUSTOM_AUTH_DB_NAME=custom_auth
عند بدء تشغيل خدمة MySQL الافتراضية ، ستهيئة نفسها باستخدام الملفات الموجودة داخل mysql-init . إذا قمت بإعداد خدمة MySQL الخاصة بك ، فأنت تقوم بتهيئة قواعد / جداول البيانات ذات الصلة عن طريق تشغيل ملفات .sql (النسخ واللصق إلى محطة ما يكفي).
قد تلاحظ أنه على الصفحة الرئيسية (أثناء توقيعه) ، فإن الجانب الأيمن لديه صورة ووصف. عند تهيئة قاعدة البيانات ، هناك صورة واحدة ستظهر هناك افتراضيًا (يتم استضافتها على الإنترنت). لتغيير تلك الصورة ، أو لإضافة المزيد ، تحتاج إلى إضافة إدخالات إلى جدول Art_History في قاعدة بيانات Learn (في خدمة MySQL). هناك وضعت عنوان URL للصورة والتخفيض للوصف. الحالات (النطاق) حيث يتم استضافة الصورة تحتاج أيضًا إلى إدراجها في settings.yml .
images:
domains:
- "my-domain.com"
لإضافة الإدخال إلى Art_History ، تحتاج إلى تنفيذ بعض SQL. مع Docker-Corm ، يمكنك استخدام:
docker-compose exec mysql mysql -u root -p
ثم استخدم كلمة مرور الجذر MySQL (متوفر في ملف .env الموجود في جذر المشروع). بعد ذلك ، ستحتاج إلى التنفيذ:
use learn;
INSERT INTO art_history (`markdown`, `image`)
VALUES ('This is my *description*', 'https://my-domain.com/image.webp');
يتم تحديد صورة عشوائيًا لعرضها من جدول art_history .
يمكنك تغيير اسم Abbey إلى كل ما تحب استخدام هذا الخيار في settings.yml .
name: "Abbey" # Replace with your chosen name
توجد علامات تجارية أخرى مثل الشعارات ، والمخدرات ، وما إلى ذلك في frontend/public . يمكنك تغييرها عن طريق استبدال الملفات (ولكن الاحتفاظ بأسمائها). صور الخلفية في frontend/public/random .
افتراضيًا ، سيقوم Abbey بتطوير عنوان URL المتشددين عندما تبدأ الواجهة الاحتياطية وبعد ذلك. يتم ذلك لتتبع إحصائيات الاستخدام. إصدار الواجهة الخلفية التي تقوم بها بالإضافة إلى settings.yml يتم تضمينها في Ping. لتعطيل ping ، ضع ما يلي في settings.yml .
ping: false
نظرًا لأنني لا أستطيع معرفة الفرق بين المستخدم الذي قام بتعيين ping: false والمستخدم الذي توقف عن استخدام Abbey ، فكر في التواصل مع [email protected] حتى أتمكن من الحصول على عدد تقريبي من المستخدمين الذين يعانون من Ping.
واحدة من نقاط القوة الرئيسية في Abbey هي قابلية توسيعها. يمكنك تنفيذ عمليات تكامل وواجهات جديدة مباشرة.
كل نوع من التكامل باستثناء Auth (انظر الملاحظات أدناه) موجود في ملف في backend/app/integrations . كل نوع من التكامل ينفذ فئة محددة (على سبيل المثال ، يعطي lm.py فئة LM ، ويقوم كل نوع من التكامل بتنفيذ تلك الفئة). يمكنك ببساطة إضافة فئة ترث من الفئة الأساسية (LM ، TTS ، OCR ، إلخ). بعد ذلك ، يجب عليك إضافة فصلك إلى قاموس PROVIDER_TO_ (هناك واحد مختلف لكل نوع من أنواع التكامل). بالنسبة للتكاملات التي يمكن اختيارها من قبل المستخدم ، يجب أن يطفو تلقائيًا بمجرد إجراء التغيير المناسب في settings.yml . بالنسبة للتكامل مثل embed الذي يتم اختياره بواسطة Abbey افتراضيًا ، يجب عليك التأكد من أن التكامل الخاص بك هو الافتراضي في settings.yml .
إذا كان التكامل الخاص بك يعتمد على الأسرار ، فيجب عليك إضافته إلى backend/app/configs/secrets.py lm.py
على عكس التكامل الآخر ، إذا كنت ببساطة تضيف مزود OAUTH2 ، فلا يوجد في الواقع أي سبب لفعل أي شيء على الإطلاق على الواجهة الخلفية. خادم Frontend Frontend Next.js يعالج كل شيء. ما عليك فعله هو:
frontend/src/pages/api/auth/[...auth].js . أبسط مثال هو فئة Googleauth (تمديد BASEAUTH) التي توفر ثلاثة عناوين URL: نقطة نهاية مصادقة OAUTH2 ؛ نقطة نهاية الرمز المميز OAUTH2 ؛ و OpenId Connect info info info infoort. نظرًا لأن GitHub لا يقوم بتطبيق Connect OpenID القياسي ، فإنه ينفذ وظيفة getUserData () مباشرة.authProviders استنادًا إلى توفر الأسرار.frontend/src/auth/custom.js . أولاً ، هذا يعني الدفع إلى enabledProviders رمز مزودك الجديد بشكل مشروط بناءً على ما إذا كان يتم تعيين متغير البيئة على 1 (يجب أن يبدأ متغير البيئة بـ Next_public بحيث يكون متاحًا من جانب العميل). ثانياً ، هذا يعني إضافة كائن إلى قائمة providers التي تحدد رمز المزود وقيمة الزر الخاصة بك (يمكنك إضافة شعار مزودك باتباع النمط وإضافة الشعار إلى frontend/public/random ). ملاحظة واحدة على محركات البحث: بعض وظائف الفئة لمحرك البحث إرجاع كائنات البحث المخصصة ؛ يتم تنفيذ الفئات ذات الصلة في web.py ، ويجب أن تلقِ نظرة إذا اخترت تنفيذ تكامل محرك بحث جديد.
في Abbey ، كل شيء هو "أصول" ، وكل أصل ينفذ "قالب". على سبيل المثال ، إذا قمت بتحميل مستند ، فسيصبح "أصولًا" من document القالب. وبالمثل ، إذا قمت بإنشاء مساحة عمل جديدة ، فسيصبح "أصولًا" من notebook القالب (الاسم الداخلي لمساحة العمل). في الواجهة الأمامية ، يتم تحديد الواجهة المقدمة للمستخدم بواسطة القالب الذي يبحث عنه. هناك مجموعة من المتغيرات الشائعة التي يجب تعيينها لكل قالب (على سبيل المثال ، ما إذا كان القالب مسموحًا بالتحدث معه أم لا ، إذا كان في مجلد أو شيء من هذا القبيل). تحدد هذه المتغيرات والوظائف المنفذة ، من بين أشياء أخرى ، الطريقة التي تتصرف بها /asset/chat .
على الواجهة الخلفية ، جميع القوالب هي فصول ترث من فئة قاعدة Template . توجد هذه القوالب في ملفاتها الخاصة في backend/app/templates . يتم تسجيل القوالب في backend/app/templates.py . يجب عليك إضافة مثيل لقالبك هناك لتمكينه. يجب أيضًا إضافة القالب إلى backend/app/configs/user_config.py . داخل ملف قالب قد يكون أيضًا نقاط نهاية محددة لهذا القالب ؛ إذا اخترت إنشاء واحدة ، فيجب أن يتم تسجيلها في backend/app/__init__.py .
على الواجهة الأمامية ، يتم تنفيذ جميع القوالب في ملف واحد ، frontend/src/template.js . كل قالب هناك فئة ترث من فئة Template . في الجزء السفلي من الملف ، هناك العديد من القوائم والكائنات التي تحدد توفر القالب ؛ يجب على الأقل إضافة القالب الخاص بك إلى كائن TEMPLATES لإتاحته للمستخدمين.
بعض القوالب مثل الأوراق. على سبيل المثال ، لا تحتوي المستندات على مصادر ذات أصول مرتبطة ، مما يعني أنه عند الدردشة مع مستند ، فأنت تتحدث حقًا مع هذا المستند. قوالب أخرى مرتبطة مصادر. على سبيل المثال ، محتويات المجلد هي الأصول المرتبطة. يوجد هذا النظام لقوالب أخرى مثل محرر النصوص ، والتي يمكن أن تصدر المواد من أصول أخرى من خلال وظائف كتابة الذكاء الاصطناعى. إن استخدام المصادر بطريقة متسقة يتأكد من أن الوظائف التي تمتد عبر القوالب ، مثل مشاركة الأصول ، تظل وظيفية. إذا قمت بمشاركة مجلد مع شخص ما ، على سبيل المثال ، تنتشر الأذونات إلى جميع العناصر الموجودة داخل هذا المجلد.
الطريقة القياسية لاسترداد المعلومات حول مصادر الأصول على الواجهة الأمامية هي مع /assets/sources-info نقطة النهاية. الطريقة القياسية لإضافة مصدر إلى أصل هي مع نقاط النهاية /assets/add-resource و /assets/add-resources . تبحث نقاط النهاية هذه عن إدخال في جدول asset_metadata مع retrieval_source المفاتيح _source الذي تعد قيمته معرف الأصول. انظر المزيد من التفاصيل حول نقاط النهاية هذه في backend/app/assets.py .