基于MCP function call的飞书全场景AI Agent
一个基于飞书(Lark)的全场景MCP Function Call AI Agent,实现大模型通过飞书进行函数调用和消息处理。
无需配置飞书机器人,你的飞书账号即是AI助手。
只需定义函数和注释,你的飞书机器人会自动根据场景调用。
Lark Agentx是一个现代化的Python应用程序,能够:
项目目前内置了以下函数供大模型调用:
函数名 | 描述 |
---|---|
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会根据用户的文字自动分析并调用最匹配的函数,无需手动实现函数匹配逻辑。
安装依赖:
pip install -r requirements.txt
Windows用户注意: Windows系统需要额外安装以下依赖:
pip install win-inet-pton==1.1.0
方法一:单独构建镜像
# 构建镜像
docker build -t feishuapp .
# 运行容器 需要外部mysql 通过docker网关连接宿主机mysql 推荐--env-file
docker run -it feishuapp bash
方法二:使用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"
方法一:直接运行
python main.py
方法二:使用Docker Compose
docker-compose up -d
应用程序将:
应用程序将消息存储在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。
git checkout -b feature/amazing-feature
)git commit -m '添加一些很棒的特性'
)git push origin feature/amazing-feature
)如果您遇到任何问题或有疑问,请提交issue或访问我们的讨论论坛。
No configuration available
This service may require manual configuration, please check the details on the left
Related projects feature coming soon
Will recommend related projects based on sub-categories