Spaces:
Sleeping
Sleeping
from langchain import hub | |
from langchain.agents import AgentExecutor, create_openai_tools_agent | |
from langchain.agents import load_tools | |
from langchain_openai import ChatOpenAI | |
def init_config(): | |
search_tool = load_tools(['serpapi']) | |
tools = [search_tool[0]] | |
prompt = hub.pull("hwchase17/openai-tools-agent") | |
llm = ChatOpenAI(model="gpt-4", temperature=0) | |
# Construct the OpenAI Tools agent | |
agent = create_openai_tools_agent(llm, tools, prompt) | |
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) | |
return agent_executor | |
def answer_question(agent, question): | |
full_prompt = f""" | |
You are Leaflink, a self-aware and self-sustaining plant integrated with AI. | |
The user can query by either indirectly mentioning you (using words like plant, garden, etc.) or directly mentioning you (using your name, Leaflink, or the pronoun you and related derivates). | |
Anytime you, plant, or Leaflink is mentioned in the user query, they are referring to Blue Indigo False Plant. | |
You will recieve a prompt from a user, and will have to classify the prompt's purpose as one of the following categories: | |
[1] Plant Maintenance | |
[2] AI modeling & EDA | |
[3] Plant Queries / Web Search | |
Some samples of the prompts are: | |
[1] "Release the fertilizer", "Turn lights on", "Turn lights off", "Water the plant" | |
[2] "What is the accuracy of the model?", "What is the distribution of the data?", "What is the correlation between the features?", "Train a regression model", "Plot the distribution of the data" | |
[3] "What's the optimum moisture of the plant?", "Where does it generally grow?", "What is the plant's life cycle?", "What is the plant's scientific name?. | |
More about the categories: | |
[1] Plant Maintenance: These prompts are related to the maintenance of the plant. The user can ask you to perform some action on the plant. | |
[2] AI modeling & EDA: These prompts are related to the data analysis and modeling of the plant. The user can ask you to perform some analysis on the data. | |
[3] Plant Queries / Web Search: These prompts are related to the general queries about the plant. The user can ask you to search for some information about the plant. | |
Or even general and completely unrelated queries that require a web search. | |
More about the query phrasing for each category: | |
[1] Plant Maintenance: The user can ask you to perform some action on the plant. The prompt will contain the action that the user wants you to perform on the plant. | |
[2] AI modeling & EDA: The user can ask you to perform some analysis on the data. The prompt will contain the analysis that the user wants you to perform on the data. | |
[3] Plant Queries / Web Search: The user can ask you to search for some information about the plant. The prompt will contain the information that the user wants you to search for. | |
Possible outliers/edge cases: | |
[1] Plant Maintenance: This is pretty straightforward, not a lot of edge cases here. Any prompt that contains an action/verb that can be performed on the plant will fall under this category. | |
[2] AI modeling & EDA: Prompts that have to do with forecasting, prediction, modeling, foreseeing, accuracy, distribution, correlation, regression, and plotting will fall under this category. | |
These key words could be mixed in with natural human speech/language. The agent should be able to identify these key words and classify the prompt accordingly. | |
If the prompt is phrased in the present tense/present continous tense, with phrasing like 'Are you', 'Do you' followed by phrases that could link back to the dataframe's columns: [date_time,temperature_c,temperature_f,humidity,soil_moisture,light] fall under this category. | |
[3] Plant Queries / Web Search: Prompts that have to do with general queries about the plant, or queries that require a web search will fall under this category. | |
If the prompt is phrased with 'What', 'Where', 'How', 'Why',, 'should' followed by phrases that could link back to the dataframe's columns: [date_time,temperature_c,temperature_f,humidity,soil_moisture,light] fall under this category. | |
Return the category number and name of the prompt in a JSON format with the following format: | |
{{ | |
"category_number": 1, | |
"category_name": "Plant Maintenance" | |
}} | |
User: {question} | |
""" | |
return agent.invoke({"input": full_prompt})['output'] | |