ค้นหารหัสความหมายได้ง่ายในที่เก็บ GitHub ใด ๆ ใน ~ 1,000 SLOC
ตรวจสอบการสาธิตการทำงาน

Dryad มีจุดประสงค์เพื่อเป็นโครงการสาธิตที่มีประโยชน์และแม่แบบเริ่มต้นสำหรับการสร้างแอพการค้นหาความหมายที่ซับซ้อนยิ่งขึ้น
คุณสมบัติ:
HEADก่อนอื่นโคลนที่เก็บและเริ่มต้น:
$ git clone https://github.com/get-convex/dryad.git
$ npm i
$ npm run dev
สิ่งนี้จะสร้างการปรับใช้แบ็กเอนด์นูนของคุณซึ่งจะพยายามเริ่มทำดัชนีที่เก็บเริ่มต้น (https://github.com/get-convex/convex-helpers) จากนั้นส่วนหน้าจะเริ่มต้นทำงานบนพอร์ตปกติของ Vite 5173
ในเทอร์มินัลอื่นในที่เก็บเดียวกันนี้เปิดแผงควบคุมนูนและดูบันทึกเพื่อติดตามพร้อมกับการจัดทำดัชนีแบ็กเอนด์:
$ npx convex dashboard
ในแผง Logs คุณจะเห็นข้อผิดพลาดเกี่ยวกับตัวแปรสภาพแวดล้อมที่หายไป เรามีการตั้งค่าอีกเล็กน้อยที่ต้องทำ!
Dryad ใช้ OpenAI สำหรับการสรุปและการฝัง คุณจะต้องมีบัญชีแพลตฟอร์ม OpenAI และคีย์ API เยี่ยมชม platform.openai.com เพื่อดูแลสิ่งนั้น
การสรุปและการจัดทำดัชนีแม้กระทั่ง CodeBase ในระดับปานกลางจะใช้เครดิต OpenAI จำนวนพอสมควร คุณเกือบจะต้องมีบัญชีที่ชำระแล้ว!
การใช้งานที่ไม่ระบุชื่อของ GitHub API รับอัตรา จำกัด ได้อย่างง่ายดายมาก ดังนั้น Dryad จึงต้องการให้คุณสร้างโทเค็นการเข้าถึงส่วนบุคคลโดยใช้บัญชี GitHub ของคุณ เยี่ยมชม https://github.com/settings/tokens เพื่อสร้างโทเค็นสำหรับ dryad
ด้วยคีย์ OpenAI API ของคุณและ Token การเข้าถึง GitHub ในมือให้กลับไปที่แผงควบคุมการปรับใช้ของนูน ในแผงนำทางด้านซ้ายคลิก "การตั้งค่า" จากนั้น "ตัวแปรสภาพแวดล้อม"
ตั้งชื่อตัวแปรสภาพแวดล้อมลับสองตัวแปร OPENAI_API_KEY และ GITHUB_ACCESS_TOKEN เช่น:

settings หากคุณตรวจสอบมุมมอง Logs ในแผงควบคุมนูนของคุณตอนนี้ Dryad ควรทำงานได้สำเร็จ! แต่มันเป็นการจัดทำดัชนีที่เก็บข้อมูลเริ่มต้น get-convex/convex-helpers คุณอาจต้องการให้จัดทำดัชนีรหัสของคุณเองแทน
ข่าวดี เป็นเรื่องง่ายที่จะปรับแต่งพฤติกรรมของ Dryad Dryad เก็บการกำหนดค่าทั้งหมดไว้ในตาราง settings ในฐานข้อมูลนูนของคุณเอง คลิกที่มุมมอง Data ในแผงควบคุมจากนั้นเลือกตาราง settings :

ดับเบิลคลิกที่ค่าใด ๆ ในเอกสารการตั้งค่าเพื่อแก้ไขหรือคลิกปุ่ม "แก้ไข" สีน้ำเงินเพื่อเพิ่มฟิลด์ที่หายไปในเอกสาร โดยปกติคุณไม่จำเป็นต้องทำอะไรเพื่อการเปลี่ยนแปลงของคุณเพื่อให้มีผล แต่ถ้าคุณต้องการ reindex ต่อไปคลิกที่นักวิ่งฟังก์ชั่น Fn ในแผงด้านล่างขวาของแดชบอร์ดแล้วเลือกที่จะเรียกใช้ syncState:reset จากดรอปดาวน์ ไม่จำเป็นต้องมีข้อโต้แย้ง
สคีมาของตารางนี้สามารถพบได้ใน convex/schema.ts ในที่เก็บนี้ นี่คือสิ่งที่ดูเหมือน:
// Various project settings you can tweak in the dashboard as we go.
settings : defineTable ( {
org : v . string ( ) ,
repo : v . string ( ) ,
branch : v . string ( ) ,
extensions : v . array ( v . string ( ) ) ,
exclusions : v . optional ( v . array ( v . string ( ) ) ) , // defaults to no exclusions
byteLimit : v . optional ( v . number ( ) ) , // defaults to 24,000 bytes
chatModel : v . optional ( v . string ( ) ) , // defaults to gpt-4
} ) ,facebookreactgpt-3.5-turbo , gpt-4สามสิ่งหลักที่จะครอบคลุม:
ทุกนาที Dryad เรียกงานที่ชื่อ repo:sync นี่คือการกระทำนูนซึ่งใช้ตารางที่เรียกว่า syncState เพื่อลูประหว่างสองสถานะ:
ในขณะที่การสำรวจความคิดเห็นใหม่ Dryad ใช้ GitHub API (ผ่าน Octokit) เพื่อตรวจสอบ SHA ของสาขา REPO + Target ตราบใดที่ค่าที่กลับมาจาก GitHub ยังคงเหมือนกับ SHA ที่จัดทำดัชนีล่าสุดใน syncState.commit , repo:sync ออกไปจนถึงการสำรวจครั้งต่อไป
แต่เมื่อมีการค้นพบการกระทำใหม่ฟิลด์ syncState.commit ถูกตั้งค่าเป็นที่ตั้งไว้เป็น sha ใหม่และฟิลด์ tha commitDone ถูกตั้งค่าเป็นเท็จ สิ่งนี้ทำให้ Dryad เข้าสู่โหมด "ดัชนีที่กระทำ"
เมื่อทำการจัดทำดัชนีการกระทำให้ repo:sync ก่อนใช้ GitHub "ต้นไม้" API เพื่อดึงแผนผังไฟล์ทั้งหมดของการกระทำนั้นรวมถึงการตรวจสอบไฟล์ที่เกี่ยวข้องกับทุกไฟล์
จากนั้น Dryad ก็เดินต้นไม้ทั้งหมดนี้เพื่อค้นหาไฟล์ซอร์สโค้ด (ตามข้อกำหนดส่วนขยายของตาราง `การตั้งค่า '') สำหรับไฟล์ต้นฉบับทุกไฟล์จะกำหนดว่า checksum มีการเปลี่ยนแปลงหรือไม่ตั้งแต่ครั้งสุดท้ายที่ไฟล์ถูกจัดทำดัชนี หากไฟล์ใหม่หรือมีการเปลี่ยนแปลงจะถูกดาวน์โหลดจาก repo และจัดทำดัชนีอีกครั้ง
มิฉะนั้นไฟล์จะถูกทำเครื่องหมายเป็นปัจจุบัน - ยังคงมีอยู่ในการกระทำใหม่
ในที่สุดหลังจากไฟล์ทั้งหมดในแผนผังได้รับการจัดทำดัชนีอย่างถูกต้องไฟล์ใด ๆ ที่ไม่ได้เป็นส่วนหนึ่งของทรีคอมมิชชันใหม่นี้จะถูกลบออกจากดัชนีอีกต่อไป
และด้วยเหตุนี้ commitDone มีการกำหนดให้เป็นจริงและ Dryad กลับไปสำรวจความคิดเห็นใหม่
การจัดทำดัชนีไฟล์แหล่งที่มาเกี่ยวข้องกับสามขั้นตอน:
fileGoals ของ Convex โดยมีการอ้างอิงถึงบันทึกไฟล์แหล่งที่มาหลักใน files ฟิลด์เวกเตอร์ของเป้าหมายใช้การจัดทำดัชนีเวกเตอร์ของนูนเพื่อรองรับการค้นหาอย่างรวดเร็วจากเว็บแอป เมื่อมีคนส่งแบบสอบถามในเว็บแอป Dryad ใช้ OpenAI EMBEDDINGS API เดียวกันเพื่อสร้างเวกเตอร์จากนั้นใช้ดัชนีเวกเตอร์ของนูนเพื่อค้นหาไฟล์ต้นฉบับที่มีเป้าหมายที่คล้ายคลึงกันตามความหมายของคำค้นหา
การค้นหาจะส่งคืนไฟล์ต้นฉบับแต่ละครั้งเพียงครั้งเดียวโดยส่งคืนเป้าหมายสูงสุดเป็นเหตุผลหลักสำหรับการรวมไฟล์นั้นไว้ในชุดผลลัพธ์
Dryad ค่อนข้างพื้นฐาน ณ จุดนี้! มีหลายทิศทางที่คุณสามารถทำได้
ปัญหาของโครงการได้รับการรวบรวมด้วยคอลเลกชันของส่วนขยายที่อาจเกิดขึ้นและการปรับปรุง dryad เพื่อให้ล้อเปลี่ยนเกี่ยวกับสิ่งที่ซับซ้อนมากขึ้นซึ่งสามารถสร้างขึ้นจาก Dryad
แฮ็คมีความสุข!
เข้าร่วม Discord ของเราเพื่อพูดคุยเกี่ยวกับ Dryad
CONVEX เป็นแพลตฟอร์มแบ็กเอนด์ที่โฮสต์พร้อมฐานข้อมูลในตัวที่ให้คุณเขียนสคีมาฐานข้อมูลและฟังก์ชั่นเซิร์ฟเวอร์ใน TypeScript การสืบค้นฐานข้อมูลฝั่งเซิร์ฟเวอร์จะแคชและสมัครรับข้อมูลโดยอัตโนมัติโดยอัตโนมัติทำให้การใช้เบ็ด useQuery ไทม์ในไคลเอ็นต์ React ของเรา นอกจากนี้ยังมีลูกค้าสำหรับ Python, Rust, Reactnative และ Node รวมถึง HTTP API ที่ตรงไปตรงมา
ฐานข้อมูลรองรับเอกสารสไตล์ NOSQL ที่มีความสัมพันธ์และดัชนีที่กำหนดเอง (รวมถึงในฟิลด์ในวัตถุที่ซ้อนกัน)
query และ mutation ของเซิร์ฟเวอร์มีธุรกรรมการเข้าถึงเวลาแฝงต่ำไปยังฐานข้อมูลและใช้ประโยชน์จากรันไทม์ v8 ของเราด้วยการตั้งค่า guardrails เพื่อให้การรับประกันกรดที่แข็งแกร่งที่สุดในตลาด: ความสอดคล้องทันทีการแยกแบบต่อเนื่องและการแก้ไขความขัดแย้งอัตโนมัติ
ฟังก์ชั่น action กระทำเซิร์ฟเวอร์สามารถเข้าถึง API ภายนอกและเปิดใช้งานเอฟเฟกต์ด้านอื่น ๆ และการไม่กำหนดค่าในการทำงาน v8 ที่ได้รับการปรับปรุงให้ดีที่สุดของเราหรือรันไทม์ node ที่ยืดหยุ่นมากขึ้น
ฟังก์ชั่นสามารถทำงานในพื้นหลังผ่านการกำหนดเวลาและงาน cron
การพัฒนาเป็นคลาวด์เป็นครั้งแรกโดยมีการโหลดใหม่สำหรับการแก้ไขฟังก์ชั่นเซิร์ฟเวอร์ผ่าน CLI มี Dashboard UI เพื่อเรียกดูและแก้ไขข้อมูลแก้ไขตัวแปรสภาพแวดล้อมการดูบันทึกการเรียกใช้ฟังก์ชั่นเซิร์ฟเวอร์และอื่น ๆ
มีคุณสมบัติในตัวสำหรับการทำปฏิกิริยาการทำปฏิกิริยา, การจัดเก็บไฟล์, การค้นหาปฏิกิริยา, จุดสิ้นสุดของ HTTPS (สำหรับ webhooks), การสตรีมนำเข้า/ส่งออกและการตรวจสอบข้อมูลรันไทม์สำหรับอาร์กิวเมนต์ฟังก์ชั่นและข้อมูลฐานข้อมูล
ทุกอย่างปรับขนาดโดยอัตโนมัติและเริ่มต้นได้ฟรี