Add answer.md
This commit is contained in:
1 parent
e7eecac6c4
commit
d3c8d75b54
1 file changed
+26
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"task": {
|
||||||
|
"_id": "6997111cd6d3a5544a3deffd",
|
||||||
|
"title": "Создайть просто AI агент на Python с применением langchain",
|
||||||
|
"description": "# Практическое задание: AI-агент на LangChain\n\n## Цель\n\nНаписать Python-скрипт, реализующий **иерархического AI-агента** с использованием библиотеки LangChain и локальной языковой модели.\n\n---\n\n## Контекст\n\n**AI-агент** — это языковая модель, которая умеет вызывать инструменты (функции) и принимать решения о том, какой инструмент использовать для ответа на вопрос пользователя.\n\n**Иерархический агент** — это агент, у которого один из инструментов сам является агентом. Такой подход позволяет декомпозировать сложные задачи.\n\n---\n\n## Стек\n\n- Python 3.10+\n- [LangChain](https://python.langchain.com/) — фреймворк для построения агентов\n- [LM Studio](https://lmstudio.ai/) — локальный сервер языковых моделей (поднимается на `http://localhost:1234`)\n\n### Установка зависимостей\n\n```\npip install langchain==1.2.10 langchain-openai==1.1.9\n```\n\n---\n\n## Задание\n\nРеализуй агента-помощника по **планированию списка покупок**. Агент должен уметь:\n\n1. Принимать от пользователя список продуктов\n2. Для каждого продукта узнавать примерную цену (через отдельный субагент)\n3. Считать итоговую стоимость корзины\n\n### Требования к реализации\n\n#### 1. Подключение к модели\n\nПодключись к локальной LLM через OpenAI-совместимый API:\n\n```python\nfrom langchain_openai import ChatOpenAI\nfrom pydantic import SecretStr\n\nllm = ChatOpenAI(\n model='<название модели в LM Studio>',\n base_url='http://localhost:1234/v1',\n api_key=SecretStr('fake'),\n temperature=0.7,\n)\n```\n\n#### 2. Инструмент с субагентом\n\nСоздай инструмент `get_price(product: str, city: str) -> str` с декоратором `@tool`.\n\nВнутри инструмента создай **субагента** (`create_agent`), который будет генерировать реалистичную цену на продукт в указанном городе, опираясь на исторические данные о ценах. Субагент должен возвращать ответ в виде таблицы:\n\n```\n| Продукт | Цена (руб.) | Магазин |\n```\n\n#### 3. Главный агент\n\nСоздай главного агента с системным промптом `'Ты помощник по планированию покупок'`, передай ему инструмент `get_price`.\n\n#### 4. Запрос и вывод\n\nЗадай агенту вопрос в духе:\n```\nПомоги составить список покупок: молоко, хлеб, яблоки. Я нахожусь в Казани.\n```\n\nВыведи все сообщения из ответа — как промежуточные вызовы инструментов, так и финальный ответ агента.\n\n---\n\n## Подсказки\n\n### Создание агента\n\n```python\nfrom langchain.agents import create_agent\n\nagent = create_agent(\n model=llm,\n tools=[my_tool], # список инструментов (опционально)\n system_prompt='...',\n)\n```\n\n### Вызов агента\n\n```python\nanswer = agent.invoke({\n \"messages\": [\n {\"role\": \"human\", \"content\": \"твой вопрос\"}\n ]\n})\n```\n\nРезультат — словарь с ключом `messages`. Последнее сообщение (`answer['messages'][-1].content`) содержит финальный ответ.\n\n### Декоратор `@tool`\n\n```python\nfrom langchain.tools import tool\n\n@tool\ndef my_tool(param: str) -> str:\n \"\"\"Описание инструмента — модель читает его, чтобы понять, когда вызывать инструмент.\"\"\"\n ...\n return result\n```\n\n### Вывод цепочки сообщений\n\nКаждое сообщение может быть либо текстом (`message.content`), либо вызовом инструмента (`message.tool_calls`). Пример функции форматирования:\n\n```python\ndef format_message(message) -> str:\n if message.content:\n retLine truncated
|
||||||
|
"course": "698b49da77cb6d4d2e43ce78",
|
||||||
|
"lesson": {
|
||||||
|
"_id": "69948b8dbfaf8d43a8e7ef85",
|
||||||
|
"name": "Простой AI агент на Python",
|
||||||
|
"date": "2026-02-17T15:30:00.000Z",
|
||||||
|
"id": "69948b8dbfaf8d43a8e7ef85"
|
||||||
|
},
|
||||||
|
"gradeType": "passfail",
|
||||||
|
"maxScore": 100,
|
||||||
|
"assignmentType": "individual",
|
||||||
|
"allowSubmissions": true,
|
||||||
|
"allowRevisions": true,
|
||||||
|
"creator": {
|
||||||
|
"sub": "8ae348ab-f32e-46c7-9960-8b7fdf0e4c0e",
|
||||||
|
"name": "Александр Примаков"
|
||||||
|
},
|
||||||
|
"teamGrades": [],
|
||||||
|
"created": "2026-02-19T13:33:16.894Z",
|
||||||
|
"id": "6997111cd6d3a5544a3deffd"
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in new issue
Block a user