Как передать валидный chat_history для агента?
# Функция для ответа ИИ на сообщения пользователя
@app.on_message(filters.text)
async def handle_message(app, message):
try:
username = message.from_user.username
if username in target_users:
chat_manager = ChatManager([], username)
chat_manager.set_memory()
# Получаем текст сообщения
user_message = message.text
# На основе пользовательского сообщения генерируем ответ
output = chat_manager.response_for_user(user_message)
breakpoint()
await app.send_message(username, output)
except Exception as e:
print(f"Ошибка при получении сообщения от пользователя: {e}")
app.run()
set_memory:
def set_memory(self):
self.memory = self.get_memory()
вот логика ответа на сообщение пользователя в телеграм:
def response_for_user(self, user_message):
try:
llm = ChatOpenAI(
openai_api_key = os.environ["OPENAI_API_KEY"],
model_name = "gpt-4-1106-preview",
temperature = 0.0
)
tool_csv = create_csv_agent(
OpenAI(temperature=0),
"orders.csv",
verbose = True,
agent_type = AgentType.ZERO_SHOT_REACT_DESCRIPTION
)
tools = [
Tool(
name = "CSV поиск",
func = tool_csv.run,
description = (
"используй этот инструмент, для поиска в базе данных csv"
)
)
]
agent = initialize_agent(
agent = "chat-conversational-react-description",
tools = tools,
llm = llm,
verbose = True,
max_iterations = 3,
early_stopping_method = "generate",
memory = self.get_memory(),
input_variables = ["chat_history", "input"]
)
sys_msg = """
Assistant - это обширная языковая модель, разработанная OpenAI.
Assistant разработан таким образом, чтобы иметь возможность ...
"""
new_prompt = agent.agent.create_prompt(
system_message = sys_msg,
tools = tools
)
agent.agent.llm_chain.prompt = new_prompt
output = agent.run(user_message)
breakpoint()
return output
except Exception as e:
print(e)
в get_memory получаю память:
def get_memory(self):
return VectorStoreRetrieverMemory(
retriever=self.initialize_memory(), memory_key="chat_history", input_key="input"
)
initialize_memory:
def initialize_memory(self):
global database
current_username = self.username
embedding_fn = OpenAIEmbeddings()
persist_directory = f"./db_mem/{current_username}"
if not os.path.exists(persist_directory) or os.listdir(persist_directory):
vectorstore = Chroma(
embedding_function=embedding_fn, persist_directory=persist_directory
)
vectorstore.persist()
else:
vectorstore = Chroma(embedding_fn)
print("Инициализация векторной бд для памяти")
db_name = f"db_{current_username}"
self.database[db_name] = vectorstore
retriever = vectorstore.as_retriever(search_kwargs=dict(k=4))
return retriever
получаю ошибку при отправке сообщения пользователем:
variable chat_history should be a list of base messages, got input:
Что вы можете предложить?