
Supaseqs เป็นเครื่องมือที่สามารถใช้ในการจัดการฐานข้อมูลลำดับดีเอ็นเอในเครื่องด้วยการใช้งาน PostgreSQL ที่นำเสนอโดย Supabase
มันใช้ประโยชน์จาก PostgreSQL เป็นตัวจัดการฐานข้อมูลแบ็กเอนด์, การทำให้เป็นเวกเตอร์ที่ใช้ KMER และการค้นหาเวกเตอร์เพื่อเลียนแบบฟังก์ชันการทำงานของ BLAST
หากคุณกำลังทำงานในสภาพแวดล้อม Linux คุณอาจต้องการเพียงดาวน์โหลด/คัดลอก setup.sh และเปิดใช้งาน:
# Linux
wget https://raw.githubusercontent.com/AstraBert/SupaSeqs/main/scripts/setup.sh
bash setup.shตรวจสอบให้แน่ใจว่าสภาพแวดล้อมของคุณมี:
gitNode v18 หรือติดตามnpm และ npxpython 3.10 หรือตามกระบวนการติดตั้งควรทำงานทั้งบน Windows และบน Linux ก่อนอื่นโคลนที่เก็บนี้:
# BOTH Windows and Linux
git clone https://github.com/AstraBert/SupaSeqs
cd SupaSeqs รับสายเรียกเข้าบรรทัดคำสั่ง supabase :
# BOTH Windows and Linux
npm install supabaseสร้างและเริ่มอินสแตนซ์ supabase:
# BOTH Windows and Linux
npx supabase init
npx supabase start ดึงสตริงการเชื่อมต่อจาก DB URL ที่จะพิมพ์หลังจากคำสั่งนี้:
# BOTH Windows and Linux
npx supabase statusสร้างสภาพแวดล้อมเสมือนจริงเปิดใช้งานและติดตั้งการอ้างอิงที่จำเป็น:
# Linux
python3 -m venv apienv
source apienv/bin/activate
python3 -m pip install -r requirements.txtหรือ
# Windows
python3 - m venv .apienv
.apienvScriptsactivate # For Command Prompt
# or
.apienvActivate.ps1 # For PowerShell
python3 - m pip install - r .requirements.txtภายในสภาพแวดล้อมเสมือนจริงรัน:
# BOTH Windows and Linux
cd scripts
python3 -m fastapi dev หากมีปัญหาเกี่ยวกับการเชื่อมต่อกับไคลเอนต์ Supabase ตรวจสอบให้แน่ใจว่าได้แทนที่สตริงการเชื่อมต่อในบรรทัดของ 16 main.py กับที่คุณพบว่า supabase status ที่รัน
แอปพลิเคชันทำงานเป็นบริการ API ใช้ประโยชน์จาก Fastapi การเชื่อมต่อกับ supabase ได้รับการจัดการผ่านการใช้งาน sqlalchemy ของไคลเอนต์ซึ่งคล้ายกับที่สร้างขึ้นในห้องสมุด vecs
แอปพลิเคชันยอมรับสองประเภทคำขอ:
1- โพสต์ - อัปโหลดลำดับหรือไฟล์ fasta :
# Single sequence
curl -X POST " http://127.0.0.1:8000/seqs/ " -H " accept: application/json " -H " Content-Type: application/json " -d " { " sequence " : " GGCAGAACCCAGGGCACCAGCACGCCGAAGGACCACCGCAGGCTGGCCAGCGCTCCACCCTCCCTGCACCACACCCTGCGAGCAAAAGGCAGCAGAAATGAAGAGCATTTACTTTGTGGCTGGATTGTTTGTAATGCTGGTACAAGGCAGCTGGCAACACCCACTTCAAGACACAGAGGAAAAACCCAGGTCTTTCTCAACTTCTCAAACAGACTTGCTTGATGATCCGGATCAGATGAATGAAGACAAGCGTCATTCACAGGGTACATTCACCAGTGACTACAGCAAGTTCCTCGACACCAGGCGTGCTCAAGACTTCTTGGATTGGCTGAAGAACACCAAGAGGAACAGGAATGAAAT " , " description " : " M57688.1 Octodon degus glucagon mRNA, complete cds " } "
# FASTA file
curl -X POST " http://127.0.0.1:8000/seqs/ " -H " accept: application/json " -H " Content-Type: application/json " -d " { " sequence " : " sequence.fasta " } " แต่ละลำดับจะได้รับเวกเตอร์ด้วยการเป็นตัวแทน 5-mer (อาร์เรย์ 1024-dim) ซึ่งจะถูกอัปโหลดไปยังตาราง sequences บน supabase พร้อมกับคำอธิบาย (หากให้ไว้ในกรณีของลำดับเดียวส่วนหัวของลำดับสำหรับไฟล์ Fasta) และลำดับต้นฉบับ
2- รับ - ค้นหาผ่านฐานข้อมูลลำดับ
curl -X ' GET ' ' http://localhost:8000/seqs/AACTTCTCAAACAGACTTGCTTGATGATCCGGATCAGATGAATGAAGACAAGCGTCATTCACAGGGTACATTCACCAGTGACTACAGCAAGTTCCTCGACACCAGGCGTGCTCAAGACTTCTTGGATTGGCTGAAGAACACCAAGAGGAACAGGAATGAAAT?limit=100&threshold=75 ' -H ' accept: application/json 'ลำดับการสืบค้นจะได้รับเวกเตอร์และฐานข้อมูลถูกค้นหา: จำนวนของลำดับ (ระบุด้วยคีย์ขีด จำกัด สูงสุดคือ 1,000) จะถูกส่งคืนหากพวกเขาสอดคล้องกับเกณฑ์ความคล้ายคลึงกัน (ระบุเป็นค่าเปอร์เซ็นต์ที่มีคีย์ เกณฑ์ ) การตอบสนองทั่วไปมีลักษณะเช่นนี้:
{ "1" :{ "sequence" : " GGCAGAACCCAGGGCACCAGCACGCCGAAGGACCACCGCAGGCTGGCCAGCGCTCCACCCTCCCTGCACCACACCCTGCGAGCAAAAGGCAGCAGAAATGAAGAGCATTTACTTTGTGGCTGGATTGTTTGTAATGCTGGTACAAGGCAGCTGGCAACACCCACTTCAAGACACAGAGGAAAAACCCAGGTCTTTCTCAACTTCTCAAACAGACTTGCTTGATGATCCGGATCAGATGAATGAAGACAAGCGTCATTCACAGGGTACATTCACCAGTGACTACAGCAAGTTCCTCGACACCAGGCGTGCTCAAGACTTCTTGGATTGGCTGAAGAACACCAAGAGGAACAGGAATGAAAT " , "description" : " M57688.1 Octodon degus glucagon mRNA, complete cds " , "cos_dist" : 0.23987939711631145 }} สิ่งนี้ทำได้ด้วยฟังก์ชั่นที่เรียกว่า match_page_sections และกำหนดดังนี้:
create or replace function public .match_page_sections (
embedding vector( 1024 ),
match_threshold float,
match_count int
)
returns setof public . sequences
language sql
as $$
select *
from public . sequences
where public . sequences .embedding <=> embedding < 1 - match_threshold
order by public . sequences .embedding <=> embedding asc
limit least(match_count, 1000 );
$$;การมีส่วนร่วมเป็นมากกว่าการต้อนรับ! ดูแนวทางการสนับสนุนสำหรับข้อมูลเพิ่มเติม :)
หากคุณพบว่าโครงการนี้มีประโยชน์โปรดพิจารณาที่จะให้ทุนและทำให้มันเติบโต: ขอสนับสนุนโอเพนซอร์สด้วยกัน!
โครงการนี้มีให้ภายใต้ใบอนุญาต MIT: มันจะเป็นโอเพ่นซอร์สและใช้งานได้ฟรี
หากคุณใช้โครงการนี้โปรดอ้างอิงผู้แต่ง: Astra Clelia Bertelli