smolagents documentation
π μμ΄μ νΈ λ©λͺ¨λ¦¬ κ΄λ¦¬
π μμ΄μ νΈ λ©λͺ¨λ¦¬ κ΄λ¦¬
κ²°κ΅ μμ΄μ νΈλ λꡬμ ν둬ννΈλ‘ μ΄λ£¨μ΄μ§ λ¨μν ꡬμ±μμλ‘ μ μλ©λλ€. κ·Έλ¦¬κ³ λ¬΄μλ³΄λ€ μ€μν κ²μ μμ΄μ νΈκ° κ³Όκ±° λ¨κ³μ λ©λͺ¨λ¦¬λ₯Ό κ°μ§κ³ μμ΄ κ³ν, μ€ν, μ€λ₯μ μ΄λ ₯μ μΆμ νλ€λ μ μ λλ€.
μμ΄μ νΈ λ©λͺ¨λ¦¬ μ¬μ
κ³Όκ±° μ€νλ μμ΄μ νΈλ₯Ό νμΈνκΈ° μν λͺ κ°μ§ κΈ°λ₯μ μ 곡ν©λλ€.
κ³μΈ‘ κ°μ΄λμμ μΈκΈν λ°μ κ°μ΄, μμ΄μ νΈ μ€νμ κ³μΈ‘νμ¬ νΉμ λ¨κ³λ₯Ό νλνκ±°λ μΆμν μ μλ μ°μν UIλ‘ μκ°νν μ μμ΅λλ€.
λν λ€μκ³Ό κ°μ΄ agent.replay()
λ₯Ό μ¬μ©ν μλ μμ΅λλ€.
μμ΄μ νΈλ₯Ό μ€νν ν,
from smolagents import InferenceClientModel, CodeAgent
agent = CodeAgent(tools=[], model=InferenceClientModel(), verbosity_level=0)
result = agent.run("What's the 20th Fibonacci number?")
μ΄ λ§μ§λ§ μ€νμ λ€μ μ¬μνκ³ μΆλ€λ©΄, λ€μ μ½λλ₯Ό μ¬μ©νλ©΄ λ©λλ€.
agent.replay()
μμ΄μ νΈ λ©λͺ¨λ¦¬ λμ λ³κ²½
λ§μ κ³ κΈ μ¬μ© μ¬λ‘μμλ μμ΄μ νΈμ λ©λͺ¨λ¦¬λ₯Ό λμ μΌλ‘ μμ ν΄μΌ ν©λλ€.
μμ΄μ νΈμ λ©λͺ¨λ¦¬λ λ€μκ³Ό κ°μ΄ μ κ·Όν μ μμ΅λλ€.
from smolagents import ActionStep
system_prompt_step = agent.memory.system_prompt
print("The system prompt given to the agent was:")
print(system_prompt_step.system_prompt)
task_step = agent.memory.steps[0]
print("\n\nThe first task step was:")
print(task_step.task)
for step in agent.memory.steps:
if isinstance(step, ActionStep):
if step.error is not None:
print(f"\nStep {step.step_number} got this error:\n{step.error}\n")
else:
print(f"\nStep {step.step_number} got these observations:\n{step.observations}\n")
agent.memory.get_full_steps()
λ₯Ό μ¬μ©νμ¬ μ 체 λ¨κ³λ₯Ό λμ
λ리 ννλ‘ κ°μ Έμ¬ μ μμ΅λλ€.
λν λ¨κ³ μ½λ°±μ μ¬μ©νμ¬ μμ΄μ νΈμ λ©λͺ¨λ¦¬λ₯Ό λμ μΌλ‘ λ³κ²½ν μλ μμ΅λλ€.
λ¨κ³ μ½λ°±μ μΈμλ‘ agent
κ°μ²΄ μ체μ μ κ·Όν μ μμΌλ―λ‘, μμμ μ€λͺ
ν κ²μ²λΌ λͺ¨λ λ©λͺ¨λ¦¬ λ¨κ³μ μ κ·Όνμ¬ νμν κ²½μ° μμ ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μΉ λΈλΌμ°μ μμ΄μ νΈκ° μννλ κ° λ¨κ³μ μ€ν¬λ¦°μ·μ κ΄μ°°νκ³ μλ€κ³ κ°μ ν΄ λ³΄κ² μ΅λλ€. μ΄ κ²½μ° μ΅μ μ€ν¬λ¦°μ·μ μ μ§νλ©΄μ ν ν° λΉμ©μ μ μ½νκΈ° μν΄ μ΄μ λ¨κ³μ μ΄λ―Έμ§λ₯Ό λ©λͺ¨λ¦¬μμ μ κ±°ν μ μμ΅λλ€.
μ΄ κ²½μ° λ€μκ³Ό κ°μ μ½λλ₯Ό μ¬μ©ν μ μμ΅λλ€. μ£Όμ: μ΄ μ½λλ κ°κ²°ν¨μ μν΄ μΌλΆ μν¬νΈ λ° κ°μ²΄ μ μκ° μλ΅λ λΆμμ ν μμμ λλ€. μ 체 μλ λ²μ μ μ½λλ μλ³Έ μ€ν¬λ¦½νΈμμ νμΈνμΈμ.
import helium
from PIL import Image
from io import BytesIO
from time import sleep
def update_screenshot(memory_step: ActionStep, agent: CodeAgent) -> None:
sleep(1.0) # JavaScript μ λλ©μ΄μ
μ΄ μλ£λ νμ μ€ν¬λ¦°μ·μ μ°λλ‘ ν©λλ€.
driver = helium.get_driver()
latest_step = memory_step.step_number
for previous_memory_step in agent.memory.steps: # μ΄μ μ€ν¬λ¦°μ·μ λ‘κ·Έμμ μ κ±°νμ¬ μ²λ¦¬ κ³Όμ μ κ°μνν©λλ€.
if isinstance(previous_memory_step, ActionStep) and previous_memory_step.step_number <= latest_step - 2:
previous_memory_step.observations_images = None
png_bytes = driver.get_screenshot_as_png()
image = Image.open(BytesIO(png_bytes))
memory_step.observations_images = [image.copy()]
κ·Έ λ€μ μμ΄μ νΈλ₯Ό μ΄κΈ°νν λ μ΄ ν¨μλ₯Ό λ€μκ³Ό κ°μ΄ step_callbacks
μΈμμ μ λ¬ν΄μΌ ν©λλ€.
CodeAgent(
tools=[WebSearchTool(), go_back, close_popups, search_item_ctrl_f],
model=model,
additional_authorized_imports=["helium"],
step_callbacks=[update_screenshot],
max_steps=20,
verbosity_level=2,
)
μ 체 μλ μμλ λΉμ μΉ λΈλΌμ°μ μ½λμμ νμΈν μ μμ΅λλ€.
μμ΄μ νΈλ₯Ό λ¨κ³λ³λ‘ μ€ν
μ΄ κΈ°λ₯μ λꡬ νΈμΆμ μ€λ μκ°μ΄ 걸리λ κ²½μ°μ μ μ©ν©λλ€. μμ΄μ νΈλ₯Ό ν λ¨κ³μ© μ€ννλ©΄μ κ° λ¨κ³μμ λ©λͺ¨λ¦¬λ₯Ό μ λ°μ΄νΈν μ μμ΅λλ€.
from smolagents import InferenceClientModel, CodeAgent, ActionStep, TaskStep
agent = CodeAgent(tools=[], model=InferenceClientModel(), verbosity_level=1)
agent.python_executor.send_tools({**agent.tools})
print(agent.memory.system_prompt)
task = "What is the 20th Fibonacci number?"
# νμμ λ°λΌ λ€λ₯Έ μμ΄μ νΈμ λ©λͺ¨λ¦¬λ₯Ό λΆλ¬μ λ©λͺ¨λ¦¬λ₯Ό μμ ν μ μμ΅λλ€.
# agent.memory.steps = previous_agent.memory.steps
# μλ‘μ΄ μμ
μ μμν©λλ€!
agent.memory.steps.append(TaskStep(task=task, task_images=[]))
final_answer = None
step_number = 1
while final_answer is None and step_number <= 10:
memory_step = ActionStep(
step_number=step_number,
observations_images=[],
)
# ν λ¨κ³λ₯Ό μ€νν©λλ€.
final_answer = agent.step(memory_step)
agent.memory.steps.append(memory_step)
step_number += 1
# νμν κ²½μ° λ©λͺ¨λ¦¬λ₯Ό μμ ν μλ μμ΅λλ€
# μλ₯Ό λ€μ΄ μ΅μ λ¨κ³λ₯Ό μ
λ°μ΄νΈ νλ €λ©΄ λ€μκ³Ό κ°μ΄ μ²λ¦¬ν©λλ€:
# agent.memory.steps[-1] = ...
print("The final answer is:", final_answer)