В этом уроке мы представляем продвинутый агент ИИ, созданный с использованием Небиус ‘ Надежная экосистема, в частности, компоненты Чатнебиуса, Небиусембеддингс и Nebiusretriver. Агент использует модель Llama-3.3-70B-Instruct-Fast для генерации высококачественных ответов, включающих внешние функции, такие как поиск в Википедии, поиск контекстуальных документов и безопасные математические вычисления. Объединяя структурированную подсказку с модульной структурой Langchain, этот учебник демонстрирует, как построить многофункциональный, способный ИИ-помощник, способный к рассуждениям, который является как интерактивным, так и расширяемым. Будь то научные запросы, технологические идеи или основные численные задачи, этот агент демонстрирует потенциал Небиуса как платформы для создания сложных систем ИИ.
!pip install -q langchain-nebius langchain-core langchain-community wikipedia
import os
import getpass
from typing import List, Dict, Any
import wikipedia
from datetime import datetime
Мы начнем с установки основных библиотек, в том числе Langchain-Nebius, Langchain-Core, Langchain-Community и Wikipedia, которые имеют решающее значение для построения богатого функциональным помощником искусственного интеллекта. Затем он импортирует необходимые модули, такие как ОС, GetPass, DateTime и наводящие утилиты, и инициализирует API Wikipedia для доступа к внешним данным.
from langchain_core.documents import Document
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_core.tools import tool
from langchain_nebius import ChatNebius, NebiusEmbeddings, NebiusRetriever
if "NEBIUS_API_KEY" not in os.environ:
os.environ("NEBIUS_API_KEY") = getpass.getpass("Enter your Nebius API key: ")
Мы импортируем основные компоненты из Langchain и Nebius, чтобы включить обработку документов, быстрое шаблон, анализ вывода и интеграцию инструментов. Он устанавливает ключевые классы, такие как Чатнебий для языкового моделирования, Небиусембеддингс для векторного представления и Nebiusretriver для семантического поиска. Ключ API пользователя Nebius надежно доступен с помощью GetPass для аутентификации последующих взаимодействий API.
class AdvancedNebiusAgent:
"""Advanced AI Agent with retrieval, reasoning, and external tool capabilities"""
def __init__(self):
self.llm = ChatNebius(model="meta-llama/Llama-3.3-70B-Instruct-fast")
self.embeddings = NebiusEmbeddings()
self.knowledge_base = self._create_knowledge_base()
self.retriever = NebiusRetriever(
embeddings=self.embeddings,
docs=self.knowledge_base,
k=3
)
self.agent_prompt = ChatPromptTemplate.from_template("""
You are an advanced AI assistant with access to:
1. A knowledge base about technology and science
2. Wikipedia search capabilities
3. Mathematical calculation tools
4. Current date/time information
Context from knowledge base:
{context}
External tool results:
{tool_results}
Current date: {current_date}
User Query: {query}
Instructions:
- Use the knowledge base context when relevant
- If you need additional information, mention what external sources would help
- Be comprehensive but concise
- Show your reasoning process
- If calculations are needed, break them down step by step
Response:
""")
def _create_knowledge_base(self) -> List(Document):
"""Create a comprehensive knowledge base"""
return (
Document(
page_content="Artificial Intelligence (AI) is transforming industries through ML, NLP, and computer vision. Key applications include autonomous vehicles, medical diagnosis, and financial trading.",
metadata={"topic": "AI", "category": "technology"}
),
Document(
page_content="Quantum computing uses quantum mechanical phenomena like superposition and entanglement to process information. Companies like IBM, Google, and Microsoft are leading quantum research.",
metadata={"topic": "quantum_computing", "category": "technology"}
),
Document(
page_content="Climate change is caused by greenhouse gas emissions, primarily CO2 from fossil fuels. Renewable energy sources are crucial for mitigation.",
metadata={"topic": "climate", "category": "environment"}
),
Document(
page_content="CRISPR-Cas9 is a revolutionary gene editing technology that allows precise DNA modifications. It has applications in treating genetic diseases and improving crops.",
metadata={"topic": "biotechnology", "category": "science"}
),
Document(
page_content="Blockchain technology enables decentralized, secure transactions without intermediaries. Beyond cryptocurrency, it has applications in supply chain, healthcare, and voting systems.",
metadata={"topic": "blockchain", "category": "technology"}
),
Document(
page_content="Space exploration has advanced with reusable rockets, Mars rovers, and commercial space travel. SpaceX, Blue Origin, and NASA are pioneering new missions.",
metadata={"topic": "space", "category": "science"}
),
Document(
page_content="Renewable energy costs have dropped dramatically. Solar & wind power are now cheaper than fossil fuels in many regions, driving global energy transition.",
metadata={"topic": "renewable_energy", "category": "environment"}
),
Document(
page_content="5G networks provide ultra-fast internet speeds and low latency, enabling IoT devices, autonomous vehicles, and augmented reality applications.",
metadata={"topic": "5G", "category": "technology"}
)
)
@tool
def wikipedia_search(query: str) -> str:
"""Search Wikipedia for additional information"""
try:
search_results = wikipedia.search(query, results=3)
if not search_results:
return f"No Wikipedia results found for '{query}'"
page = wikipedia.page(search_results(0))
summary = wikipedia.summary(search_results(0), sentences=3)
return f"Wikipedia: {page.title}n{summary}nURL: {page.url}"
except Exception as e:
return f"Wikipedia search error: {str(e)}"
@tool
def calculate(expression: str) -> str:
"""Perform mathematical calculations safely"""
try:
allowed_chars = set('0123456789+-*/.() ')
if not all(c in allowed_chars for c in expression):
return "Error: Only basic mathematical operations allowed"
result = eval(expression)
return f"Calculation: {expression} = {result}"
except Exception as e:
return f"Calculation error: {str(e)}"
def _format_docs(self, docs: List(Document)) -> str:
"""Format retrieved documents for context"""
if not docs:
return "No relevant documents found in knowledge base."
formatted = ()
for i, doc in enumerate(docs, 1):
formatted.append(f"{i}. {doc.page_content}")
return "n".join(formatted)
def _get_current_date(self) -> str:
"""Get current date and time"""
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
def process_query(self, query: str, use_wikipedia: bool = False,
calculate_expr: str = None) -> str:
"""Process a user query with optional external tools"""
relevant_docs = self.retriever.invoke(query)
context = self._format_docs(relevant_docs)
tool_results = ()
if use_wikipedia:
wiki_keywords = self._extract_keywords(query)
if wiki_keywords:
wiki_result = self.wikipedia_search(wiki_keywords)
tool_results.append(f"Wikipedia Search: {wiki_result}")
if calculate_expr:
calc_result = self.calculate(calculate_expr)
tool_results.append(f"Calculation: {calc_result}")
tool_results_str = "n".join(tool_results) if tool_results else "No external tools used"
chain = (
{
"context": lambda x: context,
"tool_results": lambda x: tool_results_str,
"current_date": lambda x: self._get_current_date(),
"query": RunnablePassthrough()
}
| self.agent_prompt
| self.llm
| StrOutputParser()
)
return chain.invoke(query)
def _extract_keywords(self, query: str) -> str:
"""Extract key terms for Wikipedia search"""
important_words = ()
stop_words = {'what', 'how', 'why', 'when', 'where', 'is', 'are', 'the', 'a', 'an'}
words = query.lower().split()
for word in words:
if word not in stop_words and len(word) > 3:
important_words.append(word)
return ' '.join(important_words(:3))
def interactive_session(self):
"""Run an interactive session with the agent"""
print("🤖 Advanced Nebius AI Agent Ready!")
print("Features: Knowledge retrieval, Wikipedia search, calculations")
print("Commands: 'wiki:' for Wikipedia, 'calc:' for math")
print("Type 'quit' to exitn")
while True:
user_input = input("You: ").strip()
if user_input.lower() == 'quit':
print("Goodbye!")
break
use_wiki = False
calc_expr = None
if user_input.startswith('wiki:'):
use_wiki = True
user_input = user_input(5:).strip()
elif user_input.startswith('calc:'):
parts = user_input.split(':', 1)
if len(parts) == 2:
calc_expr = parts(1).strip()
user_input = f"Calculate {calc_expr}"
try:
response = self.process_query(user_input, use_wiki, calc_expr)
print(f"n🤖 Agent: {response}n")
except Exception as e:
print(f"Error: {e}n")
Ядром реализации является инкапсулированным в классе AdvancedNebiusagent, который организует рассуждения, поиск и интеграцию инструментов. Он инициализирует высокопроизводительный LLM из Небиуса (Meta-Llama/Llama-3.3-70b-Instruct-Fast). Он устанавливает семантический ретривер на основе встроенных документов, образуя мини -базу знаний, которая охватывает такие темы, как ИИ, квантовые вычисления, блокчейн и многое другое. Динамический шаблон приглашения направляет ответы агента, включив извлеченный контекст, внешние выходы инструмента и текущую дату. Два встроенных инструмента, Wikipedia_Search и расчет, улучшают функциональность агента, предоставляя доступ к внешним энциклопедическим знаниям и безопасным арифметическим вычислениям соответственно. Метод Process_query объединяет все это, динамически вызывая цепочку подсказки с контекстом, инструментами и рассуждениями, чтобы генерировать информативные ответы с несколькими источниками. Дополнительный интерактивный сеанс позволяет разговоры в реальном времени с агентом, позволяя распознавать специальные префиксы, такие как Wiki: или Calc: для активации внешней поддержки инструмента.
if __name__ == "__main__":
agent = AdvancedNebiusAgent()
demo_queries = (
"What is artificial intelligence and how is it being used?",
"Tell me about quantum computing companies",
"How does climate change affect renewable energy adoption?"
)
print("=== Nebius AI Agent Demo ===n")
for i, query in enumerate(demo_queries, 1):
print(f"Demo {i}: {query}")
response = agent.process_query(query)
print(f"Response: {response}n")
print("-" * 50)
print("nDemo with Wikipedia:")
response_with_wiki = agent.process_query(
"What are the latest developments in space exploration?",
use_wikipedia=True
)
print(f"Response: {response_with_wiki}n")
print("Demo with calculation:")
response_with_calc = agent.process_query(
"If solar panel efficiency improved by 25%, what would be the new efficiency if current is 20%?",
calculate_expr="20 * 1.25"
)
print(f"Response: {response_with_calc}n")
Наконец, мы демонстрируем возможности агента через набор демонстрационных запросов. Он начинается с создания экземпляра AdvancedNebiusAgent, за которым следует цикл, который обрабатывает предопределенные подсказки, связанные с ИИ, квантовыми вычислениями и изменением климата, демонстрируя функциональность поиска. Затем он выполняет запрос с усилением в Википедии о исследовании космоса, используя внешнюю информацию в реальном времени, чтобы дополнить базу знаний. Наконец, он запускает математический сценарий, включающий эффективность солнечной батареи для проверки инструмента расчета. Эти демонстрации в совокупности иллюстрируют, как Небиус в сочетании с Langchain и хорошо структурированными подсказками позволяет интеллектуальную, многомодальную обработку запросов в реальном ассистенте.
В заключение, этот агент с двигателем NEBIUS иллюстрирует, как эффективно объединить рассуждения, управляемые LLM со структурированным поиском и внешним использованием инструмента, для создания способного, контекстного помощника. Интегрируя Langchain с APIS Nebius, агент получает доступ к кураторской базе знаний, получает живые данные из Википедии и обрабатывает арифметические операции с проверками безопасности. Модульная архитектура учебника, в которой представлены шаблоны быстрых, динамические цепочки и настраиваемые входы, обеспечивает мощный план для разработчиков, стремящихся создать интеллектуальные системы, которые превосходят статические ответы с большой языковой модели (LLM).
Проверьте Коды. Весь кредит на это исследование направлено на исследователей этого проекта. Кроме того, не стесняйтесь следить за нами Twitter И не забудьте присоединиться к нашему 100K+ ML Subreddit и подписаться на Наша информационный бюллетеньПолем
ASIF Razzaq является генеральным директором Marktechpost Media Inc. как дальновидного предпринимателя и инженера, ASIF стремится использовать потенциал искусственного интеллекта для социального блага. Его последнее усилие-запуск медиа-платформы искусственного интеллекта, Marktechpost, которая выделяется благодаря глубокому освещению машинного обучения и новостей о глубоком обучении, которое является технически обоснованным и легко понятным для широкой аудитории. Платформа может похвастаться более чем 2 миллионами ежемесячных просмотров, иллюстрируя свою популярность среди зрителей.
