ตัวแทนที่ขับเคลื่อนด้วย LLM (ReAct)
October 16, 2025 · View on GitHub
Agent (ReAct) คืออะไร?
Agent คือระบบ AI ขั้นสูงที่ใช้โมเดลภาษาขนาดใหญ่ (LLMs) เป็นกลไกการประมวลผลหลัก มันรวมความสามารถในการให้เหตุผลของ LLMs เข้ากับฟังก์ชันการทำงานเพิ่มเติม เช่น การวางแผนและการใช้เครื่องมือ เพื่อทำงานที่ซับซ้อนได้โดยอัตโนมัติ Agents สามารถแยกแยะคำถามที่ซับซ้อน สร้างวิธีแก้ปัญหาทีละขั้นตอน และโต้ตอบกับเครื่องมือภายนอกหรือ APIs เพื่อรวบรวมข้อมูลหรือดำเนินการงานย่อยต่างๆ
ตัวอย่างนี้ใช้ Agent ที่ใช้แนวทาง ReAct (Reasoning + Acting) ReAct ช่วยให้ agent สามารถแก้ปัญหาที่ซับซ้อนได้โดยการผสมผสานการให้เหตุผลและการกระทำในวงจรการตอบสนองแบบต่อเนื่อง agent จะดำเนินการผ่านขั้นตอนสำคัญสามขั้นตอนซ้ำๆ: การคิด การกระทำ และการสังเกต มันวิเคราะห์สถานการณ์ปัจจุบันโดยใช้ LLM ตัดสินใจเลือกการกระทำถัดไป ดำเนินการโดยใช้เครื่องมือหรือ APIs ที่มีอยู่ และเรียนรู้จากผลลัพธ์ที่สังเกตได้ กระบวนการต่อเนื่องนี้ช่วยให้ agent สามารถปรับตัวเข้ากับสภาพแวดล้อมที่เปลี่ยนแปลง ปรับปรุงความแม่นยำในการแก้ปัญหา และให้คำตอบที่เหมาะสมกับบริบท
การใช้งานนี้ขับเคลื่อนด้วย Strands Agents ซึ่งเป็น SDK โอเพนซอร์สที่ใช้แนวทางที่ขับเคลื่อนด้วยโมเดลในการสร้าง AI agents Strands ให้เฟรมเวิร์กที่มีน้ำหนักเบาและยืดหยุ่นสำหรับการสร้างเครื่องมือที่กำหนดเองโดยใช้ Python decorators และรองรับผู้ให้บริการโมเดลหลายราย รวมถึง Amazon Bedrock
ตัวอย่างการใช้งาน
Agent ที่ใช้ ReAct สามารถนำไปประยุกต์ใช้ในสถานการณ์ต่างๆ เพื่อให้คำตอบที่แม่นยำและมีประสิทธิภาพ
การแปลงข้อความเป็น SQL
เมื่อผู้ใช้ถามหา "ยอดขายรวมในไตรมาสที่แล้ว" Agent จะตีความคำขอนี้ แปลงเป็นคำสั่ง SQL รันคำสั่งกับฐานข้อมูล และแสดงผลลัพธ์
การพยากรณ์ทางการเงิน
นักวิเคราะห์การเงินต้องการพยากรณ์รายได้ในไตรมาสหน้า Agent จะรวบรวมข้อมูลที่เกี่ยวข้อง ทำการคำนวณที่จำเป็นโดยใช้โมเดลทางการเงิน และสร้างรายงานการพยากรณ์อย่างละเอียด พร้อมทั้งตรวจสอบความถูกต้องของการคาดการณ์
วิธีใช้งานฟีเจอร์ Agent
เพื่อเปิดใช้งานฟังก์ชัน Agent สำหรับแชทบอทที่คุณปรับแต่ง ให้ทำตามขั้นตอนต่อไปนี้:
มีสองวิธีในการใช้งานฟีเจอร์ Agent:
การใช้ Tool Use
เพื่อเปิดใช้งานฟังก์ชัน Agent ด้วย Tool Use สำหรับแชทบอทที่คุณปรับแต่ง ให้ทำตามขั้นตอนต่อไปนี้:
-
ไปที่ส่วน Agent ในหน้าจอการปรับแต่งบอท
-
ในส่วน Agent คุณจะพบรายการเครื่องมือที่ Agent สามารถใช้งานได้ โดยค่าเริ่มต้น เครื่องมือทั้งหมดจะถูกปิดใช้งาน
-
หากต้องการเปิดใช้งานเครื่องมือ เพียงกดสวิตช์ที่อยู่ถัดจากเครื่องมือที่ต้องการ เมื่อเปิดใช้งานเครื่องมือแล้ว Agent จะสามารถเข้าถึงและใช้งานเครื่องมือนั้นในการประมวลผลคำถามของผู้ใช้ได้

