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

Lark Agentx - あなたの飛書(Lark) AIアシスタント 🚀

Python Version Node.js Version

飛書(Lark)ベースのAIエージェントであり、大規模言語モデルが飛書を通じて関数呼び出しやメッセージ処理を行えるようにします。

飛書ボットの設定は不要で、あなたの飛書アカウントがそのままAIアシスタントになります。

関数とコメントを定義するだけで、飛書ボットがシナリオに応じて自動的に呼び出します。

プロジェクト概要 🌟

Lark Agentxは、以下の機能を備えたモダンなPythonアプリケーションです:

  • 📊 飛書のProtobuf形式で転送されるWebsocketsとAPIをリバースエンジニアリングし、メッセージを監視・記録

  • 🤖 大規模言語モデルが呼び出せるカスタム関数を提供

  • 🔄 MCP (Model Context Protocol) に基づく関数呼び出しフレームワークの実装

  • 💾 SQLAlchemyを使用してメッセージをMySQLデータベースに保存

Related MCP server: Feishu MCP Server

スクリーンショット🧸

✨ 機能の特徴

  • 関数登録メカニズム: 直感的でシンプルな関数登録デコレータ

  • メッセージ自動処理: 受信したすべてのメッセージ(個人チャットおよびグループチャット)を記録

  • 非同期処理: async/awaitパターンを採用した非同期通信

  • データ永続化: SQLAlchemyを使用してMySQLデータベースにメッセージを保存

  • 柔軟な設定: 環境変数による設定

  • コンテナ化デプロイ: Dockerによる迅速なデプロイをサポート

  • インテリジェントな関数呼び出し: AIがユーザーの入力テキストを自動的に分析し、最適な関数を呼び出します。開発者は関数とそのコメント説明を追加するだけです

📦 現在サポートされている関数

プロジェクトには、大規模言語モデルが呼び出せる以下の関数が組み込まれています:

関数名

説明

tell_joke

ランダムなジョークを言う

get_time

現在時刻を取得する

fortune

ランダムな運勢を占う

get_weather

都市の天気を取得する

count_daily_speakers

今日の発言者数を集計する

get_top_speaker_today

今日最も発言したユーザーを取得する

send_message

指定したユーザーにメッセージを送信する

list_tools

利用可能なすべてのツールとその説明をリストアップする

extra_order_from_content

テキストから注文番号、商品名、数量などの注文情報を抽出する

飛書でトリガーコマンドを入力し、その後に実行したい操作を続けることで、これらの機能を呼び出すことができます。例: /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}'"

重要: 関数とそれに対応する説明を追加するだけで、AIがユーザーのテキストに基づいて自動的に分析し、最適な関数を呼び出します。手動で関数マッチングロジックを実装する必要はありません。

🔧 環境要件

  • 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への接続と、あなたの飛書アカウントをAIアシスタントとして使用

  3. 受信メッセージの監視

  4. 飛書を通じて開始された大規模言語モデルによる関数呼び出しの処理と実行

  5. メッセージをMySQLデータベースに保存

🗄️ データベース構造

アプリケーションはメッセージを messages テーブルに保存します。このテーブルの構造は以下の通りです:

列名

型

説明

id

INT (PK)

主キー

user_name

VARCHAR(255)

メッセージ送信者の名前

user_id

VARCHAR(255)

送信者の飛書ユーザーID

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を提出するか、ディスカッションフォーラムにアクセスしてください。

📈 Starの推移

🍔 交流グループ

クローラーやAIエージェントに興味がある方は、作者のホームページにあるWeChatから招待を受けてグループチャットに参加してください。

ps: グループ7に参加してください。満員または期限切れの場合はissueで通知してください | WeChatでリマインド

group7

Related MCP Connectors

Related MCP Servers