你想不想在飞书里有一个随叫随到的 AI 小助手?它能帮你回答问题、写文案、翻译内容,甚至帮你写代码?今天我就手把手教大家,从零开始搭建一个基于飞书的 AI 智能助手。整个过程不需要你有任何编程基础,我会用最简单的大白话讲解,配合图文步骤(文字模拟截图),保证你能跟着做出来。
我们今天用的 AI 大脑是 HolySheep AI,这家平台对国内开发者特别友好,支持微信和支付宝充值,汇率是 ¥1=$1(官方汇率才 ¥7.3=$1),能省下超过 85% 的费用,而且国内直连延迟小于 50ms,速度飞快。
一、准备工作:注册飞书和 HolySheep 账号
1.1 注册飞书账号
飞书是字节跳动推出的企业协作工具,个人也可以免费注册。如果你还没用过,直接去 feishu.cn 下载 App,用手机号注册登录即可。这个步骤很简单,我就不多说了。
1.2 注册 HolySheep AI 账号(领取免费额度)
这是最关键的一步!我们需要有一个 AI 模型的 API 才能让机器人"聪明"起来。推荐大家使用 HolySheep AI,原因如下:
- 价格超级便宜:汇率 ¥1=$1,无损兑换,比如 DeepSeek V3.2 只要 $0.42/MTok,GPT-4.1 是 $8/MTok,Claude Sonnet 4.5 是 $15/MTok
- 国内直连超快:延迟小于 50ms,响应及时
- 充值方便:支持微信和支付宝
- 注册送额度:新用户有免费试用额度
注册步骤(文字模拟截图):
① 打开浏览器访问 https://www.holysheep.ai/register
② 输入手机号和验证码
③ 登录后进入控制台,点击左侧菜单的"API Keys"
④ 点击"创建新的 API Key",随便起个名字比如"飞书机器人"
⑤ 复制生成的 Key,格式类似 sk-holysheep-xxxxxxxxxxxxxxxx
二、创建飞书自建应用
飞书开放平台提供了创建自定义机器人的功能,我们来一步一步操作:
2.1 创建应用
① 打开 open.feishu.cn(飞书开放平台),用飞书账号登录
② 点击右上角"开发者后台"
③ 点击"创建自建应用"
④ 填写应用名称(比如"AI小助手"),选择合适的图标
⑤ 点击"创建"按钮
2.2 获取 App ID 和 App Secret
创建完成后,你会进入应用详情页。找到左侧菜单的"凭证与基础信息",在这里你可以看到:
App ID: cli_xxxxxxxxxxxxxxxx
App Secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxx
把这两个值复制下来,等会儿要用到。注意 App Secret 点击"复制"按钮才能看到完整内容。
2.3 配置机器人能力
① 在左侧菜单找到"添加应用能力"
② 找到"机器人"选项,点击"添加"
③ 在"机器人"设置页面,启用"消息权限"和"使用长连接接收消息"
三、本地开发环境搭建
为了运行我们的飞书机器人代码,需要先准备好 Python 环境。我自己的经验是,搭建环境这一步卡住了很多新手,所以我会讲得非常详细。
3.1 安装 Python
① 打开 python.org/downloads
② 下载最新版本的 Python 3.9 或更高
③ 双击安装包,一定要勾选"Add Python to PATH"(这个超级重要!)
④ 点击"Install Now"完成安装
3.2 验证 Python 安装
打开命令行(Windows 按 Win+R,输入 cmd 回车),输入:
python --version
pip --version
如果显示版本号(比如 Python 3.11.5),说明安装成功。
3.3 安装项目依赖
我们需要一个代码编辑器,我推荐 VS Code,免费的。去 code.visualstudio.com 下载安装即可。
新建一个文件夹命名为 feishu-ai-bot,在里面新建一个文件叫 main.py。先别管内容,我们先安装依赖。打开命令行,进入这个文件夹:
cd Desktop/feishu-ai-bot
pip install feishu-sdk requests python-dotenv
安装完成后,应该能看到"Successfully installed"的提示。
四、完整代码实现
终于到核心环节了!我会一步步解释代码的作用,你只需要复制粘贴即可。我用的是 HolySheep AI 的 API,价格便宜而且国内直连延迟很低。
4.1 创建配置文件
在项目文件夹里新建一个 .env 文件(注意前面有个点),内容如下:
# HolySheep API 配置
HOLYSHEEP_API_KEY=sk-holysheep-your-key-here
HOLYSHEEP_API_URL=https://api.holysheep.ai/v1/chat/completions
飞书配置
FEISHU_APP_ID=cli_xxxxxxxxxxxxxxxx
FEISHU_APP_SECRET=your-feishu-secret-here
把你的 HolySheep API Key 和飞书的 App ID、App Secret 填进去。注意不要加引号,直接写。
4.2 主程序代码
下面是完整的 main.py 代码,我已经加了详细的中文注释:
"""
飞书 AI 智能助手 - 主程序
使用 HolySheep AI 作为大脑
"""
import json
import logging
import os
import time
from datetime import datetime
from threading import Thread
import requests
from dotenv import load_dotenv
from lark_oapi.adapter.websocket import WsClient
from lark_oapi.api.im.v1 import CreateMessageP2PResponse
加载环境变量
load_dotenv()
配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
读取配置
HOLYSHEEP_API_KEY = os.getenv("HOLYSHEEP_API_KEY")
HOLYSHEEP_API_URL = os.getenv("HOLYSHEEP_API_URL")
FEISHU_APP_ID = os.getenv("FEISHU_APP_ID")
FEISHU_APP_SECRET = os.getenv("FEISHU_APP_SECRET")
存储对话历史(简单的内存存储)
conversation_history = {}
def get_holyAPI_access_token():
"""获取飞书 API 访问令牌"""
url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
headers = {"Content-Type": "application/json"}
data = {
"app_id": FEISHU_APP_ID,
"app_secret": FEISHU_APP_SECRET
}
response = requests.post(url, headers=headers, json=data)
result = response.json()
if result.get("code") == 0:
return result.get("tenant_access_token")
else:
logger.error(f"获取 access_token 失败: {result}")
return None
def call_holysheep_api(user_message, user_id):
"""
调用 HolySheep AI API
使用 DeepSeek V3.2 模型,性价比超高($0.42/MTok)
"""
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {HOLYSHEEP_API_KEY}"
}
# 获取或初始化对话历史
if user_id not in conversation_history:
conversation_history[user_id] = []
# 添加用户消息到历史
conversation_history[user_id].append({
"role": "user",
"content": user_message
})
# 只保留最近10轮对话,控制上下文长度
messages = conversation_history[user_id][-10:]
payload = {
"model": "deepseek-chat", # 使用 DeepSeek V3.2 模型
"messages": messages,
"temperature": 0.7,
"max_tokens": 2000
}
try:
# 调用 HolySheep API,国内直连延迟 <50ms
response = requests.post(
HOLYSHEEP_API_URL,
headers=headers,
json=payload,
timeout=30
)
result = response.json()
if "choices" in result and len(result["choices"]) > 0:
ai_response = result["choices"][0]["message"]["content"]
# 保存 AI 回复到历史
conversation_history[user_id].append({
"role": "assistant",
"content": ai_response
})
return ai_response
else:
logger.error(f"API 返回格式异常: {result}")
return "抱歉,我这边出了点小问题,请稍后再试。"
except Exception as e:
logger.error(f"调用 HolySheep API 异常: {str(e)}")
return "抱歉,AI 服务暂时不可用,请检查网络连接。"
def send_feishu_message(user_id, content):
"""发送消息给用户(私聊)"""
access_token = get_holysheep_access_token()
if not access_token:
return False
url = "https://open.feishu.cn/open-apis/im/v1/messages"
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json"
}
params = {"receive_id_type": "open_id"}
data = {
"receive_id": user_id,
"msg_type": "text",
"content": json.dumps({"text": content})
}
try:
response = requests.post(url, headers=headers, json=data, params=params)
result = response.json()
if result.get("code") == 0:
logger.info(f"消息发送成功 to {user_id}")
return True
else:
logger.error(f"发送消息失败: {result}")
return False
except Exception as e:
logger.error(f"发送消息异常: {str(e)}")
return False
def process_message(event):
"""处理接收到的消息事件"""
try:
# 解析事件数据
message = event.payload.message
user_id = message.sender.sender_id.open_id
content = message.content
# 解析消息内容
msg_data = json.loads(content)
text = msg_data.get("text", "").strip()
# 忽略空消息
if not text:
return
logger.info(f"收到用户 {user_id} 的消息: {text[:50]}...")
# 排除"AI:"前缀的消息(防止自己回复自己)
if text.startswith("AI:"):
return
# 调用 AI 获取回复
ai_reply = call_holysheep_api(text, user_id)
# 发送回复
send_feishu_message(user_id, ai_reply)
except Exception as e:
logger.error(f"处理消息异常: {str(e)}")
def main():
"""主函数:启动 WebSocket 长连接"""
logger.info("飞书 AI 机器人启动中...")
logger.info(f"HolySheep API URL: {HOLYSHEEP_API_URL}")
# 启动 WebSocket 长连接
client = WsClient.Builder(
FEISHU_APP_ID,
FEISHU_APP_SECRET
).build()
# 设置消息处理器
client.register_p2p_message_handler(process_message)
# 开始接收消息
logger.info("✅ 机器人已启动,正在等待消息...")
logger.info("📱 打开飞书,给机器人发消息试试吧!")
client.start()
if __name__ == "__main__":
main()
4.3 一键启动机器人
代码写完了,现在运行它!双击 main.py 文件,或者在命令行里输入:
python main.py
如果看到类似这样的输出:
2024-xx-xx 12:00:00 - root - INFO - 飞书 AI 机器人启动中...
2024-xx-xx 12:00:00 - root - INFO - HolySheep API URL: https://api.holysheep.ai/v1/chat/completions
2024-xx-xx 12:00:00 - root - INFO - ✅ 机器人已启动,正在等待消息...
说明启动成功啦!
五、测试你的 AI 助手
现在打开飞书 App,找到你的机器人(在"应用"里搜索你的应用名称),给它发一条消息:
你好,请介绍一下你自己
如果一切正常,机器人会在几秒钟内回复你一段介绍。我测试下来响应延迟大概在 800ms-1500ms 左右,因为主要是飞书消息转发和 HolySheep AI 模型响应的总时间,纯 API 调用部分延迟很低。
你可以试试其他问题,比如:
- "帮我写一段 Python 代码,实现快速排序"
- "翻译成英文:今天天气真好"
- "给我推荐一部好看的电影"
六、进阶功能:添加更多 AI 模型支持
HolySheep AI 支持很多主流模型,我来教你怎么切换。我自己的经验是,不同场景用不同模型效果更好:
- 日常对话、翻译:用 DeepSeek V3.2,便宜又聪明($0.42/MTok)
- 写文案、创意内容:用 GPT-4.1,效果很好($8/MTok)
- 需要严谨推理:用 Claude Sonnet 4.5($15/MTok)
- 需要实时信息:用 Gemini 2.5 Flash,便宜又快($2.50/MTok)
修改 call_holysheep_api 函数中的 model 字段即可:
# DeepSeek V3.2 - 性价比之王
"model": "deepseek-chat"
GPT-4.1 - 强大的通用模型
"model": "gpt-4.1"
Claude Sonnet 4.5 - 适合复杂推理
"model": "claude-sonnet-4-20250514"
Gemini 2.5 Flash - 速度快,价格低
"model": "gemini-2.5-flash"
常见报错排查
报错1:requests.exceptions.SSLError 或连接超时
错误信息:HTTPSConnectionPool(host='api.holysheep.ai', port=443): Max retries exceeded
原因分析:网络环境问题,可能是公司防火墙或者代理设置导致无法访问 API。
解决方案:
# 方法1:设置代理(根据你的网络环境修改代理地址)
import os
os.environ["HTTP_PROXY"] = "http://127.0.0.1:7890"
os.environ["HTTPS_PROXY"] = "http://127.0.0.1:7890"
方法2:如果是 SSL 证书问题,添加 verify=False(不推荐用于正式环境)
response = requests.post(url, headers=headers, json=payload,
timeout=30, verify=False)
报错2:飞书 access_token 获取失败
错误信息:获取 access_token 失败: {'code': 99991663, 'msg': 'app not found'}
原因分析:飞书 App ID 或 App Secret 填写错误,或者应用还没发布。
解决方案:
# 1. 检查 .env 文件,确保没有多余的空格或引号
正确的格式:
HOLYSHEEP_API_KEY=sk-holysheep-xxxxxxxx
FEISHU_APP_ID=cli_xxxxxxxxxxxxxxxx
2. 确认飞书应用已开启机器人能力
开放平台 -> 你的应用 -> 添加应用能力 -> 机器人 -> 启用
3. 如果是内测阶段,需要在"版本管理与发布"中创建版本并发布
报错3:HolySheep API Key 无效
错误信息:{'error': {'message': 'Incorrect API key provided', 'type': 'invalid_request_error'}}
原因分析:API Key 填写错误或者 Key 已被禁用。
解决方案:
# 1. 登录 https://www.holysheep.ai/register
2. 进入控制台 -> API Keys
3. 检查 Key 是否还有效(状态应该是"活跃")
4. 如果 Key 过期,创建一个新的
确认 Key 格式正确,应该以 sk-holysheep- 开头
print(HOLYSHEEP_API_KEY) # 调试用,确认 Key 已加载
报错4:机器人消息没有回复
错误信息:程序正常运行,但发送消息后没有响应
原因分析:WebSocket 连接未建立,或者消息处理函数出错。
解决方案:
# 1. 确保机器人已添加到你和机器人的私聊中
飞书 App -> 搜索应用名称 -> 发起会话
2. 检查控制台日志,看是否有错误信息
如果显示 "收到用户 xxx 的消息",说明收到了消息
如果没有这个日志,说明 WebSocket 没连接成功
3. 添加调试日志到 process_message 函数
def process_message(event):
print(f"收到事件: {event}") # 调试用
# ... 原有代码
报错5:对话历史导致上下文过长
错误信息:{'error': {'message': 'This model's maximum context length is 64000 tokens'}}
原因分析:对话历史积累太多,超过了模型的上下文限制。
解决方案:
# 在 call_holysheep_api 函数中,只保留最近的 N 条消息
def call_holysheep_api(user_message, user_id):
if user_id not in conversation_history:
conversation_history[user_id] = []
conversation_history[user_id].append({
"role": "user",
"content": user_message
})
# 原来是保留10条,可以改成5条或者直接清空
# 只保留最近5轮对话
messages = conversation_history[user_id][-5:]
# 或者超过20条就清空,重新开始
if len(conversation_history[user_id]) > 20:
conversation_history[user_id] = []
messages = [{"role": "user", "content": user_message}]
conversation_history[user_id].append({"role": "assistant", "content": "之前的对话已清空,我们可以重新开始!"})
或者直接发送单轮,不带历史(适合简单问答)
messages = [{"role": "user", "content": user_message}]
七、总结与展望
恭喜你!到这一步,你已经成功搭建了一个功能完整的飞书 AI 智能助手。回顾一下我们做了什么:
- ✅ 注册了 HolySheep AI 账号(享受 ¥1=$1 的超优汇率)
- ✅ 创建了飞书自建应用
- ✅ 配置了 WebSocket 长连接接收消息
- ✅ 成功调用了 HolySheep AI API
- ✅ 实现了消息收发和对话历史功能
你可以把这个机器人部署到服务器上,让它 24 小时运行。或者在此基础上添加更多功能,比如:
- 支持群聊 @机器人
- 添加敏感词过滤
- 集成天气查询、新闻推送等
- 支持图片生成
AI 时代已经来临,拥有自己的 AI 助手不再是程序员的专利。快去试试吧