เฟรมเวิร์กแชทบอตอย่างง่ายที่เขียนด้วยภาษา Go พร้อมการกำหนดค่าใน YAML จุดมุ่งหมายของโปรเจ็กต์นี้คือการสร้างแชทบอตแบบข้อความที่เรียบง่ายโดยใช้ไฟล์การกำหนดค่าเพียงไม่กี่ไฟล์
แรงบันดาลใจสำหรับโปรเจ็กต์นี้เดิมมาจาก Flottbot และประสบการณ์ของฉันในการใช้ Rasa
การติดตั้ง
เอกสารประกอบ
บอทตัวแรกของคุณ
ไฟล์ clf.yml
ไฟล์ fsm.yml
เรียกใช้บอทของคุณ
โต้ตอบกับบอทของคุณ
การใช้งาน
คลีไอ
นักเทียบท่าเขียน
คูเบอร์เนเตส
นำเข้า
ตัวอย่าง
go get -u github.com/jaimeteb/chatto
ผ่านนักเทียบท่า:
docker pull jaimeteb/chatto:latest
ดู ตัวอย่าง คู่มือการกำหนดค่า และ ข้อมูลอ้างอิง ใน เอกสารประกอบ
Chatto ผสมผสานความสอดคล้องของเครื่องจักรที่มีสถานะจำกัดเข้ากับความยืดหยุ่นของการเรียนรู้ของเครื่อง มันมีองค์ประกอบหลักสามส่วน: ตัวแยกประเภท, เครื่องสถานะจำกัด และส่วนขยาย
โครงสร้างไดเร็กทอรีพื้นฐานสำหรับ Chatto จะเป็นดังนี้:
. └──data ├── clf.yml └── fsm.yml
เริ่มต้นด้วยการสร้างไดเร็กทอรี data
รวมถึงไฟล์ YAML
mkdir datatouch data/clf.yml ข้อมูล/fsm.yml
ไฟล์ clf.yml กำหนดวิธีการจัดประเภทข้อความผู้ใช้เป็น คำสั่ง (เจตนา) เริ่มต้นด้วยการกำหนดค่าง่ายๆ นี้:
การจำแนกประเภท: - คำสั่ง: "turn_on"ข้อความ: - "เปิด" - "เปิด" - คำสั่ง: ข้อความ "turn_off": - "ปิด" - "ปิด"
ไฟล์ fsm.yml กำหนดการเปลี่ยนระหว่างสถานะ คำสั่งที่ทำการเปลี่ยนเหล่านี้ และคำตอบที่จะส่งไปในนั้น เริ่มต้นด้วยเนื้อหาไฟล์นี้:
การเปลี่ยนผ่าน: - จาก: - "เริ่มต้น" เป็น: "บน" คำสั่ง: "turn_on" คำตอบ: - ข้อความ: "กำลังเปิด" - จาก: - "เปิด" เป็น: คำสั่ง "เริ่มต้น": "turn_off" คำตอบ: - ข้อความ: "กำลังปิด" - ข้อความ: ""ค่าเริ่มต้น: ไม่ทราบ: "ทำอย่างนั้นไม่ได้"
หากต้องการเริ่มบอทของคุณ ให้รัน:
chatto --ข้อมูลพาธ/
หากคุณใช้ Docker ให้รัน:
นักเทียบท่าวิ่ง -มัน -e CHATTO_DATA=./data -v $PWD/ข้อมูล:/data jaimeteb/chatto:latest chatto --ข้อมูลเส้นทาง
หากต้องการโต้ตอบกับบอทของคุณ ให้รัน:
chatto cli
แค่นั้นแหละ! ตอนนี้คุณสามารถพูดว่า เปิด หรือ เปิด เพื่อเข้าสู่สถานะ เปิด และ ปิด หรือ ปิด เพื่อกลับสู่ สถานะเริ่มต้น อย่างไรก็ตาม คุณไม่สามารถไปจาก บน ไป บน หรือจาก เริ่มต้น ไป เริ่มต้น อย่างใดอย่างหนึ่ง
นี่คือแผนภาพสำหรับ Finite State Machine แบบง่ายนี้:
คุณสามารถรวมบอทของคุณเข้ากับ Telegram, Twilio, Slack และ อะไรก็ได้ที่คุณต้องการ
เรียกใช้ chatto
ในไดเร็กทอรีที่มีไฟล์ YAML ของคุณอยู่ หรือระบุพาธไปยังไฟล์เหล่านั้นด้วยแฟล็ก --path
:
chatto --path ./your/data
หากต้องการทำงานบน Docker ให้ใช้:
นักเทียบท่าวิ่ง -หน้า 4770:4770 -e CHATTO_DATA=./your/data -v $PWD/ของคุณ/ข้อมูล:/data ไจเมเท็บ/แชทโต
คุณสามารถใช้เครื่องมือ Chatto CLI ได้โดยการดาวน์โหลดเครื่องมือ chatto cli
CLI ทำให้การทดสอบการโต้ตอบกับบอทของคุณเป็นเรื่องง่าย
แชท cli --url 'http://mybot.com' - พอร์ต 4770
คุณสามารถใช้ Chatto บน Docker Compose ได้เช่นกัน docker-compose.yml
จะมีลักษณะดังนี้:
เวอร์ชัน: "3" บริการ: chatto:image: jaimeteb/chatto:${CHATTO_VERSION}env_file: .envports: - "4770:4770" เล่ม: - ${CHATTO_DATA}:/datadepends_on: - ต่อ - ทำซ้ำ ต่อ: รูปภาพ: odise / busybox-curl # กล่องไม่ว่างพร้อมคำสั่งใบรับรอง: ต่อ / extexpose: - 8770เล่ม: - ${CHATTO_DATA}/ต่อ:/ต่อ redis:image: bitnami/redis:6.0สภาพแวดล้อม: - REDIS_PASSWORD=${STORE_PASSWORD}เปิดเผย: - 6379
ซึ่งต้องใช้ไฟล์ .env
เพื่อให้มีตัวแปรสภาพแวดล้อมที่จำเป็น:
# Chatto configuration CHATTO_VERSION=latest CHATTO_DATA=./your/data # Extension configuration CHATTO_BOT_EXTENSIONS_EXTENSION_NAME_URL=http://ext:8770 # Redis CHATTO_BOT_STORE_HOST=redis CHATTO_BOT_STORE_PASSWORD=pass # Logs CHATTO_BOT_DEBUG=true
โครงสร้างไดเร็กทอรีที่มีไฟล์ทั้งหมดจะมีลักษณะดังนี้:
. ├── data │ ├── ext │ │ ├── ext │ │ └── ext.go │ ├── bot.yml │ ├── chn.yml │ ├── clf.yml | └── fsm.yml ├── docker-compose.yml └── .env
ในที่สุดให้รัน:
นักเทียบท่าเขียนขึ้น -d redis ต่อ นักเทียบท่าเขียน -d chatto
เซิร์ฟเวอร์ส่วนขยายจะต้องดำเนินการตามภาษาของมัน
สำหรับไฟล์docker-compose.yml
นี้ คุณจะต้องสร้างส่วนขยาย Go ก่อน:
go build -o data/ext/ext data/ext/ext.go
เซิร์ฟเวอร์ส่วนขยายจะต้องทำงานก่อนที่ Chatto จะเริ่มต้น
ภายใต้ไดเร็กทอรี deploy/kubernetes
คุณจะพบตัวอย่างการปรับใช้:
ใจดี | ชื่อ | คำอธิบาย |
---|---|---|
ความลับ | chatto-config-secrets | มีโทเค็นที่ Chatto จะใช้สำหรับการอนุญาต |
ConfigMap | chatto-config-envs | ประกอบด้วยตัวแปรสภาพแวดล้อมสำหรับไฟล์ bot.yml |
ConfigMap | chatto-config-files | มีไฟล์ clf.yml และ fsm.yml |
การปรับใช้ | chatto | การปรับใช้ Chatto ตามอิมเมจ jaimeteb/chatto Docker |
บริการ | chatto-service | บริการสำหรับการปรับใช้ chatto |
ทางเข้า | chatto-ingress | ทางเข้า chatto-service |
รันคำสั่งต่อไปนี้เพื่อปรับใช้บน Kubernetes:
kubectl ใช้ -f ./deploy/kubernetes/
บอทเซิร์ฟเวอร์และแพ็คเกจไคลเอนต์ที่นำเข้าได้มีไว้เพื่อให้สามารถฝังลงในแอปพลิเคชันของคุณเองได้
หากต้องการฝังเซิร์ฟเวอร์:
แพ็คเกจ mainimport ( "flag""github.com/jaimeteb/chatto/bot")func main() { port := flag.Int("port", 4770, "Specify port to use") path := flag.String ("เส้นทาง", ".", "เส้นทางไปยังไฟล์ YAML") flag.Parse() เซิร์ฟเวอร์ := bot.NewServer(*path, *port) server.Run() -
หากต้องการฝังไคลเอ็นต์:
แพ็คเกจ myserviceimport ( "log""github.com/jaimeteb/chatto/bot") พิมพ์ MyService struct { chatto bot.Client}func NewMyService(url string, port int) *MyService { return &MyService{chatto: bot.NewClient(url, ท่าเรือ)} }func (s *MyService) ส่ง (คำถาม *query.Question) ข้อผิดพลาด { คำตอบ err := s.chatto.Submit(คำถาม) ถ้าผิดพลาด != ไม่มี { กลับข้อผิดพลาด } // พิมพ์คำตอบสำหรับ stdoutfor _, ตอบ := range คำตอบ { fmt.Println(answer.Text) } ส่งคืนไม่มี}
ฉันได้จัดเตรียมไฟล์ปรับแต่งบางส่วนไว้ภายใต้ ตัวอย่าง โคลนพื้นที่เก็บข้อมูลและรัน chatto
ด้วย -path
ของตัวอย่างที่คุณต้องการเพื่อทดสอบ (สำหรับอันที่ใช้ส่วนขยาย ให้รันส่วนขยายตามลำดับก่อน)
ข้อมูลเพิ่มเติมเกี่ยวกับตัวอย่างเหล่านี้ใน เอกสารประกอบ
Mood Bot - Mood Bot เวอร์ชันแชทของ Rasa ทักทายบอทเพื่อเริ่มการสนทนา
Pokemon Search - ค้นหาโปเกมอนตามชื่อหรือหมายเลข
Trivia Quiz - พิมพ์ start เพื่อทำแบบทดสอบเรื่องไม่สำคัญอย่างรวดเร็ว