Files

71 lines
2.9 KiB
Python
Raw Permalink 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.
# 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()