В этом руководстве мы начнём с настройки компактного, но мощного ИИ-агента, который работает стабильно, используя трансформеры 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.