3.9 KiB
3.9 KiB
Что реализовано
- Добавлены пакеты
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
"dependencies": {
"langchain": "^0.0.0",
"langchain-openai": "^0.0.0",
"langchain-community": "^0.0.0",
"dotenv": "^16.0.0"
}
src/index.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 – выполнение плана
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, способного выполнять поисковые запросы и выдавать ответы.