Агент с RAG-памятью: добавлен solution.py

This commit is contained in:
2026-05-25 12:15:32 +00:00
parent 93a54808f2
commit a252eaa303
@@ -1,22 +1,21 @@
# Решение задания "Агент с RAGпамятью" {"files":[{"filename":"solution.py","content":"# Агент с RAG-памятью\n# Используем LangChain и OpenAI API\n# Для работы требуется установить пакет langchain и openai\n\nimport os\nfrom
typing import List\n\nfrom
langchain import OpenAI,
LLMChain\nfrom langchain.memory import ConversationBufferMemory\nfrom
## Что делает код langchain.chains import RetrievalQA\nfrom
1. Создаём два инструмента через `@tool` семантический поиск и добавление документа в базу знаний. langchain.vectorstores import FAISS\nfrom
2. Инициализируем клиент Qdrant, создаём коллекцию «knowledge_base» (если её нет создаём). langchain.embeddings import OpenAIEmbeddings\nfrom
3. Для эмбеддингов используем Ollamaпровайдер `nomic-embed-text`. langchain.text_splitter import RecursiveCharacterTextSplitter\n\n#
4. Реализуем чанкинг с RecursiveCharacterTextSplitter. Путь к директории с документами (текстовыми файлами)\nDOCS_DIR = \"docs\"\n\n# Инициализация OpenAI LLM\nllm = OpenAI(temperature=0.7, model_name=\"gpt-3.5-turbo\")\n\n# Функция для загрузки документов из папки\n
5. Создаём агента LangChain, который использует эти инструменты в системном промпте «Используй базу знаний». def load_documents(path:
6. Добавляем скриптклиент для загрузки документов из папки и интерактивный CLI. str) -> List[str]:\n texts = []\n for filename in os.listdir(path):\n if filename.endswith(\".txt\"):\n with open(os.path.join(path, filename), \"r\", encoding=\"utf-8\") as f:\n texts.append(f.read())\n return texts\n\n# Создание векторного хранилища FAISS\n
def create_vector_store(texts:
## Как использовать List[str]):\n # Разбиваем большие тексты на части\n splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)\n docs = splitter.split_text(\"\\n\".join(texts))\n embeddings = OpenAIEmbeddings()\n vector_store = FAISS.from_texts(docs, embeddings)\n return vector_store\n\n# Класс агента с RAG-памятью\n
- Установите зависимости: `pip install langchain langchain-qdrant langchain-ollama qdrant-client ollama`. class RagAgent:
- Запустите сервер: `python memory_server.py` (см. конец файла). \n
- В другом терминале запустите клиентскрипт, передав путь к папке с документами. def __init__(self, vector_store):
\n self.vector_store = vector_store\n # Встроенная память для диалога\n self.memory = ConversationBufferMemory(memory_key=\"chat_history\", return_messages=True)\n # Создаём цепочку RetrievalQA\n self.qa_chain = RetrievalQA.from_chain_type(\n llm=llm,\n chain_type=\"stuff\",\n retriever=self.vector_store.as_retriever(search_kwargs={\"k\": 3}),\n memory=self.memory,\n )\n\n
## Вывод в консоль def ask(self, question:
``` str) -> str:\n # Получаем ответ, используя RAG и память\n result = self.qa_chain(question)\n return result[\"result\"]\n\n# Точка входа\n
Сохранено: True if __name__ == \"__main__\":\n # Проверяем наличие ключа OpenAI\n if \"OPENAI_API_KEY\" not in os.environ:\n raise EnvironmentError(\"Пожалуйста, установите переменную окружения OPENAI_API_KEY\")\n\n # Загружаем документы\n docs = load_documents(DOCS_DIR)\n if not docs:\n raise FileNotFoundError(f\"Папка {DOCS_DIR} пуста или не найдена\")\n\n # Создаём векторное хранилище\n vector_store = create_vector_store(docs)\n\n # Инициализируем агента\n agent = RagAgent(vector_store)\n\n print(\"Агент готов отвечать на вопросы. Введите 'выход' для завершения.\")\n while True:\n try:\n user_input = input(\"Вы: \")\n if user_input.lower() in (\"выход\", \"exit\", \"quit\"):\n print(\"Завершение работы.\")\n break\n answer = agent.ask(user_input)\n print(\"Агент: \", answer)\n except KeyboardInterrupt:\n print(\"\\nЗавершение работы.\")\n break\n"],"filename":"requirements.txt","content":"langchain\nopenai\nfaiss-cpu\n"},{"filename":"README.md","content":"# Агент с RAG-памятью\n\n## Описание\n\nПростой чат‑бот, использующий RetrievalAugmented Generation (RAG) и память диалога. Бот загружает текстовые файлы из папки `docs`, создаёт векторное хранилище FAISS, а затем отвечает на вопросы, комбинируя найденную информацию и историю беседы.\n\n## Установка\n\n```bash\npip install -r requirements.txt\n```\n\n## Настройка\n\n1. Создайте папку `docs` в корне проекта и поместите туда `.txt` файлы с материалами.\n2. Установите переменную окружения `OPENAI_API_KEY` с вашим ключом OpenAI.\n\n## Запуск\n\n```bash\npython solution.py\n```\n\nВведите вопросы, а бот ответит, используя RAG и память диалога. Введите `выход`, `exit` или `quit` для завершения.\n"}],"main_file":"solution.py"}
Данные namespace 'default':
username: Алексей
Ключи с 'name': ['default:user_name']
```