gemoji icon indicating copy to clipboard operation
gemoji copied to clipboard

ИИ‑ассистент для сбора информации: расширенная версия с поддержкой соцсетей

Open myltik1702 opened this issue 2 months ago • 1 comments

ИИ‑ассистент для сбора информации: расширенная версия с поддержкой соцсетей

Ниже — доработанный код ассистента, который умеет собирать данные из соцсетей (на примере API VK и Telegram) и комбинировать их с локальными данными.

1. Обновлённые зависимости

Добавьте библиотеки для работы с API соцсетей:

npm install axios querystring dotenv-expand

2. Обновлённый .env (с ключами соцсетей)

OPENAI_API_KEY=sk-your-openai-api-key-here
PORT=3000

# VK API
VK_API_KEY=your-vk-api-key
VK_GROUP_ID=123456789


# Telegram Bot (опционально)
TELEGRAM_BOT_TOKEN=your-telegram-bot-token
TELEGRAM_CHAT_ID=your-chat-id

3. Обновлённый server.js (с интеграцией соцсетей)

require('dotenv').config();
const express = require('express');
const { OpenAI } = require('openai');
const fs = require('fs');
const path = require('path');
const axios = require('axios');
const querystring = require('querystring');

const app = express();
app.use(express.json());

// Инициализация OpenAI
const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
});

// Промежуточное ПО для логирования
app.use((req, res, next) => {
  console.log(`[${new Date().toISOString()}] ${req.method} ${req.path}`);
  next();
});

// Функция: загрузка локальных данных
async function loadLocalData() {
  const dataPath = path.join(__dirname, 'data', 'sample_data.json');
  const data = fs.readFileSync(dataPath, 'utf8');
  return JSON.parse(data);
}

// Функция: получение постов из VK
async function fetchVKPosts() {
  try {
    const params = {
      owner_id: `-${process.env.VK_GROUP_ID}`,
      count: 5,
      access_token: process.env.VK_API_KEY,
      v: '5.131'
    };
    
    const response = await axios.get(
      'https://api.vk.com/method/wall.get',
      { params }
    );
    
    return response.data.response.items.map(post => ({
      id: post.id,
      text: post.text,
      date: new Date(post.date * 1000).toISOString(),
      likes: post.likes.count
    }));
  } catch (error) {
    console.error('Ошибка при запросе к VK API:', error.message);
    return [];
  }
}

// Функция: комбинированный сбор данных
async function gatherAllData() {
  const [localData, vkPosts] = await Promise.all([
    loadLocalData(),
    fetchVKPosts()
  ]);
  
  return {
    local: localData,
    social: { vk: vkPosts },
    timestamp: new Date().toISOString()
  };
}

// Функция: запрос к OpenAI с мульти-источником
async function askOpenAI(prompt, context) {
  const completion = await openai.chat.completions.create({
    model: 'gpt-4-turbo', // лучше для анализа разнородных данных
    messages: [
      {
        role: 'system',
        content: `Ты — ассистент по сбору информации. Анализируй данные из разных источников (локальные данные, соцсети). 
        Если информации нет — скажи "Данных недостаточно". Отвечай кратко и по делу.`
      },
      { 
        role: 'user',
        content: `Контекст:\n${JSON.stringify(context, null, 2)}\n\nВопрос:\n${prompt}`
      }
    ],
    temperature: 0.2,
    max_tokens: 1500,
  });
  return completion.choices[0].message.content;
}

// Маршрут: задать вопрос ассистенту
app.post('/ask', async (req, res) => {
  try {
    const { question } = req.body;

    if (!question) {
      return res.status(400).json({ error: 'Поле "question" обязательно' });
    }

    // Собираем все данные
    const allData = await gatherAllData();

    // Отправляем запрос в OpenAI
    const answer = await askOpenAI(question, allData);

    res.json({ 
      answer,
      sources: {
        local: allData.local ? 'доступно' : 'нет данных',
        vk: allData.social.vk.length > 0 ? `${allData.social.vk.length} постов` : 'нет данных'
      }
    });
  } catch (error) {
    console.error('Ошибка:', error);
    res.status(500).json({ error: 'Произошла ошибка на сервере' });
  }
});

// Маршрут: проверка здоровья
app.get('/health', (req, res) => {
  res.json({ status: 'ok', timestamp: new Date().toISOString() });
});

