feat: solution for 'Экзамен: Самокорректирующийся агент'

This commit is contained in:
2026-07-01 14:54:52 +03:00
parent 5912e0f5cc
commit 581d783243
4 changed files with 129 additions and 50 deletions
+53 -11
View File
@@ -1,19 +1,61 @@
# Project # SelfCorrecting Agent Demo
This project requires the `langgraph` package. Install dependencies with: This repository demonstrates a minimal Node.js project that uses the **langchain-openai** and **langchain-core** packages to create a simple LLM provider. The goal is to satisfy the requirement of adding these packages and configuring the LLM provider accordingly.
## Prerequisites
- Node.js v18 or newer
- An OpenAI API key
## Setup
1. **Clone the repository** (or download the files):
```bash
git clone https://git.brojs.ru/kuzakhmetovartur/ekzamen-samokorrektiruyuschiysya-agent.git
cd ekzamen-samokorrektiruyuschiysya-agent
```
2. **Install dependencies**:
```bash
npm install
```
3. **Set the OpenAI API key**:
```bash
export OPENAI_API_KEY=your_api_key_here
```
On Windows PowerShell:
```powershell
$env:OPENAI_API_KEY="your_api_key_here"
```
## Running the Demo
```bash ```bash
pip install -r requirements.txt npm start
``` ```
To test the import, you can run a simple Python script: You should see output similar to:
```python ```
from langgraph.graph import Graph LLM response: The capital of France is Paris.
# Example usage
g = Graph()
print("LangGraph imported successfully:", g)
``` ```
Make sure you have a compatible Python environment (Python 3.8+). ## Project Structure
- `package.json` Project metadata and dependencies (`langchain-openai` & `langchain-core`).
- `src/index.js` Main entry point that imports the LLM provider, verifies its type, and sends a prompt.
- `README.md` Documentation.
## Notes
- No additional external packages are used beyond the required `langchain-openai` and `langchain-core`.
- The code uses ES modules (`"type": "module"` in `package.json`).
- The LLM instance is verified to be an instance of `BaseLLM` from `langchain-core` to satisfy the configuration requirement.
---
+41 -19
View File
@@ -1,28 +1,50 @@
**What was implemented** **Что реализовано**
Added the `langgraph` package to the projects `requirements.txt` so that imports from `langgraph.graph` resolve correctly. - В `package.json` добавлены зависимости `langchain-openai` и `langchain-core`.
- В `src/index.js` импортированы `OpenAI` из `langchain-openai` и `BaseLLM` из `langchain-core`.
- Создан экземпляр LLM‑провайдера, который автоматически читает ключ из переменной окружения `OPENAI_API_KEY`.
- Добавлена проверка, что созданный объект действительно наследует `BaseLLM`.
- Отправлен простой запрос к LLM и выведен ответ в консоль.
**Why it satisfies the requirement** **Почему это удовлетворяет требованиям**
The assignment explicitly asks for the `langgraph` dependency to be listed in the requirements file. By including the line - Наличие пакетов в `dependencies` гарантирует, что они будут установлены при `npm install`.
- Использование `OpenAI` из `langchain-openai` и проверка через `BaseLLM` из `langchain-core` демонстрирует корректную конфигурацию LLM‑провайдера.
- В проекте не добавлено никаких сторонних пакетов помимо указанных, что соответствует ограничению «No other external packages should be added beyond those required».
```txt **Короткие фрагменты кода**
langgraph
`package.json`
```json
{
"dependencies": {
"langchain-core": "^0.1.0",
"langchain-openai": "^0.1.0"
}
}
``` ```
in `requirements.txt`, the package will be installed during the environment setup, enabling any module that does `src/index.js` импорты
```js
```python import { OpenAI } from "langchain-openai";
from langgraph.graph import ... import { BaseLLM } from "langchain-core";
``` ```
to import without errors. `src/index.js` создание LLM
```js
const llm = new OpenAI({
temperature: 0.7,
});
```
**Code excerpts** `src/index.js` проверка типа
```js
if (!(llm instanceof BaseLLM)) {
console.error("Error: The LLM instance is not a BaseLLM.");
process.exit(1);
}
```
- `requirements.txt` **Ограничения**
- В примере реализован только базовый запрос; полноценный самокорректирующийся агент ещё не реализован.
- Работает только при наличии корректного `OPENAI_API_KEY` в окружении.
```txt Таким образом, проект теперь содержит необходимые пакеты и корректно конфигурирует LLM‑провайдера, как требовалось в задании.
langgraph
```
**Limitations**
None the change is minimal and directly addresses the reviewers feedback.
+9 -4
View File
@@ -1,14 +1,19 @@
{ {
"name": "self-correcting-agent", "name": "self-correcting-agent",
"version": "1.0.0", "version": "1.0.0",
"description": "A minimal selfcorrecting agent using LangChain OpenAI provider", "description": "A minimal Node.js project demonstrating a selfcorrecting agent using langchain-openai and langchain-core.",
"main": "src/index.js", "main": "src/index.js",
"type": "module", "type": "module",
"scripts": { "scripts": {
"start": "node src/index.js", "start": "node src/index.js"
"test": "echo \"No tests defined\" && exit 0"
}, },
"dependencies": { "dependencies": {
"langchain-core": "^0.1.0",
"langchain-openai": "^0.1.0" "langchain-openai": "^0.1.0"
} },
"engines": {
"node": ">=18"
},
"author": "Your Name",
"license": "MIT"
} }
+22 -12
View File
@@ -1,24 +1,34 @@
const { OpenAI } = require("langchain-openai"); import { OpenAI } from "langchain-openai";
import { BaseLLM } from "langchain-core";
// Ensure the OpenAI API key is set in the environment /**
if (!process.env.OPENAI_API_KEY) { * Simple selfcorrecting agent demo.
* Requires an OpenAI API key set in the environment variable OPENAI_API_KEY.
*/
async function main() {
// Ensure the API key is available
if (!process.env.OPENAI_API_KEY) {
console.error("Error: OPENAI_API_KEY environment variable is not set."); console.error("Error: OPENAI_API_KEY environment variable is not set.");
process.exit(1); process.exit(1);
} }
// Instantiate the OpenAI LLM with desired parameters // Instantiate the OpenAI LLM provider
const llm = new OpenAI({ const llm = new OpenAI({
temperature: 0.7, temperature: 0.7,
modelName: "gpt-3.5-turbo", // The API key is automatically read from the environment variable
}); });
async function main() { // Verify that llm is an instance of BaseLLM (from langchain-core)
const prompt = "Hello, world!"; if (!(llm instanceof BaseLLM)) {
console.error("Error: The LLM instance is not a BaseLLM.");
process.exit(1);
}
// Send a simple prompt to the LLM
const prompt = "Hello, world! What is the capital of France?";
try { try {
// Invoke the LLM with the prompt
const response = await llm.invoke(prompt); const response = await llm.invoke(prompt);
console.log("Response:", response); console.log("LLM response:", response);
} catch (error) { } catch (error) {
console.error("Error invoking LLM:", error); console.error("Error invoking LLM:", error);
} }