0Pricing
AI Agents · บทเรียน

การพัฒนา ReAct ตั้งแต่ต้น

เขียนการใช้งานด้วย Python 100 บรรทัดโดยไม่ใช้ LangChain แยกวิเคราะห์บรรทัด Action เรียกใช้เครื่องมือ และวนซ้ำจนถึง Final Answer

การพัฒนา ReAct ตั้งแต่ต้น เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน

บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ

สร้างลูปด้วยตนเอง

คุณสามารถเขียน ReAct ด้วย Python ประมาณ 100 บรรทัด โดยไม่ต้องใช้เฟรมเวิร์ก การทำเช่นนี้สักครั้งจะช่วยให้เข้าใจสิ่งที่เฟรมเวิร์กซ่อนไว้ได้ดีขึ้น

Step 1: Define Tools

import json, math

def calculator(expression: str) -> str:
    try:
        return str(eval(expression, {'__builtins__': {}}, vars(math)))
    except Exception as e:
        return f'Error: {e}'

def search_wikipedia(query: str) -> str:
    # placeholder — call a real search API
    return f'Wikipedia summary for: {query}'

TOOLS = {
    'calculator': calculator,
    'search_wikipedia': search_wikipedia,
}

print(calculator('2 + 2 * sqrt(16)'))
print(search_wikipedia('agents'))

Step 2: Tool Schemas

schemas = [
    {'type': 'function', 'function': {
        'name': 'calculator',
        'description': 'Evaluate a math expression like 2 + 2 * sqrt(16)',
        'parameters': {'type': 'object', 'properties': {'expression': {'type': 'string'}}, 'required': ['expression']}
    }},
    {'type': 'function', 'function': {
        'name': 'search_wikipedia',
        'description': 'Search Wikipedia and return a summary',
        'parameters': {'type': 'object', 'properties': {'query': {'type': 'string'}}, 'required': ['query']}
    }}
]
import json
print(json.dumps(schemas, indent=2))

Step 3: System Prompt

system = '''
You are a research assistant. Use the available tools when needed.
Think step by step. If you have enough information, give a final answer.
'''
print(system.strip())

Step 4: The Loop

from openai import OpenAI
client = OpenAI()

def react(question, max_steps=10):
    messages = [
        {'role': 'system', 'content': system},
        {'role': 'user', 'content': question}
    ]
    for step in range(max_steps):
        r = client.chat.completions.create(
            model='gpt-4o-mini',
            messages=messages,
            tools=schemas,
        )
        msg = r.choices[0].message
        messages.append(msg)
        if not msg.tool_calls:
            return msg.content
        for tc in msg.tool_calls:
            args = json.loads(tc.function.arguments)
            try:
                result = TOOLS[tc.function.name](**args)
            except Exception as e:
                result = f'Tool error: {e}'
            messages.append({'role': 'tool', 'tool_call_id': tc.id, 'content': str(result)})
    return 'Step limit reached.'

Step 5: Run It

answer = react('What is the population of Tokyo times the square root of pi?')
print(answer)

ขั้นตอนที่ 6: เพิ่มการบันทึกเหตุการณ์

บันทึกทุกขั้นตอนเพื่อใช้แก้ไขข้อบกพร่อง:

def react_verbose(question, max_steps=10):
    messages = [...]
    for step in range(max_steps):
        r = client.chat.completions.create(model='gpt-4o-mini', messages=messages, tools=schemas)
        msg = r.choices[0].message
        print(f'[step {step}] thought: {msg.content}')
        if msg.tool_calls:
            for tc in msg.tool_calls:
                print(f'[step {step}] action: {tc.function.name}({tc.function.arguments})')
        ...

ขั้นตอนที่ 7: ใช้ตัวนับขั้นตอนเป็นเครื่องมือ

เอเจนต์บางตัวใส่จำนวนขั้นตอนไว้ในพรอมต์ระบบ เพื่อให้โมเดลทราบว่าควรบรรจบเข้าสู่คำตอบเมื่อใด:

system = f'You have at most {MAX_STEPS} steps. Step {current_step}/{MAX_STEPS}. ...'

ขั้นตอนที่ 8: รูปแบบคำตอบสุดท้าย

หากต้องการผลลัพธ์ที่มีโครงสร้าง ให้บังคับการเรียกเครื่องมือครั้งสุดท้าย:

tools.append({'type': 'function', 'function': {
    'name': 'final_answer',
    'description': 'Submit the final answer to the user.',
    'parameters': {'type': 'object', 'properties': {'answer': {'type': 'string'}}, 'required': ['answer']}
}})
# Loop terminates when final_answer is called.

ขั้นตอนที่ 9: ข้อผิดพลาดของเครื่องมือ

ส่งคืนข้อผิดพลาดเป็นผลลัพธ์ของเครื่องมือเสมอ เพื่อให้เอเจนต์กู้คืนการทำงานได้:

try:
    result = TOOLS[name](**args)
except Exception as e:
    result = f'TOOL ERROR: {type(e).__name__}: {e}'
# Model sees the error and can try a different approach.

ขั้นตอนที่ 10: การเรียกเครื่องมือแบบขนาน

หาก msg.tool_calls มีรายการหลายรายการ ให้เรียกใช้รายการเหล่านั้นแบบขนาน:

import asyncio

async def run_tools(tool_calls):
    async def run_one(tc):
        args = json.loads(tc.function.arguments)
        return tc.id, TOOLS[tc.function.name](**args)
    return await asyncio.gather(*[run_one(tc) for tc in tool_calls])

ขั้นตอนที่ 11: จำกัดขนาดการสนทนา

แม้จะอยู่ภายในจำนวนขั้นตอนสูงสุด รายการข้อความก็อาจขยายใหญ่ขึ้นได้ ให้ตัดข้อความตามจำนวนโทเคนระหว่างแต่ละรอบ:

if total_tokens(messages) > 6000:
    messages = trim_messages(messages)

ขั้นตอนที่ 12: เตรียมความพร้อมสำหรับใช้งานจริง

สำหรับระบบใช้งานจริง ให้เพิ่มการจำกัดเวลาของการเรียกเครื่องมือ โควตาต่อเครื่องมือ การลองใหม่พร้อมหน่วงเวลาเพิ่มขึ้นเมื่อ API ล้มเหลว และการบันทึกร่องรอยอย่างครบถ้วน แต่ลูปด้านบนคือโครงกระดูกของคุณ

การจัดการข้อผิดพลาดของเครื่องมือ

คุณควรทำอย่างไรเมื่อเครื่องมือส่งข้อยกเว้น?

ทบทวน

ReAct ในประมาณ 80 บรรทัด: รายการข้อความ + ลูป while + ตารางส่งต่อ เฟรมเวิร์กช่วยเพิ่มความเรียบร้อย แต่แก่นสำคัญมีเพียงเท่านี้

คำถามที่พบบ่อย

บทเรียน “การพัฒนา ReAct ตั้งแต่ต้น” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การพัฒนา ReAct ตั้งแต่ต้น” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การพัฒนา ReAct ตั้งแต่ต้น”

เขียนการใช้งานด้วย Python 100 บรรทัดโดยไม่ใช้ LangChain แยกวิเคราะห์บรรทัด Action เรียกใช้เครื่องมือ และวนซ้ำจนถึง Final Answer คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การพัฒนา ReAct ตั้งแต่ต้น” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน AI Agents นี้ได้ไหม

ได้ บทเรียน AI Agents ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ReAct: รูปแบบการให้เหตุผลและลงมือทำ
  2. การพัฒนา ReAct ตั้งแต่ต้น
  3. ชุดเครื่องมือทั่วไป (เว็บ เครื่องคิดเลข RAG)
  4. การตรวจจับและกู้คืนจากข้อผิดพลาดของเครื่องมือ
← กลับไปที่ AI Agents