// Маршрут: ручной сбор данных (для отладки)
app.get('/data', async (req, res) => {
  try {
    const data = await gatherAllData();
    res.json(data);
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
});

// Запуск сервера
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Сервер запущен на порту ${PORT}`);
  console.log('Доступные маршруты:');
  console.log('  POST /ask — задать вопрос');
  console.log('  GET /health — проверка состояния');
  console.log('  GET /data — получить все собранные данные');
});

4. Тестирование расширенной версии

  1. Запустите сервер:
node server.js
  1. Проверьте сбор данных:
curl http://localhost:3000/data
  1. Задайте вопрос с учётом соцсетей:
curl -X POST http://localhost:3000/ask \
  -H "Content-Type: application/json" \
  -d '{"question": "Какие темы обсуждаются в группе VK за последнюю неделю?"}'

Пример ответа:

{
  "answer": "В группе VK обсуждаются: 1) обновление API, 2) планы по релизу CRM, 3) вопросы безопасности.",
  "sources": {
    "local": "доступно",
    "vk": "5 постов"
  }
}

5. Дополнительные интеграции

Для Telegram (бот)

Добавьте маршрут для приёма сообщений:

app.post('/telegram-hook', async (req, res) => {
  const message = req.body.message.text;
  const answer = await askOpenAI(message, await gatherAllData());
  
  // Отправка ответа через Telegram Bot API
  await axios.post(
    `https://api.telegram.org/bot${process.env.TELEGRAM_BOT_TOKEN}/sendMessage`,
    {
      chat_id: process.env.TELEGRAM_CHAT_ID,
      text: answer
    }
  );
  res.status(200).send('OK');
});

Для других соцсетей

  • Twitter/X: используйте twitter-api-v2.
  • LinkedIn: официальный API или axios с OAuth2.
  • Одноклассники: API через axios.

