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.
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ä.
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
- ReAct: päättely + toiminta -malli
- ReActin toteuttaminen alusta alkaen
- Yleiset työkalusarjat (verkko, laskin, RAG)
- Työkalujen virheiden tunnistaminen ja niistä palautuminen