Локальная Agentic AI: мультиагентные сценарии с AutoGen, LangChain и Hugging Face
Зачем запускать agentic AI локально?
Agentic AI сочетает рассуждение, планирование и выполнение через нескольких взаимодействующих агентов. В этом руководстве показано, как собрать практичный полностью локальный конвейер на основе LangChain, концептов AutoGen и моделей Hugging Face — без платных API. Примеры показывают загрузку моделей, создание цепочек LangChain, реализацию легких мультиагентных рабочих потоков, симуляцию AutoGen и объединение всего в гибридную систему.
Настройка модели и окружения
Начните с загрузки локального пайплайна Hugging Face text2text (в примере FLAN-T5) и оберните его для использования в LangChain и простых агентах. Такая минимальная конфигурация позволяет экспериментировать с цепочками, многошаговым рассуждением и обменом сообщениями между агентами.
import warnings
warnings.filterwarnings('ignore')
from typing import List, Dict
import autogen
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain_community.llms import HuggingFacePipeline
from transformers import pipeline
import json
print(" Loading models...\n")
pipe = pipeline(
"text2text-generation",
model="google/flan-t5-base",
max_length=200,
temperature=0.7
)
llm = HuggingFacePipeline(pipeline=pipe)
print("✓ Models loaded!\n")
Этот блок настраивает локальную модель FLAN-T5 и обертку HuggingFacePipeline для LangChain. После загрузки моделей можно строить цепочки и агентные петли без внешних вызовов.
Основы LangChain и многошаговое рассуждение
LangChain упрощает определение шаблонов подсказок и их последовательное исполнение для получения структурированных шагов. Первый пример демонстрирует одношаговую цепочку, второй — разложение цели на шаги и выполнение первого шага.
def demo_langchain_basics():
print("="*70)
print("DEMO 1: LangChain - Intelligent Prompt Chains")
print("="*70 + "\n")
prompt = PromptTemplate(
input_variables=["task"],
template="Task: {task}\n\nProvide a detailed step-by-step solution:"
)
chain = LLMChain(llm=llm, prompt=prompt)
task = "Create a Python function to calculate fibonacci sequence"
print(f"Task: {task}\n")
result = chain.run(task=task)
print(f"LangChain Response:\n{result}\n")
print("✓ LangChain demo complete\n")
def demo_langchain_multi_step():
print("="*70)
print("DEMO 2: LangChain - Multi-Step Reasoning")
print("="*70 + "\n")
planner = PromptTemplate(
input_variables=["goal"],
template="Break down this goal into 3 steps: {goal}"
)
executor = PromptTemplate(
input_variables=["step"],
template="Explain how to execute this step: {step}"
)
plan_chain = LLMChain(llm=llm, prompt=planner)
exec_chain = LLMChain(llm=llm, prompt=executor)
goal = "Build a machine learning model"
print(f"Goal: {goal}\n")
plan = plan_chain.run(goal=goal)
print(f"Plan:\n{plan}\n")
print("Executing first step...")
execution = exec_chain.run(step="Collect and prepare data")
print(f"Execution:\n{execution}\n")
print("✓ Multi-step reasoning complete\n")
Эти примеры демонстрируют, как цепочки подсказок преобразуют инструкцию в структурированный план и пошаговые действия. Их можно использовать для прототипирования планировщиков и объяснителей.
Построение простых мультиагентных систем
Мультиагентный подход назначает роли отдельным экземплярам агентов, которые обмениваются сообщениями и дополняют выводы друг друга. Ниже SimpleAgent показывает легковесного агента с ролью, использующего тот же локальный пайплайн и хранящего простую память.
class SimpleAgent:
def __init__(self, name: str, role: str, llm_pipeline):
self.name = name
self.role = role
self.pipe = llm_pipeline
self.memory = []
def process(self, message: str) -> str:
prompt = f"You are a {self.role}.\nUser: {message}\nYour response:"
response = self.pipe(prompt, max_length=150)[0]['generated_text']
self.memory.append({"user": message, "agent": response})
return response
def __repr__(self):
return f"Agent({self.name}, role={self.role})"
def demo_simple_agents():
print("="*70)
print("DEMO 3: Simple Multi-Agent System")
print("="*70 + "\n")
researcher = SimpleAgent("Researcher", "research specialist", pipe)
coder = SimpleAgent("Coder", "Python developer", pipe)
reviewer = SimpleAgent("Reviewer", "code reviewer", pipe)
print("Agents created:", researcher, coder, reviewer, "\n")
task = "Create a function to sort a list"
print(f"Task: {task}\n")
print(f"[{researcher.name}] Researching...")
research = researcher.process(f"What's the best approach to: {task}")
print(f"Research: {research[:100]}...\n")
print(f"[{coder.name}] Coding...")
code = coder.process(f"Write Python code to: {task}")
print(f"Code: {code[:100]}...\n")
print(f"[{reviewer.name}] Reviewing...")
review = reviewer.process(f"Review this approach: {code[:50]}")
print(f"Review: {review[:100]}...\n")
print("✓ Multi-agent workflow complete\n")
В этой схеме агенты отвечают за исследования, написание кода и ревью. Их взаимодействие формирует простой конвейер для совместного решения задач.
Концепция AutoGen и симуляция
AutoGen описывает координацию множества агентов с определенными ролями и петлей обратной связи. Пример ниже описывает конфигурацию агентов и затем симулирует их взаимодействие с помощью mock LLM, чтобы безопасно исследовать мультиагентные разговоры.
def demo_autogen_conceptual():
print("="*70)
print("DEMO 4: AutoGen Concepts (Conceptual Demo)")
print("="*70 + "\n")
agent_config = {
"agents": [
{"name": "UserProxy", "type": "user_proxy", "role": "Coordinates tasks"},
{"name": "Assistant", "type": "assistant", "role": "Solves problems"},
{"name": "Executor", "type": "executor", "role": "Runs code"}
],
"workflow": [
"1. UserProxy receives task",
"2. Assistant generates solution",
"3. Executor tests solution",
"4. Feedback loop until complete"
]
}
print(json.dumps(agent_config, indent=2))
print("\n AutoGen Key Features:")
print(" • Automated agent chat conversations")
print(" • Code execution capabilities")
print(" • Human-in-the-loop support")
print(" • Multi-agent collaboration")
print(" • Tool/function calling\n")
print("✓ AutoGen concepts explained\n")
class MockLLM:
def __init__(self):
self.responses = {
"code": "def fibonacci(n):\n if n <= 1:\n return n\n return fibonacci(n-1) + fibonacci(n-2)",
"explain": "This is a recursive implementation of the Fibonacci sequence.",
"review": "The code is correct but could be optimized with memoization.",
"default": "I understand. Let me help with that task."
}
def generate(self, prompt: str) -> str:
prompt_lower = prompt.lower()
if "code" in prompt_lower or "function" in prompt_lower:
return self.responses["code"]
elif "explain" in prompt_lower:
return self.responses["explain"]
elif "review" in prompt_lower:
return self.responses["review"]
return self.responses["default"]
def demo_autogen_with_mock():
print("="*70)
print("DEMO 5: AutoGen with Custom LLM Backend")
print("="*70 + "\n")
mock_llm = MockLLM()
conversation = [
("User", "Create a fibonacci function"),
("CodeAgent", mock_llm.generate("write code for fibonacci")),
("ReviewAgent", mock_llm.generate("review this code")),
]
print("Simulated AutoGen Multi-Agent Conversation:\n")
for speaker, message in conversation:
print(f"[{speaker}]")
print(f"{message}\n")
print("✓ AutoGen simulation complete\n")
Использование mock LLM дает предсказуемую симуляцию взаимодействия агентов, полезную для тестирования архитектуры.
Гибридная система: анализ плюс исполнение
Объединение LangChain для аналитики и агенты для планирования/выполнения дает гибридную систему с четким разделением обязанностей: LangChain анализирует проблему, агент составляет план, второй агент моделирует исполнение.
def demo_hybrid_system():
print("="*70)
print("DEMO 6: Hybrid LangChain + Multi-Agent System")
print("="*70 + "\n")
reasoning_prompt = PromptTemplate(
input_variables=["problem"],
template="Analyze this problem: {problem}\nWhat are the key steps?"
)
reasoning_chain = LLMChain(llm=llm, prompt=reasoning_prompt)
planner = SimpleAgent("Planner", "strategic planner", pipe)
executor = SimpleAgent("Executor", "task executor", pipe)
problem = "Optimize a slow database query"
print(f"Problem: {problem}\n")
print("[LangChain] Analyzing problem...")
analysis = reasoning_chain.run(problem=problem)
print(f"Analysis: {analysis[:120]}...\n")
print(f"[{planner.name}] Creating plan...")
plan = planner.process(f"Plan how to: {problem}")
print(f"Plan: {plan[:120]}...\n")
print(f"[{executor.name}] Executing...")
result = executor.process(f"Execute: Add database indexes")
print(f"Result: {result[:120]}...\n")
print("✓ Hybrid system complete\n")
Эта структура улучшает модульность и отслеживаемость действий агента.
Запуск полного набора демонстраций
Главный блок связывает все демо, выполняя их последовательно, чтобы вы могли наблюдать работу компонентов вместе.
if __name__ == "__main__":
print("="*70)
print(" ADVANCED AGENTIC AI TUTORIAL")
print("AutoGen + LangChain + HuggingFace")
print("="*70 + "\n")
demo_langchain_basics()
demo_langchain_multi_step()
demo_simple_agents()
demo_autogen_conceptual()
demo_autogen_with_mock()
demo_hybrid_system()
print("="*70)
print(" TUTORIAL COMPLETE!")
print("="*70)
print("\n What You Learned:")
print(" ✓ LangChain prompt engineering and chains")
print(" ✓ Multi-step reasoning with LangChain")
print(" ✓ Building custom multi-agent systems")
print(" ✓ AutoGen architecture and concepts")
print(" ✓ Combining LangChain + agents")
print(" ✓ Using HuggingFace models (no API needed!)")
print("\n Key Takeaway:")
print(" You can build powerful agentic AI systems without expensive APIs!")
print(" Combine LangChain's chains with multi-agent architectures for")
print(" intelligent, autonomous AI systems.")
print("="*70 + "\n")
Эти примеры и шаблоны дают воспроизводимую основу для экспериментов с автономными агентными рабочими процессами локально. Расширяйте агентов, добавляйте интеграции с инструментами, подключайте среды исполнения или меняйте модели, чтобы исследовать разные поведенческие паттерны агентов.