基于飞书(Lark)的智能聊天机器人,集成大语言模型(LLM)能力,提供多轮对话、文档问答、图像理解、日程管理等功能。
- 智能对话:基于 LangChain 的多轮对话,支持上下文理解
- 工具调用:集成网络搜索、文档问答、图像理解、日程管理等工具
- RAG 文档问答:基于 LangGraph 的智能文档检索,自动选择直接处理或向量检索
- 群聊监控:智能判断何时主动介入群聊对话,无需 @机器人
- 视觉理解:使用 VLM 理解图像内容
- 日程管理:创建飞书日历事件
- 新闻收集:定时收集新闻并发送到群聊
- Python >= 3.12
- 包管理器: uv
- LLM 框架: LangChain + LangGraph
- 大模型: 阿里云 DashScope (通义千问)
- 飞书 SDK: lark-oapi
- 向量存储: FAISS
- 缓存: Redis
- 搜索: Tavily
- Python 3.12+
- Redis 7.0+
- 飞书应用凭证
- DashScope API Key
- 克隆项目
git clone <repository-url>
cd chat-agent- 配置环境变量
cp .env.example .env
# 编辑 .env 文件,填写必要的配置- 安装依赖
# 使用 uv(推荐)
uv sync
# 或使用 pip
pip install -e .本地开发
uv run main.pyDocker 部署
docker-compose up -d| 变量名 | 说明 |
|---|---|
APP_ID |
飞书应用 ID |
APP_SECRET |
飞书应用密钥 |
DASHSCOPE_API_KEY |
阿里云 DashScope API 密钥 |
TAVILY_API_KEY |
Tavily 搜索 API 密钥 |
REDIS_HOST |
Redis 主机地址 |
REDIS_PORT |
Redis 端口 |
REDIS_PASSWORD |
Redis 密码 |
- 在飞书开放平台创建企业自建应用
- 开启机器人能力,获取
APP_ID和APP_SECRET - 配置事件订阅:
- 订阅方式:长连接(WebSocket)
- 订阅事件:
接收消息(im.message.receive_v1)
- 申请权限:
im:chat:readonlyim:message:sendim:message.group_msgcalendar:calendar:writecalendar:calendar.event:writecontact:user.department:readonly
- 发布应用到企业
chat-agent/
├── main.py # 项目入口
├── pyproject.toml # 项目配置
├── docker-compose.yml # Docker 编排
├── app/ # 核心应用代码
│ ├── server.py # Flask OAuth 服务
│ ├── agents/ # Agent 模块
│ │ ├── main_agent.py # 主 Agent
│ │ ├── monitor.py # 群聊监控
│ │ ├── rag_workflow.py # RAG 工作流
│ │ └── vlm.py # 视觉语言模型
│ ├── bot/ # 飞书机器人模块
│ │ ├── client.py # 飞书 API 客户端
│ │ ├── auth.py # Token 认证
│ │ ├── messages/ # 消息处理
│ │ └── calendar/ # 日程管理
│ └── tools/ # 外部工具
├── storage/ # 文档存储
└── docs/ # 文档
- 私聊:直接发送消息给机器人
- 群聊:@机器人 或 让机器人自动介入对话
| 指令 | 说明 |
|---|---|
/rag <问题> |
基于上传的文档进行问答 |
/news |
获取最新新闻 |
| 直接发送图片 | 自动使用 VLM 分析图像内容 |
将 PDF 或图片文件放入 storage/ 目录,机器人会自动加载并建立向量索引。
uv run pytest# 格式化
uv run ruff format .
# 检查
uv run ruff check .用户消息
↓
消息回调 (callback.py)
↓
群聊监控 (monitor.py) ← 判断是否主动回复
↓
主 Agent (main_agent.py)
↓
工具路由 → 搜索 / RAG / VLM / 日程
使用 LangGraph 实现智能路由:
- 短文档:直接由 LLM 处理
- 长文档:使用 Embedding 检索相关片段