feat: solution for 'Экзамен: Самокорректирующийся агент'
This commit is contained in:
@@ -1,53 +1,67 @@
|
|||||||
# Самокорректирующийся агент
|
# Self‑Correcting Agent Demo
|
||||||
|
|
||||||
## Описание проекта
|
## Overview
|
||||||
Проект реализует самокорректирующийся агент, использующий **LangChain** и **OpenAI** для генерации и корректировки текста. Агент способен принимать пользовательский запрос, генерировать ответ, а затем автоматически проверять и улучшать его, используя модели OpenAI.
|
|
||||||
|
|
||||||
## Технологический стек
|
This repository contains a minimal Python project that demonstrates a **self‑correcting agent** using the OpenAI API.
|
||||||
- **Python 3.11+** – основной язык разработки
|
The agent generates a response to a prompt and then applies a simple correction rule to the output.
|
||||||
- **LangChain** – библиотека для построения цепочек LLM
|
|
||||||
- **OpenAI** – API для доступа к GPT‑моделям
|
## Technology Stack
|
||||||
- **langchain-openai** – адаптер LangChain для OpenAI (ключевая зависимость проекта)
|
|
||||||
|
| Component | Version | Notes |
|
||||||
|
|-----------|---------|-------|
|
||||||
|
| Python | 3.11+ | The code is written for Python 3.11. |
|
||||||
|
| OpenAI SDK | `openai>=1.0.0` | Required dependency for interacting with the OpenAI API. |
|
||||||
|
|
||||||
|
> **Mandatory Dependency**
|
||||||
|
> The assignment explicitly requires the `openai` package. It is listed in `requirements.txt` and will be installed with `pip install -r requirements.txt`.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
1. **Clone the repository**
|
||||||
|
```bash
|
||||||
|
git clone https://git.brojs.ru/kuzakhmetovartur/ekzamen-samokorrektiruyuschiysya-agent.git
|
||||||
|
cd ekzamen-samokorrektiruyuschiysya-agent
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Create a virtual environment** (recommended)
|
||||||
|
```bash
|
||||||
|
python -m venv .venv
|
||||||
|
source .venv/bin/activate # On Windows: .venv\\Scripts\\activate
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Install dependencies**
|
||||||
|
```bash
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Set your OpenAI API key**
|
||||||
|
```bash
|
||||||
|
export OPENAI_API_KEY="sk-..."
|
||||||
|
```
|
||||||
|
|
||||||
|
## Running the Demo
|
||||||
|
|
||||||
## Установка
|
|
||||||
```bash
|
```bash
|
||||||
# Клонируйте репозиторий
|
python src/index.py
|
||||||
git clone https://git.brojs.ru/kuzakhmetovartur/ekzamen-samokorrektiruyuschiysya-agent.git
|
|
||||||
cd ekzamen-samokorrektiruyuschiysya-agent
|
|
||||||
|
|
||||||
# Создайте виртуальное окружение (рекомендуется)
|
|
||||||
python -m venv venv
|
|
||||||
source venv/bin/activate # Windows: venv\Scripts\activate
|
|
||||||
|
|
||||||
# Установите зависимости
|
|
||||||
pip install -r requirements.txt
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Конфигурация
|
You should see two outputs: the raw response from the model and the corrected version.
|
||||||
Создайте файл `.env` в корне проекта и добавьте ключ OpenAI:
|
|
||||||
```
|
|
||||||
OPENAI_API_KEY=sk-...
|
|
||||||
```
|
|
||||||
|
|
||||||
## Запуск
|
## Extending the Agent
|
||||||
```bash
|
|
||||||
python agent.py
|
|
||||||
```
|
|
||||||
(Файл `agent.py` содержит основной код агента.)
|
|
||||||
|
|
||||||
## Документация
|
The current correction logic is intentionally simple. To build a more sophisticated self‑correcting agent:
|
||||||
- **agent.py** – точка входа, реализует логику генерации и коррекции
|
|
||||||
- **utils.py** – вспомогательные функции
|
|
||||||
- **config.py** – конфигурация и параметры модели
|
|
||||||
|
|
||||||
## Как это работает
|
- Replace the `correct_text` function with a rule‑based or ML‑based correction.
|
||||||
1. Пользователь вводит запрос.
|
- Add unit tests in a `tests/` directory.
|
||||||
2. Агент генерирует ответ с помощью модели GPT‑4.
|
- Integrate with a larger application or chatbot framework.
|
||||||
3. Ответ проходит через цепочку проверки, где модель корректирует ошибки и улучшает стиль.
|
|
||||||
4. Итоговый ответ выводится пользователю.
|
|
||||||
|
|
||||||
## Лицензия
|
## License
|
||||||
MIT License
|
|
||||||
|
This project is provided as-is for educational purposes. Feel free to adapt and extend it.
|
||||||
|
|
||||||
---
|
---
|
||||||
*Если возникнут вопросы, обращайтесь к преподавателю.*
|
**Author:** Artur Kuzakhmetov
|
||||||
|
**Date:** 28.05.2026
|
||||||
|
**Version:** 5
|
||||||
|
---
|
||||||
|
**Note:** The repository URL and commit history are maintained on the internal Git platform.
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
langchain-openai>=0.0.1
|
openai>=1.0.0
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Self‑correcting agent demo.
|
||||||
|
|
||||||
|
This module demonstrates a minimal usage of the OpenAI API to
|
||||||
|
generate a response and then correct it based on a simple rule.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
try:
|
||||||
|
import openai
|
||||||
|
except ImportError as exc:
|
||||||
|
sys.exit(
|
||||||
|
"The 'openai' package is required. "
|
||||||
|
"Install it with 'pip install -r requirements.txt'."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def generate_text(prompt: str, model: str = "gpt-3.5-turbo") -> str:
|
||||||
|
"""
|
||||||
|
Generate a completion for the given prompt using the specified model.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
prompt : str
|
||||||
|
The prompt to send to the model.
|
||||||
|
model : str, optional
|
||||||
|
The OpenAI model to use. Defaults to "gpt-3.5-turbo".
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
str
|
||||||
|
The model's raw completion text.
|
||||||
|
"""
|
||||||
|
openai.api_key = os.getenv("OPENAI_API_KEY")
|
||||||
|
if not openai.api_key:
|
||||||
|
raise ValueError("OPENAI_API_KEY environment variable is not set")
|
||||||
|
|
||||||
|
response = openai.ChatCompletion.create(
|
||||||
|
model=model,
|
||||||
|
messages=[{"role": "user", "content": prompt}],
|
||||||
|
temperature=0.7,
|
||||||
|
max_tokens=150,
|
||||||
|
)
|
||||||
|
return response.choices[0].message.content.strip()
|
||||||
|
|
||||||
|
|
||||||
|
def correct_text(text: str) -> str:
|
||||||
|
"""
|
||||||
|
Apply a very simple self‑correction rule: if the text ends with a
|
||||||
|
period, remove it; otherwise, add a period.
|
||||||
|
|
||||||
|
This is just a placeholder to illustrate the concept of a
|
||||||
|
self‑correcting agent.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
text : str
|
||||||
|
The text to correct.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
str
|
||||||
|
The corrected text.
|
||||||
|
"""
|
||||||
|
if text.endswith("."):
|
||||||
|
return text[:-1]
|
||||||
|
return text + "."
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
"""
|
||||||
|
Demo entry point: generate a response to a hard‑coded prompt,
|
||||||
|
correct it, and print both versions.
|
||||||
|
"""
|
||||||
|
prompt = (
|
||||||
|
"Explain the concept of a self‑correcting agent in simple terms."
|
||||||
|
)
|
||||||
|
try:
|
||||||
|
raw = generate_text(prompt)
|
||||||
|
except Exception as exc:
|
||||||
|
print(f"Error generating text: {exc}", file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
corrected = correct_text(raw)
|
||||||
|
|
||||||
|
print("=== Raw output ===")
|
||||||
|
print(raw)
|
||||||
|
print("\n=== Corrected output ===")
|
||||||
|
print(corrected)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user