Stream-режим AI-агента: client.py
This commit is contained in:
@@ -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 будем использовать встроенный
|
||||||
|
# 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()
|
||||||
Reference in New Issue
Block a user