Skip to main content
Glama
cv-cat
by cv-cat

Lark Agentx — ваш ИИ-ассистент в Feishu 🚀

Python Version Node.js Version

ИИ-агент на базе Feishu (Lark), реализующий вызовы функций и обработку сообщений для больших языковых моделей через Feishu.

Настройка бота Feishu не требуется, ваша учетная запись Feishu и есть ИИ-ассистент.

Просто определите функцию и комментарии к ней, и ваш бот Feishu будет автоматически вызывать её в зависимости от контекста.

Обзор проекта 🌟

Lark Agentx — это современное приложение на Python, которое позволяет:

  • 📊 Реверс-инжиниринг веб-сокетов и API, передающих данные в формате Protobuf в Feishu, для прослушивания и записи сообщений

  • 🤖 Предоставление пользовательских функций для вызова большими языковыми моделями

  • 🔄 Реализация фреймворка вызова функций на основе MCP (Model Context Protocol)

  • 💾 Хранение сообщений в базе данных MySQL с использованием SQLAlchemy

Related MCP server: Feishu MCP Server

Скриншоты 🧸

✨ Функциональные особенности

  • Механизм регистрации функций: Простой и интуитивно понятный декоратор для регистрации функций

  • Автоматическая обработка сообщений: Запись всех входящих сообщений (личные чаты и групповые чаты)

  • Асинхронная обработка: Использование модели async/await для асинхронного взаимодействия

  • Персистентность данных: Хранение сообщений в базе данных MySQL через SQLAlchemy

  • Гибкая конфигурация: Настройка через переменные окружения

  • Контейнеризация: Поддержка быстрого развертывания через Docker

  • Интеллектуальный вызов функций: ИИ автоматически анализирует текст пользователя и вызывает наиболее подходящую функцию; разработчику нужно лишь добавить функцию и её описание

📦 Поддерживаемые функции

В проект встроены следующие функции для вызова ИИ-моделями:

Имя функции

Описание

tell_joke

Рассказать случайную шутку

get_time

Получить текущее время

fortune

Узнать случайное предсказание

get_weather

Получить погоду в городе

count_daily_speakers

Получить статистику количества говорящих сегодня

get_top_speaker_today

Получить пользователя, который больше всех писал сегодня

send_message

Отправить сообщение указанному пользователю

list_tools

Перечислить все доступные инструменты и их описания

extra_order_from_content

Извлечь информацию о заказе из текста, включая номер заказа, название товара, количество и т.д.

Вы можете вызывать эти функции, введя в Feishu команду запуска, за которой следует действие, например: /run Расскажи шутку

📂 Структура проекта

project/
├── app/                    # 应用程序模块
│   ├── api/                # API相关模块
│   │   ├── auth.py         # 认证模块
│   │   └── lark_client.py  # 飞书客户端
│   ├── config/             # 配置模块
│   │   └── settings.py     # 应用配置
│   ├── core/               # 核心业务逻辑
│   │   ├── mcp_server.py   # MCP服务器(函数注册和处理)
│   │   ├── llm_service.py  # LLM服务
│   │   └── message_service.py  # 消息处理服务
│   ├── db/                 # 数据库相关
│   │   ├── models.py       # 数据模型
│   │   └── session.py      # 数据库会话管理
│   └── utils/              # 工具函数
├── builder/                # 请求构建器
├── extension/              # 扩展功能
│   └── weather_api/        # 天气API集成
├── static/                 # 静态资源
│   ├── resource/           # 图片资源
│   ├── proto_pb2.py        # 协议定义
│   └── lark_decrypt.js     # 飞书解密工具
├── .env                    # 环境变量
├── main.py                 # 应用入口
├── requirements.txt        # 项目依赖
├── docker-compose.yml      # Docker Compose配置
└── Dockerfile              # Docker配置

🛠️ Разработка пользовательских функций

В файле app/core/mcp_server.py вы можете добавить свои собственные функции, используя декоратор @register_tool:

@register_tool(name="tell_joke", description="讲一个随机笑话")
def tell_joke() -> str:
    jokes = [
        "为什么程序员都喜欢黑色?因为他们不喜欢 bug 光。",
        "Python 和蛇有什么共同点?一旦缠上你就放不下了。",
        "为什么 Java 开发者很少被邀去派对?因为他们总是抛出异常。",
    ]
    return random.choice(jokes)

