Foundational LLM Chat เป็นแอปพลิเคชัน Chainlit ที่สร้างขึ้นโดยใช้ AWS CDK และ Converse API ที่ช่วยให้คุณสามารถโต้ตอบกับโมเดลภาษา Amazon Bedrock ได้ มีอินเทอร์เฟซที่ใช้งานง่ายเพื่อแชทกับ Amazon Bedrock LLM อัปโหลด รูปภาพหรือเอกสาร และรับการตอบกลับหลายรูปแบบ แอปพลิเคชันถูกปรับใช้บน AWS โดยใช้บริการต่างๆ เช่น Amazon Bedrock, Amazon Elastic Container Service, Amazon Cognito, Amazon CloudFront และอื่นๆ
แผนภาพสถาปัตยกรรมแสดงให้เห็นการใช้งาน AWS ของแอปพลิเคชัน Foundational LLM Chat ผู้ใช้โต้ตอบกับแอปพลิเคชันผ่านอินเทอร์เฟซเว็บที่ปลอดภัยโดยการรับรองความถูกต้องของ Amazon Cognito แอปพลิเคชันนี้เผยแพร่ทั่วโลกโดยใช้ CDN ของ Amazon CloudFront ภายในภูมิภาค AWS ที่เฉพาะเจาะจง แอปพลิเคชันจะถูกปรับใช้ในหลาย Availability Zone โดยใช้ Amazon ECS สำหรับการปรับใช้แบบคอนเทนเนอร์ แบ็กเอนด์ผสานรวมกับ Amazon Bedrock เพื่อใช้ประโยชน์จากโมเดลภาษาที่หลากหลาย ทำให้ผู้ใช้สามารถมีส่วนร่วมในการสนทนาหลายรูปแบบกับผู้ช่วย AI
แอปพลิเคชันได้รับการกำหนดค่าผ่านไฟล์ config.json
ในโฟลเดอร์ ./bin
ตัวเลือกการกำหนดค่าที่สำคัญได้แก่:
default_system_prompt
: ฟิลด์นี้ประกอบด้วยพรอมต์ระบบเริ่มต้นที่จะใช้โดยแชทบอท หากไม่ได้ระบุไว้ด้านล่างในฟิลด์ bedrock_models
โดยจะกำหนดคำสั่งเบื้องต้นและพฤติกรรมของผู้ช่วย AI คุณสามารถแก้ไขค่านี้เพื่อเปลี่ยนบุคลิกหรือพรอมต์เริ่มต้นของผู้ช่วยได้
max_characters_parameter
: ฟิลด์นี้ระบุจำนวนอักขระสูงสุดที่อนุญาตในข้อความอินพุต หากตั้งค่าเป็นสตริง "None"
จะไม่มีการจำกัดอักขระ คุณสามารถเปลี่ยนค่านี้เพื่อจำกัดความยาวของข้อความที่ป้อนได้หากต้องการ
max_content_size_mb_parameter
: ฟิลด์นี้ตั้งค่าขนาดสูงสุดของเนื้อหาอินพุต (เช่น รูปภาพ) ในหน่วยเมกะไบต์ หากตั้งค่าเป็นสตริง "None"
จะไม่มีการจำกัดขนาด คุณสามารถแก้ไขค่านี้เพื่อจำกัดขนาดสูงสุดของเนื้อหาอินพุตได้
default_aws_region
: ฟิลด์นี้ระบุภูมิภาค AWS ที่มีการปรับใช้แอปพลิเคชัน คุณสามารถตั้งค่าภูมิภาคสำหรับฟิลด์โมเดล Amazon Bedrock แต่ละฟิลด์ได้ด้วย
prefix
: ฟิลด์นี้อนุญาตให้คุณตั้งค่าคำนำหน้าสำหรับชื่อทรัพยากรที่สร้างโดยแอปพลิเคชัน คุณสามารถปล่อยว่างไว้หรือระบุคำนำหน้าที่กำหนดเองได้หากต้องการ
ฟิลด์นี้ประกอบด้วยพจนานุกรมของโมเดล Bedrock ที่แชทบอทสามารถใช้ได้ แต่ละรุ่นจะถูกระบุด้วย คีย์ (เช่น "Sonnet", "Haiku") และ คีย์ คือชื่อที่ใช้ในโปรไฟล์ Chainlit Chat แต่ละรุ่นมีคุณสมบัติดังต่อไปนี้เป็นอย่างน้อย:
id
: ID หรือ ARN ของโมเดล Amazon Bedrock คุณสามารถค้นหา ID รุ่นที่มีอยู่ในเอกสารประกอบของ AWSregion
: อาร์เรย์ของภูมิภาคที่ใช้ในการเข้าถึงโมเดล หนึ่งรายการหากคุณไม่ได้เปิดใช้งานการอนุมานข้ามภูมิภาค หลายรายการสำหรับการอนุมานข้ามภูมิภาคพารามิเตอร์การกำหนดค่าเพิ่มเติมได้แก่:
inference_profile
: การตั้งค่าสำหรับการอนุมานข้ามภูมิภาคprefix
: คำนำหน้าภูมิภาค (เช่น "พวกเรา")region
: ภูมิภาคอนุมานหลักsystem_prompt
: พรอมต์ระบบแบบกำหนดเองcost
: ข้อมูลราคาinput_1k_price
: ราคา (เป็น USD) สำหรับโทเค็นอินพุต 1,000 รายการ คุณสามารถดูข้อมูลราคาสำหรับรุ่นต่างๆ ได้ที่หน้าราคา AWS Bedrockoutput_1k_price
: ต้นทุน (เป็น USD) สำหรับโทเค็นเอาต์พุต 1,000 รายการvision
[ไม่บังคับ] : จริงหรือเท็จ หากเปิดใช้งานความสามารถในการมองเห็นสำหรับโมเดลdocument
[ทางเลือก] : จริงหรือเท็จ หากเปิดใช้งานความสามารถของเอกสาร](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html) สำหรับโมเดลtool
[ทางเลือก] : จริงหรือเท็จ หากเปิดใช้งานความสามารถของเครื่องมือ](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html) สำหรับโมเดลdefault
[เป็นทางเลือก] : จริงหรือเท็จ รูปแบบที่เลือกเริ่มต้น คุณสามารถแก้ไขส่วน bedrock_models
เพื่อรวมโมเดลเพิ่มเติมหรืออัปเดตโมเดลที่มีอยู่ตามความต้องการของคุณ
ต่อไปนี้คือตัวอย่างวิธีเรียกรหัสรุ่นและข้อมูลราคา:
หากต้องการค้นหา ID โมเดลหรือ ARN โปรดดูเอกสารประกอบ ID โมเดล AWS Bedrock ตัวอย่างเช่น รหัสสำหรับโมเดล Claude 3 Sonnet คือ anthropic.claude-3-sonnet-20240229-v1:0
หากต้องการค้นหาข้อมูลราคา โปรดดูเอกสารประกอบราคา AWS Bedrock สำหรับรุ่น Claude 3 Sonnet ราคาอินพุตและเอาต์พุตมีดังนี้:
หลังจากทำการเปลี่ยนแปลงไฟล์ config.json
ตามที่ต้องการแล้ว คุณสามารถดำเนินการปรับใช้ตามที่อธิบายไว้ใน README ได้
นี่คือตัวอย่างของ json:
{
"default_system_prompt" : " you are an assistant " ,
"max_characters_parameter" : " None " ,
"max_content_size_mb_parameter" : " None " ,
"default_aws_region" : " us-west-2 " ,
"prefix" : " " ,
"bedrock_models" : {
"Claude Sonnet 3.5 New" : {
"system_prompt" : " you are an assistant " ,
"id" : " us.anthropic.claude-3-5-sonnet-20241022-v2:0 " ,
"inference_profile" : {
"prefix" : " us " ,
"region" : " us-west-2 "
},
"region" : [ " us-east-1 " , " us-west-2 " , " us-east-2 " ],
"cost" : {
"input_1k_price" : 0.003 ,
"output_1k_price" : 0.015
},
"default" : true ,
"vision" : true ,
"document" : true ,
"tool" : true
},
"Meta Llama 3.2 90B Vision Instruct" : {
"id" : " us.meta.llama3-2-90b-instruct-v1:0 " ,
"inference_profile" : {
"prefix" : " us " ,
"region" : " us-west-2 "
},
"region" : [ " us-east-1 " , " us-west-2 " ],
"cost" : {
"input_1k_price" : 0.002 ,
"output_1k_price" : 0.002
},
"vision" : true ,
"document" : true ,
"tool" : true
},
"Mistral Large 2" : {
"id" : " mistral.mistral-large-2407-v1:0 " ,
"cost" : {
"input_1k_price" : 0.003 ,
"output_1k_price" : 0.009
},
"vision" : false ,
"document" : true ,
"tool" : true
}
}
}
แอปพลิเคชันใช้ประโยชน์จาก Amazon Bedrock Prompt Manager สำหรับ:
ขณะนี้แอปพลิเคชันรองรับการแทนที่ตัวแปรอัตโนมัติ 2 รายการ:
%Y-%m-%d
ของวัน;%Y-%m-%d %H:%M:%S UTC
คุณสามารถแก้ไขฟังก์ชัน extract_and_process_prompt
ภายใน chainlit_image/foundational-llm-chat_app/massages_utils.py
เพื่อเพิ่มการทดแทนโดยตรงเพิ่มเติม
แอปพลิเคชันใช้ Converse API ของ Amazon Bedrock โดยให้:
ข้อความเตือนของระบบทั้งหมดจะถูกจัดเก็บและจัดการผ่าน Amazon Bedrock Prompt Manager โดยนำเสนอ:
เมื่อใช้ระบบแจ้งให้กำหนดค่าลักษณะการทำงานของโมเดลภาษา การพิจารณาผลกระทบด้านความปลอดภัย และใช้มาตรการเพื่อป้องกันการใช้งานในทางที่ผิดหรือช่องโหว่ที่อาจเกิดขึ้นถือเป็นสิ่งสำคัญ ความเสี่ยงที่สำคัญประการหนึ่งคือ การแทรกทันที ซึ่งอินพุตที่เป็นอันตรายอาจจัดการกับการแจ้งเตือนของระบบในลักษณะที่ไม่ได้ตั้งใจ ซึ่งอาจนำไปสู่เอาต์พุตที่เป็นอันตรายหรือเอนเอียงได้
จุดเริ่มต้นที่ดีคือคำแนะนำต่อไปนี้: การลดการเจลเบรกและการฉีดยาทันที
วิศวกรรมพร้อมท์หมายถึงการฝึกประดิษฐ์คำสั่งหรือคำสั่งอย่างระมัดระวังเพื่อเป็นแนวทางแบบจำลองภาษาในการสร้างผลลัพธ์ที่ต้องการ วิศวกรรมพร้อมท์ที่มีประสิทธิภาพเป็นสิ่งสำคัญเพื่อให้แน่ใจว่าโมเดลภาษาเข้าใจและตอบสนองอย่างเหมาะสมกับบริบทและงานที่กำหนด
หลักสูตรต่อไปนี้มีจุดมุ่งหมายเพื่อให้คุณมีความเข้าใจที่ครอบคลุมทีละขั้นตอนเกี่ยวกับวิธีการออกแบบพร้อมท์ที่เหมาะสมที่สุดภายใน Claude โดยใช้ Bedrock: Prompt Engineering with Anthropic Claude v3
คู่มือนี้ครอบคลุมเทคนิคต่างๆ และแนวทางปฏิบัติที่ดีที่สุดสำหรับวิศวกรรมอย่างทันท่วงทีผ่านชุดบทเรียนและแบบฝึกหัด ซึ่งแบ่งออกเป็นสามระดับ: ระดับเริ่มต้น ระดับกลาง และระดับสูง
โดยการปฏิบัติตามหลักการและเทคนิคที่ระบุไว้ในคู่มือนี้ คุณสามารถปรับปรุงประสิทธิภาพและความน่าเชื่อถือของแอปพลิเคชันโมเดลภาษาของคุณได้ ทำให้มั่นใจได้ว่าผู้ช่วย AI จะสร้างการตอบสนองที่เกี่ยวข้อง สอดคล้องกัน และคำนึงถึงบริบทมากขึ้น
เราขอแนะนำให้ปรับใช้กับ AWS Cloud9 หากคุณต้องการใช้ Cloud9 เพื่อปรับใช้โซลูชัน คุณจะต้องมีสิ่งต่อไปนี้ก่อนดำเนินการต่อ:
m5.large
เป็นประเภทอินสแตนซ์Amazon Linux 2023
เป็นแพลตฟอร์ม หากคุณตัดสินใจที่จะไม่ใช้ AWS Cloud9 ให้ตรวจสอบว่าสภาพแวดล้อมของคุณเป็นไปตามข้อกำหนดเบื้องต้นต่อไปนี้:
ตรวจสอบว่าสภาพแวดล้อมของคุณเป็นไปตามข้อกำหนดเบื้องต้นต่อไปนี้:
คุณมี:
บัญชี AWS
นโยบายการเข้าถึงที่อนุญาตให้คุณสร้างทรัพยากรที่มีอยู่ในตัวอย่าง AWS
ทั้งคอนโซลและการเข้าถึงทางโปรแกรม
ติดตั้ง NodeJS แล้ว
nvm
คุณสามารถรันสิ่งต่อไปนี้ก่อนดำเนินการต่อ nvm install --lts
ติดตั้ง NPM แล้ว
nvm
คุณสามารถรันสิ่งต่อไปนี้ก่อนดำเนินการต่อ nvm install-latest-npm
AWS CLI ติดตั้งและกำหนดค่าเพื่อใช้กับบัญชี AWS ของคุณ
ติดตั้ง AWS CDK CLI แล้ว
ติดตั้ง Finch หรือติดตั้ง Docker แล้ว
เปิดใช้งานการเข้าถึงโมเดล Amazon Bedrock ในภูมิภาคการปรับใช้: วิธีเปิดใช้งานการเข้าถึงโมเดล Amazon Bedrock
เปิดใช้งานอย่างน้อยหนึ่งใน:
โคลนพื้นที่เก็บข้อมูล เปิดโฟลเดอร์ ติดตั้งการอ้างอิง:
git clone https://github.com/aws-samples/foundational-llm-chat.git
cd foundational-llm-chat
npm install
[เป็นทางเลือกเฉพาะในกรณีที่คุณไม่เคยทำมาก่อนในภูมิภาคการปรับใช้] บูตสภาพแวดล้อม CDK:
cdk bootstrap
สร้างและปรับใช้สแต็ก:
cdk deploy --region YOUR_DEPLOY_REGION
โดยที่ YOUR_DEPLOY_REGION คือภูมิภาค AWS ที่คุณต้องการปรับใช้แอปพลิเคชัน ตัวอย่างเช่น: us-west-2
หากคุณใช้ Finch แทน Docker โปรดเพิ่ม CDK_DOCKER=finch
ที่ตอนต้นของคำสั่งเหมือนในตัวอย่างต่อไปนี้:
CDK_DOCKER=finch cdk deploy --region us-west-2
สิ่งนี้จะสร้างทรัพยากรที่จำเป็นทั้งหมดบน AWS รวมถึงคลัสเตอร์ ECS, พูลผู้ใช้ Cognito, การกระจาย CloudFront และอื่นๆ
หลังจากการปรับใช้เสร็จสมบูรณ์ URL การแจกจ่าย CloudFront จะแสดงในเทอร์มินัล ใช้ URL นี้เพื่อเข้าถึงแอปพลิเคชันพื้นฐาน-llm-chat
หลังจากการปรับใช้ คุณจะได้รับสิ่งที่คล้ายกับสิ่งนี้:
✅ Foundational-LLM-ChatStack
Deployment time: 465.09s
Outputs:
FoundationalLlmChatStack.CognitoUserPool = ID
FoundationalLlmChatStack.NetworkingFoundationalLlmChatChatbotStack = CLOUDFRONT_DISTRIBUTION_ADDRESS
FoundationalLlmChatStack.ecsApplicationFoundationalLlmChatServiceLoadBalancer = ECS_LOAD_BALANCER
FoundationalLlmChatStack.ecsApplicationFoundationalLlmChatServiceServiceURL = ECS_LOAD_BALANCER_ADDRESS
Stack ARN: ARN
Total time: 469.14s
การกระจาย Amazon CloudFront ระบุไว้ในบรรทัดต่อไปนี้: FoundationalLlmChatStack.NetworkingFoundationalLlmChat = CLOUDFRONT_DISTRIBUTION_ADDRESS
foundational-llm-chat-user-pool
เปิดกลุ่มผู้ใช้นี้และสร้างผู้ใช้ที่ยืนยันที่อยู่อีเมลด้วยเพื่อหลีกเลี่ยงค่าใช้จ่ายที่ไม่จำเป็น ขอแนะนำให้ล้างและลบทรัพยากรที่สร้างโดยตัวอย่างนี้เมื่อคุณใช้งานเสร็จแล้ว ทำตามขั้นตอนเหล่านี้เพื่อลบสแต็กและทรัพยากรที่เกี่ยวข้อง:
Foundational-LLM-ChatStack
การดำเนินการนี้จะลบสแตกทั้งหมด รวมถึงคลัสเตอร์ ECS, พูลผู้ใช้ Cognito, การกระจาย CloudFront และทรัพยากรอื่น ๆ ที่เกี่ยวข้องทั้งหมด
หรือคุณสามารถใช้ AWS CDK เพื่อลบสแต็กออกจากบรรทัดคำสั่ง:
cdk destroy --region YOUR_DEPLOY_REGION
แทนที่ YOUR_DEPLOY_REGION
ด้วยภูมิภาค AWS ที่คุณปรับใช้แอปพลิเคชัน
โปรดทราบว่าการลบสแต็กจะไม่ลบบันทึก CloudWatch และคำจำกัดความงาน Amazon ECS ที่สร้างขึ้นระหว่างการปรับใช้โดยอัตโนมัติ คุณอาจต้องการลบทรัพยากรเหล่านี้ด้วยตนเองหากไม่ต้องการใช้อีกต่อไปเพื่อหลีกเลี่ยงค่าใช้จ่ายเพิ่มเติม
แม้ว่าสถาปัตยกรรมปัจจุบันจะเป็นจุดเริ่มต้นที่ดีในการปรับใช้แอปพลิเคชัน Foundational LLM Chat แต่ก็มีข้อควรพิจารณาเพิ่มเติมสำหรับการปรับใช้ที่พร้อมสำหรับการผลิต:
ในสถาปัตยกรรมปัจจุบัน การสื่อสารระหว่างการกระจาย CloudFront และ Application Load Balancer (ALB) จะดำเนินการผ่าน HTTP สำหรับการใช้งานจริง ขอแนะนำให้ใช้ HTTPS (TLS/SSL) เพื่อการสื่อสารที่ปลอดภัย:
การเปิดใช้งาน HTTPS พร้อมการยกเลิก TLS ทั้งสองระดับ (งาน ALB และ ECS) ช่วยให้มั่นใจได้ถึงการเข้ารหัสจากต้นทางถึงปลายทางและเพิ่มความปลอดภัยของแอปพลิเคชัน
ตัวอย่าง AWS นี้มีวัตถุประสงค์เพื่อการสาธิตและการศึกษาเท่านั้น ไม่ได้ออกแบบมาเพื่อใช้ในการผลิตโดยไม่มีการดัดแปลงและชุบแข็งเพิ่มเติม ก่อนที่จะปรับใช้แอปพลิเคชันนี้กับสภาพแวดล้อมการใช้งานจริง จำเป็นอย่างยิ่งที่ต้องทำการทดสอบอย่างละเอียด การประเมินความปลอดภัย และการปรับให้เหมาะสมตามความต้องการเฉพาะและแนวปฏิบัติที่ดีที่สุดของคุณ
สามารถรับการแจ้งเตือนของระบบสำหรับ claude ได้โดยตรงจากเอกสาร Anthropic ที่นี่: System Prompts
ยินดีบริจาค! โปรดปฏิบัติตามเวิร์กโฟลว์ Git ปกติ:
ห้องสมุดนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT-0 ดูไฟล์ใบอนุญาต
คุณควรพิจารณาทำการประเมินโดยอิสระของคุณเองก่อนที่จะใช้เนื้อหาในตัวอย่างนี้เพื่อวัตถุประสงค์ในการผลิต ซึ่งอาจรวมถึง (เหนือสิ่งอื่นใด) การทดสอบ การรักษาความปลอดภัย และการเพิ่มประสิทธิภาพเนื้อหาที่ให้ไว้ในตัวอย่างนี้ โดยอิงตามแนวทางปฏิบัติและมาตรฐานการควบคุมคุณภาพเฉพาะของคุณ