В настоящее время я работаю с двумя агентами LangChain (агентами Pandas) над получением информации из больших наборов табличных данных. Изначально у меня были оба набора данных (Ирис и Титаник) в одном агенте, но разделение их на два агента повысило точность моих выводов.
В настоящее время у этих агентов отсутствует функциональность памяти, и последняя версия LangChain не поддерживает память через kwargs. Мне интересно, можно ли создать диалогового чат-бота, используя функцию завершения чата OpenAI, а также интегрировать эти два агента LangChain в качестве инструментов.
Моя цель — дать чат-боту возможность иметь память, позволяя ему обрабатывать ограниченное количество взаимодействий (например, 5) и переключаться между агентами Титаника и Ирис по мере необходимости, чтобы предоставлять точные ответы на основе предыдущих вопросов и контекста.
Я пытался следовать различным руководствам, но безуспешно. Как мне добиться такой интеграции?
Будет ли это возможно? Я получаю сообщение об ошибке.
# Required imports
import pandas as pd
from langchain.agents import create_pandas_dataframe_agent
from langchain.chat_models import ChatOpenAI
from openai import OpenAI
from tenacity import retry, wait_random_exponential, stop_after_attempt
# Load datasets
df_titanic = pd.read_csv("https://raw.githubusercontent.com/panda ... itanic.csv")
df_iris = pd.read_csv("https://gist.githubusercontent.com/curr ... 4/iris.csv")
# Initialize the OpenAI LLM
llm = ChatOpenAI(model="gpt-4")
# Create LangChain agents for both datasets
titanic_agent = create_pandas_dataframe_agent(llm, df_titanic, verbose=True)
iris_agent = create_pandas_dataframe_agent(llm, df_iris, verbose=True)
# Define the OpenAI client
client = OpenAI()
# Define tools for OpenAI
tools = [
{
"type": "function",
"function": {
"name": "titanic_agent",
"description": "Interacts with the Titanic dataset.",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "The question or query related to the Titanic dataset."
}
},
"required": ["query"]
},
}
},
{
"type": "function",
"function": {
"name": "iris_agent",
"description": "Interacts with the Iris dataset.",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "The question or query related to the Iris dataset."
}
},
"required": ["query"]
},
}
},
]
# Utility function for making requests to the Chat Completion API
@retry(wait=wait_random_exponential(multiplier=1, max=40), stop=stop_after_attempt(3))
def chat_completion_request(messages, tools=None):
response = client.chat.completions.create(
model="gpt-4",
messages=messages,
tools=tools
)
return response
# Main conversation loop
messages = []
messages.append({"role": "system", "content": "You are a chatbot that can answer questions using the Titanic and Iris datasets."})
while True:
user_input = input("User: ")
messages.append({"role": "user", "content": user_input})
# Get the response from OpenAI
chat_response = chat_completion_request(messages, tools=tools)
assistant_message = chat_response.choices[0].message
messages.append(assistant_message)
# Handle function call
if assistant_message.get("function_call"):
function_name = assistant_message.function_call.name
function_args = assistant_message.function_call.arguments
if function_name == "titanic_agent":
result = titanic_agent.run(function_args['query'])
elif function_name == "iris_agent":
result = iris_agent.run(function_args['query'])
# Append the function result to the messages
messages.append({"role": "function", "content": result})
print(f"Assistant: {result}")
else:
print(f"Assistant: {assistant_message['content']}")
Подробнее здесь: https://stackoverflow.com/questions/790 ... ions-tools