Closed projectssimm closed 8 months ago
🤖
Hello again, @projectssimm! It's good to see you back and working on the LangChain project.
Based on your requirements, here is a code example that uses the initialize_agent
method to initialize the agent, uses memory to keep history chat messages, uses prompt templates to customize the outputs, and ensures the output of tool2 is not modified by LLM or further processed by the agent chain:
from langchain_core.language_models import YourLanguageModel
from langchain_core.callbacks.base import YourCallbackManager
from langchain.tools.base import Tool
from langchain.agents.conversational_chat.base import ConversationalChatAgent
from langchain.agents.conversational_chat.memory import Memory
from langchain.agents.conversational_chat.prompt_templates import PromptTemplate
# Define your functions
def Func_Tool_Extractor(parameters):
# Your function code here
def Func_Tool_ADMET(parameters):
# Your function code here
# Define the tools
tool1 = Tool(
name="Tool_Extractor",
func=Func_Tool_Extractor,
description="Your tool1 description"
)
tool2 = Tool(
name="Tool_ADMET",
func=Func_Tool_ADMET,
description="Your tool2 description"
)
# Initialize your language model, callback manager, and tools
llm = YourLanguageModel()
callback_manager = YourCallbackManager()
# Initialize the agent
agent = ConversationalChatAgent.from_llm_and_tools(
llm=llm,
tools=[tool1, tool2],
callback_manager=callback_manager,
system_message="Your custom system message",
human_message="Your custom human message",
input_variables=["input", "chat_history", "agent_scratchpad"]
)
# Initialize memory
memory = Memory()
# Initialize prompt templates
prompt_templates = PromptTemplate()
# Use the agent
result = agent.react_description(
input="Your input",
chat_history=memory.get_chat_history(),
agent_scratchpad=memory.get_agent_scratchpad(),
prompt_templates=prompt_templates
)
# The output of tool2 is not modified by LLM or further processed by the agent chain
# because the output_parser is not specified, so the default ConvoOutputParser is used
# which does not modify the output of the tools.
Please replace YourLanguageModel
, YourCallbackManager
, Func_Tool_Extractor
, and Func_Tool_ADMET
with your actual language model, callback manager, and functions. The system_message
and human_message
parameters are used to customize the system and human messages in the chat. The input_variables
parameter is used to specify the input variables for the chat, which includes the chat history.
The Memory
class is used to keep track of the chat history and the agent's scratchpad. The PromptTemplate
class is used to customize the prompts used by the agent.
The react_description
method is used to get the agent's reaction to the input. The output of tool2 is not modified by LLM or further processed by the agent chain because the output_parser is not specified, so the default ConvoOutputParser
is used which does not modify the output of the tools.
Please note that this is a simplified example and you may need to adjust it to fit your specific needs.
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" }
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:
Suggestion:
No response