Stream-режим AI-агента: client.py

This commit is contained in:
2026-05-28 09:59:25 +00:00
parent 0189049dd8
commit fe7127b584
@@ -0,0 +1,71 @@
# client.py
"""
Интерактивный CLI для взаимодействия с LangChain‑агентом.
Агент использует потоковый вывод через .stream(), чтобы ответы
появлялись в консоли по мере генерации.
Требуемый стек:
- langchain.agents.create_agent
- @tool из langchain.tools
- rich.print (переименовано как rprint)
"""
from langchain.agents import create_agent
from langchain.tools import tool
from rich import print as rprint
# ------------------------------------------------------------------
# Определяем инструмент. В реальном проекте здесь может быть любой
# полезный код, например запрос к API или обработка данных.
# Для демонстрации будем просто возвращать строку с аргументом.
# ------------------------------------------------------------------
@tool("echo")
def echo_tool(message: str) -> str:
"""
Инструмент «echo» – повторяет переданное сообщение.
Args:
message (str): Текст, который нужно вернуть.
Returns:
str: Тот же текст, но обёрнутый в строку.
"""
return f"Echo: {message}"
# ------------------------------------------------------------------
# Создаём агент. В качестве LLM будем использовать встроенный
# LangChainLLM (например, OpenAI). Поскольку в условии не указано,
# что именно использовать, оставляем стандартный вариант.
# ------------------------------------------------------------------
agent = create_agent(
tools=[echo_tool],
verbose=True # включаем логирование для отладки
)
def main() -> None:
"""
Основной цикл CLI. Пользователь вводит запросы,
агент обрабатывает их и выводит ответ токен за токеном.
"""
rprint("[bold green]LangChain Stream Agent[/bold green]")
rprint("Введите ваш запрос (Ctrl+C для выхода):")
try:
while True:
user_input = input("> ")
if not user_input.strip():
continue
# Запускаем потоковый вывод
stream = agent.stream(user_input)
# Итерация по частям ответа и печать в реальном времени
for chunk in stream:
rprint(chunk, end="", justify="left")
except KeyboardInterrupt:
rprint("\n[bold red]Выход из программы[/bold red]")
return
if __name__ == "__main__":
main()