В этом руководстве мы начнём с настройки компактного, но мощного ИИ-агента, который работает стабильно, используя трансформеры Hugging Face. Мы интегрируем генерацию диалогов, ответы на вопросы, анализ настроений, веб-поиск, поиск погоды и безопасный калькулятор в один класс Python.
По мере продвижения мы установим только необходимые библиотеки, загрузим лёгкие модели, соответствующие ограничениям памяти Colab, и обернём каждую возможность в аккуратные, повторно используемые методы. Вместе мы исследуем, как каждый компонент, от определения намерений до загрузки модели с учётом устройства, вписывается в согласованный рабочий процесс, позволяя нам создавать прототипы сложных многофункциональных агентов.
Установка ключевых библиотек Python
Мы начнём с установки ключевых библиотек Python: Transformers, Torch, Accelerate, Datasets, Requests и BeautifulSoup, чтобы наша среда Colab имела всё необходимое для загрузки моделей, логического вывода и веб-скрапинга.
Далее мы импортируем PyTorch, утилиты JSON, помощники HTTP и даты, классы Hugging Face для генерации, классификации и ответов на вопросы, а также BeautifulSoup для анализа HTML, при этом подавляя ненужные предупреждения, чтобы вывод блокнота был чистым.
“`python
import torch
import json
import requests
from datetime import datetime
from transformers import (
AutoTokenizer, AutoModelForCausalLM, AutoModelForSequenceClassification,
AutoModelForQuestionAnswering, pipeline
)
from bs4 import BeautifulSoup
import warnings
warnings.filterwarnings(‘ignore’)
“`
Класс AdvancedAIAgent
“`python
class AdvancedAIAgent:
def init(self):
“””Initialize the AI Agent with multiple models and capabilities”””
self.device = “cuda” if torch.cuda.is_available() else “cpu”
print(f” Initializing AI Agent on {self.device}”)
self.loadmodels()
self.tools = {
“websearch”: self.websearch,
“calculator”: self.calculator,
“weather”: self.get_weather,
“sentiment”: self.analyze_sentiment
}
print(” AI Agent initialized successfully!”)
“`
Загрузка моделей
“`python
def loadmodels(self):
“””Load all required models”””
print(” Loading models…”)
self.gentokenizer = AutoTokenizer.frompretrained(“microsoft/DialoGPT-medium”)
self.genmodel = AutoModelForCausalLM.frompretrained(“microsoft/DialoGPT-medium”)
self.gentokenizer.padtoken = self.gentokenizer.eostoken
self.sentiment_pipeline = pipeline(
“sentiment-analysis”,
model=”cardiffnlp/twitter-roberta-base-sentiment-latest”,
device=0 if self.device == “cuda” else -1
)
self.qa_pipeline = pipeline(
“question-answering”,
model=”distilbert-base-cased-distilled-squad”,
device=0 if self.device == “cuda” else -1
)
print(” All models loaded!”)
“`
Генерация ответа
“`python
def generateresponse(self, prompt, maxlength=100, temperature=0.7):
“””Generate text response using the language model”””
inputs = self.gentokenizer.encode(prompt + self.gentokenizer.eos_token,
return_tensors=’pt’)
with torch.no_grad():
outputs = self.gen_model.generate(
inputs,
maxlength=maxlength,
temperature=temperature,
do_sample=True,
padtokenid=self.gentokenizer.eostoken_id,
attentionmask=torch.oneslike(inputs)
)
response = self.gen_tokenizer.decode(outputs[0][len(inputs[0]):],
skipspecialtokens=True)
return response.strip()
“`
Анализ настроений
“`python
def analyze_sentiment(self, text):
“””Analyze sentiment of given text”””
result = self.sentiment_pipeline(text)[0]
return {
“sentiment”: result[‘label’],
“confidence”: round(result[‘score’], 4),
“text”: text
}
“`
Ответы на вопросы
“`python
def answer_question(self, question, context):
“””Answer questions based on given context”””
result = self.qa_pipeline(question=question, context=context)
return {
“answer”: result[‘answer’],
“confidence”: round(result[‘score’], 4),
“question”: question
}
“`
Веб-поиск
“`python
def web_search(self, query):
“””Simulate web search (replace with actual API if needed)”””
try:
return {
“query”: query,
“results”: f”Search results for ‘{query}’: Latest information retrieved successfully.”,
“timestamp”: datetime.now().strftime(“%Y-%m-%d %H:%M:%S”)
}
except Exception as e:
return {“error”: f”Search failed: {str(e)}”}
“`
Калькулятор
“`python
def calculator(self, expression):
“””Safe calculator function”””
try:
allowed_chars = set(‘0123456789+-*/.() ‘)
if not all(c in allowed_chars for c in expression):
return {“error”: “Invalid characters in expression”}
result = eval(expression)
return {
“expression”: expression,
“result”: result,
“type”: type(result).name
}
except Exception as e:
return {“error”: f”Calculation failed: {str(e)}”}
“`
Получение погоды
“`python
def get_weather(self, location):
“””Mock weather function (replace with actual weather API)”””
return {
“location”: location,
“temperature”: “22°C”,
“condition”: “Partly cloudy”,
“humidity”: “65%”,
“note”: “This is mock data. Integrate with a real weather API for actual data.”
}
“`
Обнаружение намерений
“`python
def detectintent(self, userinput):
“””Simple intent detection based on keywords”””
userinput = userinput.lower()
if any(word in user_input for word in [‘calculate’, ‘math’, ‘+’, ‘-‘, ‘*’, ‘/’]):
return ‘calculator’
elif any(word in user_input for word in [‘weather’, ‘temperature’, ‘forecast’]):
return ‘weather’
elif any(word in user_input for word in [‘search’, ‘find’, ‘look up’]):
return ‘web_search’
elif any(word in user_input for word in [‘sentiment’, ’emotion’, ‘feeling’]):
return ‘sentiment’
elif ‘?’ in user_input:
return ‘question_answering’
else:
return ‘chat’
“`
Обработка запроса
“`python
def processrequest(self, userinput, context=””):
“””Main method to process user requests”””
print(f” Processing: {user_input}”)
intent = self.detectintent(userinput)
response = {“intent”: intent, “input”: user_input}
try:
if intent == ‘calculator’:
import re
expr = re.findall(r'[0-9+\-*/.() ]+’, user_input)
if expr:
result = self.calculator(expr[0].strip())
response.update(result)
else:
response[“error”] = “No valid mathematical expression found”
elif intent == ‘weather’:
words = user_input.split()
location = “your location”
for i, word in enumerate(words):
if word.lower() in [‘in’, ‘at’, ‘for’]:
if i + 1 < len(words):
location = words[i + 1]
break
result = self.get_weather(location)
response.update(result)
elif intent == ‘web_search’:
query = user_input.replace(‘search’, ”).replace(‘find’, ”).strip()
result = self.web_search(query)
response.update(result)
elif intent == ‘sentiment’:
texttoanalyze = user_input.replace(‘sentiment’, ”).strip()
if not texttoanalyze:
texttoanalyze = “I’m feeling great today!”
result = self.analyzesentiment(textto_analyze)
response.update(result)
elif intent == ‘question_answering’ and context:
result = self.answerquestion(userinput, context)
response.update(result)
else:
generatedresponse = self.generateresponse(user_input)
response[“response”] = generated_response
response[“type”] = “generated_text”
except Exception as e:
response[“error”] = f”Error processing request: {str(e)}”
return response
“`
Мы заключаем, создавая экземпляр AdvancedAIAgent, анонсируя раздел быстрой демонстрации и запуская пять репрезентативных запросов, которые проверяют вычисления, погоду, поиск, анализ настроений и открытый чат за один раз. После просмотра аккуратно оформленных ответов JSON мы оставляем необязательный интерактивный цикл на standby, готовый к живому экспериментированию, когда мы решим его раскомментировать.
В заключение мы тестируем различные реальные запросы и наблюдаем, как он справляется с арифметическими действиями, получает данные о погоде, определяет настроение и участвует в естественном разговоре — и всё это через единый унифицированный интерфейс с использованием моделей Hugging Face. Это упражнение демонстрирует, как мы можем объединить несколько задач НЛП в расширяемую структуру, которая остаётся дружественной к ресурсам Colab.
1. Какие ключевые библиотеки Python используются для создания многофункционального ИИ-агента и почему они важны?
Ответ: Для создания многофункционального ИИ-агента используются следующие ключевые библиотеки Python: Transformers, Torch, Accelerate, Datasets, Requests и BeautifulSoup. Они важны, поскольку предоставляют инструменты для загрузки моделей, логического вывода, веб-скрапинга и анализа данных, что позволяет агенту выполнять различные задачи, такие как генерация диалогов, ответы на вопросы, анализ настроений и веб-поиск.
2. Какие модели Hugging Face используются в статье для создания ИИ-агента и как они интегрируются в код?
Ответ: В статье используются модели Hugging Face, такие как DialoGPT-medium для генерации диалогов, модель для анализа настроений на основе Twitter-RoBERTa и модель DistilBERT-base-cased-distilled-squad для ответов на вопросы. Эти модели интегрируются в код через классы AutoTokenizer, AutoModelForCausalLM, AutoModelForSequenceClassification и AutoModelForQuestionAnswering из библиотеки Transformers.
3. Какие методы используются для обнаружения намерений пользователя в запросе и как они реализованы?
Ответ: Для обнаружения намерений пользователя в запросе используется метод detect_intent, который анализирует входные данные и определяет, какую задачу должен выполнить ИИ-агент. Метод использует ключевые слова для определения намерений, таких как калькулятор, погода, веб-поиск, анализ настроений и ответы на вопросы. Если ключевые слова не найдены, предполагается генерация ответа в формате чата.
4. Какие методы используются для генерации ответа ИИ-агентом и как они реализованы?
Ответ: Для генерации ответа ИИ-агентом используется метод generate_response, который кодирует входные данные с помощью AutoTokenizer, затем использует модель AutoModelForCausalLM для генерации текста и декодирует выходные данные с помощью AutoTokenizer. Это позволяет агенту генерировать текстовые ответы на основе входных данных.
5. Какие возможности предоставляет класс AdvancedAIAgent и как они используются в статье?
Ответ: Класс AdvancedAIAgent предоставляет возможности для генерации диалогов, анализа настроений, ответов на вопросы, веб-поиска, безопасного калькулятора и получения данных о погоде. Эти возможности используются в статье для демонстрации того, как можно объединить несколько задач НЛП в расширяемую структуру, которая остаётся дружественной к ресурсам Colab.