mirror of
https://github.com/agentscope-ai/ReMe.git
synced 2026-08-28 05:25:04 +00:00
add app react agent
This commit is contained in:
parent
5e516fb8b1
commit
dba2964323
3 changed files with 43 additions and 26 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -25,4 +25,5 @@ step_experiences/*
|
|||
build/*
|
||||
*.egg-info/*
|
||||
cookbook/simple_demo/test_appworld/data/*
|
||||
cookbook/simple_demo/test_appworld/experiments/*
|
||||
cookbook/simple_demo/test_appworld/experiments/*
|
||||
cookbook/simple_demo/test_appworld/exp_result/*
|
||||
|
|
@ -1,4 +1,3 @@
|
|||
import json
|
||||
import os
|
||||
|
||||
os.environ["APPWORLD_ROOT"] = "."
|
||||
|
|
@ -8,6 +7,7 @@ load_dotenv("../../../.env")
|
|||
|
||||
import re
|
||||
import time
|
||||
import json
|
||||
|
||||
from appworld import AppWorld, load_task_ids
|
||||
from jinja2 import Template
|
||||
|
|
@ -16,18 +16,21 @@ from openai import OpenAI
|
|||
|
||||
from prompt import PROMPT_TEMPLATE
|
||||
|
||||
@ray.remote
|
||||
|
||||
# @ray.remote
|
||||
class AppworldReactAgent:
|
||||
"""A minimal ReAct Agent for AppWorld tasks."""
|
||||
|
||||
def __init__(self,
|
||||
index: int,
|
||||
task_id: str,
|
||||
experiment_name: str,
|
||||
model_name: str = "qwen3-8b",
|
||||
temperature: float = 0.9,
|
||||
max_interactions: int = 50,
|
||||
max_interactions: int = 30,
|
||||
max_response_size: int = 2000):
|
||||
|
||||
self.index: int = index
|
||||
self.task_id: str = task_id
|
||||
self.experiment_name: str = experiment_name
|
||||
self.model_name: str = model_name
|
||||
|
|
@ -47,7 +50,6 @@ class AppworldReactAgent:
|
|||
model=self.model_name,
|
||||
messages=messages,
|
||||
temperature=self.temperature,
|
||||
max_tokens=400,
|
||||
extra_body={"enable_thinking": False},
|
||||
seed=0)
|
||||
|
||||
|
|
@ -109,9 +111,9 @@ class AppworldReactAgent:
|
|||
output = self.next_step(code)
|
||||
self.history.append({"role": "user", "content": output})
|
||||
|
||||
logger.info(f"task_id={self.task_id} iteration={i} "
|
||||
f"code=\n{code}\n output=\n{output}\n "
|
||||
f"score={self.get_reward():.4f}")
|
||||
logger.info(f"index={self.index} task_id={self.task_id} iteration={i} ")
|
||||
# f"code=\n{code}\n output=\n{output}\n "
|
||||
# f"score={self.get_reward():.4f}")
|
||||
|
||||
if self.world.task_completed():
|
||||
break
|
||||
|
|
@ -127,7 +129,8 @@ class AppworldReactAgent:
|
|||
"uplift_score": uplift_score,
|
||||
"task_history": self.history,
|
||||
}
|
||||
|
||||
# logger.info(f"result={json.dumps(result)}")
|
||||
# p_bar.close()
|
||||
return result
|
||||
|
||||
except Exception as e:
|
||||
|
|
@ -138,7 +141,7 @@ class AppworldReactAgent:
|
|||
def main():
|
||||
dataset_name = "train"
|
||||
task_ids = load_task_ids(dataset_name)
|
||||
agent = AppworldReactAgent(task_id=task_ids[0], experiment_name=f"jinli_{dataset_name}")
|
||||
agent = AppworldReactAgent(index=0, task_id=task_ids[0], experiment_name=f"jinli_{dataset_name}")
|
||||
result = agent.execute()
|
||||
logger.info(f"result={json.dumps(result)}")
|
||||
|
||||
|
|
|
|||
|
|
@ -1,13 +1,15 @@
|
|||
import os
|
||||
|
||||
import ray
|
||||
from ray import logger
|
||||
from tqdm import tqdm
|
||||
|
||||
os.environ["APPWORLD_ROOT"] = "."
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv("../../../.env")
|
||||
|
||||
import json
|
||||
import time
|
||||
from concurrent.futures import ProcessPoolExecutor
|
||||
from pathlib import Path
|
||||
|
||||
from appworld import load_task_ids
|
||||
|
|
@ -15,29 +17,40 @@ from appworld import load_task_ids
|
|||
from appworld_react_agent import AppworldReactAgent
|
||||
|
||||
|
||||
def run_agent(dataset_name: str, max_workers: int, experiment_suffix: str):
|
||||
def run_agent(dataset_name: str, experiment_suffix: str, multi_thread: bool = False):
|
||||
experiment_name = dataset_name + "_" + experiment_suffix
|
||||
path: Path = Path(f"./exp_result")
|
||||
path.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
task_ids = load_task_ids(dataset_name)
|
||||
result: list = []
|
||||
with ProcessPoolExecutor(max_workers=max_workers) as executor:
|
||||
task_list: list = []
|
||||
|
||||
def dump_file():
|
||||
with open(path / f"{experiment_name}.jsonl", "w") as f:
|
||||
for x in result:
|
||||
f.write(json.dumps(x) + "\n")
|
||||
|
||||
if multi_thread:
|
||||
future_list: list = []
|
||||
for index, task_id in enumerate(task_ids):
|
||||
agent = AppworldReactAgent(task_id, experiment_name)
|
||||
task = executor.submit(agent.execute)
|
||||
task_list.append(task)
|
||||
time.sleep(1)
|
||||
actor = AppworldReactAgent.remote(index=index, task_id=task_id, experiment_name=experiment_name)
|
||||
future = actor.execute.remote()
|
||||
future_list.append(future)
|
||||
logger.info("submit complete")
|
||||
|
||||
for task in task_list:
|
||||
result.append(task.result(timeout=600))
|
||||
for future in future_list:
|
||||
result.append(ray.get(future))
|
||||
dump_file()
|
||||
|
||||
else:
|
||||
for index, task_id in enumerate(task_ids):
|
||||
agent = AppworldReactAgent(index=index, task_id=task_id, experiment_name=experiment_name)
|
||||
result.append(agent.execute())
|
||||
dump_file()
|
||||
|
||||
with open(path / f"{experiment_name}.jsonl", "w") as f:
|
||||
for result_item in result:
|
||||
f.write(json.dumps(result_item) + "\n")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
run_agent(dataset_name="train", experiment_suffix="v1", max_workers=1)
|
||||
# run_agent(dataset_name="dev", experiment_suffix="v1", max_workers=1)
|
||||
# ray.init(num_cpus=8)
|
||||
run_agent(dataset_name="train", experiment_suffix="v2")
|
||||
# run_agent(dataset_name="dev", experiment_suffix="v2")
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue