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