Combine Tools Together in a Chain
Labels: name: area: memory, name: area: agent, name: auto:enhancement

### Issue you'd like to raise.

I got 2 functions and 2 related tools:

def Func_Tool_Extractor(parameters):
    print("\n", parameters)
    print("触发Func_Tool_Extractor插件")
    pdf_id, extractor_id_position = parameters.split(",")
    print(f"获取到pdf id为{pdf_id}，这篇文档用户想要查询第{extractor_id_position}个分子")
    test_smiles = "C1C2=C3CCC3=C2CC1"
    extractor_id = 1876
    print(f"查询到第{extractor_id_position}个分子的smiles为{test_smiles}, extractor_id为{extractor_id}")
    answer = f"查询到分子的SMILES为{test_smiles}, extractor_id为{extractor_id}, pdf_id为{pdf_id}"
    return answer

def Func_Tool_ADMET(parameters):
    print("\n", parameters)
    print("触发Func_Tool_ADMET插件")
    print("........正在解析ADMET属性..........")
    data = {
        "id": "2567",
        "smiles": "C1=CC=CC=C1C1=C(C2=CC=CC=C2)C=CC=C1",
        "humanIntestinalAbsorption": "HIA+|0.73",
        "caco2Permeability": "None",
        "caco2PermeabilityIi": "Caco2+|0.70",
        "pGlycoproteinInhibitorI": "Pgp_nonInhibitor|0.51",
        "pGlycoproteinInhibitorIi": "Pgp_Inhibitor|0.68",
        "pGlycoproteinSubstrate": "substrate|0.56",
        "bloodBrainBarrier": "BBB+|0.73",
        "cyp4501a2Inhibitor": "Inhibitor|0.73",
        "cyp4502c19Inhibitor": "Inhibitor|0.68",
        "cyp4502c9Inhibitor": "Non_Inhibitor|0.53",
        "cyp4502c9Substrate": "non-substrate|0.59",
        "cyp4502d6Inhibitor": "Non_Inhibitor|0.65",
        "cyp4502d6Substrate": "substrate|0.55",
        "cyp4503a4Inhibitor": "Non_Inhibitor|0.71",
        "cyp4503a4Substrate": "non_substrate|0.52",
        "cypInhibitorPromiscuity": "High CYP Inhibitory Promiscuity|0.61",
        "biodegradation": "Not ready biodegradable|0.64",
        "renalOrganicCationTransporter": "inhibitor|0.64",
        "amesToxicity": "Non AMES toxic|0.66",
        "carcinogens": "non_carcinogens|0.71",
        "humanEtherAGoGoRelatedGeneInhibitionI": "Weak inhibitor|0.60",
        "humanEtherAGoGoRelatedGeneInhibitionIi": "Weak inhibitor|0.53",
        "honeyBeeToxicity": "highAT|0.56",
        "tetrahymenaPyriformisToxicity": "None",
        "tetrahymenaPyriformisToxicityIi": "non-TPT|0.73",
        "fishToxicity": "None",
        "fishToxicityIi": "High FHMT|0.73",
        "aqueousSolubility": "None",
        "savePath": "/profile/chemicalAppsResult/admetResult/2023/11/10/2567",
        "status": "1",
        "favoriteFlag": "0"
    }

    return data

# Define the tools
tool1 = Tool(
    name="Tool_Extractor",
    func=Func_Tool_Extractor,
    description="""
        useful when you want to get a molecule from a document. 
        like: get the 3rd molecule of the document.
        The input of this tool should be comma separated string of two, representing the pdf_id and the number of the molecule to be gotten.
    """
)

tool2 = Tool(
    name="Tool_ADMET",
    func=Func_Tool_ADMET,
    description="""
        useful when you want to obtain the ADMET data for a molecule.
        like: get the ADMET data for molecule X
        The input to this tool should be a string, representing the SMILES of the molecule.
    """
)

Give me a CONVERSATIONAL_REACT_DESCRIPTION code example to use these two tools, and the following requirements should be met:
1.	Use initialize_agent method to initialize the agent as needed;
2.	The output of tool2 should not be modified by LLM or further processed by the agent chain, avoiding data elimination caused by the thoughts made by LLM models;
3.	Use memory to keep history chat messages;
4.	Use prompt templates to customize the outputs, especially for the tool2.


### Suggestion:

_No response_