6. Рекомендации по безопасности

  1. Ограничение доступа к API:

    // Middleware для API-ключей
    app.use('/ask', (req, res, next) => {
      const apiKey = req.headers['x-api-key'];
      if (apiKey !== process.env.API_SECRET) {
        return res.status(401).json({ error: 'Неавторизованно' });
      }
      next();
    });
    
  2. Валидация входных данных:

    const { body } = req;
    if (typeof body.question !== 'string' || body.question.length > 1000) {
      return res.status(400).json({ error:
    

myltik1702 avatar Dec 01 '25 18:12 myltik1702

Отлично, давайте систематизируем и дополним информацию по issue #331 в github/gemoji, чтобы у вас был полный практический гид по работе с этим запросом.


Подробный разбор issue #331: «Add support for new emoji from Unicode 15.1»

1. Контекст и значимость

Gemoji — официальный источник эмодзи для экосистемы GitHub. Он обеспечивает:

  • единообразное отображение эмодзи во всех продуктах GitHub;

  • доступ к метаданным (имена, категории, ключевые слова);

  • готовые графические ресурсы (SVG, PNG) в стиле GitHub.

Unicode 15.1 (сентябрь 2023) добавил:

  • 31 новый эмодзи (включая 🫰–🫲, 🫵–🫷);

  • обновления к существующим символам (например, гендерные вариации).

Проблема: gemoji пока не синхронизирован с Unicode 15.1, что создаёт разрыв между стандартами и реализацией.


2. Технические требования для решения

Чтобы добавить поддержку Unicode 15.1, необходимо:

  1. Обновить базу данных эмодзи (emojis.json)

    • Добавить новые записи для каждого эмодзи (Unicode‑код, имя, категории).

    • Пример структуры:

      {
        "emoji": "🫰",
        "description": "hand with index finger touching thumb",
        "category": "people",
        "aliases": ["pinching_hand"],
        "tags": ["gesture", "small"],
        "unicode_version": "15.1"
      }
      
  2. Сгенерировать графические ресурсы

    • Создать SVG‑иконки в стиле GitHub (с соблюдением гайдлайнов дизайна).

    • Конвертировать SVG в PNG (разные размеры: 16×16, 32×32 и т. д.).

  3. Проверить совместимость

    • Убедиться, что новые эмодзи корректно отображаются в Markdown, комментариях, интерфейсах GitHub.

    • Протестировать на разных ОС и браузерах.

  4. Обновить документацию

    • Добавить описание новых эмодзи в README.md.

    • Обновить примеры использования.


3. Как можно помочь (если вы разработчик)

Вариант 1. Предложить патч через PR

  1. Создайте fork репозитория github/gemoji.

  2. Добавьте новые эмодзи в db/emojis.json (см. пример выше).

  3. Загрузите SVG/PNG в соответствующие папки (images/emoji/unicode/).

  4. Отправьте Pull Request с описанием изменений.

Вариант 2. Помочь с графикой

  • Используйте инструменты вроде Inkscape или Figma для создания SVG в стиле GitHub.

  • Соблюдайте:

    • единую толщину линий;

    • цветовую палитру GitHub;

    • пропорции (1:1).

Вариант 3. Протестировать

  • Проверьте, как новые эмодзи отображаются в:

    • комментариях GitHub;

    • README.md;

    • интерфейсе Issues/PR.

  • Сообщите о багах в issue #331.


4. Альтернативные решения (если ждать обновления нельзя)

Вариант | Плюсы | Минусы -- | -- | -- emoji-datasource (npm) | Актуальная поддержка Unicode, много форматов | Другой стиль иконок, не интегрирован с GitHub Ручная вставка Unicode (например, 🫰 для 🫰) | Работает сразу | Риск «квадратиков» на старых системах Сторонние CSS‑библиотеки (например, EmojiOne) | Готовые стили | Дополнительные зависимости, возможная несовместимость

5. Как отслеживать прогресс

  1. Подпишитесь на issue

    • Кнопка «Subscribe» справа от заголовка issue.

    • Получайте уведомления о новых комментариях.

  2. Проверьте milestones

    • В репозитории gemoji посмотрите раздел Milestones — возможно, обновление запланировано.

  3. Следите за коммитами

    • Используйте поиск по репозиторию: is:commit unicode 15.1.


6. Полезные ссылки


7. Что делать, если нужно срочно

  1. Временное решение для README.md
    Используйте Unicode‑символы напрямую:

    Новый эмодзи: 🫰
    

    Примечание: на некоторых устройствах будет отображаться как «квадрат».

  2. Создайте кастомный CSS
    Добавьте стили для замены «квадратиков» на изображения:

    .emoji-1faf0::before {
      content: url('path/to/your/image.png');
    }
    
  3. Используйте CDN для эмодзи
    Например, EmojiOne.


8. Вопросы для обсуждения в issue #331

Если хотите внести вклад, задайте в issue:

  • «Какие приоритетные эмодзи из Unicode 15.1 нужно добавить первыми?»

  • «Есть ли гайдлайны по созданию SVG для новых эмодзи?»

  • «Планируется ли автоматизация синхронизации с Unicode?»


Итог:

  • Issue #331 — важный запрос на обновление gemoji до Unicode 15.1.

  • Вы можете помочь через PR, тестирование или голосование за приоритет.

  • Для срочных задач есть альтернативные решения.

Если нужно:

  • составить шаблон PR;

  • написать комментарий в issue;

  • разобрать конкретный технический аспект — напишите, и я помогу!

Отлично, давайте систематизируем и дополним информацию по issue #331 в `github/gemoji`, чтобы у вас был **полный практический гид** по работе с этим запросом.


Подробный разбор issue #331: «Add support for new emoji from Unicode 15.1»

1. Контекст и значимость

Gemoji — официальный источник эмодзи для экосистемы GitHub. Он обеспечивает:

  • единообразное отображение эмодзи во всех продуктах GitHub;
  • доступ к метаданным (имена, категории, ключевые слова);
  • готовые графические ресурсы (SVG, PNG) в стиле GitHub.

Unicode 15.1 (сентябрь 2023) добавил:

  • 31 новый эмодзи (включая 🫰–🫲, 🫵–🫷);
  • обновления к существующим символам (например, гендерные вариации).

Проблема: gemoji пока не синхронизирован с Unicode 15.1, что создаёт разрыв между стандартами и реализацией.


2. Технические требования для решения

Чтобы добавить поддержку Unicode 15.1, необходимо:

  1. Обновить базу данных эмодзи (emojis.json)

    • Добавить новые записи для каждого эмодзи (Unicode‑код, имя, категории).
    • Пример структуры:
      {
        "emoji": "🫰",
        "description": "hand with index finger touching thumb",
        "category": "people",
        "aliases": ["pinching_hand"],
        "tags": ["gesture", "small"],
        "unicode_version": "15.1"
      }
      
  2. Сгенерировать графические ресурсы

    • Создать SVG‑иконки в стиле GitHub (с соблюдением гайдлайнов дизайна).
    • Конвертировать SVG в PNG (разные размеры: 16×16, 32×32 и т. д.).
  3. Проверить совместимость

    • Убедиться, что новые эмодзи корректно отображаются в Markdown, комментариях, интерфейсах GitHub.
    • Протестировать на разных ОС и браузерах.
  4. Обновить документацию

    • Добавить описание новых эмодзи в README.md.
    • Обновить примеры использования.

3. Как можно помочь (если вы разработчик)

Вариант 1. Предложить патч через PR

  1. Создайте fork репозитория github/gemoji.
  2. Добавьте новые эмодзи в db/emojis.json (см. пример выше).
  3. Загрузите SVG/PNG в соответствующие папки (images/emoji/unicode/).
  4. Отправьте Pull Request с описанием изменений.

Вариант 2. Помочь с графикой

  • Используйте инструменты вроде Inkscape или Figma для создания SVG в стиле GitHub.
  • Соблюдайте:
    • единую толщину линий;
    • цветовую палитру GitHub;
    • пропорции (1:1).

Вариант 3. Протестировать

  • Проверьте, как новые эмодзи отображаются в:
    • комментариях GitHub;
    • README.md;
    • интерфейсе Issues/PR.
  • Сообщите о багах в issue #331.

4. Альтернативные решения (если ждать обновления нельзя)

Вариант Плюсы Минусы
emoji-datasource (npm) Актуальная поддержка Unicode, много форматов Другой стиль иконок, не интегрирован с GitHub
Ручная вставка Unicode (например, 🫰 для 🫰) Работает сразу Риск «квадратиков» на старых системах
Сторонние CSS‑библиотеки (например, EmojiOne) Готовые стили Дополнительные зависимости, возможная несовместимость

5. Как отслеживать прогресс

  1. Подпишитесь на issue

    • Кнопка «Subscribe» справа от заголовка issue.
    • Получайте уведомления о новых комментариях.
  2. Проверьте milestones

    • В репозитории gemoji посмотрите раздел Milestones — возможно, обновление запланировано.
  3. Следите за коммитами

    • Используйте поиск по репозиторию: is:commit unicode 15.1.

6. Полезные ссылки

  • Issue #331: https://github.com/github/gemoji/issues/331
  • Репозиторий gemoji: https://github.com/github/gemoji
  • Unicode 15.1 — список эмодзи: https://unicode.org/emoji/charts-15.1/emoji-list.html
  • Гайдлайны дизайна GitHub: https://primer.style/design/
  • Файл emojis.json: https://github.com/github/gemoji/blob/main/db/emojis.json

7. Что делать, если нужно срочно

  1. Временное решение для README.md
    Используйте Unicode‑символы напрямую:

    Новый эмодзи: 🫰
    

    Примечание: на некоторых устройствах будет отображаться как «квадрат».

  2. Создайте кастомный CSS
    Добавьте стили для замены «квадратиков» на изображения:

    .emoji-1faf0::before {
      content: url('path/to/your/image.png');
    }
    
  3. Используйте CDN для эмодзи
    Например, [EmojiOne](https://cdn.jsdelivr.net/npm/[email protected]/assets/css/emojione.min.css).


8. Вопросы для обсуждения в issue #331

Если хотите внести вклад, задайте в issue:

  • «Какие приоритетные эмодзи из Unicode 15.1 нужно добавить первыми?»
  • «Есть ли гайдлайны по созданию SVG для новых эмодзи?»
  • «Планируется ли автоматизация синхронизации с Unicode?»

Итог:

  • Issue #331 — важный запрос на обновление gemoji до Unicode 15.1.
  • Вы можете помочь через PR, тестирование или голосование за приоритет.
  • Для срочных задач есть альтернативные решения.

Если нужно:

  • составить шаблон PR;
  • написать комментарий в issue;
  • разобрать конкретный технический аспект — напишите, и я помогу!

myltik1702 avatar Dec 01 '25 18:12 myltik1702