ChatDev/yaml_instance/subgraphs/react_agent.yaml
laansdole 9d4a1e1f09 Revert "chores: move model name to centralized env variable"
This reverts commit d2695f9bcbb6b8b4c6c707d64951c300e796f543.
2026-01-22 22:42:00 +07:00

116 lines
3.9 KiB
YAML
Executable File

version: 0.4.0
vars: {}
graph:
id: react_agent_subgraph
description: ReAct control loop subgraph for tool calls and answer synthesis.
is_majority_voting: false
log_level: INFO
start:
- ReAct Brain
end:
- ReAct Answer Synthesizer
nodes:
- id: ReAct Brain
type: agent
description: ReAct controller, responsible for thinking, deciding whether to call tools, and providing final answers.
context_window: -1
config:
provider: openai
base_url: ${BASE_URL}
api_key: ${API_KEY}
name: gpt-4o
input_mode: messages
role: |
You are a ReAct controller, needing to make decisions between the toolbox (web_search, get_webpage_content, execute_code, get_city_num, get_weather) and the final answer.
- Organize the entire context into a rolling Thought/Observation process, ensuring references to the latest Observation.
- Only when you need to call a tool, output Control: continue, and attach Action and ActionInput (JSON).
- If you are ready to answer the user directly, output Final Answer and set Action=FINAL.
- Always follow this format:
Thought: <your thinking>
Action: <tool_name or FINAL>
ActionInput: <JSON or NONE>
Control: <DONE or CONTINUE>
- When Action=FINAL, write the final response in Final Answer: ....
- Never fabricate an Observation, you must wait for the Tool Executor's Observation.
params:
temperature: 0.2
max_tokens: 1200
- id: Tool Executor
type: agent
description: Receives control instructions and actually calls function tools, returning Observations.
config:
provider: openai
base_url: ${BASE_URL}
api_key: ${API_KEY}
name: gpt-4o
input_mode: messages
role: |
You are the tool executor.
- Parse the Action and ActionInput fields from the previous node.
- Only when Action belongs to {web_search, get_webpage_content, execute_code, get_city_num, get_weather}, call the corresponding function tool; otherwise, reply directly with "Observation: No tool needed".
- After a successful call, return using the following template:
Tool: <called tool>
Observation: <concise summary>
Raw Output:
```
<raw function return>
```
- Do not include trigger in the output to avoid affecting upstream condition judgment.
- Do not provide a final answer.
tooling:
type: function
config:
auto_load: true
tools:
- name: web_search
- name: get_webpage_content
- name: execute_code
- name: get_city_num
- name: get_weather
params:
temperature: 0.1
max_tokens: 1200
- id: ReAct Answer Synthesizer
type: agent
description: Cleans up ReAct formatting and outputs a user-readable final response.
config:
provider: openai
base_url: ${BASE_URL}
api_key: ${API_KEY}
name: gpt-4o
input_mode: messages
role: |
You are responsible for receiving the Final Answer from ReAct Brain and combining it with the most recent Observation (if any) to generate a natural language response.
- Focus on answering the user's question, including sources/action summaries where necessary.
- Remove all template fields (Thought/Action/Control, etc.).
params:
temperature: 0.2
max_tokens: 800
edges:
- from: ReAct Brain
to: Tool Executor
trigger: true
condition:
type: keyword
config:
any: [ ]
none:
- FINAL
regex: [ ]
case_sensitive: true
- from: Tool Executor
to: ReAct Brain
trigger: true
condition: 'true'
- from: ReAct Brain
to: ReAct Answer Synthesizer
trigger: true
condition:
type: keyword
config:
any:
- FINAL
none: [ ]
regex: [ ]
case_sensitive: true