Tekoälyagentit · Oppitunti

ReActin toteuttaminen alusta alkaen

Kirjoittakaa 100-rivinen Python-toteutus ilman LangChainia: jäsentäkää Action-rivit, suorittakaa työkalut ja jatkakaa, kunnes saavutatte Final Answer -kohdan.

Oppitunti 2/415 vaihetta

ReActin toteuttaminen alusta alkaen on ilmainen Tekoälyagentit-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Tekoälyagentit-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Tekoälyagentit-kurssilla on yhteensä 4 oppituntia.

Osaa tämän oppitunnin sisällöstä ei ole vielä käännetty, joten se näytetään englanniksi.

Rakentakaa silmukka itse

Voitte kirjoittaa ReActin noin 100 Python-rivillä ilman kehystä. Kun teette sen kerran itse, ymmärrätte paremmin, mitä kehykset abstrahoivat.

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)

Vaihe 6: Lisätkää lokitus

Kerätkää jokainen vaihe virheenkorjausta varten:

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})')
        ...

Vaihe 7: Vaihelaskuri työkaluna

Joissakin agenteissa vaihemäärä lisätään järjestelmäkehotteeseen, jotta malli tietää, milloin päättää prosessin:

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

Vaihe 8: Lopullisen vastauksen muoto

Jos haluatte rakenteisen tulosteen, pakottakaa lopuksi työkalukutsu:

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.

Vaihe 9: Työkalujen virheet

Palauttakaa virheet aina työkalutuloksina, jotta agentti voi toipua niistä:

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.

Vaihe 10: Rinnakkaiset työkalukutsut

Jos msg.tool_calls sisältää useita merkintöjä, suorittakaa kutsut rinnakkain:

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])

Vaihe 11: Keskustelun rajaaminen

Viestiluettelo voi kasvaa suureksi jopa MAX_STEPS-rajan puitteissa. Lyhentäkää viestejä tokenimäärän perusteella vuorojen välillä:

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

Vaihe 12: Tuotantokäytön vahvistaminen

Lisätkää tuotantokäyttöä varten työkalukutsujen aikakatkaisut, työkalukohtaiset kiintiöt, retry-with-backoff API-virheille ja täydellinen jälkilokitus. Yllä oleva silmukka on kuitenkin rakenteenne perusta.

Työkalujen virheenkäsittely

Mitä tulee tehdä, kun työkalu nostaa poikkeuksen?

Kertaus

ReAct noin 80 rivillä: viestiluettelo, while-silmukka ja lähetyshakemisto. Kehykset viimeistelevät toteutusta, mutta ydin on tässä.

Aloita maksutta

Opi Tekoälyagentit tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
60
Oppitunnit
239

Usein kysytyt kysymykset

Onko oppitunti ”ReActin toteuttaminen alusta alkaen” ilmainen?

Kyllä – oppitunnin ”ReActin toteuttaminen alusta alkaen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Tekoälyagentit-kurssin, päivitä CoddyKit PROhon. Tekoälyagentit-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”ReActin toteuttaminen alusta alkaen”?

Kirjoittakaa 100-rivinen Python-toteutus ilman LangChainia: jäsentäkää Action-rivit, suorittakaa työkalut ja jatkakaa, kunnes saavutatte Final Answer -kohdan. Harjoittelet Tekoälyagentit-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Tekoälyagentit-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Tekoälyagentit-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”ReActin toteuttaminen alusta alkaen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Tekoälyagentit-oppitunnilla?

Kyllä. Jokainen Tekoälyagentit-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. ReAct: päättely + toiminta -malli
  2. ReActin toteuttaminen alusta alkaen
  3. Yleiset työkalusarjat (verkko, laskin, RAG)
  4. Työkalujen virheiden tunnistaminen ja niistä palautuminen
← Takaisin: Tekoälyagentit