การดึงข้อมูล Augmented Generation (RAG) ช่วยให้คุณสามารถจัดเตรียมโมเดลภาษาขนาดใหญ่ (LLM) พร้อมการเข้าถึงข้อมูลจากแหล่งความรู้ภายนอก เช่น พื้นที่เก็บข้อมูล ฐานข้อมูล และ API โดยไม่จำเป็นต้องปรับแต่งอย่างละเอียด เมื่อใช้ Generative AI ในการตอบคำถาม RAG จะทำให้ LLM สามารถตอบคำถามด้วยข้อมูลที่เกี่ยวข้องและทันสมัยที่สุด และเลือกอ้างอิงแหล่งข้อมูลเพื่อการตรวจสอบได้
โซลูชัน RAG โดยทั่วไปสำหรับการดึงความรู้จากเอกสารใช้แบบจำลองการฝังเพื่อแปลงข้อมูลจากแหล่งข้อมูลเป็นการฝังและจัดเก็บการฝังเหล่านี้ในฐานข้อมูลเวกเตอร์ เมื่อผู้ใช้ถามคำถาม ระบบจะค้นหาฐานข้อมูลเวกเตอร์และดึงเอกสารที่คล้ายกับข้อความค้นหาของผู้ใช้มากที่สุด จากนั้นจะรวมเอกสารที่ดึงมาและการสืบค้นของผู้ใช้ในพร้อมท์เสริมที่ส่งไปยัง LLM เพื่อสร้างข้อความ การใช้งานนี้มีสองโมเดล: โมเดลการฝังและ LLM ที่สร้างการตอบสนองขั้นสุดท้าย
ในโพสต์นี้เราจะสาธิตวิธีใช้ สตูดิโอ Amazon SageMaker เพื่อสร้างโซลูชันการตอบคำถาม RAG
การใช้สมุดบันทึกสำหรับการตอบคำถามแบบ RAG
โดยทั่วไปการนำ RAG ไปใช้จะต้องมีการทดลองกับโมเดลการฝัง ฐานข้อมูลเวกเตอร์ โมเดลการสร้างข้อความ และพร้อมท์ต่างๆ ขณะเดียวกันก็ทำการดีบั๊กโค้ดของคุณจนกว่าคุณจะได้ต้นแบบที่ใช้งานได้จริง อเมซอน SageMaker นำเสนอโน้ตบุ๊ก Jupyter ที่มีการจัดการซึ่งมีอินสแตนซ์ GPU ช่วยให้คุณสามารถทดลองได้อย่างรวดเร็วในช่วงเริ่มต้นนี้โดยไม่ต้องปั่นโครงสร้างพื้นฐานเพิ่มเติม มีสองตัวเลือกในการใช้สมุดบันทึกใน SageMaker ตัวเลือกแรกคือการเปิดตัวอย่างรวดเร็ว โน๊ตบุ๊ค พร้อมใช้งานผ่าน SageMaker Studio ใน SageMaker Studio ซึ่งเป็นสภาพแวดล้อมการพัฒนาแบบผสานรวม (IDE) ที่สร้างขึ้นตามวัตถุประสงค์สำหรับ ML คุณสามารถเปิดใช้โน้ตบุ๊กที่ทำงานบนอินสแตนซ์ประเภทต่างๆ และมีการกำหนดค่าที่แตกต่างกัน ทำงานร่วมกับเพื่อนร่วมงาน และเข้าถึงคุณสมบัติที่สร้างขึ้นตามวัตถุประสงค์เพิ่มเติมสำหรับการเรียนรู้ของเครื่อง (ML) ตัวเลือกที่สองคือการใช้ อินสแตนซ์โน้ตบุ๊ก SageMakerซึ่งเป็นอินสแตนซ์การประมวลผล ML ที่มีการจัดการเต็มรูปแบบซึ่งใช้งานแอป Jupyter Notebook
ในโพสต์นี้ เรานำเสนอโซลูชัน RAG ที่เพิ่มความรู้ของแบบจำลองด้วยข้อมูลเพิ่มเติมจากแหล่งความรู้ภายนอก เพื่อให้การตอบสนองที่แม่นยำยิ่งขึ้นสำหรับโดเมนที่กำหนดเองโดยเฉพาะ เราใช้สมุดบันทึก SageMaker Studio เครื่องเดียวที่ทำงานบน ml.g5.2xlarge
อินสแตนซ์ (1 A10G GPU) และ ลามะ 2 7b แชท hfซึ่งเป็นเวอร์ชันที่ได้รับการปรับแต่งอย่างละเอียดของ Llama 2 7b ซึ่งได้รับการปรับให้เหมาะกับกรณีการใช้งานแบบโต้ตอบจาก Hugging Face Hub เราใช้โพสต์บล็อกของ AWS Media & Entertainment สองรายการเป็นตัวอย่างข้อมูลภายนอก ซึ่งเราจะแปลงเป็นการฝังด้วย BAAI/bge-ขนาดเล็ก-en-v1.5 การฝัง เราเก็บส่วนที่ฝังไว้ ไพน์โคนซึ่งเป็นฐานข้อมูลแบบเวกเตอร์ที่นำเสนอการค้นหาที่มีประสิทธิภาพสูงและการจับคู่ความคล้ายคลึงกัน นอกจากนี้เรายังหารือถึงวิธีการเปลี่ยนจากการทดลองในโน้ตบุ๊กเป็นการปรับใช้โมเดลของคุณไปยังตำแหน่งข้อมูล SageMaker สำหรับการอนุมานแบบเรียลไทม์เมื่อคุณสร้างต้นแบบเสร็จสมบูรณ์ วิธีการเดียวกันนี้สามารถใช้ได้กับโมเดลและฐานข้อมูลเวกเตอร์ที่แตกต่างกัน
ภาพรวมโซลูชัน
ไดอะแกรมต่อไปนี้แสดงสถาปัตยกรรมโซลูชัน
การใช้โซลูชันประกอบด้วยสองขั้นตอนระดับสูง ได้แก่ การพัฒนาโซลูชันโดยใช้โน้ตบุ๊ก SageMaker Studio และการปรับใช้โมเดลเพื่อการอนุมาน
พัฒนาโซลูชันโดยใช้สมุดบันทึก SageMaker Studio
ทำตามขั้นตอนต่อไปนี้เพื่อเริ่มพัฒนาโซลูชัน:
- โหลดโมเดลแชท Llama-2 7b จาก Hugging Face Hub ลงในสมุดบันทึก
- สร้าง PromptTemplate ด้วย หลังเชน และใช้เพื่อสร้างพร้อมท์สำหรับกรณีการใช้งานของคุณ
- สำหรับตัวอย่าง 1–2 รายการ ให้เพิ่มข้อความคงที่ที่เกี่ยวข้องจากเอกสารภายนอกเป็นบริบทของการแจ้งเตือน และประเมินว่าคุณภาพของคำตอบดีขึ้นหรือไม่
- สมมติว่าคุณภาพดีขึ้น ให้ใช้เวิร์กโฟลว์การตอบคำถาม RAG:
- รวบรวมเอกสารภายนอกที่สามารถช่วยให้โมเดลตอบคำถามในกรณีการใช้งานของคุณได้ดีขึ้น
- โหลดโมเดลการฝัง BGE และใช้เพื่อสร้างการฝังเอกสารเหล่านี้
- จัดเก็บการฝังเหล่านี้ไว้ในดัชนี Pinecone
- เมื่อผู้ใช้ถามคำถาม ให้ทำการค้นหาความคล้ายคลึงกันใน Pinecone และเพิ่มเนื้อหาจากเอกสารที่คล้ายกันมากที่สุดไปยังบริบทของพรอมต์
ปรับใช้โมเดลกับ SageMaker เพื่อการอนุมานในวงกว้าง
เมื่อคุณบรรลุเป้าหมายด้านประสิทธิภาพ คุณสามารถปรับใช้โมเดลกับ SageMaker เพื่อใช้งานโดยแอปพลิเคชัน AI ทั่วไป:
- ปรับใช้โมเดลการแชท Llama-2 7b กับตำแหน่งข้อมูลแบบเรียลไทม์ของ SageMaker
- ปรับใช้ BAAI/bge-ขนาดเล็ก-en-v1.5 การฝังโมเดลเข้ากับจุดสิ้นสุดแบบเรียลไทม์ของ SageMaker
- ใช้โมเดลที่ปรับใช้ในคำถามของคุณเพื่อตอบแอปพลิเคชัน AI ทั่วไป
ในส่วนต่อไปนี้ เราจะแนะนำคุณตลอดขั้นตอนการนำโซลูชันนี้ไปใช้ในสมุดบันทึก SageMaker Studio
เบื้องต้น
หากต้องการทำตามขั้นตอนในโพสต์นี้ คุณจำเป็นต้องมีบัญชี AWS และ AWS Identity และการจัดการการเข้าถึง บทบาท (IAM) ที่มีสิทธิ์ในการสร้างและเข้าถึงทรัพยากรโซลูชัน หากคุณยังใหม่กับ AWS โปรดดู สร้างบัญชี AWS แบบสแตนด์อโลน.
หากต้องการใช้สมุดบันทึก SageMaker Studio ในบัญชี AWS ของคุณ คุณต้องมี โดเมน SageMaker ด้วยโปรไฟล์ผู้ใช้ที่มีสิทธิ์ในการเปิดแอป SageMaker Studio หากคุณยังใหม่กับ SageMaker Studio ให้ใช้ไฟล์ การตั้งค่าสตูดิโอด่วน เป็นวิธีที่เร็วที่สุดในการเริ่มต้น ด้วยการคลิกเพียงครั้งเดียว SageMaker จะจัดเตรียมโดเมน SageMaker ด้วยการตั้งค่าล่วงหน้าเริ่มต้น รวมถึงการตั้งค่าโปรไฟล์ผู้ใช้ บทบาท IAM การตรวจสอบสิทธิ์ IAM และการเข้าถึงอินเทอร์เน็ตสาธารณะ สมุดบันทึกสำหรับโพสต์นี้ถือว่า ml.g5.2xlarge
ประเภทอินสแตนซ์ หากต้องการตรวจสอบหรือเพิ่มโควต้าของคุณ ให้เปิดคอนโซล AWS Service Quotas จากนั้นเลือก บริการ AWS ในบานหน้าต่างนำทาง ให้เลือก อเมซอน SageMakerและอ้างอิงถึงค่าสำหรับแอป Studio KernelGateway ที่ทำงานอยู่ ml.g5.2xlarge
ตัวอย่าง.
หลังจากยืนยันขีดจำกัดโควต้าของคุณแล้ว คุณจะต้องดำเนินการอ้างอิงให้เสร็จสิ้นเพื่อใช้แชท Llama 2 7b
การแชท Llama 2 7b มีให้บริการภายใต้ ใบอนุญาตลามะ 2. หากต้องการเข้าถึง Llama 2 บน Hugging Face คุณต้องทำตามขั้นตอนสองสามขั้นตอนก่อน:
- สร้างบัญชี Hugging Face หากคุณยังไม่มี
- กรอกแบบฟอร์ม “ขอเข้าถึง Llama เวอร์ชันถัดไป” บน Meta เว็บไซต์.
- ขอเข้าถึง ลามะ 2 7b แชท บนใบหน้ากอด
หลังจากที่คุณได้รับสิทธิ์ในการเข้าถึง คุณสามารถสร้างโทเค็นการเข้าถึงใหม่เพื่อเข้าถึงโมเดลได้ หากต้องการสร้างโทเค็นการเข้าถึง ให้ไปที่ การตั้งค่า บนเว็บไซต์ Hugging Face
คุณต้องมีบัญชีกับ Pinecone เพื่อใช้เป็นฐานข้อมูลเวกเตอร์ Pinecone พร้อมใช้งานบน AWS ผ่านทาง AWS Marketplace. เว็บไซต์ Pinecone ยังมีตัวเลือกในการสร้าง บัญชีฟรี ที่มาพร้อมกับสิทธิ์ในการสร้างดัชนีเดียวซึ่งเพียงพอสำหรับวัตถุประสงค์ของโพสต์นี้ หากต้องการดึงคีย์ Pinecone ของคุณ ให้เปิดไฟล์ คอนโซลไพน์โคน และเลือก คีย์ API.
ตั้งค่าโน้ตบุ๊กและสภาพแวดล้อม
หากต้องการติดตามโค้ดในโพสต์นี้ ให้เปิด SageMaker Studio และโคลนโค้ดต่อไปนี้ พื้นที่เก็บข้อมูล GitHub. จากนั้นให้เปิดสมุดบันทึก studio-local-gen-ai/rag/RAG-with-Llama-2-on-Studio.ipynb และเลือกรูปภาพที่ปรับให้เหมาะสมด้วย GPU PyTorch 2.0.0 Python 3.10, เคอร์เนล Python 3 และ ml.g5.2xlarge
เป็นประเภทอินสแตนซ์ หากนี่เป็นครั้งแรกที่คุณใช้สมุดบันทึก SageMaker Studio โปรดดูที่ สร้างหรือเปิด Amazon SageMaker Studio Notebook.
ในการตั้งค่าสภาพแวดล้อมการพัฒนา คุณต้องติดตั้งไลบรารี Python ที่จำเป็น ดังแสดงในโค้ดต่อไปนี้:
%%writefile requirements.txt
sagemaker>=2.175.0
transformers==4.33.0
accelerate==0.21.0
datasets==2.13.0
langchain==0.0.297
pypdf>=3.16.3
pinecone-client
sentence_transformers
safetensors>=0.3.3
!pip install -U -r requirements.txt
โหลดโมเดลที่ผ่านการฝึกอบรมและโทเค็นไนเซอร์
หลังจากที่คุณนำเข้าไลบรารีที่จำเป็นแล้ว คุณสามารถโหลดไฟล์ ลามะ-2 7b แชท โมเดลพร้อมกับโทเค็นไนเซอร์ที่เกี่ยวข้องจาก Hugging Face อาร์ติแฟกต์ของโมเดลที่โหลดเหล่านี้จะถูกจัดเก็บไว้ในไดเร็กทอรีภายในเครื่องภายใน SageMaker Studio ซึ่งช่วยให้คุณสามารถโหลดซ้ำลงในหน่วยความจำได้อย่างรวดเร็วทุกครั้งที่คุณต้องการทำงานต่อในเวลาอื่น
import torch from transformers import ( AutoTokenizer, LlamaTokenizer, LlamaForCausalLM, GenerationConfig, AutoModelForCausalLM
)
import transformers tg_model_id = "meta-llama/Llama-2-7b-chat-hf" #the model id in Hugging Face
tg_model_path = f"./tg_model/{tg_model_id}" #the local directory where the model will be saved tg_model = AutoModelForCausalLM.from_pretrained(tg_model_id, token=hf_access_token,do_sample=True, use_safetensors=True, device_map="auto", torch_dtype=torch.float16
tg_tokenizer = AutoTokenizer.from_pretrained(tg_model_id, token=hf_access_token) tg_model.save_pretrained(save_directory=tg_model_path, from_pt=True)
tg_tokenizer.save_pretrained(save_directory=tg_model_path, from_pt=True)
ถามคำถามที่ต้องการข้อมูลที่ทันสมัย
ตอนนี้คุณสามารถเริ่มใช้โมเดลและถามคำถามได้แล้ว โมเดลแชท Llama-2 คาดหวังว่าข้อความแจ้งจะเป็นไปตามรูปแบบต่อไปนี้:
<s>[INST] <<SYS>>
system_prompt
<<SYS>>
{{ user_message }} [/INST]
คุณสามารถใช้ พรอมต์เทมเพลต จาก LangChain เพื่อสร้างสูตรอาหารตามรูปแบบพร้อมท์ เพื่อให้คุณสามารถสร้างพร้อมท์ได้อย่างง่ายดายในอนาคต:
from langchain import PromptTemplate template = """<s>[INST] <<SYS>>nYou are an assistant for question-answering tasks. You are helpful and friendly. Use the following pieces of retrieved context to answer the query. If you don't know the answer, you just say I don't know. Use three sentences maximum and keep the answer concise.
<<SYS>>n
{context}n
{question} [/INST] """
prompt_template = PromptTemplate( template=template, input_variables=['context','question'] )
เรามาถามคำถามกับโมเดลที่ต้องการข้อมูลล่าสุดจากปี 2023 คุณสามารถใช้ LangChain และโดยเฉพาะ LLMChain ประเภทของลูกโซ่และส่งผ่านเป็นพารามิเตอร์ LLM เทมเพลตพร้อมท์ที่คุณสร้างไว้ก่อนหน้านี้ และคำถาม:
question = "When can I visit the AWS M&E Customer Experience Center in New York City?" tg_tokenizer.add_special_tokens( {"pad_token": "[PAD]"} )
tg_tokenizer.padding_side = "left" tg_pipe = transformers.pipeline(task='text-generation', model=tg_model, tokenizer=tg_tokenizer, num_return_sequences=1, eos_token_id=tg_tokenizer.eos_token_id, pad_token_id=tg_tokenizer.eos_token_id, max_new_tokens=400, temperature=0.7) from langchain.chains import LLMChain
from langchain.llms import HuggingFacePipeline llm=HuggingFacePipeline(pipeline=tg_pipe, model_kwargs={'temperature':0.7})
llm_chain = LLMChain(llm=llm, prompt=prompt_template)
no_context_response = llm_chain.predict(context="", question=question)
print(no_context_response)
เราได้รับคำตอบที่สร้างขึ้นดังต่อไปนี้:
ขอขอบคุณที่ติดต่อเรา! ขณะนี้ AWS M&E Customer Experience Center ในนิวยอร์กซิตี้ปิดให้บริการอยู่เนื่องจากการแพร่ระบาดของโควิด-19 อย่างไรก็ตาม คุณสามารถตรวจสอบเว็บไซต์อย่างเป็นทางการหรือบัญชีโซเชียลมีเดียเพื่อดูข้อมูลอัปเดตว่าศูนย์จะเปิดอีกครั้งเมื่อใด ในระหว่างนี้ คุณสามารถสำรวจทัวร์เสมือนจริงและแหล่งข้อมูลออนไลน์ได้
ปรับปรุงคำตอบโดยเพิ่มบริบทให้กับพรอมต์
คำตอบที่เราสร้างขึ้นนั้นไม่เป็นความจริงทั้งหมด มาดูกันว่าเราสามารถปรับปรุงได้โดยการให้บริบทบางอย่างหรือไม่ คุณสามารถเพิ่มสารสกัดจากโพสต์ได้ AWS ประกาศศูนย์ประสบการณ์ลูกค้า M&E แห่งใหม่ในนิวยอร์กซึ่งรวมถึงการอัปเดตในหัวข้อตั้งแต่ปี 2023:
context = """Media and entertainment (M&E) customers continue to face challenges in creating more content, more quickly, and distributing it to more endpoints than ever before in their quest to delight viewers globally. Amazon Web Services (AWS), along with AWS Partners, have showcased the rapid evolution of M&E solutions for years at industry events like the National Association of Broadcasters (NAB) Show and the International Broadcast Convention (IBC). Until now, AWS for M&E technology demonstrations were accessible in this way just a few weeks out of the year. Customers are more engaged than ever before; they want to have higher quality conversations regarding user experience and media tooling. These conversations are best supported by having an interconnected solution architecture for reference. Scheduling a visit of the M&E Customer Experience Center will be available starting November 13th, please send an email to AWS-MediaEnt-CXC@amazon.com."""
ใช้ LLMChain อีกครั้งและส่งข้อความก่อนหน้าเป็นบริบท:
context_response = llm_chain.predict(context=context, question=question)
print(context_response)
คำตอบใหม่ตอบคำถามด้วยข้อมูลล่าสุด:
คุณสามารถเยี่ยมชม AWS M&E Customer Experience Center ในนิวยอร์กซิตี้ได้ตั้งแต่วันที่ 13 พฤศจิกายน โปรดส่งอีเมลไปที่ AWS-MediaEnt-CXC@amazon.com เพื่อกำหนดเวลาการเยี่ยมชม
เรายืนยันว่าด้วยการเพิ่มบริบทที่ถูกต้อง ประสิทธิภาพของแบบจำลองจึงได้รับการปรับปรุง ตอนนี้คุณสามารถมุ่งความสนใจไปที่การค้นหาและเพิ่มบริบทที่เหมาะสมสำหรับคำถามที่ถาม กล่าวอีกนัยหนึ่ง ใช้ RAG
ใช้การตอบคำถาม RAG ด้วยการฝัง BGE และ Pinecone
ในช่วงหัวเลี้ยวหัวต่อนี้ คุณต้องตัดสินใจเกี่ยวกับแหล่งข้อมูลเพื่อเพิ่มพูนความรู้ของแบบจำลอง แหล่งที่มาเหล่านี้อาจเป็นหน้าเว็บภายในหรือเอกสารภายในองค์กรของคุณ หรือแหล่งข้อมูลที่เปิดเผยต่อสาธารณะ เพื่อวัตถุประสงค์ของโพสต์นี้และเพื่อความเรียบง่าย เราได้เลือกโพสต์บล็อก AWS สองโพสต์ที่เผยแพร่ในปี 2023:
โพสต์เหล่านี้พร้อมใช้งานแล้วในรูปแบบเอกสาร PDF ในไดเร็กทอรีโปรเจ็กต์ข้อมูลใน SageMaker Studio เพื่อการเข้าถึงที่รวดเร็ว หากต้องการแบ่งเอกสารออกเป็นส่วนๆ ที่สามารถจัดการได้ คุณสามารถใช้ RecursiveCharacterTextSplitter วิธีการจาก LangChain:
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.document_loaders import PyPDFDirectoryLoader loader = PyPDFDirectoryLoader("./data/") documents = loader.load() text_splitter=RecursiveCharacterTextSplitter( chunk_size=1000, chunk_overlap=5
)
docs = text_splitter.split_documents(documents)
จากนั้น ให้ใช้โมเดลการฝัง BGE bge-small-en ที่สร้างขึ้นโดย สถาบันปัญญาประดิษฐ์ปักกิ่ง (BAAI) ที่มีอยู่ใน Hugging Face เพื่อสร้างการฝังของชิ้นส่วนเหล่านี้ ดาวน์โหลดและบันทึกโมเดลในไดเร็กทอรีภายในเครื่องใน Studio เราใช้ fp32 เพื่อให้สามารถทำงานบน CPU ของอินสแตนซ์ได้
em_model_name = "BAAI/bge-small-en"
em_model_path = f"./em-model" from transformers import AutoModel
# Load model from HuggingFace Hub
em_model = AutoModel.from_pretrained(em_model_name,torch_dtype=torch.float32)
em_tokenizer = AutoTokenizer.from_pretrained(em_model_name,device="cuda") # save model to disk
em_tokenizer.save_pretrained(save_directory=f"{em_model_path}/model",from_pt=True)
em_model.save_pretrained(save_directory=f"{em_model_path}/model",from_pt=True)
em_model.eval()
ใช้โค้ดต่อไปนี้เพื่อสร้างฟังก์ชัน embedding_generator ซึ่งรับส่วนเอกสารเป็นอินพุต และสร้างการฝังโดยใช้โมเดล BGE:
# Tokenize sentences
def tokenize_text(_input, device): return em_tokenizer( [_input], padding=True, truncation=True, return_tensors='pt' ).to(device) # Run embedding task as a function with model and text sentences as input
def embedding_generator(_input, normalize=True): # Compute token embeddings with torch.no_grad(): embedded_output = em_model( **tokenize_text( _input, em_model.device ) ) sentence_embeddings = embedded_output[0][:, 0] # normalize embeddings if normalize: sentence_embeddings = torch.nn.functional.normalize( sentence_embeddings, p=2, dim=1 ) return sentence_embeddings[0, :].tolist() sample_sentence_embedding = embedding_generator(docs[0].page_content)
print(f"Embedding size of the document --->", len(sample_sentence_embedding))
ในโพสต์นี้ เราสาธิตเวิร์กโฟลว์ RAG โดยใช้ Pinecone ซึ่งเป็นระบบคลาวด์ที่ได้รับการจัดการ ฐานข้อมูลเวกเตอร์ ที่ยังมี API เพื่อค้นหาความคล้ายคลึงกัน คุณมีอิสระที่จะเขียนโค้ดต่อไปนี้ใหม่เพื่อใช้ฐานข้อมูลเวกเตอร์ที่คุณต้องการ
เราเริ่มต้นก ไคลเอนต์ Pinecone หลาม และสร้างดัชนีการค้นหาเวกเตอร์ใหม่โดยใช้ความยาวเอาต์พุตของโมเดลการฝัง เราใช้คลาส Pinecone ในตัวของ LangChain เพื่อนำเข้าการฝังที่เราสร้างในขั้นตอนก่อนหน้า จำเป็นต้องมีพารามิเตอร์สามตัว ได้แก่ เอกสารที่จะนำเข้า ฟังก์ชันตัวสร้างการฝัง และชื่อของดัชนี Pinecone
import pinecone
pinecone.init( api_key = os.environ["PINECONE_API_KEY"], environment = os.environ["PINECONE_ENV"]
)
#check if index already exists, if not we create it
index_name = "rag-index"
if index_name not in pinecone.list_indexes(): pinecone.create_index( name=index_name, dimension=len(sample_sentence_embedding), ## 384 for bge-small-en metric='cosine' ) #insert the embeddings
from langchain.vectorstores import Pinecone
vector_store = Pinecone.from_documents( docs, embedding_generator, index_name=index_name
)
เมื่อโหลดโมเดลแชท Llama-2 7B ลงในหน่วยความจำและการฝังที่รวมอยู่ในดัชนี Pinecone ตอนนี้คุณสามารถรวมองค์ประกอบเหล่านี้เพื่อปรับปรุงการตอบกลับของ Llama 2 สำหรับกรณีการใช้งานการตอบคำถามของเรา เพื่อให้บรรลุเป้าหมายนี้ คุณสามารถใช้ LangChain ได้ การเรียกค้นQAซึ่งเพิ่มพรอมต์เริ่มต้นด้วยเอกสารที่คล้ายกันมากที่สุดจากร้านค้าเวกเตอร์ โดยการตั้งค่า return_source_documents=True
คุณจะได้รับการเปิดเผยเอกสารที่ใช้ในการสร้างคำตอบโดยเป็นส่วนหนึ่งของการตอบกลับ ทำให้คุณสามารถตรวจสอบความถูกต้องของคำตอบได้
from langchain.chains import RetrievalQA
import textwrap #helper method to improve the readability of the response
def print_response(llm_response): temp = [textwrap.fill(line, width=100) for line in llm_response['result'].split('n')] response = 'n'.join(temp) print(f"{llm_response['query']}n n{response}'n n Source Documents:") for source in llm_response["source_documents"]: print(source.metadata) llm_qa_chain = RetrievalQA.from_chain_type( llm=llm, #the Llama-2 7b chat model chain_type='stuff', retriever=vector_store.as_retriever(search_kwargs={"k": 2}), # perform similarity search in Pinecone return_source_documents=True, #show the documents that were used to answer the question chain_type_kwargs={"prompt": prompt_template}
)
print_response(llm_qa_chain(question))
เราได้รับคำตอบดังต่อไปนี้:
ถาม: ฉันสามารถเยี่ยมชม AWS M&E Customer Experience Center ในนิวยอร์กซิตี้ได้เมื่อใด
ตอบ: ฉันยินดีที่จะช่วย! ตามบริบท AWS M&E Customer Experience Center ในนิวยอร์กซิตี้จะพร้อมให้เข้าชมได้ตั้งแต่วันที่ 13 พฤศจิกายน คุณสามารถส่งอีเมลไปที่ AWS-MediaEnt-CXC@amazon.com เพื่อกำหนดเวลาการเยี่ยมชมได้
เอกสารที่มา:
{'page': 4.0, 'source': 'data/AWS ประกาศศูนย์ประสบการณ์ลูกค้า M&E แห่งใหม่ในนิวยอร์กซิตี้ _ AWS สำหรับ M&E Blog.pdf'}
{'page': 2.0, 'source': 'data/AWS ประกาศศูนย์ประสบการณ์ลูกค้า M&E แห่งใหม่ในนิวยอร์กซิตี้ _ AWS สำหรับ M&E Blog.pdf'}
เรามาลองคำถามอื่น:
question2=" How many awards have AWS Media Services won in 2023?"
print_response(llm_qa_chain(question2))
เราได้รับคำตอบดังต่อไปนี้:
ถาม: AWS Media Services ได้รับรางวัลกี่รางวัลในปี 2023
ตอบ: จากข้อมูลในบล็อกโพสต์ AWS Media Services ได้รับรางวัลอุตสาหกรรมถึง 2023 รางวัลในปี XNUMX'
เอกสารที่มา:
{'page': 0.0, 'source': 'data/AWS Media Services ได้รับรางวัลอุตสาหกรรม _ AWS สำหรับ M&E Blog.pdf'}
{'page': 1.0, 'source': 'data/AWS Media Services ได้รับรางวัลอุตสาหกรรม _ AWS สำหรับ M&E Blog.pdf'}
หลังจากที่คุณได้สร้างระดับความมั่นใจที่เพียงพอแล้ว คุณสามารถปรับใช้แบบจำลองได้ ตำแหน่งข้อมูล SageMaker สำหรับการอนุมานแบบเรียลไทม์. ตำแหน่งข้อมูลเหล่านี้ได้รับการจัดการอย่างเต็มรูปแบบและให้การสนับสนุนการปรับขนาดอัตโนมัติ
SageMaker นำเสนอการอนุมานโมเดลขนาดใหญ่โดยใช้คอนเทนเนอร์การอนุมานโมเดลขนาดใหญ่ (LMI) ซึ่งเราสามารถใช้เพื่อปรับใช้โมเดลของเรา คอนเทนเนอร์เหล่านี้มาพร้อมกับไลบรารีโอเพ่นซอร์สที่ติดตั้งไว้ล่วงหน้า เช่น DeepSpeed ซึ่งอำนวยความสะดวกในการใช้งานเทคนิคการเพิ่มประสิทธิภาพ เช่น เทนเซอร์ขนานระหว่างการอนุมาน นอกจากนี้ พวกเขายังใช้ DJLServing เป็นเซิร์ฟเวอร์โมเดลรวมที่สร้างไว้ล่วงหน้า DJLเสิร์ฟ เป็นโซลูชันการแสดงโมเดลสากลประสิทธิภาพสูงที่ให้การสนับสนุนชุดแบบไดนามิกและการปรับขนาดอัตโนมัติของผู้ปฏิบัติงาน ซึ่งช่วยเพิ่มปริมาณงาน
ในแนวทางของเรา เราใช้ SageMaker LMI ร่วมกับ DJLServing และ DeepSpeed Inference เพื่อปรับใช้โมเดล Llama-2-chat 7b และ BGE กับตำแหน่งข้อมูล SageMaker ที่ทำงานอยู่ ml.g5.2xlarge
อินสแตนซ์ทำให้สามารถอนุมานแบบเรียลไทม์ได้ หากคุณต้องการทำตามขั้นตอนเหล่านี้ด้วยตัวเอง โปรดดูเอกสารประกอบ สมุดบันทึก สำหรับคำแนะนำโดยละเอียด
คุณจะต้องมีสอง ml.g5.2xlarge
อินสแตนซ์สำหรับการปรับใช้ หากต้องการตรวจสอบหรือเพิ่มโควต้าของคุณ ให้เปิดคอนโซล AWS Service Quotas จากนั้นเลือก บริการ AWS ในบานหน้าต่างนำทาง ให้เลือก อเมซอน SageMakerและอ้างถึงค่าของ ml.g5.2xlarge
สำหรับการใช้งานปลายทาง
ขั้นตอนต่อไปนี้สรุปขั้นตอนการปรับใช้โมเดลแบบกำหนดเองสำหรับเวิร์กโฟลว์ RAG บนตำแหน่งข้อมูล SageMaker:
- ปรับใช้ ลามะ-2 7b รูปแบบการแชทไปยังจุดสิ้นสุดแบบเรียลไทม์ของ SageMaker ที่ทำงานบน
ml.g5.2xlarge
ตัวอย่างสำหรับการสร้างข้อความที่รวดเร็ว - ปรับใช้ BAAI/bge-ขนาดเล็ก-en-v1.5 การฝังโมเดลเข้ากับจุดสิ้นสุดแบบเรียลไทม์ของ SageMaker ที่ทำงานบน
ml.g5.2xlarge
ตัวอย่าง. หรือคุณสามารถปรับใช้โมเดลการฝังของคุณเองได้ - ถามคำถามและใช้ LangChain การเรียกค้นQA เพื่อเพิ่มพรอมต์ด้วยเอกสารที่คล้ายกันมากที่สุดจาก Pinecone คราวนี้ใช้โมเดลที่ใช้งานในจุดสิ้นสุดแบบเรียลไทม์ของ SageMaker:
# convert your local LLM into SageMaker endpoint LLM
llm_sm_ep = SagemakerEndpoint( endpoint_name=tg_sm_model.endpoint_name, # <--- Your text-gen model endpoint name region_name=region, model_kwargs={ "temperature": 0.05, "max_new_tokens": 512 }, content_handler=content_handler,
) llm_qa_smep_chain = RetrievalQA.from_chain_type( llm=llm_sm_ep, # <--- This uses SageMaker Endpoint model for inference chain_type='stuff', retriever=vector_store.as_retriever(search_kwargs={"k": 2}), return_source_documents=True, chain_type_kwargs={"prompt": prompt_template}
)
- ใช้ LangChain เพื่อตรวจสอบว่าตำแหน่งข้อมูล SageMaker ที่มีโมเดลการฝังทำงานตามที่คาดไว้ เพื่อให้สามารถนำไปใช้สำหรับการนำเข้าเอกสารในอนาคต:
response_model = smr_client.invoke_endpoint( EndpointName=em_sm_model.endpoint_name, <--- Your embedding model endpoint name Body=json.dumps({ "text": "This is a sample text" }), ContentType="application/json",
) outputs = json.loads(response_model["Body"].read().decode("utf8"))['outputs']
ทำความสะอาด
ทำตามขั้นตอนต่อไปนี้เพื่อล้างทรัพยากรของคุณ:
- เมื่อคุณทำงานในสมุดบันทึก SageMaker Studio เสร็จแล้ว ตรวจสอบให้แน่ใจว่าคุณได้ปิดเครื่องแล้ว
ml.g5.2xlarge
อินสแตนซ์เพื่อหลีกเลี่ยงการเรียกเก็บเงินใด ๆ โดยเลือกไอคอนหยุด คุณยังสามารถตั้งค่าได้ สคริปต์การกำหนดค่าวงจรชีวิต เพื่อปิดทรัพยากรโดยอัตโนมัติเมื่อไม่ได้ใช้งาน
- หากคุณปรับใช้โมเดลกับตำแหน่งข้อมูล SageMaker ให้รันโค้ดต่อไปนี้ที่ส่วนท้ายของสมุดบันทึกเพื่อลบตำแหน่งข้อมูล:
#delete your text generation endpoint
sm_client.delete_endpoint( EndpointName=tg_sm_model.endpoint_name
)
# delete your text embedding endpoint
sm_client.delete_endpoint( EndpointName=em_sm_model.endpoint_name
)
- สุดท้าย ให้รันบรรทัดต่อไปนี้เพื่อลบดัชนี Pinecone:
pinecone.delete_index(index_name)
สรุป
สมุดบันทึก SageMaker มอบวิธีที่ตรงไปตรงมาในการเริ่มต้นการเดินทางของคุณด้วยการเรียกข้อมูล Augmented Generation ช่วยให้คุณสามารถทดลองแบบโต้ตอบกับโมเดล การกำหนดค่า และคำถามต่างๆ ได้โดยไม่ต้องเพิ่มโครงสร้างพื้นฐานเพิ่มเติม ในโพสต์นี้ เราได้แสดงวิธีเพิ่มประสิทธิภาพของการแชท Llama 2 7b ในกรณีการใช้งานการตอบคำถามโดยใช้ LangChain, โมเดลการฝัง BGE และ Pinecone ในการเริ่มต้น ให้เปิด SageMaker Studio และเรียกใช้ไฟล์ สมุดบันทึก มีจำหน่ายดังต่อไปนี้ repo GitHub. กรุณาแบ่งปันความคิดของคุณในส่วนความคิดเห็น!
เกี่ยวกับผู้แต่ง
อนาสตาเซีย เซเวเลก้า เป็นสถาปนิกโซลูชันการเรียนรู้ของเครื่องและผู้เชี่ยวชาญด้าน AI ที่ AWS เธอทำงานร่วมกับลูกค้าใน EMEA และช่วยพวกเขาออกแบบโซลูชันแมชชีนเลิร์นนิงตามขนาดโดยใช้บริการของ AWS เธอทำงานในโครงการในโดเมนต่างๆ รวมถึง Natural Language Processing (NLP), MLOps และเครื่องมือ Low Code No Code
ปรานาฟ เมอร์ธี เป็นสถาปนิกโซลูชันผู้เชี่ยวชาญ AI/ML ที่ AWS เขามุ่งเน้นที่การช่วยเหลือลูกค้าในการสร้าง ฝึกอบรม ปรับใช้ และโยกย้ายปริมาณงานการเรียนรู้ของเครื่อง (ML) ไปยัง SageMaker ก่อนหน้านี้เขาเคยทำงานในอุตสาหกรรมเซมิคอนดักเตอร์โดยพัฒนาโมเดลคอมพิวเตอร์วิทัศน์ขนาดใหญ่ (CV) และการประมวลผลภาษาธรรมชาติ (NLP) เพื่อปรับปรุงกระบวนการเซมิคอนดักเตอร์ ในเวลาว่าง เขาชอบเล่นหมากรุกและท่องเที่ยว
- เนื้อหาที่ขับเคลื่อนด้วย SEO และการเผยแพร่ประชาสัมพันธ์ รับการขยายวันนี้
- PlatoData.Network Vertical Generative Ai เพิ่มพลังให้กับตัวเอง เข้าถึงได้ที่นี่.
- เพลโตไอสตรีม. Web3 อัจฉริยะ ขยายความรู้ เข้าถึงได้ที่นี่.
- เพลโตESG. คาร์บอน, คลีนเทค, พลังงาน, สิ่งแวดล้อม แสงอาทิตย์, การจัดการของเสีย. เข้าถึงได้ที่นี่.
- เพลโตสุขภาพ เทคโนโลยีชีวภาพและข่าวกรองการทดลองทางคลินิก เข้าถึงได้ที่นี่.
- ที่มา: https://aws.amazon.com/blogs/machine-learning/use-amazon-sagemaker-studio-to-build-a-rag-question-answering-solution-with-llama-2-langchain-and-pinecone-for-fast-experimentation/
- :มี
- :เป็น
- :ไม่
- :ที่ไหน
- $ ขึ้น
- 1
- 10
- 100
- 13
- 16
- 2023
- 33
- 500
- 7
- a
- AC
- วิทยาลัย
- เข้า
- การเข้าถึงข้อมูล
- สามารถเข้าถึงได้
- ตาม
- ลงชื่อเข้าใช้
- บัญชี
- ความถูกต้อง
- ถูกต้อง
- บรรลุ
- เพิ่ม
- เพิ่ม
- เพิ่มเติม
- นอกจากนี้
- เป็นไปตาม
- อีกครั้ง
- AI
- AI / ML
- อนุญาต
- การอนุญาต
- ช่วยให้
- ตาม
- แล้ว
- ด้วย
- อเมซอน
- อเมซอน SageMaker
- สตูดิโอ Amazon SageMaker
- Amazon Web Services
- Amazon Web Services (AWS)
- an
- และ
- ประกาศ
- คำตอบ
- คำตอบ
- ใด
- APIs
- app
- การใช้งาน
- เข้าใกล้
- ปพลิเคชัน
- สถาปัตยกรรม
- เป็น
- เทียม
- ปัญญาประดิษฐ์
- AS
- ถาม
- ประเมินผล
- ผู้ช่วย
- สมาคม
- ถือว่า
- At
- เสริม
- เติม
- การเพิ่ม
- การยืนยันตัวตน
- รถยนต์
- อัตโนมัติ
- ใช้ได้
- หลีกเลี่ยง
- ที่ได้รับรางวัล
- ได้รับรางวัล
- AWS
- ตาม
- BE
- รับ
- ก่อน
- ที่ดีที่สุด
- ดีกว่า
- บล็อก
- บล็อกโพสต์
- ร่างกาย
- ออกอากาศ
- สร้าง
- built-in
- by
- CAN
- กรณี
- กรณี
- ศูนย์
- โซ่
- ห่วงโซ่
- ความท้าทาย
- โหลด
- ตรวจสอบ
- หมากรุก
- Choose
- เลือก
- เลือก
- เมือง
- ชั้น
- ปลาเดยส์
- คลิก
- ปิด
- รหัส
- ร่วมมือ
- เพื่อนร่วมงาน
- COM
- รวมกัน
- รวม
- อย่างไร
- มา
- ความคิดเห็น
- สมบูรณ์
- คำนวณ
- คอมพิวเตอร์
- วิสัยทัศน์คอมพิวเตอร์
- กระชับ
- ความมั่นใจ
- องค์ประกอบ
- ยืนยัน
- ประกอบ
- ปลอบใจ
- ภาชนะบรรจุ
- เนื้อหา
- สิ่งแวดล้อม
- ต่อ
- การประชุม
- การสนทนา
- แปลง
- ตรงกัน
- ได้
- Covid-19
- COVID-19 การระบาดใหญ่
- สร้าง
- ที่สร้างขึ้น
- การสร้าง
- ขณะนี้
- ประเพณี
- ลูกค้า
- ประสบการณ์ของลูกค้า
- ลูกค้า
- ข้อมูล
- ฐานข้อมูล
- ฐานข้อมูล
- ตัดสินใจ
- ค่าเริ่มต้น
- พอใจ
- สาธิต
- แสดงให้เห็นถึง
- การอ้างอิง
- ปรับใช้
- นำไปใช้
- ปรับใช้
- การใช้งาน
- รายละเอียด
- ที่กำลังพัฒนา
- พัฒนาการ
- เครื่อง
- บทสนทนา
- ต่าง
- สนทนา
- จำหน่าย
- แบ่ง
- เอกสาร
- เอกสาร
- โดเมน
- โดเมน
- สวม
- Dont
- ลง
- ดาวน์โหลด
- สอง
- ในระหว่าง
- พลวัต
- e
- ก่อน
- อย่างง่ายดาย
- ความพยายาม
- องค์ประกอบ
- อีเมล
- การฝัง
- EMEA
- ช่วยให้
- การเปิดใช้งาน
- ปลาย
- ปลายทาง
- หมั้น
- เสริม
- ความบันเทิง
- อย่างสิ้นเชิง
- สิ่งแวดล้อม
- พร้อม
- ที่จัดตั้งขึ้น
- เหตุการณ์
- เคย
- วิวัฒนาการ
- ตัวอย่าง
- ที่มีอยู่
- คาดหวัง
- ที่คาดหวัง
- ประสบการณ์
- การทดลอง
- สำรวจ
- ภายนอก
- สารสกัด
- ใบหน้า
- อำนวยความสะดวก
- FAST
- ที่เร็วที่สุด
- คุณสมบัติ
- สองสาม
- สุดท้าย
- หา
- ชื่อจริง
- ครั้งแรก
- ห้า
- โฟกัส
- มุ่งเน้นไปที่
- ปฏิบัติตาม
- ดังต่อไปนี้
- สำหรับ
- ฟอร์ม
- รูป
- ข้างหน้า
- ฟรี
- เป็นมิตร
- ราคาเริ่มต้นที่
- อย่างเต็มที่
- ฟังก์ชัน
- การทำงาน
- อนาคต
- ได้รับ
- สร้าง
- สร้าง
- สร้าง
- รุ่น
- กำเนิด
- กำเนิด AI
- เครื่องกำเนิดไฟฟ้า
- ได้รับ
- ทั่วโลก
- เป้าหมาย
- ไป
- GPU
- รับ
- มีความสุข
- มี
- มี
- he
- ช่วย
- เป็นประโยชน์
- การช่วยเหลือ
- จะช่วยให้
- ระดับสูง
- ประสิทธิภาพสูง
- สูงกว่า
- ของเขา
- ตี
- สรุป ความน่าเชื่อถือของ Olymp Trade?
- ทำอย่างไร
- อย่างไรก็ตาม
- HTML
- HTTPS
- Hub
- กอดใบหน้า
- i
- IBC
- ICON
- ID
- เอกลักษณ์
- if
- แสดงให้เห็นถึง
- ภาพ
- การดำเนินการ
- การดำเนินงาน
- การดำเนินการ
- นำเข้า
- ปรับปรุง
- การปรับปรุง
- ช่วยเพิ่ม
- in
- ในอื่น ๆ
- รวมถึง
- รวมทั้ง
- เพิ่ม
- ที่เพิ่มขึ้น
- ดัชนี
- อุตสาหกรรม
- กิจกรรมอุตสาหกรรม
- ข้อมูล
- โครงสร้างพื้นฐาน
- แรกเริ่ม
- อินพุต
- ติดตั้ง
- ตัวอย่าง
- คำแนะนำการใช้
- แบบบูรณาการ
- Intelligence
- เชื่อมต่อถึงกัน
- ภายใน
- International
- อินเทอร์เน็ต
- อินเทอร์เน็ต
- เข้าไป
- IT
- ITS
- การเดินทาง
- jpg
- JSON
- เพียงแค่
- เก็บ
- กุญแจ
- ทราบ
- ความรู้
- ภาษา
- ใหญ่
- เปิดตัว
- การเรียนรู้
- ซ้าย
- ความยาว
- ชั้น
- ห้องสมุด
- กดไลก์
- LIMIT
- Line
- ดูรายละเอียด
- LLM
- โหลด
- loader
- ในประเทศ
- ต่ำ
- เครื่อง
- เรียนรู้เครื่อง
- ทำ
- จัดการได้
- การจัดการ
- หลาย
- การจับคู่
- สูงสุด
- ขณะ
- ภาพบรรยากาศ
- หน่วยความจำ
- Meta
- เมตาดาต้า
- วิธี
- อพยพ
- ML
- ม.ป.ป
- แบบ
- โมเดล
- ข้อมูลเพิ่มเติม
- มากที่สุด
- ต้อง
- NAB
- ชื่อ
- แห่งชาติ
- โดยธรรมชาติ
- ประมวลผลภาษาธรรมชาติ
- นำทาง
- การเดินเรือ
- จำเป็น
- จำเป็นต้อง
- ความต้องการ
- ใหม่
- การเข้าถึงใหม่
- นิวยอร์ก
- เมืองนิวยอร์ก
- ถัดไป
- NLP
- ไม่
- สมุดบันทึก
- พฤศจิกายน
- ตอนนี้
- of
- เสนอ
- เสนอ
- เป็นทางการ
- เว็บไซต์อย่างเป็นทางการ
- on
- ONE
- ออนไลน์
- เปิด
- โอเพนซอร์ส
- การปรับให้เหมาะสม
- ตัวเลือกเสริม (Option)
- Options
- or
- organizacja
- OS
- อื่นๆ
- ของเรา
- ออก
- เค้าโครง
- เอาท์พุต
- เอาท์พุท
- ของตนเอง
- เบาะ
- หน้า
- การระบาดกระจายทั่ว
- บานหน้าต่าง
- พารามิเตอร์
- ส่วนหนึ่ง
- พาร์ทเนอร์
- ส่ง
- รูปแบบไฟล์ PDF
- ดำเนินการ
- การปฏิบัติ
- สิทธิ์
- ระยะ
- ชิ้น
- เพลโต
- เพลโตดาต้าอินเทลลิเจนซ์
- เพลโตดาต้า
- เล่น
- กรุณา
- โพสต์
- โพสต์
- ที่ต้องการ
- นำเสนอ
- ก่อน
- ก่อนหน้านี้
- กระบวนการ
- กระบวนการ
- การประมวลผล
- โปรไฟล์
- โครงการ
- โครงการ
- ต้นแบบ
- การสร้างต้นแบบ
- ให้
- การให้
- สาธารณะ
- สาธารณชน
- การตีพิมพ์
- วัตถุประสงค์
- หลาม
- ไฟฉาย
- คุณภาพ
- การแสวงหา
- คำถาม
- คำถาม
- รวดเร็ว
- อย่างรวดเร็ว
- รวดเร็ว
- อย่างรวดเร็ว
- ถึง
- เรียลไทม์
- เมื่อเร็ว ๆ นี้
- สูตร
- อ้างอิง
- การอ้างอิง
- เกี่ยวกับ
- ตรงประเด็น
- เปิดใหม่
- ต้องการ
- จำเป็นต้องใช้
- ความต้องการ
- ต้อง
- แหล่งข้อมูล
- คำตอบ
- การตอบสนอง
- ผล
- เรซูเม่
- กลับ
- ทบทวน
- ขวา
- บทบาท
- วิ่ง
- วิ่ง
- sagemaker
- ประโยชน์
- เดียวกัน
- ลด
- ที่บันทึกไว้
- กล่าว
- ขนาด
- ปรับ
- กำหนด
- การกำหนด
- ค้นหา
- ค้นหา
- ที่สอง
- ส่วน
- เห็น
- สารกึ่งตัวนำ
- ส่ง
- ส่ง
- เซิร์ฟเวอร์
- บริการ
- บริการ
- ชุด
- การตั้งค่า
- Share
- เธอ
- โชว์
- จัดแสดง
- แสดงให้เห็นว่า
- ปิด
- ปิดตัวลง
- คล้ายคลึงกัน
- ความง่าย
- เดียว
- ขนาด
- So
- สังคม
- โซเชียลมีเดีย
- ทางออก
- โซลูชัน
- บาง
- แหล่ง
- แหล่งที่มา
- ผู้เชี่ยวชาญ
- โดยเฉพาะ
- เฉพาะ
- สแตนด์อโลน
- เริ่มต้น
- ข้อความที่เริ่ม
- ที่เริ่มต้น
- คงที่
- ขั้นตอน
- ขั้นตอน
- หยุด
- จัดเก็บ
- เก็บไว้
- ร้านค้า
- ซื่อตรง
- สตูดิโอ
- อย่างเช่น
- เพียงพอ
- สนับสนุน
- ที่สนับสนุน
- แน่ใจ
- อย่างรวดเร็ว
- ใช้เวลา
- งาน
- งาน
- เทคนิค
- เทคโนโลยี
- เทมเพลต
- ข้อความ
- กว่า
- ที่
- พื้นที่
- ของพวกเขา
- พวกเขา
- ที่นั่น
- ดังนั้น
- ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน
- พวกเขา
- นี้
- สาม
- ตลอด
- ปริมาณงาน
- เวลา
- ไปยัง
- โทเค็น
- โทเค็น
- เครื่องมือ
- หัวข้อ
- ไฟฉาย
- ทัวร์
- รถไฟ
- หม้อแปลง
- การเปลี่ยนแปลง
- การเดินทาง
- จริง
- ลอง
- สอง
- ชนิด
- ชนิด
- ตามแบบฉบับ
- เป็นปกติ
- ภายใต้
- สากล
- จนกระทั่ง
- ทันเหตุการณ์
- การปรับปรุง
- การใช้
- ใช้
- ใช้กรณี
- มือสอง
- ผู้ใช้งาน
- ประสบการณ์ของผู้ใช้
- ใช้
- การใช้
- นำไปใช้
- ความคุ้มค่า
- ต่างๆ
- การตรวจสอบ
- ตรวจสอบ
- รุ่น
- ผ่านทาง
- ผู้ชม
- เสมือน
- ทัวร์เสมือนจริง
- ความชัดเจน
- วิสัยทัศน์
- เยี่ยมชมร้านค้า
- จำนวนการเข้าชม
- เดิน
- ต้องการ
- ทาง..
- we
- เว็บ
- บริการเว็บ
- Website
- สัปดาห์ที่ผ่านมา
- คือ
- เมื่อ
- เมื่อไรก็ตาม
- ที่
- ในขณะที่
- จะ
- กับ
- ภายใน
- ไม่มี
- วอน
- คำ
- งาน
- ทำงาน
- ผู้ปฏิบัติงาน
- เวิร์กโฟลว์
- การทำงาน
- โรงงาน
- ปี
- ปี
- นิวยอร์ก
- คุณ
- ของคุณ
- ด้วยตัวคุณเอง
- ลมทะเล