Abbey เป็นอินเทอร์เฟซ AI พร้อมสมุดบันทึกการแชทขั้นพื้นฐานเอกสารวิดีโอวิดีโอ YouTube และอื่น ๆ มันจัดทำโมเดล AI ที่หลากหลายในแพ็คเกจโฮสต์ส่วนตัว คุณสามารถเรียกใช้ Abbey เป็นเซิร์ฟเวอร์สำหรับผู้ใช้หลายคนโดยใช้ผู้ให้บริการตรวจสอบความถูกต้องของคุณเองหรือคุณสามารถเรียกใช้งานด้วยตัวคุณเองบนเครื่องของคุณเอง Abbey สามารถกำหนดค่าได้สูงโดยใช้ LLM ที่คุณเลือกรุ่น TTS รุ่น OCR และเครื่องมือค้นหา คุณสามารถค้นหา Abbey เวอร์ชันโฮสต์ได้ที่นี่ซึ่งนักเรียนและมืออาชีพหลายคนใช้
มีปัญหา? กรุณาโพสต์ปัญหาหรือติดต่อกับผู้สร้างโดยตรง! Twitter dm @gkamer8, อีเมล [email protected] หรือมิฉะนั้น ping เขา - เขาชอบมัน
หาก Abbey ไม่ได้กำหนดค่าเริ่มต้นตามความชอบของคุณและคุณสามารถเขียนโค้ดได้อย่างสะดวกสบายโปรดพิจารณาเปิดการประชาสัมพันธ์ด้วยการปรับปรุงของคุณ! การเพิ่มการรวมใหม่และแม้กระทั่งอินเทอร์เฟซเต็มรูปแบบนั้นตรงไปตรงมา ดูรายละเอียดเพิ่มเติมในส่วน "บริจาค" ด้านล่าง


