Abbey ist eine KI -Schnittstelle mit Notizbüchern, grundlegendem Chat, Dokumenten, YouTube -Videos und vielem mehr. Es orchestriert eine Vielzahl von KI-Modellen in einem privaten selbst gehosteten Paket. Sie können Abbey als Server für mehrere Benutzer ausführen, die Ihren eigenen Authentifizierungsanbieter verwenden, oder Sie können es selbst auf Ihrem eigenen Computer ausführen. Abbey ist sehr konfigurierbar und verwendet Ihre ausgewählten LLMs, TTS -Modelle, OCR -Modelle und Suchmaschinen. Hier finden Sie eine gehostete Version von Abbey, die von vielen Studenten und Fachleuten verwendet wird.
Probleme haben? Bitte veröffentlichen Sie bitte ein Problem oder wenden Sie sich direkt an den Schöpfer! Twitter DM @gkamer8, senden Sie eine E -Mail an [email protected] oder auf andere Weise ping ihn - er mag es.
Wenn Abbey nicht standardmäßig konfigurierbar ist und Ihren Geschmack bequem ist, sollten Sie einen PR mit Ihren Verbesserungen eröffnen! Das Hinzufügen neuer Integrationen und sogar vollständige Schnittstellen ist unkompliziert. Weitere Details finden Sie im Abschnitt "beitragen" unten.


