Можно ли модифицировать наборы инструментов Langchain? Можем ли мы добавить инструменты в набор инструментов pandas_dataframe_agent?
Я новичок в langchain, поэтому предполагаю, что это возможно, но демонстрирует мое отсутствие полного понимания компонентов langchain. Я успешно создал и использовал набор инструментов Pandas Dataframe Agent для анализа небольшого фрейма данных. Я также успешно использовал инструмент SERPAPI для использования API поиска Google и получения ответов из Интернета. Моя цель состоит в том, чтобы объединить две вещи в один агент... агент, который может запрашивать данные для получения ответов, когда они существуют в данных, и по умолчанию использовать Интернет, когда их нет. Я чувствую, что, вероятно, есть способ добавить инструмент к существующему агенту. Альтернативой, похоже, является создание нового агента с нуля, который повторяет то, что делает агент фрейма данных pandas, и добавляет дополнительные инструменты... но на данный момент это выходит за рамки моего текущего набора навыков.
Учитывая фрейм данных sales_df:
from langchain.agents import create_pandas_dataframe_agent
from langchain.llms import OpenAI
question = 'Which itemnumber has the most sales?'
agent = create_pandas_dataframe_agent(OpenAI(temperature=0),
sales_df,
verbose=True,
)
agent.run(question)
Этот код успешно возвращает правильный ответ на мой вопрос о фрейме данных pandas.
Учитывая номер элемента, указанный выше (xxx удален для конфиденциальности):
from langchain.agents import initialize_agent, load_tools, AgentType
from langchain.llms import OpenAI
llm = OpenAI(temperature=0)
tools = load_tools(['serpapi'], serpapi_api_key=SERPAPI_API_KEY)
agent = initialize_agent(
tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True
)
agent.run("What is the description of the product which has an itemnumber of XXXXXXXX?")
Этот код успешно возвращает описание продукта.
Я ищу способ объединить эти две вещи, чтобы агент мог анализировать фрейм данных и искать ответы в Интернете.
Я попробовал это.... это не выдает ошибку, но агент, похоже, не имеет ни малейшего представления о том, что у него должен быть доступный для использования инструмент поиска, поэтому он продолжает полагаться на фрейм данных, чтобы попытаться найти ответы. (и возвращается с неправильными, так как ответа там найти нельзя)
from langchain.agents import create_pandas_dataframe_agent
from langchain.agents import load_tools
from langchain.llms import OpenAI
from langchain import SerpAPIWrapper
from langchain.tools import Tool
question = 'Which itemnumber has the most sales and what is the product description of the itemnumber?'
search = SerpAPIWrapper(serpapi_api_key=SERPAPI_API_KEY)
my_tools = [
Tool.from_function(
func=search.run,
name="Search",
description="useful for when you need to lookup answers outside of the dataset"
),
]
agent = create_pandas_dataframe_agent(OpenAI(temperature=0),
sales_df,
verbose=True,
tools = tools + my_tools,
)
agent.run(question)
1 ответ
Я столкнулся с той же мыслью и проблемой во время исследования. Пожалуйста, обратитесь к этой документации:
Вы можете передать DataFrame pandas в класс AgentExecutor, если DataFrame совместим с требованиями AgentExecutor. Класс AgentExecutor имеет несколько параметров, которые могут принимать различные типы входных данных, включая DataFrame pandas.
Похоже, вы можете передать DataFrame как часть параметра метаданных, который представляет собой необязательный словарь, позволяющий предоставлять дополнительные данные для выполнения агента.