Лучшие практики масштабирования архитектуры агента LangChain в FastAPIPython

Программы на Python
Anonymous
Лучшие практики масштабирования архитектуры агента LangChain в FastAPI

Сообщение Anonymous »

У меня есть приложение FastAPI, использующее агенты LangChain, которое отлично работает при низком трафике, но плохо масштабируется.
Текущая настройка:

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

from fastapi import FastAPI
from langchain.agents import initialize_agent, AgentType
from langchain.chat_models import ChatOpenAI
from langchain.tools import Tool

app = FastAPI()

llm = ChatOpenAI(temperature=0, model="gpt-4")
agent = initialize_agent(tools, llm, agent=AgentType.OPENAI_FUNCTIONS)

@app.post("/chat")
async def chat(query: str):
result = await agent.arun(query)
return {"response": result}
Возникшие проблемы
  • Создание экземпляра агента. Агент инициализируется один раз глобально. Неясно, безопасно ли это для одновременных запросов или каждый запрос должен создавать экземпляр своего собственного агента.
  • Память для каждого пользователя. В настоящее время память используется глобально, что приводит к смешиванию данных сеанса между пользователями. Правильный шаблон для изоляции ConversationBufferMemory или RedisChatMessageHistory для каждого session_id среди нескольких рабочих процессов не установлен.
  • Асинхронная блокировка — метод arun() иногда блокирует цикл обработки событий. Не подтверждено, является ли asyncio.run_in_executor правильным подходом.
  • Несколько рабочих процессов. Запуск с Gunicorn + Uvicorn с использованием 4 рабочих процессов приводит к несогласованному состоянию памяти между процессами. Отсутствует общая стратегия управления состоянием.
Что уже пробовали
  • Создание нового экземпляра агента по запросу — функционально, но приводит к заметным задержкам.
  • Использование RedisChatMessageHistory для постоянства — решает проблему хранения, но общая архитектура обеспечивает его чистое подключение на сеанс остается неясным.
  • Обертывание arun() в run_in_executor — уменьшает блокировку, но не уверен, является ли это рекомендуемым подходом.
Вопрос
Какова рекомендуемая архитектура для запуска агентов LangChain в FastAPI в большом масштабе?

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