В этом руководстве мы рассмотрим полную реализацию продвинутой системы агентов ИИ на базе Nomic Embeddings и Google Gemini. Мы разрабатываем архитектуру с нуля, интегрируя семантическую память, контекстуальное рассуждение и мультиагентное управление в единую интеллектуальную систему. Используя LangChain, Faiss и LangChain-Nomic, мы наделяем наших агентов способностью хранить, извлекать информацию и рассуждать над ней с помощью запросов на естественном языке. Цель — продемонстрировать, как можно создать модульную и расширяемую систему ИИ, поддерживающую как аналитические исследования, так и дружескую беседу.
Установка необходимых библиотек
Сначала мы устанавливаем все необходимые библиотеки, включая langchain-nomic, langchain-google-genai и faiss-cpu, чтобы поддержать возможности встраивания, рассуждения и векторного поиска нашего агента. Затем мы импортируем необходимые модули и безопасно устанавливаем наши API-ключи Nomic и Google с помощью getpass для обеспечения плавной интеграции со службами встраивания и LLM.
«`python
import os
import getpass
import numpy as np
from typing import List, Dict, Any, Optional
from dataclasses import dataclass
from langchain_nomic import NomicEmbeddings
from langchain_core.vectorstores import InMemoryVectorStore
from langchain_core.documents import Document
from langchaingooglegenai import ChatGoogleGenerativeAI
import json
if not os.getenv(«NOMICAPIKEY»):
os.environ[«NOMICAPIKEY»] = getpass.getpass(«Enter your Nomic API key: «)
if not os.getenv(«GOOGLEAPIKEY»):
os.environ[«GOOGLEAPIKEY»] = getpass.getpass(«Enter your Google API key (for Gemini): «)
«`
Определение структуры интеллектуального агента
Мы определяем основную структуру нашего интеллектуального агента, создавая систему памяти, которая имитирует эпизодическое и семантическое запоминание. Мы интегрируем Nomic embeddings для семантического понимания и используем Gemini LLM для генерации контекстуальных ответов, управляемых личностью. Благодаря встроенным возможностям, таким как поиск по памяти, поиск знаний и рассуждения, мы предоставляем агенту возможность интеллектуально взаимодействовать и учиться в ходе каждого разговора.
«`python
@dataclass
class AgentMemory:
«»»Agent’s episodic and semantic memory»»»
episodic: List[Dict[str, Any]]
semantic: Dict[str, Any]
working: Dict[str, Any]
class IntelligentAgent:
«»»Advanced AI Agent with Nomic Embeddings for semantic reasoning»»»
def init(self, agent_name: str = «AIAgent», personality: str = «helpful»):
self.name = agent_name
self.personality = personality
self.embeddings = NomicEmbeddings(
model=»nomic-embed-text-v1.5″,
dimensionality=384,
inference_mode=»remote»
)
self.llm = ChatGoogleGenerativeAI(
model=»gemini-1.5-flash»,
temperature=0.7,
max_tokens=512
)
self.memory = AgentMemory(
episodic=[],
semantic={},
working={}
)
self.knowledge_base = None
self.vector_store = None
self.capabilities = {
«reasoning»: True,
«memory_retrieval»: True,
«knowledge_search»: True,
«context_awareness»: True,
«learning»: True
}
print(f» {self.name} initialized with Nomic embeddings + Gemini LLM»)
def add_knowledge(self, documents: List[str], metadata: List[Dict] = None):
«»»Add knowledge to agent’s semantic memory»»»
if metadata is None:
metadata = [{«source»: f»doc_{i}»} for i in range(len(documents))]
docs = [Document(page_content=doc, metadata=meta)
for doc, meta in zip(documents, metadata)]
if self.vector_store is None:
self.vectorstore = InMemoryVectorStore.fromdocuments(docs, self.embeddings)
else:
self.vectorstore.adddocuments(docs)
print(f» Added {len(documents)} documents to knowledge base»)
def rememberinteraction(self, userinput: str, agent_response: str, context: Dict = None):
«»»Store interaction in episodic memory»»»
memory_entry = {
«timestamp»: len(self.memory.episodic),
«userinput»: userinput,
«agentresponse»: agentresponse,
«context»: context or {},
«embedding»: self.embeddings.embedquery(f»{userinput} {agent_response}»)
}
self.memory.episodic.append(memory_entry)
«`
Специализированные агенты
Мы расширяем нашего интеллектуального агента до двух специализированных версий: ResearchAgent для структурированного анализа тем и ConversationalAgent для естественного диалога. Исследовательский агент использует семантическую схожесть и Gemini LLM для генерации уверенных, насыщенных анализом отчётов, в то время как агент для ведения бесед поддерживает контекст разговора, обеспечивая связное и увлекательное общение. Модульная конструкция позволяет нам адаптировать поведение ИИ для удовлетворения конкретных потребностей пользователей.
«`python
class ResearchAgent(IntelligentAgent):
«»»Specialized agent for research and analysis tasks»»»
def init(self):
super().init(«ResearchBot», «analytical and thorough»)
self.research_domains = []
def analyze_topic(self, topic: str) -> Dict[str, Any]:
«»»Analyze a topic using semantic similarity and Gemini reasoning»»»
relateddocs = self.searchknowledge(topic, k=5)
if not related_docs:
return {«analysis»: «No relevant information found», «confidence»: 0.0}
topicembedding = self.embeddings.embedquery(topic)
docembeddings = [self.embeddings.embedquery(doc.page_content)
for doc in related_docs]
similarities = [np.dot(topicembedding, docemb)
for docemb in docembeddings]
context = » «.join([doc.pagecontent for doc in relateddocs[:3]])
analysis_prompt = f»»»As a research analyst, analyze the topic: {topic}
Available information:
{context}
Provide a structured analysis including:
1. Key insights (2-3 points)
2. Confidence level assessment
3. Research gaps or limitations
4. Practical implications
Keep response under 200 words.»»»
try:
geminianalysis = self.llm.invoke(analysisprompt)
detailedanalysis = geminianalysis.content.strip()
except:
detailedanalysis = f»Analysis of {topic} based on available documents with {len(relateddocs)} relevant sources.»
analysis = {
«topic»: topic,
«relateddocuments»: len(relateddocs),
«max_similarity»: max(similarities),
«avg_similarity»: np.mean(similarities),
«keyinsights»: [doc.pagecontent[:100] + «…» for doc in related_docs[:3]],
«confidence»: max(similarities),
«detailedanalysis»: detailedanalysis
}
return analysis
class ConversationalAgent(IntelligentAgent):
«»»Agent optimized for natural conversations»»»
def init(self):
super().init(«ChatBot», «friendly and engaging»)
self.conversation_history = []
def maintainconversationcontext(self, user_input: str) -> str:
«»»Maintain conversation flow with context awareness»»»
self.conversationhistory.append({«role»: «user», «content»: userinput})
recentcontext = » «.join([msg[«content»] for msg in self.conversationhistory[-3:]])
response = self.reasonandrespond(recent_context)
self.conversation_history.append({«role»: «assistant», «content»: response})
return response
«`
Мультиагентная система
Мы создали мультиагентную систему, которая интеллектуально направляет запросы либо к исследовательскому, либо к агенту для ведения бесед на основе семантической схожести. Встраивая как запрос пользователя, так и специализации агентов с помощью Nomic embeddings, мы гарантируем, что к каждому запросу будет назначен наиболее подходящий эксперт. Эта архитектура позволяет нам масштабировать интеллектуальное поведение, сохраняя при этом специализацию и точность.
«`python
class MultiAgentSystem:
«»»Orchestrate multiple specialized agents»»»
def init(self):
self.agents = {
«research»: ResearchAgent(),
«chat»: ConversationalAgent()
}
self.coordinator_embeddings = NomicEmbeddings(model=»nomic-embed-text-v1.5″, dimensionality=256)
def route_query(self, query: str) -> str:
«»»Route query to most appropriate agent»»»
agent_descriptions = {
«research»: «analysis, research, data, statistics, technical information»,
«chat»: «conversation, questions, general discussion, casual talk»
}
queryembedding = self.coordinatorembeddings.embed_query(query)
best_agent = «chat»
best_similarity = 0
for agentname, description in agentdescriptions.items():
descembedding = self.coordinatorembeddings.embed_query(description)
similarity = np.dot(queryembedding, descembedding)
if similarity > best_similarity:
best_similarity = similarity
bestagent = agentname
return best_agent
def process_query(self, query: str) -> Dict[str, Any]:
«»»Process query through appropriate agent»»»
selectedagent, confidence = self.routequerywithconfidence(query)
agent = self.agents[selected_agent]
if selected_agent == «research»:
if «analyze» in query.lower() or «research» in query.lower():
topic = query.replace(«analyze», «»).replace(«research», «»).strip()
result = agent.analyze_topic(topic)
response = f»Research Analysis: {result.get(‘detailed_analysis’, str(result))}»
else:
response = agent.reasonandrespond(query)
else:
response = agent.maintainconversationcontext(query)
return {
«query»: query,
«selectedagent»: selectedagent,
«response»: response,
«confidence»: confidence
}
def routequerywith_confidence(self, query: str) -> tuple[str, float]:
«»»Route query to most appropriate agent and return confidence»»»
agent_descriptions = {
«research»: «analysis, research, data, statistics, technical information»,
«chat»: «conversation, questions, general discussion, casual talk»
}
queryembedding = self.coordinatorembeddings.embed_query(query)
best_agent = «chat»
best_similarity = 0.0
for agentname, description in agentdescriptions.items():
descembedding = self.coordinatorembeddings.embed_query(description)
similarity = np.dot(queryembedding, descembedding)
if similarity > best_similarity:
best_similarity = similarity
bestagent = agentname
return bestagent, bestsimilarity
«`
В заключение мы запускаем комплексную демонстрацию нашей системы ИИ, инициализируя агентов, загружая знания и тестируя запросы из реального мира. Мы наблюдаем, как мультиагентная система интеллектуально направляет каждый запрос на основе его содержания, демонстрируя силу нашей модульной конструкции. Это окончательное выполнение подтверждает возможности агентов в рассуждении, памяти и генерации адаптивных ответов.
1. Какие инструменты и библиотеки используются для создания мультиагентной системы ИИ в статье?
В статье для создания мультиагентной системы ИИ используются следующие инструменты и библиотеки: LangChain, Faiss, LangChain-Nomic, Nomic Embeddings, Google Gemini, ChatGoogleGenerativeAI, InMemoryVectorStore.
2. Какие типы агентов разработаны в статье и для каких задач они предназначены?
В статье разработаны два типа агентов: ResearchAgent для структурированного анализа тем и ConversationalAgent для естественного диалога. Первый агент предназначен для аналитических исследований, а второй — для дружеской беседы.
3. Как в системе обеспечивается контекстуальное понимание и генерация ответов?
В системе контекстуальное понимание и генерация ответов обеспечиваются за счёт использования Nomic Embeddings для семантического понимания и Gemini LLM для генерации контекстуальных ответов, управляемых личностью. Это позволяет агентам хранить, извлекать информацию и рассуждать над ней с помощью запросов на естественном языке.
4. Какие возможности предоставляет система для хранения и извлечения информации?
Система предоставляет возможность хранения и извлечения информации через систему памяти, которая имитирует эпизодическое и семантическое запоминание. Это позволяет агентам интеллектуально взаимодействовать и учиться в ходе каждого разговора.
5. Как система определяет, какой агент должен обрабатывать конкретный запрос?
Система определяет, какой агент должен обрабатывать конкретный запрос, на основе семантической схожести между запросом и описаниями агентов. Встраивая как запрос пользователя, так и специализации агентов с помощью Nomic embeddings, система гарантирует, что к каждому запросу будет назначен наиболее подходящий эксперт.