mirror of
https://github.com/hwchase17/langchain.git
synced 2025-09-13 13:36:15 +00:00
Improving Resilience of MRKL Agent (#5014)
This is a highly optimized update to the pull request https://github.com/hwchase17/langchain/pull/3269 Summary: 1) Added ability to MRKL agent to self solve the ValueError(f"Could not parse LLM output: `{llm_output}`") error, whenever llm (especially gpt-3.5-turbo) does not follow the format of MRKL Agent, while returning "Action:" & "Action Input:". 2) The way I am solving this error is by responding back to the llm with the messages "Invalid Format: Missing 'Action:' after 'Thought:'" & "Invalid Format: Missing 'Action Input:' after 'Action:'" whenever Action: and Action Input: are not present in the llm output respectively. For a detailed explanation, look at the previous pull request. New Updates: 1) Since @hwchase17 , requested in the previous PR to communicate the self correction (error) message, using the OutputParserException, I have added new ability to the OutputParserException class to store the observation & previous llm_output in order to communicate it to the next Agent's prompt. This is done, without breaking/modifying any of the functionality OutputParserException previously performs (i.e. OutputParserException can be used in the same way as before, without passing any observation & previous llm_output too). --------- Co-authored-by: Deepak S V <svdeepak99@users.noreply.github.com>
This commit is contained in:
@@ -119,17 +119,19 @@ def test_get_final_answer_multiline() -> None:
|
||||
def test_bad_action_input_line() -> None:
|
||||
"""Test handling when no action input found."""
|
||||
llm_output = "Thought: I need to search for NBA\n" "Action: Search\n" "Thought: NBA"
|
||||
with pytest.raises(OutputParserException):
|
||||
with pytest.raises(OutputParserException) as e_info:
|
||||
get_action_and_input(llm_output)
|
||||
assert e_info.value.observation is not None
|
||||
|
||||
|
||||
def test_bad_action_line() -> None:
|
||||
"""Test handling when no action input found."""
|
||||
"""Test handling when no action found."""
|
||||
llm_output = (
|
||||
"Thought: I need to search for NBA\n" "Thought: Search\n" "Action Input: NBA"
|
||||
)
|
||||
with pytest.raises(OutputParserException):
|
||||
with pytest.raises(OutputParserException) as e_info:
|
||||
get_action_and_input(llm_output)
|
||||
assert e_info.value.observation is not None
|
||||
|
||||
|
||||
def test_from_chains() -> None:
|
||||
|
Reference in New Issue
Block a user