Lark Agentx - Tu asistente de IA en Feishu 🚀
👁 Python Version
👁 Node.js Version
Un agente de IA basado en Feishu (Lark) que permite a los grandes modelos realizar llamadas a funciones y procesar mensajes a través de Feishu.
No necesitas configurar un bot de Feishu, tu cuenta de Feishu es el asistente de IA.
Solo necesitas definir funciones y comentarios, y tu bot de Feishu las llamará automáticamente según el contexto.
Resumen del proyecto 🌟
Lark Agentx es una aplicación moderna en Python capaz de:
📊 Realizar ingeniería inversa de WebSockets y API que transmiten en formato Protobuf de Feishu, para escuchar y registrar mensajes
🤖 Proporcionar funciones personalizadas para que los grandes modelos las llamen
🔄 Implementar un marco de llamadas a funciones basado en MCP (Model Context Protocol)
💾 Utilizar SQLAlchemy para almacenar mensajes en una base de datos MySQL
Related MCP server: MCP Feishu Project Manager
Capturas de pantalla 🧸
✨ Características
Mecanismo de registro de funciones: Decorador de registro de funciones simple e intuitivo
Procesamiento automático de mensajes: Registra todos los mensajes recibidos (chats privados y grupales)
Procesamiento asíncrono: Adopta el modo async/await para la comunicación asíncrona
Persistencia de datos: Utiliza SQLAlchemy para almacenar mensajes en una base de datos MySQL
Configuración flexible: Configuración a través de variables de entorno
Despliegue en contenedores: Soporte para despliegue rápido con Docker
Llamadas a funciones inteligentes: La IA analiza automáticamente la entrada del usuario y llama a la función más adecuada; el desarrollador solo necesita añadir la función y su descripción comentada
📦 Funciones soportadas actualmente
El proyecto incluye actualmente las siguientes funciones para que los grandes modelos las llamen:
Nombre de la función | Descripción |
| Cuenta un chiste aleatorio |
| Obtiene la hora actual |
| Obtiene una predicción de suerte aleatoria |
| Obtiene el clima de una ciudad |
| Obtiene estadísticas de cuántas personas hablaron hoy |
| Obtiene el usuario que más habló hoy |
| Envía un mensaje a un usuario específico |
| Lista todas las herramientas disponibles y sus descripciones |
| Extrae información de pedidos del texto, incluyendo número de pedido, nombre del producto, cantidad, etc. |
Puedes invocar estas funciones escribiendo un comando de activación en Feishu seguido de la operación a realizar, por ejemplo: /run cuenta un chiste
📂 Estructura del proyecto
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配置🛠️ Desarrollo de funciones personalizadas
En el archivo app/core/mcp_server.py, puedes añadir tus propias funciones personalizadas usando el decorador @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}'"Importante: Solo necesitas añadir la función y su descripción correspondiente; la IA analizará automáticamente el texto del usuario y llamará a la función más adecuada, sin necesidad de implementar manualmente la lógica de coincidencia de funciones.
🔧 Requisitos del entorno
Python 3.10+
Node.js 18+
Base de datos MySQL
📦 Método de instalación
Usando el entorno local
Instalar dependencias:
pip install -r requirements.txtNota para usuarios de Windows: El sistema Windows requiere la instalación adicional de las siguientes dependencias:
pip install win-inet-pton==1.1.0
Usando Docker
Método 1: Construir la imagen por separado
# 构建镜像
docker build -t feishuapp .
# 运行容器 需要外部mysql 通过docker网关连接宿主机mysql 推荐--env-file
docker run -it feishuapp bashMétodo 2: Usar Docker Compose (recomendado)
# 启动所有服务(应用和数据库)
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止所有服务
docker-compose downUsar Docker Compose permite iniciar todo el entorno de la aplicación con un solo comando, incluyendo la base de datos MySQL y los servicios de la aplicación, lo cual es más conveniente y eficiente.
🛠️ Instrucciones de configuración
Copia el archivo .env.example y nómbralo .env, incluyendo la siguiente configuración:
# 数据库设置
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"🚀 Guía de uso
Ejecutar la aplicación
Método 1: Ejecución directa
python main.pyMétodo 2: Usar Docker Compose
docker-compose up -dLa aplicación:
Inicializará el servidor MCP
Se conectará a la API de Feishu y usará tu cuenta de Feishu como asistente de IA
Escuchará los mensajes entrantes
Procesará y ejecutará las llamadas a funciones iniciadas por el gran modelo a través de Feishu
Almacenará los mensajes en la base de datos MySQL
🗄️ Estructura de la base de datos
La aplicación almacena los mensajes en la tabla messages, la cual tiene la siguiente estructura:
Nombre de columna | Tipo | Descripción |
id | INT (PK) | Clave primaria |
user_name | VARCHAR(255) | Nombre del remitente del mensaje |
user_id | VARCHAR(255) | ID de usuario de Feishu del remitente |
content | TEXT | Contenido del mensaje |
is_group_chat | BOOLEAN | Si el mensaje proviene de un chat grupal |
group_name | VARCHAR(255) | Nombre del chat grupal (si aplica) |
chat_id | VARCHAR(255) | ID del chat |
message_time | DATETIME | Hora de envío del mensaje |
created_at | DATETIME | Hora de creación del registro |
🤝 Guía de contribución
¡Las contribuciones son bienvenidas! Por favor, siéntete libre de enviar un Pull Request.
Haz un Fork de este repositorio
Crea tu rama de características (
git checkout -b feature/amazing-feature)Confirma tus cambios (
git commit -m 'Añadir algunas características geniales')Empuja a la rama (
git push origin feature/amazing-feature)Abre un Pull Request
🐛 Problemas y soporte
Si encuentras algún problema o tienes preguntas, por favor envía un issue o visita nuestro foro de discusión.
📈 Tendencia de estrellas
🍔 Grupo de comunicación
Si te interesan los crawlers y los agentes de IA, por favor añade al autor a través de su página principal de WeChat para ser invitado al grupo de chat.
ps: Por favor, intenta unirte al grupo 7, si está lleno o expiró, abre un issue | recordatorio por WeChat
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/cv-cat/LarkAgentX'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
