# 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 будем использовать встроенный # LangChain‑LLM (например, 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()