- ตัวอย่างเช่น เครื่องมือ "Internet Search" ช่วยให้ Agent สามารถค้นหาข้อมูลจากอินเทอร์เน็ตเพื่อตอบคำถามของผู้ใช้

- คุณสามารถพัฒนาและเพิ่มเครื่องมือที่กำหนดเองเพื่อขยายความสามารถของ Agent ดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างและผสานรวมเครื่องมือที่กำหนดเองได้ในส่วน วิธีพัฒนาเครื่องมือของคุณเอง
การใช้ Bedrock Agent
คุณสามารถใช้ Bedrock Agent ที่สร้างขึ้นใน Amazon Bedrock
ขั้นแรก ให้สร้าง Agent ใน Bedrock (เช่น ผ่าน Management Console) จากนั้นระบุ Agent ID ในหน้าจอการตั้งค่าแชทบอทที่กำหนดเอง เมื่อตั้งค่าแล้ว แชทบอทของคุณจะใช้ Bedrock Agent ในการประมวลผลคำถามของผู้ใช้

วิธีพัฒนาเครื่องมือของคุณเอง
การพัฒนาเครื่องมือที่กำหนดเองสำหรับ Agent โดยใช้ Strands SDK มีแนวทางดังนี้:
เกี่ยวกับเครื่องมือ Strands
Strands มี decorator @tool อย่างง่ายที่แปลงฟังก์ชัน Python ปกติให้เป็นเครื่องมือของ AI agent decorator จะดึงข้อมูลจาก docstring และ type hints ของฟังก์ชันโดยอัตโนมัติเพื่อสร้างข้อกำหนดเครื่องมือที่ LLM สามารถเข้าใจและใช้งานได้ วิธีนี้ใช้ประโยชน์จากคุณสมบัติดั้งเดิมของ Python เพื่อประสบการณ์การพัฒนาเครื่องมือที่สะอาดและใช้งานได้จริง
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเครื่องมือ Strands โปรดดูที่ เอกสารประกอบ Python Tools
การสร้างเครื่องมือพื้นฐาน
สร้างฟังก์ชันใหม่ที่ตกแต่งด้วย decorator @tool จาก Strands:
from strands import tool
@tool
def calculator(expression: str) -> dict:
"""
Perform mathematical calculations safely.
Args:
expression: Mathematical expression to evaluate (e.g., "2+2", "10*5", "sqrt(16)")
Returns:
dict: Result in Strands format with toolUseId, status, and content
"""
try:
# Your calculation logic here
result = eval(expression) # Note: Use safe evaluation in production
return {
"toolUseId": "placeholder",
"status": "success",
"content": [{"text": str(result)}]
}
except Exception as e:
return {
"toolUseId": "placeholder",
"status": "error",
"content": [{"text": f"Error: {str(e)}"}]
}
เครื่องมือที่มี Bot Context (รูปแบบ Closure)
การเข้าถึงข้อมูลบอท (BotModel) ให้ใช้รูปแบบ closure ที่จับข้อมูล bot context:
from strands import tool
from app.repositories.models.custom_bot import BotModel
def create_calculator_tool(bot: BotModel | None = None):
"""Create calculator tool with bot context closure."""
@tool
def calculator(expression: str) -> dict:
"""
Perform mathematical calculations safely.
Args:
expression: Mathematical expression to evaluate (e.g., "2+2", "10*5", "sqrt(16)")
Returns:
dict: Result in Strands format with toolUseId, status, and content
"""
# Access bot context within the tool
if bot:
print(f"Tool used by bot: {bot.id}")
try:
result = eval(expression) # Use safe evaluation in production
return {
"toolUseId": "placeholder",
"status": "success",
"content": [{"text": str(result)}]
}
except Exception as e:
return {
"toolUseId": "placeholder",
"status": "error",
"content": [{"text": f"Error: {str(e)}"}]
}
return calculator
ข้อกำหนดรูปแบบการส่งคืน
เครื่องมือ Strands ทั้งหมดต้องส่งคืนพจนานุกรมที่มีโครงสร้างดังนี้:
{
"toolUseId": "placeholder", # Will be replaced by Strands
"status": "success" | "error",
"content": [
{"text": "Simple text response"} |
{"json": {"key": "Complex data object"}}
]
}
- ใช้
{"text": "message"}สำหรับการตอบกลับข้อความธรรมดา - ใช้
{"json": data}สำหรับข้อมูลที่ซับซ้อนที่ควรเก็บรักษาเป็นข้อมูลแบบมีโครงสร้าง - ตั้งค่า
statusเป็น"success"หรือ"error"เสมอ
แนวทางการใช้งาน
-
ชื่อฟังก์ชันและ docstring จะถูกใช้เมื่อ LLM พิจารณาว่าจะใช้เครื่องมือใด docstring จะถูกฝังอยู่ในพรอมต์ ดังนั้นควรอธิบายจุดประสงค์และพารามิเตอร์ของเครื่องมืออย่างแม่นยำ
-
อ้างอิงตัวอย่างการใช้งานของ เครื่องมือคำนวณ BMI ตัวอย่างนี้แสดงวิธีการสร้างเครื่องมือที่คำนวณดัชนีมวลกาย (BMI) โดยใช้ decorator
@toolของ Strands และรูปแบบ closure -
หลังจากพัฒนาเสร็จแล้ว ให้วางไฟล์การใช้งานของคุณไว้ในไดเร็กทอรี backend/app/strands_integration/tools/ จากนั้นเปิด backend/app/strands_integration/utils.py และแก้ไข
get_strands_registered_toolsเพื่อรวมเครื่องมือใหม่ของคุณ -
[ตัวเลือก] เพิ่มชื่อและคำอธิบายที่ชัดเจนสำหรับ frontend ขั้นตอนนี้เป็นตัวเลือก แต่ถ้าคุณไม่ทำขั้นตอนนี้ ระบบจะใช้ชื่อเครื่องมือและคำอธิบายจากฟังก์ชันของคุณ เนื่องจากสิ่งเหล่านี้ใช้สำหรับ LLM จึงแนะนำให้เพิ่มคำอธิบายที่เป็นมิตรกับผู้ใช้เพื่อ UX ที่ดีขึ้น
- แก้ไขไฟล์ i18n เปิด en/index.ts และเพิ่ม
nameและdescriptionของคุณเองในagent.tools - แก้ไข
xx/index.tsด้วย โดยxxแทนรหัสประเทศที่คุณต้องการ
- แก้ไขไฟล์ i18n เปิด en/index.ts และเพิ่ม
-
รัน
npx cdk deployเพื่อ deploy การเปลี่ยนแปลงของคุณ ซึ่งจะทำให้เครื่องมือที่กำหนดเองของคุณพร้อมใช้งานในหน้าจอบอทที่กำหนดเอง