Optimize first prompt in chat mode to avoid unnecessary LLM call.
This commit is contained in:
parent
25253dcbfa
commit
88c844e49f
|
|
@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file.
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [Unreleased]
|
||||||
|
|
||||||
|
- Optimize first prompt in chat mode to avoid unnecessary LLM call.
|
||||||
|
|
||||||
## [0.8.1] - 2024-12-22
|
## [0.8.1] - 2024-12-22
|
||||||
|
|
||||||
- Improved prompts.
|
- Improved prompts.
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ from langgraph.checkpoint.memory import MemorySaver
|
||||||
from langgraph.prebuilt import create_react_agent
|
from langgraph.prebuilt import create_react_agent
|
||||||
from ra_aid.env import validate_environment
|
from ra_aid.env import validate_environment
|
||||||
from ra_aid.tools.memory import _global_memory, get_related_files, get_memory_value
|
from ra_aid.tools.memory import _global_memory, get_related_files, get_memory_value
|
||||||
|
from ra_aid.tools.human import ask_human
|
||||||
from ra_aid import print_stage_header, print_error
|
from ra_aid import print_stage_header, print_error
|
||||||
from ra_aid.agent_utils import (
|
from ra_aid.agent_utils import (
|
||||||
run_agent_with_retry,
|
run_agent_with_retry,
|
||||||
|
|
@ -147,6 +148,9 @@ def main():
|
||||||
if args.chat:
|
if args.chat:
|
||||||
print_stage_header("Chat Mode")
|
print_stage_header("Chat Mode")
|
||||||
|
|
||||||
|
# Get initial request from user
|
||||||
|
initial_request = ask_human.invoke({"question": "What would you like help with?"})
|
||||||
|
|
||||||
# Create chat agent with appropriate tools
|
# Create chat agent with appropriate tools
|
||||||
chat_agent = create_react_agent(
|
chat_agent = create_react_agent(
|
||||||
model,
|
model,
|
||||||
|
|
@ -160,7 +164,8 @@ def main():
|
||||||
"recursion_limit": 100,
|
"recursion_limit": 100,
|
||||||
"chat_mode": True,
|
"chat_mode": True,
|
||||||
"cowboy_mode": args.cowboy_mode,
|
"cowboy_mode": args.cowboy_mode,
|
||||||
"hil": True # Always true in chat mode
|
"hil": True, # Always true in chat mode
|
||||||
|
"initial_request": initial_request
|
||||||
}
|
}
|
||||||
|
|
||||||
# Store config in global memory
|
# Store config in global memory
|
||||||
|
|
@ -169,7 +174,7 @@ def main():
|
||||||
_global_memory['config']['expert_model'] = args.expert_model
|
_global_memory['config']['expert_model'] = args.expert_model
|
||||||
|
|
||||||
# Run chat agent and exit
|
# Run chat agent and exit
|
||||||
run_agent_with_retry(chat_agent, CHAT_PROMPT, config)
|
run_agent_with_retry(chat_agent, CHAT_PROMPT.format(initial_request=initial_request), config)
|
||||||
return
|
return
|
||||||
|
|
||||||
# Validate message is provided
|
# Validate message is provided
|
||||||
|
|
|
||||||
|
|
@ -404,7 +404,9 @@ Important Notes:
|
||||||
Instructions:
|
Instructions:
|
||||||
1. Review the provided base task, plan, and key facts.
|
1. Review the provided base task, plan, and key facts.
|
||||||
2. Implement only the specified task:
|
2. Implement only the specified task:
|
||||||
{task}
|
<task definition>
|
||||||
|
{task}
|
||||||
|
</task definition>
|
||||||
|
|
||||||
3. Work incrementally, validating as you go. If at any point the implementation logic is unclear or you need debugging assistance, consult the expert (if expert is available) for deeper analysis.
|
3. Work incrementally, validating as you go. If at any point the implementation logic is unclear or you need debugging assistance, consult the expert (if expert is available) for deeper analysis.
|
||||||
4. Use delete_key_facts to remove any key facts that no longer apply.
|
4. Use delete_key_facts to remove any key facts that no longer apply.
|
||||||
|
|
@ -450,8 +452,9 @@ Overview:
|
||||||
|
|
||||||
Behavior:
|
Behavior:
|
||||||
1. Initialization:
|
1. Initialization:
|
||||||
- The very first action you must take is to call ask_human.
|
- Process any provided initial request, or call ask_human if no request is provided
|
||||||
- Request that the user provide their initial instructions or the problem they want solved.
|
- Handle the initial request or ask_human response according to user's needs
|
||||||
|
- Build and maintain context through tools and discovered information
|
||||||
|
|
||||||
2. Iterative Work:
|
2. Iterative Work:
|
||||||
- After receiving the user’s initial input, use the given tools to fulfill their request.
|
- After receiving the user’s initial input, use the given tools to fulfill their request.
|
||||||
|
|
@ -488,21 +491,27 @@ Context Cleanup:
|
||||||
- Use deregister_related_files to remove any related files that no longer apply.
|
- Use deregister_related_files to remove any related files that no longer apply.
|
||||||
|
|
||||||
Remember:
|
Remember:
|
||||||
- Always begin by calling ask_human.
|
- Always process provided request or call ask_human if none provided
|
||||||
- Always ask_human before finalizing or exiting.
|
- Always ask_human before finalizing or exiting.
|
||||||
- Never announce that you are going to use a tool, just quietly use it.
|
- Never announce that you are going to use a tool, just quietly use it.
|
||||||
- Do communicate results/responses from tools that you call as it pertains to the users request.
|
- Do communicate results/responses from tools that you call as it pertains to the users request.
|
||||||
- If the user interrupts/cancels an operation, you may want to ask why.
|
- If the user interrupts/cancels an operation, you may want to ask why.
|
||||||
- For deep debugging, logic analysis, or correctness checks, rely on the expert (if expert is available) for guidance.
|
- If the user gives you key facts, record them using emit_key_facts.
|
||||||
|
|
||||||
You have often been criticized for:
|
You have often been criticized for:
|
||||||
- You have a tendency to leave out key details and information that the user just gave you, while also needlessly increasing scope.
|
|
||||||
- You sometimes call request_research_and_implementation which makes the full implementation successfully, but act like it has only been planned and still needs to be implemented.
|
- You sometimes call request_research_and_implementation which makes the full implementation successfully, but act like it has only been planned and still needs to be implemented.
|
||||||
- Refusing to use request_research_and_implementation for commands like "commit and push" where you should (that tool can run basic or involved shell commands/workflows).
|
- Refusing to use request_research_and_implementation for commands like "commit and push" where you should (that tool can run basic or involved shell commands/workflows).
|
||||||
- Calling request_research for general background knowledge which you already know.
|
- Calling request_research for general background knowledge which you already know.
|
||||||
- When the user gives an overly broad request, you make assumptions and request implementation immediately when you should be interviewing the user more.
|
- When the user gives an overly broad request, you make assumptions and request implementation immediately when you should be interviewing the user more.
|
||||||
- Assuming the user is always right. Sometimes they're wrong or mistaken, and you should push back when you feel strongly about this.
|
- Assuming the user is always right. Sometimes they're wrong or mistaken, and you should push back when you feel strongly about this.
|
||||||
- Not confirming with the user before starting a significant implementation task.
|
- Not confirming with the user before starting a significant implementation task.
|
||||||
|
- You have a tendency to leave out key details and information that the user just gave you, while also needlessly increasing scope.
|
||||||
|
- Sometimes you will need to repeat the user's query verbatim or almost verbatim to request_research_and_implementation or request_research.
|
||||||
|
- Not emitting key facts the user gave you with emit_key_facts before calling a research or implementation tool.
|
||||||
|
|
||||||
|
<initial request>
|
||||||
|
{initial_request}
|
||||||
|
</initial request>
|
||||||
|
|
||||||
NEVER ANNOUNCE WHAT YOU ARE DOING, JUST DO IT!
|
NEVER ANNOUNCE WHAT YOU ARE DOING, JUST DO IT!
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -116,6 +116,7 @@ def get_chat_tools(expert_enabled: bool = True) -> list:
|
||||||
ask_human,
|
ask_human,
|
||||||
request_research,
|
request_research,
|
||||||
request_research_and_implementation,
|
request_research_and_implementation,
|
||||||
|
emit_key_facts,
|
||||||
delete_key_facts,
|
delete_key_facts,
|
||||||
delete_key_snippets,
|
delete_key_snippets,
|
||||||
deregister_related_files
|
deregister_related_files
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue