Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Endless loop in Agents #2

Open
mirodrr opened this issue Jun 2, 2023 · 1 comment
Open

Endless loop in Agents #2

mirodrr opened this issue Jun 2, 2023 · 1 comment

Comments

@mirodrr
Copy link

mirodrr commented Jun 2, 2023

I have tried to use both your react/v3 agent, and your v2 agent, without luck. The model just keeps repeating itself, even if it has the answer. I am using Claude

Code

import time
from ai_bricks.api import openai
from ai_bricks.api import anthropic
from ai_bricks import agent

aa = agent.actions
aa.wikipedia_search_many.__name__ = 'wikipedia-summary'
aa.wikipedia_get_data.__name__ = 'wikipedia-data'
actions = [
    aa.wikipedia_search_many,
    aa.wikipedia_get_data,
    aa.python_eval,
]

q = "What is two plus two"

model = anthropic.model('claude-instant-v1', temperature=0.0) # key from ANTHROPIC_API_KEY env variable

a = agent.get('react')(model=model, actions=actions)
answer = a.run(q, n_turns=3)

Output:

Task: Answer the following question as best you can.
Question: What is two plus two
You are augmented with the following actions: 
- wikipedia-summary: query wikipedia with a list of entities / subjects and return a summary for each one
- wikipedia-data: query wikipedia with a list of entities / subjects and return the main data table for each one
- python_eval: evaluate single python expression; imported modules: math, time, random, datetime; do not import anything else; use only one line of code
Use the following response protocol and format: 
Question: What is two plus two
Thought: you should always think about what to do
Action: the action to take (only the name, not the arguments)
Input: the input to the action
Observation: the result of the action
Summary: key takeways - extract all data (esp numeric data) relevant to the question, one item per line
Repeat: 
- this Question/Thought/Action/Input/Observation/Summary can repeat N times
- if you don't want to take any action you can skip from one Thought to the next Thought
Thought: I now know the final answer
Final Answer: the final answer to the original input question
Important: 
- always follow the protocol - Thought, Action, Input, Observation, Summary, Thought, etc
- never use empty Input 
- you don't know current time and date
Thought: you should always think about what to do
Action: python_eval
Input: math.ceil(2+2)
---
CLEAR: 0
Observation: 4
Reminder: The next item must be a Summary followed by a Thought!
Thought: you should always think about what to do
Action: python_eval
Input: math.ceil(2+2)
---
CLEAR: 8
Observation: 4
Reminder: The next item must be a Summary followed by a Thought!
Thought: you should always think about what to do
Action: python_eval
Input: math.ceil(2+2)
---
CLEAR: 8
Observation: 4
Reminder: The next item must be a Summary followed by a Thought!

DONE IN 2.7s (3 steps, 0.90s per step) FOR $0.0027 (1264 claude-instant-v1 tokens)

Question: What is two plus two

Final Answer: 
@mirodrr
Copy link
Author

mirodrr commented Jun 2, 2023

The V2 agent actually does a lot better, but it does repeat itself a lot. It seems to avoid the endless loop though which is good

Only problem is that
print('FINAL ANSWER:', resp['text'])
from your example doesn't actually print out the final answer

Code

from ai_bricks import agent
from ai_bricks.agent import actions0
from ai_bricks.api import anthropic
import time
import os
import contextlib

model = anthropic.model('claude-instant-v1', temperature=0.0) # key from ANTHROPIC_API_KEY env variable

agent.actions.VERBOSE_EXCEPTIONS = False
actions = {
    'wikipedia':              agent.actions0.wikipedia_summaries,
    'python-eval':            agent.actions.python_eval,
}

question = "if Mary has four apples and Giorgio brings two and a half apple boxes (apple box contains eight apples), how many apples do we have?"

resp = agent.get('v2')(question, model=model, actions=actions, iter_limit=3)
print('agent response:', resp)
print('FINAL ANSWER:', resp['text'])

Output:

QUESTION: if Mary has four apples and Giorgio brings two and a half apple boxes (apple box contains eight apples), how many apples do we have?

SYSTEM PROMPT:
 
Answer the following questions as best you can.
Question: if Mary has four apples and Giorgio brings two and a half apple boxes (apple box contains eight apples), how many apples do we have?

You are augmented with the following actions: wikipedia python-eval.
Remembber that `wikipedia` can search only for one entity at a time!
Following modules are already imported in `python-eval`: math, time, datetime, random.
Remember that `python-eval` only evaluetes expressions (up to 300 chars) and not code blocks!
Don't import any module on your own in `python-eval`.
Be careful and avoid off by one errors.
Current time: 2023-06-02 21:56:08

Use the following format:
Plan: start by making a plan that also includes notes from previous sessions (if any) sorted chronologicaly; use information from previous sessions to make a better plan
Thought: you should always think about what to do
Action: the action to take, should be one of wikipedia python-eval
Action Input: the input to the action
Observation: the result of the action
Reward: 1 if progress was made, 0 otherwise
... (this Thought/Action/Action Input/Observation/Reward can repeat N times)
... (if you don't want to take action you can skip from one Thought to the next Thought)
Thought: I now know the final answer
Final Answer: the final answer to the original input question



---
Thought: I need to calculate the number of apples Mary has and the number of apples in the apple boxes separately, and then add them together.  
Action: python-eval
Action Input: 4 + 2*8
Observation: 20
---
Plan: - Understand the problem and identify relevant information 
Thought: Mary has 4 apples.  
Action: python-eval    
Action Input: 4
Observation: 4
---
Plan: - Mary has 4 apples   
Thought: Mary has 4 apples  
Action: python-eval    
Action Input: 4    
Observation: 4
FINAL ANSWER FOUND IN FINAL NOTE

FINAL ERROR RESP  Plan: 
- Mary has 4 apples   
- Giorgio brings 2.5 apple boxes, each containing 8 apples
- Need to calculate total number of apples in boxes:
  - 2.5 apple boxes  
  - Each box has 8 apples
  - So total apples in boxes is 2.5 * 8 = 20
- Then add Mary's 4 apples to get total

Thought: There are 20 apples in the boxes 
Action: python-eval    
Action Input: 2.5 * 8
Observation: 20

Thought: Mary has 4 apples  
Action: python-eval    
Action Input: 4  
Observation: 4

Thought: Add the number of apples in boxes and apples Mary has
Action: python-eval
Action Input: 20 + 4
Observation: 24

Thought: I now know the final answer
Final Answer: There are 24 apples total: 4 from Mary and 20 from the 2.5 apple boxes

Next time:
- Break down the problem into smaller steps 
- Calculate parts separately before combining  
- Double check intermediate results
Python-eval was useful for performing calculations quickly but I need to be careful with inputs.

agent response: {'text': '', 'status': 'Error: iterations limit reached', 'rtt_list': [1.4132709503173828, 1.3998444080352783, 1.125760555267334], 'cost_list': [0.00099843, 0.00120777, 0.00126241]}
FINAL ANSWER: 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant