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

This commit is contained in:
2026-05-25 12:25:55 +00:00
parent 21db5e9e40
commit a4bdbf76e0
@@ -0,0 +1,21 @@
{"files":[{"filename":"solution.py","content":"# Агент с RAG-памятью\n# Используем langchain, openai и faiss для простого примера\n\nimport os\nimport
sys\nfrom typing import List\n\n#
Устанавливаем переменную окружения для ключа OpenAI, если она не задана\nos.environ.setdefault(\"OPENAI_API_KEY\", \"YOUR_OPENAI_API_KEY\")\n\n# Импортируем необходимые модули\ntry:\n from langchain.embeddings import OpenAIEmbeddings\n
from langchain.vectorstores import FAISS\n
from langchain.llms import OpenAI\n
from langchain.chains import RetrievalQA\nexcept
ImportError as e:\n print(\"Не удалось импортировать необходимые модули. Убедитесь, что они установлены.\")\n sys.exit(1)\n\n# Путь к директории с документами (текстовыми файлами)\nDATA_DIR = \"data\"\n\n# Функция загрузки документов из директории\n
def load_documents(path:
str) -> List[str]:\n \"\"\"Загружает все .txt файлы из указанной директории и возвращает список строк.\"\"\"\n docs = []\n if not os.path.isdir(path):\n print(f\"Папка {path} не найдена.\")\n return docs\n for filename in os.listdir(path):\n if filename.lower().endswith('.txt'):\n full_path = os.path.join(path, filename)\n with open(full_path, 'r', encoding='utf-8') as f:\n docs.append(f.read())\n return docs\n\n# Создание векторного хранилища\n
def create_vectorstore(docs:
List[str]):\n \"\"\"Создаёт FAISS векторное хранилище из списка документов.\"\"\"\n embeddings = OpenAIEmbeddings()\n vectorstore = FAISS.from_texts(docs, embeddings)\n return vectorstore\n\n# Создание RAG-агента\n
def create_agent(vectorstore):
\n \"\"\"Создаёт RetrievalQA цепочку, использующую заданный vectorstore.\"\"\"\n llm = OpenAI(temperature=0)\n qa_chain = RetrievalQA.from_chain_type(\n llm=llm,\n chain_type=\"stuff\",\n retriever=vectorstore.as_retriever(search_kwargs={\"k\": 3}),\n )\n return qa_chain\n\n# Основная функция\n
def main():
\n # Загружаем документы\n docs = load_documents(DATA_DIR)\n if not docs:\n print(\"Документы не найдены. Пожалуйста, поместите .txt файлы в папку 'data'.\")\n return\n\n # Создаём векторное хранилище\n vectorstore = create_vectorstore(docs)\n\n # Создаём агента\n agent = create_agent(vectorstore)\n\n print(\"Агент готов. Введите ваш вопрос (или 'выход' для завершения).\")\n while True:\n try:\n query = input(\"> \")\n except (KeyboardInterrupt, EOFError):\n print(\"\\nЗавершение работы.\")\n break\n if query.lower() in {\"выход\", \"exit\", \"quit\"}:\n print(\"Завершение работы.\")\n break\n # Получаем ответ от агента\n answer = agent.run(query)\n print(\"\\nОтвет:\\n\" + answer + \"\\n\")\n\n
if __name__ == \"__main__\":\n main()\n"],"filename":"requirements.txt","content":"langchain\nopenai\nfaiss-cpu\n"],"filename":"README.md","content":"# Агент с RAG‑памятью\n\n## Что это?\n\nПростой пример агента, использующего RetrievalAugmented Generation (RAG). Документы загружаются из папки `data`, индексируются векторным хранилищем FAISS, а затем при запросе к агенту происходит поиск релевантных фрагментов и генерация ответа на основе OpenAI.\n\n## Установка\n\n```bash\npip install -r requirements.txt\n```\n\n## Как использовать\n\n1. Поместите текстовые файлы (.txt) в папку `data`.\n2. Запустите скрипт:\n\n```bash\npython solution.py\n```\n3. Введите вопрос. Для выхода напишите `выход`, `exit` или `quit`.\n\n## Зависимости\n\n- `langchain` – библиотека для работы с LLM и RAG.\n- `openai` – клиент для обращения к API OpenAI.\n- `faiss-cpu` – быстрый векторный поиск.\n\n## Примечание\n\nНе забудьте установить переменную окружения `OPENAI_API_KEY` с вашим ключом OpenAI.\n"}],"main_file":"solution.py"}