** Disclamer: ฉันไม่ค่อยเก่งในการเขียนเอกสารอย่าลังเลที่จะเปิดปัญหาหากคุณต้องการการสนับสนุนเพิ่มเติมเกี่ยวกับวิธีการใช้ **
ผู้ช่วยส่วนตัวของคุณ Cyrano เป็นรูปแบบภาษาขนาดใหญ่ที่สามารถเข้าถึงชุดเครื่องมือที่สามารถเลือกใช้เมื่อใดก็ตามที่พวกเขาจำเป็นต้องตอบผู้ใช้ ชื่อของมันมาจากตัวละครโรงละครฝรั่งเศส Cyrano de Bergerac โดย Edmond Rostand
Cyrano ใช้รุ่น OpenAI ล่าสุด: GPT-3.5-Turbo-0613 (เร็วกว่า) หรือ GPT-4-0613 (ฉลาดกว่า) พวกเขาสามารถเข้าถึงฟังก์ชั่น openai repo ขึ้นอยู่กับกรอบ Langchain
TODO: เพิ่มตัวอย่างและ/หรือวิดีโอ
Cyrano ใช้ Python-Chess เพื่อรักษาสถานะคณะกรรมการหมากรุกภายในตลอดเวลา เมื่อได้ยินการเคลื่อนไหวของหมากรุกในภาษาธรรมชาติในการสนทนามันจะแปลเป็นตัวแทนพีชคณิตที่สอดคล้องกันและเล่นบนบอร์ด Python-Chess ภายใน มันใช้สต็อกปลาเป็นเวลา 0.1 วินาทีในการตัดสินใจว่าจะเล่นอะไรในการตอบสนอง จากนั้นบอร์ดจะถูกบันทึกเป็นเฟนในไฟล์ JSON เพื่อให้คุณสามารถกลับมาเล่นเกมได้ตลอดเวลาในอนาคต
Cyrano สามารถเข้าถึงการกระทำที่เกี่ยวข้องกับหมากรุกได้ 3 ครั้ง:
Cyrano เก็บข้อความสุดท้ายไว้ที่โทเค็นจำนวนหนึ่ง (ค่าเริ่มต้น 1500) ในหน้าต่างบริบท
ขึ้นอยู่กับตัวแทนการกำเนิดกระดาษ: simulacra แบบโต้ตอบของพฤติกรรมมนุษย์โดย Park, et. อัล
หน่วยความจำระยะยาวใช้ร้านค้าเวกเตอร์น้ำหนัก เมื่อใดก็ตามที่การสนทนาเกิน 1,500 โทเค็นข้อความที่เก่าแก่ที่สุดจะถูกสรุป, vectorized (โดยใช้โมเดล Transformers ประโยค) และเก็บไว้ในฐานข้อมูลร้านค้าเวกเตอร์ (Qdrant) ทุกครั้งที่ Cyrano เก็บความทรงจำจะให้คะแนนพวกเขาจาก 10 เรื่องว่าพวกเขาน่าจดจำแค่ไหน แต่ละหน่วยความจำเป็นข้อความสั้น ๆ , เวกเตอร์ที่เกี่ยวข้อง, ความสำคัญ _score, วัตถุ Datetime ที่สร้างขึ้นและวัตถุ last_accessed_at DateTime
ที่รันไทม์ Cyrano ดึงความทรงจำที่เกี่ยวข้องมากที่สุด 5 อันดับแรกและเพิ่มลงในข้อความผู้ใช้สุดท้าย เมื่อเลือกความทรงจำที่เกี่ยวข้องมากที่สุดมันจะใช้ความคล้ายคลึงกันทางความหมายโดยถ่วงน้ำหนักตามอายุของหน่วยความจำโดยใช้สูตร: semantic_similarity + (1 - decay_rate) ** hours_passed ซึ่ง semantic_similarity คือระยะห่างของโคไซน์ระหว่างเวกเตอร์ Decay_rate แสดงถึงความทรงจำที่สูญเสียความเกี่ยวข้องอย่างรวดเร็วและชั่วโมง _Passed เป็นเดลต้าระหว่างปัจจุบันและ last_accessed_at
คุณสามารถใช้ Cyrano เป็นเอเจนต์ข้อความเท่านั้นโดยการตั้งค่าตัวแปรเสียงเป็นเท็จใน src/main.py ฉันเลือกที่จะทำเช่นนั้นอินพุตจะเป็น input() และเอาต์พุตจะเป็นข้อความ
หากคุณเลือกที่จะโต้ตอบกับมันโดยใช้เสียงและหูคุณจะต้องใช้เม่นสำหรับการตรวจจับคำปลุก สำหรับ "Alexa" หรือ "Hey Google" นี้ฉันก็เลือก "Cyrano" เมื่อใดก็ตามที่คุณต้องการโต้ตอบกับโมเดลคุณสามารถพูดชื่อออกมาดัง ๆ รอเสียงบี๊บและเริ่มพูดคุย
หมายเหตุ: Wake Word ถูกตั้งค่าด้วยสำเนียงภาษาฝรั่งเศสในปัจจุบัน เพียงแค่สร้างใหม่จากเว็บไซต์ Morcupine ในภาษาอื่นหากจำเป็น
เสียงถูกบันทึกโดยใช้ไลบรารี SpeechRecognition หลังจากได้ยินความเงียบมันจะหยุดการบันทึกและส่งไฟล์เสียงไปยัง Openai Whisper API ซึ่งจะส่งข้อความที่ถอดความกลับ
Cyrano สามารถใช้ 3 TTS ตัวเลือก:
PYTTSX3 ซึ่งฟรีและมีเสียงหุ่นยนต์ แต่ยอมรับได้บน Windows
Google Cloud TTS ตัวเลือกคุณภาพ/ ราคาดีมาก IMO ทำงานได้ดีกับระบบปฏิบัติการใด ๆ
Eleven Labs คุณภาพเสียงที่ดีที่สุด แต่เวอร์ชันฟรีมี จำกัด และเวอร์ชันที่ชำระเงินไม่ได้มีตัวละครเพียงพอต่อเดือน
เนื่องจากฉันต้องการ Cyrano เพื่อทำงานบนราสเบอร์รี่ต้องการคุณภาพดีและมีปริมาณมากดังนั้นจึงไม่แพงเกินไปฉันเลือก Google TTS ฉันทิ้งฟังก์ชั่นทั้งหมดไว้สำหรับ 3 ตัวเลือกใน src/sound_utils.py อย่าลังเลที่จะใช้สิ่งที่เหมาะกับคุณที่สุด สำหรับ Google หรือ Eleven Labs คุณจะต้องเพิ่มคีย์ API ในไฟล์. ENV
โคลน repo จากนั้นสร้างไฟล์. env ด้วย API_KEY ทั้งหมดและระบบพรอมต์ที่มีสิ่งต่อไปนี้:
ตัวอย่างของระบบพรอมต์ (ตัวตนของโมเดล):
SYS_PROMPT="You are Cyrano, a personal assistant with the personality of Cyrano de Bergerac. Today's date is {current_date}. You're on {user_name}'s desk. {user_description}. {user_name}'s messages are recorded in sound and then transcribed into text. It may happen that the sound is incorrectly transcribed. You regularly reply in a sarcastic and humorous manner."
คีย์ Openai API
Google Search API คีย์
OptionNal: Google Search API คีย์
ติดตั้งไลบรารีที่ต้องการ: pip install -r requirements.txt
เปิดแอพ: python src/main.py
เมื่อเริ่มต้นแอพควรเล่นโน้ตเล็กน้อย พูดว่า "Cyrano" เมื่อคุณต้องการโต้ตอบกับมันเสียงบี๊บจะแจ้งให้ทราบว่ามันกำลังฟังและอีกอย่างเมื่อตรวจพบความเงียบและหยุดการถอดความ