Использование агентов LangChain Pandas в качестве инструментов для разговорного чат-бота с памятьюPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Использование агентов LangChain Pandas в качестве инструментов для разговорного чат-бота с памятью

Сообщение Anonymous »

В настоящее время я использую два агента LangChain (агенты Pandas) для получения информации из огромной табличной базы данных. Изначально у меня были оба набора данных по биомеханике в одном исходном агенте Pandas, но разделение двух разных наборов данных на два агента значительно повысило точность моих выводов. Вот почему у меня теперь два агента.
В настоящее время у агентов нет памяти, и они не позволяют использовать память через kwargs в последней версии LangChain. Однако я спрашиваю, есть ли способ использовать LangChain, чтобы:
Иметь разговорного чат-бота с памятью, используя функцию буфера памяти из LangChain.
Для этого вопроса я заменил исходные наборы данных наборами данных Iris и Titanic.
Я пытался перейти по нескольким ссылкам, чтобы узнать, как это сделать, но безуспешно.
Я написал с помощью этого кода:

Код: Выделить всё

import pandas as pd
from langchain.agents import create_pandas_dataframe_agent, ZeroShotAgent, AgentExecutor
from langchain.chat_models import ChatOpenAI
from langchain.memory import ConversationBufferWindowMemory
from langchain.chains import LLMChain

# Load datasets
df1 = pd.read_csv("https://raw.githubusercontent.com/pandas-dev/pandas/main/doc/data/titanic.csv")
df2 = pd.read_csv("https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/0e7a9b0a5d22642a06d3d5b9bcbad9890c8ee534/iris.csv")

# Initialize LLM model
llm_model = AzureChatOpenAI(
temperature=0,
openai_api_version=oai_api_vers,
azure_deployment=deployment
)

# Create agents for Titanic and Iris datasets
titanic_agent = create_pandas_dataframe_agent(
llm_model,
df1,
verbose=True,
engine='pandas',
agent_type="openai-tools"
)

iris_agent = create_pandas_dataframe_agent(
llm_model,
df2,
verbose=True,
engine='pandas',
agent_type="openai-tools"
)

# Set up the prompt and memory
prefix = """Have a conversation with a human. Answer step by step, and the history of the messages is critical and very important to use. Now, You have access to the following tools:"""
suffix = """Begin!

{chat_history}
Question: {input}
{agent_scratchpad}"""

# List of tools including the agents
tools = [titanic_agent, iris_agent]

# Create the prompt
prompt = ZeroShotAgent.create_prompt(
tools=tools,
prefix=prefix,
suffix=suffix,
input_variables=["input", "chat_history", "agent_scratchpad"]
)

# Set up memory
memory = ConversationBufferWindowMemory(
memory_key='chat_history',
k=5,
return_messages=True
)

# Set up the LLM chain
llm_chain = LLMChain(llm=ChatOpenAI(temperature=0, model="gpt-4"), prompt=prompt)

# Create the agent
agent = ZeroShotAgent(llm_chain=llm_chain, tools=tools, verbose=True)

# Integrate tools, agent, and memory
agent_chain = AgentExecutor.from_agent_and_tools(
agent=agent,
tools=tools,
verbose=True,
memory=memory,
stopping_method="generate"
)

# Example interaction
def chat_with_bot(user_input):
response = agent_chain.run(input=user_input)
return response

# Example usage
user_input = "Tell me about the survival rate on the Titanic."
print(chat_with_bot(user_input))
Однако он не делает то, что я хочу. Я был бы очень признателен, если бы кто-нибудь мог направить меня в правильном направлении и прокомментировать, возможно ли это вообще.
Что я ищу в предложенном мной решении/ответе:
Разговорный чат-бот с ограничением в 5 взаимодействий, который может использовать обоих агентов в качестве инструментов для получения информации при необходимости.
Тест:
Пользователь: Каков процент выживших пассажиров в наборе данных
Титаника?

ИИ подумал: мне нужно использовать своего агента Титаника .
Код обработки

Ответ: Процент выживших составил P%.
Пользователь: Спасибо, бот.
AI Подумал: Пользователь благодарит меня; Для ответа мне не нужны> никакие инструменты.
Ответ: Пожалуйста!

Пользователь: Сколько различных видов в наборе данных Iris?
ИИ подумал: мне нужен мой агент Iris, чтобы ответить.
Интерпретатор кода
Ответ: В наборе данных есть 3 разных вида.
Пользователь: Что они собой представляют называется?

Как видите, это подразумевает память, поэтому правильный мыслительный процесс
будет таким: Мыслительный процесс: Пользователь рассказывает об этом запрос
предыдущего и хочет узнать названия трех разных видов в
наборе данных Iris. Ответ: Iris setosa, Iris Virginica и Iris
versicolor.

Что мне попробовать дальше?

Подробнее здесь: https://stackoverflow.com/questions/790 ... ith-memory
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»