Source code for langchain_experimental.autonomous_agents.autogpt.output_parser

import json
import re
from abc import abstractmethod
from typing import Dict, NamedTuple

from langchain_core.output_parsers import BaseOutputParser


[docs]class AutoGPTAction(NamedTuple): """AutoGPTOutputParser返回的操作。""" name: str args: Dict
[docs]class BaseAutoGPTOutputParser(BaseOutputParser): """AutoGPT的基本输出解析器。"""
[docs] @abstractmethod def parse(self, text: str) -> AutoGPTAction: """返回AutoGPTAction"""
[docs]def preprocess_json_input(input_str: str) -> str: """预处理字符串以便解析为json。 将单个反斜杠替换为双反斜杠,同时保留已经转义的反斜杠不变。 参数: input_str: 需要预处理的字符串 返回: 预处理后的字符串 """ corrected_str = re.sub( r'(?<!\\)\\(?!["\\/bfnrt]|u[0-9a-fA-F]{4})', r"\\\\", input_str ) return corrected_str
[docs]class AutoGPTOutputParser(BaseAutoGPTOutputParser): """AutoGPT的输出解析器。"""
[docs] def parse(self, text: str) -> AutoGPTAction: try: parsed = json.loads(text, strict=False) except json.JSONDecodeError: preprocessed_text = preprocess_json_input(text) try: parsed = json.loads(preprocessed_text, strict=False) except Exception: return AutoGPTAction( name="ERROR", args={"error": f"Could not parse invalid json: {text}"}, ) try: return AutoGPTAction( name=parsed["command"]["name"], args=parsed["command"]["args"], ) except (KeyError, TypeError): # If the command is null or incomplete, return an erroneous tool return AutoGPTAction( name="ERROR", args={"error": f"Incomplete command args: {parsed}"} )