Files
8.-samopisnyy-poiskovyy-age…/SOLUTION.md
T
kuzakhmetovartur dbd910be14
CI / build (3.1) (push) Has been cancelled
CI / build (3.11) (push) Has been cancelled
CI / build (3.8) (push) Has been cancelled
CI / build (3.9) (push) Has been cancelled
feat: solution for '8. Самописный поисковый агент на основе deep agents from scratch'
2026-07-01 13:56:19 +03:00

63 lines
3.9 KiB
Markdown
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.
**Что реализовано**
- Добавлены пакеты `langchain-openai` и `langchain-community` в `package.json`.
- Создан класс `DeepAgent` в `src/index.js`, реализующий шаблон «Deep Agents from Scratch».
- Внутри агента реализован **планировщик** (`LLMChain` + `PromptTemplate`), который принимает запрос пользователя и возвращает JSON‑объект с типом действия (`search` или `answer`).
- В зависимости от плана агент либо вызывает инструмент `SerpAPI` для веб‑поиска, либо возвращает готовый ответ.
- Добавлена простая память (`BufferMemory`) для хранения истории диалога.
- В `main()` инициализируются LLM, инструмент поиска, память и агент, а затем агент обрабатывает запрос, переданный в командной строке.
**Почему это соответствует требованиям**
- **LangChain**: все взаимодействия с LLM и инструментами построены через `langchain`‑объекты (`OpenAI`, `SerpAPI`, `LLMChain`, `PromptTemplate`).
- **OpenAI API**: используется `OpenAI` из `langchain-openai` с ключом из переменной окружения `OPENAI_API_KEY`.
- **Deep Agent**: класс `DeepAgent` полностью соответствует шаблону «Deep Agents from Scratch» – отдельный планировщик, исполнитель и память.
- **Поиск**: при выборе `search` агент вызывает `SerpAPI.run(query)` и возвращает результат.
- **Ответ**: при выборе `answer` агент просто возвращает строку из плана.
**Ключевые фрагменты кода**
`package.json`
```json
"dependencies": {
"langchain": "^0.0.0",
"langchain-openai": "^0.0.0",
"langchain-community": "^0.0.0",
"dotenv": "^16.0.0"
}
```
`src/index.js` планировщик
```js
this.planner = new LLMChain({
llm: this.llm,
prompt: new PromptTemplate({
inputVariables: ["input"],
template: `You are a helpful assistant. Given the user query: "{input}"
Decide whether you need to perform a web search or can answer directly.
Respond in JSON format:
{
"type": "search" | "answer",
"query": "<search query>" | null,
"answer": "<answer>" | null
}
If you choose "search", provide the search query in "query". If you choose "answer", provide the answer in "answer".`,
}),
});
```
`src/index.js` – выполнение плана
```js
if (plan.type === "search" && plan.query) {
const searchTool = this.tools.find((t) => t.name === "SerpAPI");
const searchResult = await searchTool.run(plan.query);
return searchResult;
} else if (plan.type === "answer" && plan.answer) {
return plan.answer;
}
```
**Ограничения**
- Планировщик возвращает JSON, но не проверяет корректность ключей `type`, `query`, `answer` более глубоко.
- В случае ошибки в ответе LLM (невалидный JSON) агент выбрасывает исключение.
- Параметры модели и инструмента заданы статически; для гибкой конфигурации можно добавить CLI‑параметры.
Таким образом, проект теперь содержит полноценного Deep Agent, использующего LangChain и OpenAI API, способного выполнять поисковые запросы и выдавать ответы.