docker compose ดูรายละเอียดที่นี่หากคุณมี Abbey เวอร์ชันก่อนหน้าและกำลังทำรูปแบบ "การติดตั้งใหม่" ด้วย settings.yml เป็นครั้งแรกดึงสร้างการตั้งค่าใหม่. yml และ. env ตามที่อธิบายไว้ด้านล่างให้ย้ายไฟล์ของคุณจากแบ็กเอนด์/แอพ/คงที่ไปยังการจัดเก็บไฟล์และสร้างใหม่ด้วย
การตั้งค่าเกี่ยวข้องกับการโคลนนิ่ง/ดาวน์โหลด repo นี้การสร้างไฟล์ .env และ settings.yml ด้วยการรวม AI ที่คุณเลือกจากนั้นเรียกใช้ docker compose เพื่อการพัฒนา (ประสิทธิภาพที่แย่ลง แต่ง่ายต่อการเล่น) หรือการผลิต (ประสิทธิภาพที่ดีขึ้น นี่คือขั้นตอน:
ขั้นตอนที่ 1: โคลน / ดาวน์โหลดที่เก็บนี้และนำทางภายใน
ขั้นตอนที่ 2: สร้างไฟล์ที่เรียกว่า .env สำหรับคีย์ลับและไฟล์ที่เรียกว่า settings.yml สำหรับการตั้งค่าการกำหนดค่าที่รูทของ repo (เช่นในระดับเดียวกับไฟล์ docker-compose.yml ) จากนั้นป้อนคีย์ / รุ่นที่คุณต้องการใช้ในไฟล์เหล่านั้น คุณสามารถค้นหารายละเอียดเกี่ยวกับวิธีการกำหนดค่าการรวมแต่ละประเภทตลอดทั้ง readme นี้
ไฟล์ .env ถือปุ่ม API หรือความลับอื่น ๆ ที่คุณต้องการ คุณต้องรวมรหัสผ่านสำหรับฐานข้อมูล MySQL ที่ Abbey ใช้ ไฟล์ .env สำหรับคนที่ใช้ OpenAI API อย่างเป็นทางการซึ่งเป็น API ที่เข้ากันได้ของ OpenAI ที่ต้องการคีย์และ API มานุษยวิทยาอาจมีลักษณะ:
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 ที่ใช้โมเดลจาก Openai API อย่างเป็นทางการ, API ที่เข้ากันได้ของ OpenAI, มานุษยวิทยาและ Ollama:
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
หากคุณต้องการเปลี่ยนการตั้งค่า / ความลับของคุณในโหมด PRED คุณต้องสร้างคอนเทนเนอร์ใหม่:
docker compose down
docker compose -f docker-compose.prod.yml up --build
ขั้นตอนที่ 4: ตอนนี้ Abbey ควรทำงานที่ http://localhost:3000 ! เพียงแค่เยี่ยมชม URL นั้นในเบราว์เซอร์ของคุณเพื่อเริ่มใช้ Abbey ในโหมด dev อาจใช้เวลาสักครู่ในการโหลด
โปรดทราบว่าแบ็กเอนด์ทำงานที่ http://localhost:5000 - ถ้าคุณไปที่นั่นคุณควรเห็นเนื้อเพลงจาก Gilbert และ HMS Pinafore ของ Sullivan ถ้าไม่เช่นนั้นแบ็กเอนด์จะไม่ทำงาน
หากสิ่งที่ไม่ถูกต้องโปรด (โปรด) ยื่นปัญหาหรือติดต่อกับผู้สร้างโดยตรง - @gkamer8 บน Twitter หรือ [email protected] ทางอีเมล
โดยค่าเริ่มต้น Abbey ทำงานบน LocalHost ที่พอร์ต 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 Compose ของคุณโดยการเปลี่ยนการแมปพอร์ตสำหรับแบ็กเอนด์เป็น 1234: 5000 หากเปลี่ยนพอร์ต ตรวจสอบให้แน่ใจว่าได้สลับมันสำหรับไฟล์ compose นักเทียบท่าที่ถูกต้อง ( docker-compose.prod.yml สำหรับ Prod Builds, docker-compose.yml สำหรับ 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 สามารถทำงาน AI ในพื้นหลังและในหลายเธรด หากไม่มีใครทำงานให้ลองรีสตาร์ทด้วย docker compose restart backend (หรือส่วนหน้าหรือขึ้นฉ่ายหรือคุณมีอะไร) หากมันล่มก็มีโอกาสที่ดีที่คุณจะทำให้ settings.yml ของคุณยุ่งเหยิงหรือลืมที่จะใส่ความลับที่เหมาะสมลงใน .env มิฉะนั้นให้ดูบันทึก
Docker config ไม่ถูกต้อง: หากมันบอกให้คุณฟัง Docker Compose ของคุณไม่ถูกต้องคุณอาจต้องอัพเกรด Docker บนเครื่องของคุณเป็นบางสิ่ง> = เวอร์ชัน 2 Abbey ใช้ประโยชน์จากคุณสมบัตินักเทียบท่าที่ค่อนข้างใหม่เช่นค่าเริ่มต้นสำหรับตัวแปรและโปรไฟล์ Env มันจะง่ายกว่าที่จะอัพเกรด Docker ในระยะยาว - ความไว้วางใจ
สิ่งต่าง ๆ ดูว่างเปล่า / อย่าโหลด / คำขอไปยังแบ็กเอนด์ดูเหมือนจะไม่ถูกต้อง ก่อนอื่นนำทางไปยังแบ็กเอนด์ในเบราว์เซอร์เช่น http://localhost:5000 หรือ URL ใด ๆ ที่คุณใส่ไว้ในตอนแรก มันควรจะให้ข้อความเช่น "tar อังกฤษเป็นวิญญาณที่สูงขึ้น ... " ถ้าคุณเห็นว่าแล้วแบ็กเอนด์ก็เปิดใช้งาน แต่การกำหนดค่า URL แบ็กเอนด์ของคุณผิดหรือไม่สมบูรณ์ (คุณเล่นกับมันหรือไม่) หากแบ็กเอนด์ของคุณไม่ทำงานให้ตรวจสอบบันทึกใน Docker สำหรับข้อมูลเพิ่มเติม - โปรดอ่านสิ่งที่พวกเขาพูด!
Docker ติดขัดดาวน์โหลด/ติดตั้ง/เรียกใช้รูปภาพ มีความเป็นไปได้ที่คุณจะหมดพื้นที่บนเครื่องของคุณ ก่อนอื่นให้ลองใช้ docker system prune เพื่อทำความสะอาดสิ่งที่น่ารังเกียจวางอยู่ใน Docker ที่คุณลืมไปแล้ว จากนั้นลองล้างพื้นที่บนคอมพิวเตอร์ของคุณ - อาจเพียงพอสำหรับ ~ 10GB บนเครื่องของคุณ จากนั้นรีสตาร์ท Docker และลองอีกครั้ง หากคุณยังได้รับปัญหา - ลองถอนการติดตั้ง / ติดตั้งนักเทียบท่าอีกครั้ง
คำสั่ง docker compose ปฏิเสธที่จะทำงานเนื่องจากปัญหา "API" หรืออะไรบางอย่าง หาก Docker กำลังทำงานอยู่ (Docker Desktop บน Mac เป็นต้น) คุณควรรีสตาร์ทใหม่ หากไม่ได้ช่วยลองล้าง/ทำความสะอาดข้อมูลก่อนรีสตาร์ท (คลิกที่ไอคอน "บั๊ก" ในเดสก์ท็อป Docker หากคุณมี - จากนั้นดูข้อมูล clean/purge ) หากนักเทียบท่าไม่ทำงานนั่นคือปัญหาของคุณ! คุณต้องตรวจสอบให้แน่ใจว่า Docker Daemon (เช่น Docker Desktop บน Mac) กำลังทำงานอยู่
มีการใช้พอร์ตแล้ว แบ็กเอนด์ Abbey ทำงานบนพอร์ต 5000 โดยค่าเริ่มต้น Frontend Abbey ทำงานบนพอร์ต 3000 เป็นไปได้ว่ามีบางอย่างในคอมพิวเตอร์ของคุณใช้พอร์ต 5000 หรือพอร์ต 3000 บน Mac ซึ่งมักจะหมายถึงการออกอากาศ เป้าหมายของคุณควรตรวจสอบว่ามีอะไรทำงานบนพอร์ต 3000 หรือ 5,000 และถ้าเป็นเช่นนั้นเพื่อปิดกระบวนการเหล่านั้น บน 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
สิ่งเหล่านี้ไปที่รูทของ settings.yml ในระดับเดียวกับ lms หรือ embeds
แบบจำลองภาษาได้รับการกำหนดค่าภายใต้ 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 | เลขที่ |
| มานุษยวิทยา | มานุษยวิทยา | anthropic_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 สำหรับตอนนี้มีการใช้แบบจำลองการฝังที่บังคับใช้หนึ่งแบบทั่วทั้ง Abbey ในแต่ละครั้ง แบบจำลองการฝังใช้เพื่อค้นหาเอกสาร อย่าลืมกำหนดค่าการตั้งค่าผู้ให้บริการที่เกี่ยวข้องหากจำเป็นตามที่แสดงไว้ด้านบน
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 | BING | bing_api_key | เลขที่ |
| searxng | searxng | ใช่ |
SeArxng ไม่อนุญาตให้เข้าถึง API เมื่อเรียกใช้อินสแตนซ์ searxng ของคุณคุณต้องตรวจสอบให้แน่ใจว่าการตั้งค่า searxng ของคุณ (ไม่ใช่ใน repo ของ 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
API การจดจำอักขระออพติคอลได้รับการกำหนดค่าภายใต้ ocr ใน settings.yml โดยค่าเริ่มต้นจะไม่มีการใช้ OCR เลือกการกำหนดค่า OCR ช่วยให้ Abbey อ่าน PDF ที่สแกนได้ Abbey จะกำหนดโดยอัตโนมัติว่าจำเป็นต้องใช้ OCR หรือไม่
ocr:
models:
- provider: "mathpix"
| ผู้ให้บริการ | รหัสผู้ให้บริการ | ชื่อคีย์ API | การตั้งค่าผู้ให้บริการต้องการ |
|---|---|---|---|
| Mathpix | Mathpix | mathpix_api_app และ mathpix_api_key | เลขที่ |
API อีเมลได้รับการกำหนดค่าภายใต้ 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 | เลขที่ |
API ที่จัดเก็บไฟล์ได้รับการกำหนดค่าภายใต้ storage ใน settings.yml โดยค่าเริ่มต้น Abbey จะเก็บไฟล์ที่อัปโหลดทั้งหมดไว้ในโฟลเดอร์ file-storage ที่ติดตั้ง เมื่อสำรอง Abbey คุณควรสำรองข้อมูลโฟลเดอร์นั้นพร้อมฐานข้อมูล หากคุณต้องการใช้ 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
| ผู้ให้บริการ | รหัสผู้ให้บริการ | ตัวแปร Env | วิธีรับรหัสลูกค้า / ความลับ |
|---|---|---|---|
| google_client_id และ google_secret | ดูที่นี่ | ||
| คนอื่น ๆ | คนอื่น ๆ | github_client_id และ github_secret | ดูที่นี่ |
| กุญแจมือ | กุญแจมือ | 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 ในสภาพแวดล้อมที่ดีที่สุด
โดยค่าเริ่มต้น 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 ในฐานข้อมูลการเรียนรู้ (บนบริการ MySQL) ที่นั่นคุณใส่ URL สำหรับรูปภาพและ markdown สำหรับคำอธิบาย โดเมนที่มีความต้องการโฮสต์ภาพรวมอยู่ใน settings.yml เช่น SO:
images:
domains:
- "my-domain.com"
ในการเพิ่มรายการใน art_history คุณต้องดำเนินการ SQL บางอย่าง ด้วย Docker-compose คุณสามารถใช้:
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
การสร้างแบรนด์อื่น ๆ เช่นโลโก้ Favicons และอื่น ๆ ตั้งอยู่ใน frontend/public คุณสามารถเปลี่ยนได้โดยแทนที่ไฟล์ (แต่เก็บชื่อไว้) ภาพพื้นหลังอยู่ในโฟลเดอร์ frontend/public/random
โดยค่าเริ่มต้น Abbey จะ ping url hardcoded เมื่อแบ็กเอนด์เริ่มต้นขึ้นและแต่ละชั่วโมงหลังจากนั้น สิ่งนี้ทำเพื่อติดตามสถิติการใช้งาน เวอร์ชันแบ็กเอนด์ที่คุณใช้งาน Plus settings.yml รวมอยู่ใน Ping หากต้องการปิดการใช้งาน ping ให้ใส่สิ่งต่อไปนี้ใน settings.yml ของคุณ yml:
ping: false
เนื่องจากฉันไม่สามารถบอกความแตกต่างระหว่างผู้ใช้ที่ตั้งค่า ping: false และผู้ใช้ที่หยุดใช้ Abbey ให้พิจารณาติดต่อกับ [email protected] เพื่อที่ฉันจะได้รับผู้ใช้จำนวนมากที่ปิดการใช้งาน Ping
หนึ่งในจุดแข็งหลักของ Abbey คือการขยายความสามารถ คุณสามารถใช้การรวมและอินเทอร์เฟซใหม่ได้อย่างตรงไปตรงมา
การรวมแต่ละประเภทยกเว้นการรับรองความถูกต้อง (ดูหมายเหตุด้านล่าง) อยู่ในไฟล์ใน 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 ในความเป็นจริงไม่มีเหตุผลที่จะทำอะไรเลยในแบ็กเอนด์ขวด เซิร์ฟเวอร์ส่วนหน้าต่อ Next.js จัดการทุกอย่าง สิ่งที่คุณต้องทำคือ:
frontend/src/pages/api/auth/[...auth].js ตัวอย่างที่ง่ายที่สุดคือคลาส googleauth (ขยาย baseauth) ซึ่งให้สาม URL: จุดสิ้นสุดของ OAuth2 Auth; จุดสิ้นสุดโทเค็น OAuth2; และจุดสิ้นสุดข้อมูลผู้ใช้ OpenID Connect เนื่องจาก GitHub ไม่ได้ใช้การเชื่อมต่อแบบ OpenID มาตรฐานจึงใช้ฟังก์ชัน getUserData () โดยตรงauthProviders ตามความพร้อมของความลับfrontend/src/auth/custom.js อันดับแรกนั่นหมายถึงการผลักดันให้ enabledProviders รหัสของผู้ให้บริการรายใหม่ของคุณตามเงื่อนไขว่าตัวแปรสภาพแวดล้อมถูกตั้งค่าเป็น 1 (ตัวแปรสภาพแวดล้อมต้องเริ่มต้นด้วย next_public เพื่อให้มีไคลเอนต์ที่มีอยู่) ประการที่สองนั่นหมายถึงการเพิ่มวัตถุไปยังรายการ providers ที่ระบุรหัสผู้ให้บริการและค่าปุ่มของคุณ (คุณสามารถเพิ่มโลโก้ของผู้ให้บริการได้โดยทำตามรูปแบบและเพิ่มโลโก้ไปยัง frontend/public/random ) หนึ่งหมายเหตุเกี่ยวกับเครื่องมือค้นหา: ฟังก์ชั่นคลาสบางอย่างสำหรับเครื่องมือค้นหาที่กำหนดเองการค้นหาที่กำหนดเอง; คลาสที่เกี่ยวข้องจะถูกนำไปใช้ใน web.py และคุณควรดูหากคุณเลือกที่จะใช้การรวมเครื่องมือค้นหาใหม่
ใน Abbey ทุกอย่างเป็น "สินทรัพย์" และสินทรัพย์ทุกแห่งใช้ "เทมเพลต" ตัวอย่างเช่นหากคุณอัปโหลดเอกสารมันจะกลายเป็น "สินทรัพย์" ของ document เทมเพลต ในทำนองเดียวกันถ้าคุณสร้างพื้นที่ทำงานใหม่มันจะกลายเป็น "สินทรัพย์" ของ notebook บันทึกเทมเพลต (ชื่อภายในสำหรับพื้นที่ทำงาน) ในส่วนหน้าอินเทอร์เฟซที่ให้กับผู้ใช้จะถูกกำหนดโดยเทมเพลตที่เขาดู มี littany ของตัวแปรทั่วไปที่ต้องตั้งค่าสำหรับแต่ละเทมเพลต (ตัวอย่างเช่นไม่ว่าแม่แบบจะได้รับอนุญาตให้แชทด้วยหรือไม่ถ้ามันอยู่ในโฟลเดอร์หรืออะไรทำนองนั้น) ตัวแปรเหล่านั้นและฟังก์ชั่นที่นำไปใช้จะกำหนดสิ่งอื่น ๆ ในลักษณะที่จุดสิ้นสุดทั่วไปเช่น /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 เพื่อให้ผู้ใช้พร้อมใช้งาน
เทมเพลตบางอย่างก็เหมือนใบไม้ ตัวอย่างเช่นเอกสารไม่มีแหล่งสินทรัพย์ที่เชื่อมโยงซึ่งหมายความว่าเมื่อคุณแชทกับเอกสารคุณกำลังสนทนากับเอกสารฉบับนั้นอย่างแท้จริงเท่านั้น เทมเพลตอื่น ๆ มีแหล่งเชื่อมโยง ตัวอย่างเช่นเนื้อหาของโฟลเดอร์เป็นสินทรัพย์ที่เชื่อมโยง ระบบนี้มีอยู่สำหรับเทมเพลตอื่น ๆ เช่นตัวแก้ไขข้อความซึ่งสามารถจัดหาวัสดุจากสินทรัพย์อื่น ๆ ด้วยฟังก์ชั่นการเขียน AI การใช้แหล่งข้อมูลในวิธีที่สอดคล้องกันทำให้แน่ใจว่าฟังก์ชั่นที่ขยายไปทั่วเทมเพลตเช่นการแบ่งปันสินทรัพย์ยังคงทำงานได้ หากคุณแชร์โฟลเดอร์กับใครบางคนเช่นการอนุญาตให้เผยแพร่ไปยังรายการทั้งหมดภายในโฟลเดอร์นั้น
วิธีมาตรฐานในการดึงข้อมูลเกี่ยวกับแหล่งที่มาของสินทรัพย์ในส่วนหน้าอยู่กับจุดสิ้นสุดของ /assets/sources-info วิธีมาตรฐานในการเพิ่มแหล่งที่มาในสินทรัพย์คือด้วยจุดสิ้นสุด /assets/add-resource และ /assets/add-resources จุดสิ้นสุดเหล่านี้กำลังมองหารายการในตาราง asset_metadata พร้อมคีย์ retrieval_source ซึ่งมีค่าเป็นรหัสสินทรัพย์ ดูรายละเอียดเพิ่มเติมเกี่ยวกับจุดสิ้นสุดเหล่านั้นใน backend/app/assets.py