@register_tool(name="send_message", description="给指定用户发送消息 {user:用户名称 content:消息内容}")
def send_message(user: str, content: str) -> str:
    """给指定用户发送私信"""
    lark_client = LarkClient(get_auth())
    # ... 实现逻辑 ...
    return f"成功向 {user} 发送了私信: '{content}'"

Важно: Просто добавьте функцию и соответствующее описание, ИИ автоматически проанализирует текст пользователя и вызовет наиболее подходящую функцию, реализовывать логику сопоставления вручную не нужно.

🔧 Системные требования

  • Python 3.10+

  • Node.js 18+

  • База данных MySQL

📦 Установка

Использование локальной среды

  1. Установка зависимостей:

    pip install -r requirements.txt
  2. Примечание для пользователей Windows: В системе Windows необходимо дополнительно установить следующие зависимости:

    pip install win-inet-pton==1.1.0

Использование Docker

Способ 1: Сборка образа отдельно

# 构建镜像 
docker build -t feishuapp .

# 运行容器 需要外部mysql 通过docker网关连接宿主机mysql 推荐--env-file
docker run -it feishuapp bash

Способ 2: Использование Docker Compose (рекомендуется)

# 启动所有服务(应用和数据库)
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止所有服务
docker-compose down

Использование Docker Compose позволяет запустить всю среду приложения одним нажатием, включая базу данных MySQL и сервисы приложения, что более удобно и эффективно.

🛠️ Конфигурация

Скопируйте файл .env.example и переименуйте его в .env, указав следующие параметры:

# 数据库设置
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=123456
DB_NAME=lark_messages

# 飞书的Cookie设置 - 只需配置LARK_COOKIE即可,告别飞书机器人
LARK_COOKIE=""

# 调用函数的触发前缀 (以FUNCTION_TRIGGER_FLAG开头的消息会被大模型解析,所有消息都会被记录到数据库,无论是否以该前缀开头)
FUNCTION_TRIGGER_FLAG="/run"

# 机器人发言前缀 (暂未使用)
AI_BOT_PREFIX="Lark AI Bot:"

# OpenAI API配置 默认是通义千问的,满足OpenAI的大模型厂商都可以
OPENAI_API_KEY=""
OPENAI_API_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
OPENAI_API_MODEL="qwen-plus"

🚀 Руководство по использованию

Запуск приложения

Способ 1: Прямой запуск

python main.py

Способ 2: Использование Docker Compose

docker-compose up -d

Приложение выполнит следующие действия:

  1. Инициализирует MCP-сервер

  2. Подключится к API Feishu и будет использовать вашу учетную запись Feishu в качестве ИИ-ассистента

  3. Начнет прослушивание входящих сообщений

  4. Обработает и выполнит вызовы функций, инициированные ИИ-моделью через Feishu

  5. Сохранит сообщения в базу данных MySQL

🗄️ Структура базы данных

Приложение сохраняет сообщения в таблице messages, которая имеет следующую структуру:

Имя столбца

Тип

Описание

id

INT (PK)

Первичный ключ

user_name

VARCHAR(255)

Имя отправителя сообщения

user_id

VARCHAR(255)

ID пользователя Feishu

content

TEXT

Содержимое сообщения

is_group_chat

BOOLEAN

Является ли сообщение групповым

group_name

VARCHAR(255)

Название группы (если применимо)

chat_id

VARCHAR(255)

ID чата

message_time

DATETIME

Время отправки сообщения

created_at

DATETIME

Время создания записи

🤝 Руководство по участию

Вклад приветствуется! Не стесняйтесь отправлять Pull Request.

  1. Сделайте Fork этого репозитория

  2. Создайте свою ветку функций (git checkout -b feature/amazing-feature)

  3. Зафиксируйте изменения (git commit -m 'Добавлены отличные функции')

  4. Отправьте изменения в ветку (git push origin feature/amazing-feature)

  5. Откройте Pull Request

🐛 Проблемы и поддержка

Если вы столкнулись с какими-либо проблемами или у вас есть вопросы, пожалуйста, создайте issue или посетите наш форум обсуждений.

📈 Динамика звезд

🍔 Группа для общения

Если вы интересуетесь парсингом и ИИ-агентами, добавьте автора в WeChat (через главную страницу) для получения приглашения в группу.

ps: Пожалуйста, добавляйтесь в группу 7, если она заполнена или ссылка истекла — напишите в issue | wx для напоминания

group7

Related MCP Connectors

Related MCP Servers