Files
homework-solutions/solutions/6a02e23da6fe2e4ac16acf65_Агент_с_RAG-памятью/solution.py
T

21 lines
4.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"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"}