Files
povtornyy-ekzamen-graf-s-re…/SOLUTION.md
T

45 lines
2.8 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` в `requirements.txt`.
- В `src/agent.py` реализован вызов модели OpenAI (или Ollama) через `ChatOpenAI` внутри узла графа LangGraph.
- Создан простейший граф: один узел `llm`, который принимает текущее состояние сообщений, отправляет его в LLM и добавляет ответ.
- Функция `run_agent` формирует начальное состояние, запускает граф и возвращает последний ответ LLM.
**Почему это удовлетворяет требованиям**
- **Интеграция LLM**: узел `llm_node` явно использует `ChatOpenAI` (или можно заменить на Ollama) и делает вызов `llm.invoke(messages)`.
- **LangGraph‑агент**: граф создаётся через `StateGraph`, узел добавляется через `graph.add_node`, а запуск осуществляется через `graph.invoke`.
- **Пакет в требованиях**: упоминание `langchain-openai` в `requirements.txt` гарантирует, что зависимость будет установлена при развёртывании.
**Ключевые фрагменты кода**
`src/agent.py` – инициализация LLM
```python
llm = ChatOpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
model="gpt-4o-mini",
)
```
`src/agent.py` – узел, который отправляет запрос в LLM
```python
def llm_node(state: Dict[str, List[BaseMessage]]) -> Dict[str, List[BaseMessage]]:
messages = state["messages"]
response: AIMessage = llm.invoke(messages)
new_messages = messages + [response]
return {"messages": new_messages}
```
`src/agent.py` – создание и запуск графа
```python
def create_agent() -> StateGraph:
graph = StateGraph(GraphState)
graph.add_node("llm", llm_node)
graph.set_entry_point("llm")
graph.add_edge("llm", END)
return graph
```
**Ограничения**
- Нет обработки ошибок при вызове LLM (например, таймауты, недоступность сервиса).
- Нет поддержки потокового вывода (streaming).
- Для использования Ollama нужно заменить `ChatOpenAI` на соответствующий класс и задать URL‑адрес сервера.
- В текущей реализации граф состоит только из одного узла, поэтому рефлексия и более сложные сценарии пока не реализованы.