ห้องทำแผนที่-AI เป็นเว็บ API ที่พิสูจน์แนวคิด (POC) ที่ช่วยให้ผู้ใช้ค้นหาการจับคู่ที่ดีที่สุดของชื่อห้องพักในโรงแรม
ส่วนผสมที่สำคัญที่สุดในแอปพลิเคชันนี้คือการรวมกันของ OpenAI Embedding SDK และฐานข้อมูล PostgreSQL กับส่วนขยายเวกเตอร์
เมื่อมีชื่อห้องพักโรงแรมใหม่ API จะดึงเวกเตอร์ฝังตัวจาก OpenAI API และเก็บไว้ในฐานข้อมูล PostgreSQL
จากนั้นจะใช้ฟังก์ชั่นการค้นหาดั้งเดิมใน PostgreSQL เพื่อค้นหาการจับคู่ที่อาจเกิดขึ้นตามความคล้ายคลึงกันของเวกเตอร์ระยะทาง
ทั้ง Web API และฐานข้อมูล Postgres ทำงานในคอนเทนเนอร์ไม่จำเป็นต้องติดตั้งอะไรนอกเหนือจาก Docker
โมเดลที่ใช้สำหรับการคำนวณการฝังอยู่ทางด้านโอเพเนียคือ:
AdaTextEmbedding
การฝังข้อความของ Openai วัดความเกี่ยวข้องของสตริงข้อความ Embeddings มักใช้สำหรับ:
ค้นหา (โดยที่ผลลัพธ์ได้รับการจัดอันดับโดยเกี่ยวข้องกับสตริงแบบสอบถาม)
การฝังคือเวกเตอร์ (รายการ) ของหมายเลขจุดลอยตัว ระยะห่างระหว่างเวกเตอร์สองตัววัดความสัมพันธ์ของพวกเขา
ระยะทางเล็ก ๆ แนะนำความเกี่ยวข้องสูงและระยะทางไกลแนะนำความสัมพันธ์ต่ำ
โคลนที่เก็บ: https://github.com/brunonuzzi/room-mapping-ai
สร้างคีย์ Open AI ของคุณ: https://platform.openai.com/account/api-keys
นำทางไปยังไดเรกทอรีโครงการ: cd room-mapping-ai
แทนที่ Room-Mapping-AI/AppSettings.json ด้วยคีย์ API แบบเปิดของคุณเอง
"OpenAI" : {
"ApiKey" : " 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 "
} สร้างคอนเทนเนอร์ Docker โดยใช้ Docker: docker-compose build
เรียกใช้นักเทียบท่าเขียน: docker-compose up
ไปที่ http: // localhost: 5000/swagger/index.html
หากต้องการหยุดและลบคอนเทนเนอร์:
docker-compose down --remove-orphans
หากต้องการใช้การทำแผนที่ห้อง AI API ให้ส่งคำขอโพสต์พร้อมชื่อห้องพักเป็นตัวถังคำขอ
curl -X ' POST '
' http://localhost:5000/api/RoomMapping/GetMostSimilarRooms?roomName=Serenity%20Luxury '
-H ' accept: text/plain '
-d ' 'API จะตอบกลับด้วยรายการการแข่งขันที่มีศักยภาพ:
[
{
"id" : 1 ,
"hotelName" : " Mallorca Rocks " ,
"roomName" : " Serenity Suite " ,
"vectorDistance" : 0.06337405572419863
},
{
"id" : 10 ,
"hotelName" : " Mallorca Rocks " ,
"roomName" : " Serenity Double Room " ,
"vectorDistance" : 0.08145154924929454
},
{
"id" : 5 ,
"hotelName" : " Mallorca Rocks " ,
"roomName" : " Royal Executive Suite " ,
"vectorDistance" : 0.15970261195384094
},
{
"id" : 4 ,
"hotelName" : " Mallorca Rocks " ,
"roomName" : " Urban Escape Penthouse " ,
"vectorDistance" : 0.16005893649310143
},
{
"id" : 2 ,
"hotelName" : " Mallorca Rocks " ,
"roomName" : " Ocean View Deluxe " ,
"vectorDistance" : 0.16867594238009598
}
]เปิดไคลเอนต์ PostgreSQL ที่คุณต้องการ (PSQL, PGADMIN หรือ DBEAVER) และสร้างการเชื่อมต่อใหม่:
localhost5432roommapping-userroommapping-passwordroom-mappingการทำแผนที่-AI มาพร้อมกับข้อมูลที่มีเมล็ดล่วงหน้าเพื่อช่วยให้คุณเริ่มต้นได้อย่างรวดเร็ว ข้อมูลนี้รวมถึงการรวบรวมชื่อห้องพักในโรงแรมพร้อมเวกเตอร์ฝังที่เกี่ยวข้อง ในการสำรวจข้อมูลล่วงหน้าและเข้าใจความสามารถของแอปพลิเคชันได้ดีขึ้นคุณสามารถดำเนินการสืบค้นตัวอย่างได้โดยตรงบนฐานข้อมูล PostgreSQL
ตัวอย่างเช่นคุณสามารถใช้แบบสอบถามต่อไปนี้เพื่อค้นหาห้องพักที่คล้ายกันมากที่สุด 5 ห้องที่คล้ายกันมากที่สุดในห้อง ID = 1 (Serenity Suite) ตามเวกเตอร์ฝังของพวกเขา:
SELECT Id
,HotelName
,RoomName
,CreatedDate
, ' Serenity Suite ' SearchedRoomName
,embedding <=> ( select embedding from rooms where id = 1 )
as vector_distance
FROM public . Rooms
ORDER BY vector_distance limit 5ตัวดำเนินการ <=> ในการสืบค้นก่อนหน้าหมายถึง
cosine distanceคุณจะหาผู้ให้บริการอื่น ๆ ได้ที่นี่
ฐานข้อมูลจะสร้างผลลัพธ์ต่อไปนี้
| รหัสประจำตัว | ชื่อโรงแรม | ชื่อห้อง | CreateDDate | searchedroomname | vector_distance |
|---|---|---|---|---|---|
| 1 | หิน Mallorca | Serenity Suite | 2023-03-28 | Serenity Suite | 0 |
| 13 | หิน Mallorca | ความหรูหราที่หรูหรา | 2023-03-28 | Serenity Suite | 0.06337405572419863 |
| 10 | หิน Mallorca | ห้องพักคู่ที่เงียบสงบ | 2023-03-28 | Serenity Suite | 0.06572621072063112 |
| 5 | หิน Mallorca | ราชสำนัก | 2023-03-28 | Serenity Suite | 0.12737531341984398 |
| 3 | หิน Mallorca | ห้องระเบียงสวน | 2023-03-28 | Serenity Suite | 0.1471648253749488 |
เพื่อความเข้าใจที่ดีขึ้นเกี่ยวกับวิธีการเพาะเมล็ดคุณสามารถตรวจสอบไฟล์ seed.sql
ในการดีบัก WEP API บน Visual Studio ก่อนอื่นตรวจสอบให้แน่ใจว่าได้ลบคอนเทนเนอร์ที่มีอยู่ทั้งหมดที่เกี่ยวข้องกับ Web API เพื่อหลีกเลี่ยงการพอร์ตความขัดแย้ง
เมื่อตู้คอนเทนเนอร์ถูกลบออกเพียงแค่เปิด room-mapping-ai.sln บน Visual Studio และเปิดตัวนักเทียบท่า
Web API ควรเปิดตัวและจะมีการแนบดีบัก
โค้ดตัวอย่างเพื่อโทรหา OpenAI API และสร้างเวกเตอร์ฝังตัวสำหรับชื่อห้องพักของโรงแรม
curl https://api.openai.com/v1/embeddings
-H " Content-Type: application/json "
-H " Authorization: Bearer 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 "
-d ' {
"input": "Ocean View Deluxe",
"model": "text-embedding-ada-002"
} 'ผลลัพธ์ที่คาดหวัง:
{
"object" : " list " ,
"data" : [
{
"object" : " embedding " ,
"index" : 0 ,
"embedding" : [
0.0041769226 ,
0.0067320974 ,
...
]
}
],
"model" : " text-embedding-ada-002-v2 " ,
"usage" : {
"prompt_tokens" : 3 ,
"total_tokens" : 3
}
}การทำแผนที่-AI API ใช้ OpenAI API สำหรับการสร้างเวกเตอร์ฝัง ราคาตอนนี้คือ $ 0.0004/1K โทเค็น
สตริงเฉลี่ยเช่น "Serenity Double Room" มี 3 โทเค็น คุณสามารถตรวจสอบราคาได้ที่นี่