docker compose . Siehe Details hier.Wenn Sie eine frühere Version von Abbey haben und zum ersten Mal das "neue Installationsmuster" mit Settings.yml durchführen, ziehen Sie, erstellen Sie eine neue Einstellungen.
Das Setup beinhaltet das Klonen/Herunterladen dieses Repo, das Erstellen docker compose .env und settings.yml . Hier sind die Schritte:
Schritt 1: Klonen / Laden Sie dieses Repository herunter und navigieren Sie darin.
Schritt 2: Erstellen Sie eine Datei mit dem Namen .env für geheime Schlüssel und eine Datei mit dem Namen settings.yml für Konfigurationseinstellungen am Stamm des Repo (dh auf derselben Ebene wie die Datei docker-compose.yml ). Geben Sie dann die Dateien die Tasten / Modelle ein, die Sie verwenden möchten. Sie können Details zum Konfigurieren jeder Integrationsart in diesem Readme finden.
Die .env -Datei enthält alle API -Schlüssel oder andere Geheimnisse, die Sie benötigen. Sie müssen auch ein Kennwort für die MySQL -Datenbank angeben, die Abbey verwendet. A .env -Datei für jemanden, der die offizielle OpenAI -API verwendet, eine openAI -kompatible API, die einen Schlüssel erfordert, und die anthropische API könnte so aussehen:
MYSQL_ROOT_PASSWORD="my-password"
OPENAI_API_KEY="my-openai-key"
OPENAI_COMPATIBLE_KEY="my-api-key"
ANTHROPIC_API_KEY="my-anthropic-key"
Die Datei settings.yml konfiguriert Abbey, um die gewünschten Modelle und Optionen zu verwenden. Zumindest müssen Sie mindestens ein Sprachmodell und ein Einbettungsmodell verwenden. Setzen Sie die besten Modelle zuerst, damit Abbey sie standardmäßig verwendet. Beispielsweise finden Sie hier eine Datei settings.yml .
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"
Und da Sie auch die entsprechenden Schlüssel in .env eingerichtet haben, wäre dies eine vollständige Einstellungsdatei. So konfigurieren Sie verschiedene Modelle, Suchmaschinen, Authentifizierungsdienste, Text-zu-Sprach-Modelle usw.: Bitte suchen Sie nach der entsprechenden Dokumentation unten!
Schritt 3: Wenn Sie immer noch mit Ihren Einstellungen herumspielen, können Sie Abbey im Dev -Modus ausführen, indem Sie einfach:
docker compose up
Wenn Sie Ihre Einstellungen / Geheimnisse ändern, müssen Sie die Container nur neu starten, damit Ihre Einstellungen angewendet werden können. Dies kann mit:
docker compose restart backend frontend celery db_pooler
Sobald Sie fertig sind, können Sie Abbey im Produktionsmodus ausführen, um eine bessere Leistung zu erzielen:
docker compose -f docker-compose.prod.yml up --build
Wenn Sie Ihre Einstellungen / Geheimnisse im Prod -Modus ändern möchten, müssen Sie die Container wieder aufbauen:
docker compose down
docker compose -f docker-compose.prod.yml up --build
Schritt 4: Jetzt sollte Abbey unter http://localhost:3000 laufen! Besuchen Sie diese URL in Ihrem Browser, um Abbey zu verwenden. Im Dev -Modus kann es eine Sekunde dauern, bis sie geladen werden.
Beachten Sie, dass das Backend unter http://localhost:5000 ausgeführt wird - Wenn Sie dorthin gehen, sollten Sie eine Lyric von Gilbert und Sullivans HMS -Pinalfore sehen. Wenn nicht, dann läuft das Backend nicht.
Wenn etwas nicht richtig funktioniert, stellen Sie bitte (bitte) ein Problem ein oder wenden Sie sich direkt an den Ersteller - @gkamer8 unter Twitter oder [email protected] per E -Mail.
Standardmäßig läuft Abbey auf Localhost bei Ports 3000 für das Frontend und 5000 für das Backend. Wenn Sie diese ändern möchten (da Sie ziemlich technisch versiert sind), müssen Sie Ihre Docker -Komponierungsdatei ändern und diese dann zu Ihren settings.yml hinzufügen.
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
Achten Sie darauf, dass Ihre Docker -Komponierungsdatei beispielsweise die Portzuordnung für das Backend auf 1234: 5000 ändern, wenn Sie den Port ändern. Stellen Sie sicher, dass Sie es für die richtige Docker-Compose-Datei ausschalten ( docker-compose.prod.yml für prod-Builds, docker-compose.yml für Dev). So würde das für das Backend aussehen:
backend:
# ... some stuff
ports:
- "1234:5000" # now the backend is at http://localhost:1234 in my browser
# ... some stuff
Allgemein: Stellen Sie sicher, dass alle Docker -Container tatsächlich mit docker ps ausgeführt werden. Sie sollten 6: Backend, Frontend, Sellerie, Redis, MySQL und DB_Pooler sehen (Entschuldigung, dass es so viele gibt - Abbey kann KI -Aufgaben im Hintergrund und in mehreren Threads ausführen, was den Pooler, Redis und Selleriebehälter erforderlich macht). Wenn man nicht ausgeführt wird, starten Sie es mit docker compose restart backend . Wenn es immer wieder abstürzt, besteht eine gute Chance, dass Sie Ihre settings.yml durcheinander gebracht haben .env Ansonsten schauen Sie sich die Protokolle an.
Docker -Konfiguration ungültig: Wenn Sie mitgeteilt werden, dass Ihr Docker -Komponieren ungültig ist, müssen Sie wahrscheinlich Docker auf Ihrem Computer auf etwas aktualisieren. Es wird einfacher sein, Docker auf lange Sicht zu verbessern - Vertrauen.
Die Dinge sehen leer aus / laden / Anfragen in das Backend scheinen nicht ganz richtig zu funktionieren. Navigieren Sie zunächst zum Backend im Browser, http://localhost:5000 oder welche URL, die Sie ursprünglich eingegeben haben. Es sollte Ihnen eine Botschaft wie "Ein britischer Teer ist eine hochfliegende Seele ..." geben, wenn Sie das sehen, dann ist das Backend in Betrieb, aber Ihre Backend -URL -Konfiguration ist falsch oder unvollständig (haben Sie damit herumgespielt?). Wenn Ihr Backend nicht ausgeführt wird, überprüfen Sie die Protokolle in Docker, um weitere Informationen zu erhalten. Lesen Sie bitte, was sie sagen!
Docker bleibt das Herunterladen/Installieren/Ausführen eines Bildes. Es besteht die Möglichkeit, dass Ihnen der Platz auf Ihrer Maschine ausgeht. Versuchen Sie zunächst, docker system prune um alle in Docker herumliegenden bösen Dinge aufzuräumen, die Sie vergessen haben. Versuchen Sie dann, Platz auf Ihrem Computer zu beseitigen - vielleicht genug für ~ 10 GB auf Ihrem Computer. Starten Sie dann Docker neu und versuchen Sie es erneut. Wenn Sie weiterhin Probleme erhalten, versuchen Sie Docker deinstallieren / neu installieren.
Der Befehl docker compose weigert sich, aufgrund eines "API" -Problems oder so etwas auszuführen. Wenn Docker ausgeführt wird (z. B. Docker -Desktop auf Mac), sollten Sie es neu starten. Wenn das nicht hilft, versuchen Sie, die Daten vor dem Neustart zu reinigen/zu reinigen (klicken Sie auf das Symbol "Fehler" im Docker -Desktop, wenn Sie diese haben - und sehen Sie sich die Daten clean/purge an. Wenn Docker nicht läuft, ist das Ihr Problem! Sie müssen sicherstellen, dass der Docker -Daemon (dh der Docker -Desktop auf Mac) ausgeführt wird.
Ein Port wird bereits verwendet. Die Abbey -Backend läuft standardmäßig auf Port 5000; Die Abbey -Frontend läuft auf Port 3000. Es ist möglich, dass etwas auf Ihrem Computer bereits Port 5000 oder Port 3000 verwendet. Auf dem Mac bedeutet dies normalerweise Airplay. Ihr Ziel sollte es sein, zu prüfen, ob irgendetwas auf Ports 3000 oder 5000 läuft, und wenn ja, diese Prozesse zu schließen. Unter Mac/Linux: Verwenden Sie lsof -i :5000 oder lsof -i :3000 um zu überprüfen, ob ein Prozess auf diesen Ports ausgeführt wird. Wenn Sie einen Prozess wie 'Controlce' auf dem Mac bemerken, bedeutet dies "Control Center", und es ist wahrscheinlich eine Airplay -Empfängersache. Sie können Ihre Systemeinstellungen auf Mac und "Airplay Receiver" deaktivieren. Wenn Sie etwas anderes gefunden haben, können Sie es mit kill -9 YOUR_PID töten, wo YOUR_PID durch die Prozess -ID (mit LSOF angezeigt) ersetzt wird. Unter Windows: Verwenden Sie netstat -ano | findstr :5000 oder netstat -ano | findstr :3000 . Sie können den Prozess dann mit taskkill /PID YOUR_PID /F - Ersetzen Sie YOUR_PID durch die Prozess -ID des relevanten Prozesss ab.
Integrationen von Drittanbietern werden in Ihren Einstellungen und Umgebungsvariablendateien verwaltet. Hier finden Sie eine Zusammenfassung der verfügbaren:
Sprachmodelle (LMS)
Einbettungsmodelle (Einbettungen)
Text-to-Speech (TTS)
Optische Charaktererkennung (OCR)
Suchmaschinen (Web)
https://api.bing.microsoft.com/v7.0/search )Dateispeicher (Speicher)
file-storage Ordner (Standard)Authentifizierung
Einige Integrationen erfordern Konfiguration in Settings.yml. Wenn Sie eine der folgenden Integrationen verwenden, müssen Sie die Einstellungen wie SO angeben:
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
Diese liegen an der Wurzel lms settings.yml embeds
Sprachmodelle werden unter lms in settings.yml konfiguriert. Sie können Sprachmodelle von jedem Anbieter angeben, den Sie unterstützen möchten, sowie Standardeinstellungen, die hinter den Kulissen für Dinge wie Quizgenerierung, Zusammenfassungen und Vorschläge von Fragen verwendet werden. Sie müssen mindestens eine LM haben, damit Abbey ordnungsgemäß funktioniert. Denken Sie daran, die relevanten Anbietereinstellungen bei Bedarf wie oben gezeigt zu konfigurieren.
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...
Diese Tabelle gibt den Anbietercode für jeden Anbieter und den entsprechenden API -Schlüsselnamen an .env :
| Anbieter | Anbietercode | API -Schlüsselname | Braucht Anbietereinstellung |
|---|---|---|---|
| Openai | Openai | Openai_api_key | NEIN |
| Anthropisch | anthropisch | Anthropic_api_key | NEIN |
| Ollama | Ollama | Ja | |
| Openai kompatibel | openai_compatible | Openai_compatible_key | Ja |
Text -to -Sprachmodelle sind unter tts in settings.yml konfiguriert. Sie können TTS -Modelle von jedem Anbieter angeben, den Sie unterstützen möchten, sowie einen Standard. TTS -Modelle sind völlig optional. Denken Sie daran, die relevanten Anbietereinstellungen bei Bedarf wie oben gezeigt zu konfigurieren.
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
| Anbieter | Anbietercode | API -Schlüsselname | Braucht Anbietereinstellung |
|---|---|---|---|
| Openai | Openai | Openai_api_key | NEIN |
| Elflabs | elf_labs | Elf_labs_api_key | NEIN |
| Openai kompatibel | openai_compatible | Openai_compatible_key | Ja |
Einbettungsmodelle werden unter embeds in settings.yml konfiguriert. Vorerst wird genau ein obligatorisches Einbettungsmodell in der Abtei gleichzeitig verwendet. Einbettungsmodelle werden verwendet, um Dokumente zu suchen. Denken Sie daran, die relevanten Anbietereinstellungen bei Bedarf wie oben gezeigt zu konfigurieren.
embeds:
models:
- provider: "openai" # required
model: "text-embedding-ada-002" # required
| Anbieter | Anbietercode | API -Schlüsselname | Braucht Anbietereinstellung |
|---|---|---|---|
| Openai | Openai | Openai_api_key | NEIN |
| Ollama | Ollama | Ja | |
| Openai kompatibel | openai_compatible | Openai_compatible_key | Ja |
Suchmaschinen sind unter web in settings.yml konfiguriert. Sie werden verwendet, wenn Sie das Gebrauch verwenden, wenn Sie Use Web , wenn Sie in Abbey chatten. Denken Sie daran, die relevanten Anbietereinstellungen bei Bedarf wie oben gezeigt zu konfigurieren.
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
| Anbieter | Anbietercode | API -Schlüsselname | Braucht Anbietereinstellung |
|---|---|---|---|
| Bing | Bing | Bing_api_key | NEIN |
| Searxng | searxng | Ja |
Searxng erlaubt nicht standardmäßig den API -Zugriff. Wenn Sie Ihre searxng -Instanz ausführen, müssen Sie sicherstellen, dass Ihre searxng -Einstellungen (nicht in Abbeys Repo, sondern in searxng/settings.yml ) JSON als Format erlauben, wie:
search:
formats:
- html
- json
Sie können sicherstellen, dass Ihre searxng -Instanz korrekt funktioniert, wenn die folgende Curl -Anforderung funktioniert (ersetzen Sie die URL durch Ihre Searxng -Instanz -URL - der Port kann unterschiedlich sein.)
curl -kLX GET --data-urlencode q='abbey ai' -d format=json http://localhost:8080
Optische APIs für die Erkennung von Charakteren sind unter ocr in settings.yml konfiguriert. Standardmäßig wird kein OCR verwendet. Optional konfiguriert OCR ermöglicht Abbey, gescannte PDFs zu lesen. Abbey bestimmt automatisch, ob OCR erforderlich erscheint.
ocr:
models:
- provider: "mathpix"
| Anbieter | Anbietercode | API -Schlüsselnamen | Braucht Anbietereinstellung |
|---|---|---|---|
| Mathpix | mathpix | Mathpix_api_app und mathpix_api_key | NEIN |
E -Mail -APIs werden unter email in settings.yml konfiguriert. Das Konfigurieren von E -Mails ermöglicht es Abbey, Links an Assets in Abbey zu senden, wenn sie gemeinsam genutzt werden, und unter einigen anderen Umständen. Standardmäßig sendet Abbey keine E -Mails. Ausführen von Abbey mit dem E -Mail -Profil (wie docker compose up --profile email ) können Abbey zusätzliche Erinnerungs -E -Mails für einige Vorlagen senden.
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]"
| Anbieter | Anbietercode | Obligatorische Geheimnisse | Braucht Anbietereinstellung |
|---|---|---|---|
| Sendgrid | sendgrid | SENDGRID_API_KEY | NEIN |
| SMTP -E -Mail | SMTP | SMTP_SERVER, SMTP_PORT, SMTP_EMAIL und SMTP_PASSWORD | NEIN |
Dateispeicher -APIs werden unter storage in settings.yml konfiguriert. Standardmäßig speichert Abbey alle hochgeladenen Dateien im Ordner mit montiertem file-storage . Wenn Sie Abbey sichern, sollten Sie diesen Ordner plus die Datenbank sichern. Wenn Sie S3 verwenden möchten, können Sie Folgendes verwenden:
storage:
default: s3 # All new uploads go to the default provider (you don't need to set up local)
locations:
- provider: s3
| Anbieter | Anbietercode | API -Schlüsselnamen | Braucht Anbietereinstellung |
|---|---|---|---|
| S3 | S3 | AWS_ACCESS_KEY und AWS_SECRET_KEY | NEIN |
| Lokal | lokal | NEIN |
Authentifizierungsanbieter sind unter auth in settings.yml konfiguriert. Standardmäßig verwendet Abbey einen einzelnen "Standard" -Nutzer. Das Einrichten zusätzlicher Authentifizierungsanbieter ermöglicht Multi-User-Setups. Sie können einen OAUTH2-Anbieter wie Google verwenden oder eine Schlüsselkloakinstanz (Anweisungen unten) selbst aufnehmen. Für Anbieter wie Google und GitHub benötigen Sie eine Client -Geheimnis und eine Client -ID. Bei der Registrierung von Abbey müssen Sie möglicherweise die URL zur Verfügung stellen, in der Abbey zugänglich ist - das wäre standardmäßig http://localhost:3000 oder für die öffentliche URL, die Sie für Abbeys Frontend verwenden.
auth:
providers:
- google
- github
- keycloak
| Anbieter | Anbietercode | Env Variablen | So erwerben Sie Client -ID / Geheimnis |
|---|---|---|---|
| Google_client_id und google_secret | Siehe hier | ||
| Github | Github | Github_client_id und github_secret | Siehe hier |
| Schlüsselcloak | Schlüsselcloak | Keycloak_public_url, keycloak_internal_url, keycloak_realm, keycloak_secret und keycloak_client_id | Siehe unten |
In Produktionsumgebungen sollten Sie auch zusätzliche Auth -Geheimnisse für die Handhabung von Auth -Token bereitstellen. Tun Sie dies, indem Sie Folgendes zu Ihrer Umgebungsdatei hinzufügen:
CUSTOM_AUTH_SECRET="my-auth-secret"
REFRESH_TOKEN_SECRET="my-refresh-secret"
Sie können die Authentifizierung durch die Selbsthostierung vollständig mit Schlüsselkloak selbst veranstalten. Die Verwendung von KeyCloak mit Abbey erfordert bestimmte Einstellungen - beispielsweise muss eine Frontend -URL für das Reich angegeben werden, damit Abbey und Schlüsselkloak in derselben Docker -VM ausgeführt werden können. Wenn Sie über eine vorhandene Schlüsselklok -Instanz verfügen, sollten Sie einen neuen Kunden für Abbey mit einer Kunden -ID und einem Kundengeheimnis erstellen, in dem Sie in .env platziert werden. Andernfalls werden Anweisungen für Abbey eine neue Instanz einrichten:
Hier ist eine keycloak-realm.json -Datei, die Sie neben Ihrer docker-compose Datei platzieren können, die KeyCloak automatisch einstellt:
{
"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"
}
]
}
]
}
Hier finden Sie einen Beispieldienst, den Sie in Ihrer Datei docker-compose.yml Datei zusammenführen können:
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 erfordert auch einige zusätzliche Geheimnisse in .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"
Hinzufügen dieses Dienstes + Erstellen der keycloak-realm.json Datei + Eingabein in Geheimnisse in .env sollte es Abbey ermöglichen, in einer Entwicklerumgebung mit Keycloak zu "arbeiten".
Standardmäßig hat Abbey einen MySQL -Dienst, für den Sie ein MYSQL_ROOT_PASSWORD in .env angeben müssen. Abbey verwendet zwei Datenbanken, custom_auth zur Authentifizierung und learn für alles andere. Sie können auf denselben oder verschiedenen Servern sein. Der Server muss ab sofort MySQL oder MySQL kompatibel sein (nicht nach Postgres).
Sie können ändern, wo der MySQL -Server verfügbar ist, mit diesen .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
Wenn der Standard-MySQL-Dienst gestartet wird, wird sich selbst mithilfe der Dateien in mysql-init selbst initialisiert. Wenn Sie Ihren eigenen MySQL -Dienst einrichten, sollten Sie die relevanten Datenbanken / Tabellen initialisieren, indem Sie diese .sql -Dateien ausführen (kopieren und einfügen, reichen aus).
Sie können feststellen, dass die rechte Seite auf der Homepage (während sich angemeldet) über ein Bild und eine Beschreibung verfügt. Bei der Initialisierung der Datenbank gibt es ein Bild, das dort standardmäßig angezeigt wird (das im Internet gehostet wird). Um dieses Bild zu ändern oder um mehr hinzuzufügen, müssen Sie der Tabelle art_history in der Learn -Datenbank (im MySQL -Dienst) Einträge hinzufügen. Dort setzen Sie eine URL für das Bild und den Markdown für die Beschreibung ein. Die Domänen, in denen das Bild gehostet wird, muss ebenfalls in settings.yml enthalten sein, wie dies:
images:
domains:
- "my-domain.com"
Um den Eintrag in art_history hinzuzufügen, müssen Sie einige SQL ausführen. Mit Docker-Compose können Sie verwenden:
docker-compose exec mysql mysql -u root -p
Verwenden Sie dann Ihr MySQL -Stammkennwort (verfügbar in der .Env -Datei im Stamm des Projekts). Dann müssen Sie ausführen:
use learn;
INSERT INTO art_history (`markdown`, `image`)
VALUES ('This is my *description*', 'https://my-domain.com/image.webp');
Ein Bild wird zufällig ausgewählt, um aus dieser art_history -Tabelle anzuzeigen.
Sie können den Namen von Abbey in alles ändern, was Sie gerne diese Option in settings.yml verwenden:
name: "Abbey" # Replace with your chosen name
Andere Branding wie Logos, Favicons usw. befinden sich in frontend/public . Sie können sie ändern, indem Sie die Dateien ersetzen (aber ihre Namen behalten). Hintergrundbilder befinden sich im Ordner frontend/public/random .
Standardmäßig wird Abbey zu Beginn des Backends eine hartcodierte URL pingen. Dies geschieht, um Verwendungsstatistiken zu verfolgen. Die Backend -Version, in der Sie sich befinden, plus Ihre settings.yml sind im Ping enthalten. Um den Ping zu deaktivieren, geben Sie Folgendes in Ihre settings.yml ein.
ping: false
Da ich den Unterschied zwischen einem Benutzer, der ping: false und einem Benutzer festgelegt hat, der Abbey eingestellt hat, nicht erkennen kann, wenden Sie sich an [email protected], damit ich eine grobe Anzahl von Benutzern erhalten kann, die den Ping deaktivieren.
Eine der Hauptstärken von Abbey ist ihre Extendbarkeit. Sie können neue Integrationen und Schnittstellen direkt implementieren.
Jede Art der Integration mit Ausnahme von Auth (siehe Hinweise unten) befindet sich in einer Datei in backend/app/integrations . Jede Art von Integration implementiert eine bestimmte Klasse (z. B. lm.py gibt eine LM -Klasse an, und jede Art von Integration implementiert diese Klasse). Sie können einfach eine Klasse hinzufügen, die aus der Basisklasse erbt (LM, TTS, OCR usw.). Dann sollten Sie Ihre Klasse zum PROVIDER_TO_ -Wörterbuch hinzufügen (es gibt eine andere für jede Art von Integration). Für Integrationen, die vom Benutzer ausgewählt werden können, sollte es automatisch angezeigt werden, sobald die entsprechende Änderung in settings.yml vorgenommen wurde (z. B. kann ein Benutzer seine Suchmaschine, sein Sprachmodell und sein Text-zu-Sprach-Modell auswählen). Für Integrationen wie embed , die standardmäßig von Abbey ausgewählt werden, sollten Sie sicherstellen, dass Ihre Integration die Standardeinstellung in settings.yml ist.
Wenn Ihre Integration auf Geheimnissen beruht, sollten Sie sie zu backend/app/configs/secrets.py mit dem angegebenen Muster hinzufügen und dann in die Integrationsdatei (z. B. lm.py ) importieren.
Im Gegensatz zu den anderen Integrationen gibt es, wenn Sie einfach einen OAuth2 -Anbieter hinzufügen, tatsächlich keinen Grund, etwas auf dem Flask -Backend zu tun. Der nächste.js Frontend -Server behandelt alles. Was Sie tun müssen, ist:
frontend/src/pages/api/auth/[...auth].js . Das einfachste Beispiel ist die GoogleAuth -Klasse (Erweiterung von BaseAUTh), die drei URLs liefert: einen OAuth2 -Authendpunkt; ein OAuth2 -Token -Endpunkt; und ein OpenID -Benutzerinformationsendpunkt. Da GitHub keine Standard -OpenID -Verbindung implementiert, implementiert es die Funktion getUerData () direkt.authProviders -Variablen, die auf der Verfügbarkeit von Geheimnissen basiert, eine Instanz für diese Anbieterklasse hinzu.frontend/src/auth/custom.js . Erstens bedeutet dies, dass der Code Ihres neuen Anbieters auf enabledProviders aufgenommen wird, basierend darauf, ob eine Umgebungsvariable auf 1 festgelegt ist (die Umgebungsvariable muss mit Next_Public beginnen, damit sie die clientseitige Seite zur Verfügung steht). Zweitens bedeutet dies, dass die providers ein Objekt hinzugefügt wird, in dem Sie Ihren Anbietercode und Ihren Schaltflächenwert angeben (Sie können das Logo Ihres Anbieters hinzufügen, indem Sie dem Muster folgen und das Logo zu frontend/public/random hinzufügen). Ein Hinweis zu Suchmaschinen: Einige Klassenfunktionen für eine Suchmaschine geben benutzerdefinierte Suchobjekte zurück. Die relevanten Klassen sind in web.py implementiert, und Sie sollten einen Blick darauf werfen, wenn Sie eine neue Suchmaschinenintegration implementieren.
In Abtei ist alles ein "Vermögenswert", und jedes Vermögenswert implementiert eine "Vorlage". Wenn Sie beispielsweise ein Dokument hochladen, wird es zu einem "Vermögenswert" des document . Wenn Sie einen neuen Arbeitsbereich erstellen, wird es in ähnlicher Weise zu einem "Asset" des Vorlagen notebook (der interne Name für einen Arbeitsbereich). An der Frontend wird die Schnittstelle, die einem Benutzer zur Verfügung gestellt wird, durch die Vorlage festgelegt, die er sich ansieht. Es gibt eine Klappe von gemeinsamen Variablen, die für jede Vorlage festgelegt werden müssen (z. B. ob die Vorlage mit dem Chatten, wenn sie sich im Ordner befindet oder so ähnlich ist). Diese Variablen und implementierten Funktionen bestimmen unter anderem die Art und Weise, wie allgemeine Endpunkte wie /asset/chat sich verhalten.
Im Backend sind alle Vorlagen Klassen, die aus der Template erben. Diese Vorlagen befinden sich in ihren eigenen Dateien in backend/app/templates . Die Vorlagen sind in backend/app/templates.py registriert. Sie müssen dort eine Instanz Ihrer Vorlage hinzufügen, um sie zu aktivieren. Sie müssen auch die Vorlage zu backend/app/configs/user_config.py hinzufügen. In einer Vorlagendatei kann auch bestimmte Endpunkte für diese Vorlage sein. Wenn Sie eine erstellen, muss es in backend/app/__init__.py registriert sein.
An der Frontend werden alle Vorlagen in einer Datei implementiert, frontend/src/template.js . Jede Vorlage dort gibt es eine Klasse, die aus der Template erbt. Am Ende der Datei befinden sich verschiedene Listen und Objekte, die die Verfügbarkeit der Vorlage bestimmen. Sie müssen Ihre Vorlage zumindest dem TEMPLATES hinzufügen, um den Benutzern sie zur Verfügung zu stellen.
Einige Vorlagen sind wie Blätter; Beispielsweise haben Dokumente keine verknüpften Vermögensquellen, was bedeutet, dass Sie beim Chatten mit einem Dokument wirklich nur mit diesem einen Dokument chatten. Andere Vorlagen haben Quellen verknüpft. Zum Beispiel sind der Inhalt eines Ordners verknüpfte Vermögenswerte. Dieses System existiert für andere Vorlagen wie den Texteditor, der Material mit seiner KI -Schreibfunktionen aus anderen Vermögenswerten beziehen kann. Die Verwendung von Quellen auf konsistente Weise stellt sicher, dass die Funktionalität, die sich über Vorlagen hinweg erstreckt, wie das Teilen von Vermögenswerten, funktionsfähig bleibt. Wenn Sie beispielsweise einen Ordner mit jemandem teilen, werden die Berechtigungen auf alle Elemente in diesem Ordner ausbreiten.
Die Standardmethode, um Informationen über die Quellen eines Vermögenswerts an der Frontend abzurufen, ist der Endpunkt /assets/sources-info Endpunkt. Die Standardmethode zum Hinzufügen einer Quelle zu einem Vermögenswert besteht in den Endpunkten /assets/add-resource und /assets/add-resources . Diese Endpunkte suchen nach einem Eintrag in der Tabelle asset_metadata mit Key retrieval_source , deren Wert eine Asset -ID ist. Weitere Informationen zu diesen Endpunkten finden Sie in backend/app/assets.py .