General fixes and README.md update
This commit is contained in:
parent
dad913b7fe
commit
86d5fae30f
19
README.md
19
README.md
|
|
@ -81,6 +81,7 @@ What sets RA.Aid apart is its ability to handle complex programming tasks that e
|
||||||
|
|
||||||
Each stage is powered by dedicated AI agents and specialized toolsets.
|
Each stage is powered by dedicated AI agents and specialized toolsets.
|
||||||
- **Advanced AI Integration**: Built on LangChain and leverages the latest LLMs for natural language understanding and generation.
|
- **Advanced AI Integration**: Built on LangChain and leverages the latest LLMs for natural language understanding and generation.
|
||||||
|
- **Human-in-the-Loop Interaction**: Optional mode that enables the agent to ask you questions during task execution, ensuring higher accuracy and better handling of complex tasks that may require your input or clarification
|
||||||
- **Comprehensive Toolset**:
|
- **Comprehensive Toolset**:
|
||||||
- Shell command execution
|
- Shell command execution
|
||||||
- Expert querying system
|
- Expert querying system
|
||||||
|
|
@ -154,6 +155,7 @@ ra-aid -m "Explain the authentication flow" --research-only
|
||||||
- `-m, --message`: The task or query to be executed (required)
|
- `-m, --message`: The task or query to be executed (required)
|
||||||
- `--research-only`: Only perform research without implementation
|
- `--research-only`: Only perform research without implementation
|
||||||
- `--cowboy-mode`: Skip interactive approval for shell commands
|
- `--cowboy-mode`: Skip interactive approval for shell commands
|
||||||
|
- `--hil, -H`: Enable human-in-the-loop mode, allowing the agent to interactively ask you questions during task execution
|
||||||
- `--provider`: Specify the model provider (See Model Configuration section)
|
- `--provider`: Specify the model provider (See Model Configuration section)
|
||||||
- `--model`: Specify the model name (See Model Configuration section)
|
- `--model`: Specify the model name (See Model Configuration section)
|
||||||
- `--expert-provider`: Specify the provider for the expert tool (defaults to OpenAI)
|
- `--expert-provider`: Specify the provider for the expert tool (defaults to OpenAI)
|
||||||
|
|
@ -295,6 +297,23 @@ ra-aid -m "Update all deprecated API calls" --cowboy-mode
|
||||||
- Ensure you have a clean working tree before running
|
- Ensure you have a clean working tree before running
|
||||||
- Review changes in git diff before committing
|
- Review changes in git diff before committing
|
||||||
|
|
||||||
|
### Human-in-the-Loop Mode
|
||||||
|
|
||||||
|
Enable interactive mode to allow the agent to ask you questions during task execution:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ra-aid -m "Implement a new feature" --hil
|
||||||
|
# or
|
||||||
|
ra-aid -m "Implement a new feature" -H
|
||||||
|
```
|
||||||
|
|
||||||
|
This mode is particularly useful for:
|
||||||
|
- Complex tasks requiring human judgment
|
||||||
|
- Clarifying ambiguous requirements
|
||||||
|
- Making architectural decisions
|
||||||
|
- Validating critical changes
|
||||||
|
- Providing domain-specific knowledge
|
||||||
|
|
||||||
### Environment Variables
|
### Environment Variables
|
||||||
|
|
||||||
See the [Model Configuration](#model-configuration) section for details on provider-specific environment variables.
|
See the [Model Configuration](#model-configuration) section for details on provider-specific environment variables.
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,8 @@ from ra_aid.prompts import (
|
||||||
EXPERT_PROMPT_SECTION_PLANNING,
|
EXPERT_PROMPT_SECTION_PLANNING,
|
||||||
EXPERT_PROMPT_SECTION_IMPLEMENTATION,
|
EXPERT_PROMPT_SECTION_IMPLEMENTATION,
|
||||||
HUMAN_PROMPT_SECTION_RESEARCH,
|
HUMAN_PROMPT_SECTION_RESEARCH,
|
||||||
HUMAN_PROMPT_SECTION_PLANNING
|
HUMAN_PROMPT_SECTION_PLANNING,
|
||||||
|
HUMAN_PROMPT_SECTION_IMPLEMENTATION
|
||||||
)
|
)
|
||||||
import time
|
import time
|
||||||
from anthropic import APIError, APITimeoutError, RateLimitError, InternalServerError
|
from anthropic import APIError, APITimeoutError, RateLimitError, InternalServerError
|
||||||
|
|
@ -128,9 +129,9 @@ Examples:
|
||||||
help='The model name to use for expert knowledge queries (required for non-OpenAI providers)'
|
help='The model name to use for expert knowledge queries (required for non-OpenAI providers)'
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--human-interaction',
|
'--hil', '-H',
|
||||||
action='store_true',
|
action='store_true',
|
||||||
help='Enable human interaction'
|
help='Enable human-in-the-loop mode, where the agent can prompt the user for additional information.'
|
||||||
)
|
)
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
@ -286,13 +287,17 @@ def run_implementation_stage(base_task, tasks, plan, related_files, model, exper
|
||||||
task_agent = create_react_agent(model, get_implementation_tools(expert_enabled=expert_enabled), checkpointer=task_memory)
|
task_agent = create_react_agent(model, get_implementation_tools(expert_enabled=expert_enabled), checkpointer=task_memory)
|
||||||
|
|
||||||
# Construct task-specific prompt
|
# Construct task-specific prompt
|
||||||
|
expert_section = EXPERT_PROMPT_SECTION_IMPLEMENTATION if expert_enabled else ""
|
||||||
|
human_section = HUMAN_PROMPT_SECTION_IMPLEMENTATION if _global_memory.get('config', {}).get('hil', False) else ""
|
||||||
task_prompt = (IMPLEMENTATION_PROMPT).format(
|
task_prompt = (IMPLEMENTATION_PROMPT).format(
|
||||||
plan=plan,
|
plan=plan,
|
||||||
key_facts=get_memory_value('key_facts'),
|
key_facts=get_memory_value('key_facts'),
|
||||||
key_snippets=get_memory_value('key_snippets'),
|
key_snippets=get_memory_value('key_snippets'),
|
||||||
task=task,
|
task=task,
|
||||||
related_files="\n".join(related_files),
|
related_files="\n".join(related_files),
|
||||||
base_task=base_task
|
base_task=base_task,
|
||||||
|
expert_section=expert_section,
|
||||||
|
human_section=human_section
|
||||||
)
|
)
|
||||||
|
|
||||||
# Run agent for this task
|
# Run agent for this task
|
||||||
|
|
@ -326,7 +331,14 @@ def run_research_subtasks(base_task: str, config: dict, model, expert_enabled: b
|
||||||
)
|
)
|
||||||
|
|
||||||
# Run the subtask agent
|
# Run the subtask agent
|
||||||
subtask_prompt = f"Base Task: {base_task}\nResearch Subtask: {subtask}\n\n{RESEARCH_PROMPT.format(base_task=base_task, research_only_note='')}"
|
expert_section = EXPERT_PROMPT_SECTION_RESEARCH if expert_enabled else ""
|
||||||
|
human_section = HUMAN_PROMPT_SECTION_RESEARCH if config.get('hil', False) else ""
|
||||||
|
subtask_prompt = f"Base Task: {base_task}\nResearch Subtask: {subtask}\n\n{RESEARCH_PROMPT.format(
|
||||||
|
base_task=base_task,
|
||||||
|
research_only_note='',
|
||||||
|
expert_section=expert_section,
|
||||||
|
human_section=human_section
|
||||||
|
)}"
|
||||||
run_agent_with_retry(subtask_agent, subtask_prompt, config)
|
run_agent_with_retry(subtask_agent, subtask_prompt, config)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -379,13 +391,13 @@ def main():
|
||||||
get_research_tools(
|
get_research_tools(
|
||||||
research_only=_global_memory.get('config', {}).get('research_only', False),
|
research_only=_global_memory.get('config', {}).get('research_only', False),
|
||||||
expert_enabled=expert_enabled,
|
expert_enabled=expert_enabled,
|
||||||
human_interaction=args.human_interaction
|
human_interaction=args.hil
|
||||||
),
|
),
|
||||||
checkpointer=research_memory
|
checkpointer=research_memory
|
||||||
)
|
)
|
||||||
|
|
||||||
expert_section = EXPERT_PROMPT_SECTION_RESEARCH if expert_enabled else ""
|
expert_section = EXPERT_PROMPT_SECTION_RESEARCH if expert_enabled else ""
|
||||||
human_section = HUMAN_PROMPT_SECTION_RESEARCH if args.human_interaction else ""
|
human_section = HUMAN_PROMPT_SECTION_RESEARCH if args.hil else ""
|
||||||
research_prompt = RESEARCH_PROMPT.format(
|
research_prompt = RESEARCH_PROMPT.format(
|
||||||
expert_section=expert_section,
|
expert_section=expert_section,
|
||||||
human_section=human_section,
|
human_section=human_section,
|
||||||
|
|
@ -415,7 +427,7 @@ def main():
|
||||||
planning_agent = create_react_agent(model, get_planning_tools(expert_enabled=expert_enabled), checkpointer=planning_memory)
|
planning_agent = create_react_agent(model, get_planning_tools(expert_enabled=expert_enabled), checkpointer=planning_memory)
|
||||||
|
|
||||||
expert_section = EXPERT_PROMPT_SECTION_PLANNING if expert_enabled else ""
|
expert_section = EXPERT_PROMPT_SECTION_PLANNING if expert_enabled else ""
|
||||||
human_section = HUMAN_PROMPT_SECTION_PLANNING if args.human_interaction else ""
|
human_section = HUMAN_PROMPT_SECTION_PLANNING if args.hil else ""
|
||||||
planning_prompt = PLANNING_PROMPT.format(
|
planning_prompt = PLANNING_PROMPT.format(
|
||||||
expert_section=expert_section,
|
expert_section=expert_section,
|
||||||
human_section=human_section,
|
human_section=human_section,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue