30 lines
1.3 KiB
Python
30 lines
1.3 KiB
Python
# reviewer.py
|
||
from langchain_ollama import ChatOllama
|
||
from langchain_core.messages import SystemMessage, HumanMessage
|
||
from typing import List, Dict
|
||
from config import MODEL_NAME, LLM_HOST
|
||
import json
|
||
|
||
class PlanReviewerAgent:
|
||
def __init__(self, llm=None):
|
||
self.llm = llm or ChatOllama(
|
||
model=MODEL_NAME,
|
||
temperature=0.0,
|
||
base_url=LLM_HOST
|
||
)
|
||
|
||
def review(self, original_task: str, plan: List[Dict], execution_results: List[Dict]) -> dict:
|
||
system_prompt = """Ты - ревьювер. Оцени, достигнута ли цель задачи на основе выполненного плана.
|
||
Верни JSON с полями:
|
||
- "status": "approved" / "changes_requested" / "rejected"
|
||
- "feedback": пояснение
|
||
- "suggested_plan_correction": если нужно изменить план - предложи новый план (массив шагов)
|
||
"""
|
||
user_prompt = f"""
|
||
Задача: {original_task}
|
||
План: {json.dumps(plan, indent=2)}
|
||
Результаты выполнения: {json.dumps(execution_results, indent=2)}
|
||
Оцени результат.
|
||
"""
|
||
response = self.llm.invoke([SystemMessage(content=system_prompt), HumanMessage(content=user_prompt)])
|
||
return json.loads(response.content) |