Cloudflare Workers AI 现在可以免费使用了,把它集成到我们的公众号作为聊天机器人,先看成品,直接发送消息,由AI回复
Cloudflare Workers AI提供了文本生成、翻译、图像生成、图像分类、语言识别等多种模型, 每天可以有100000次的免费请求
Cloudflare Workers AI 目前为开放 Beta 版,不建议用于生产数据和流量,限制 + 访问可能会发生变化
Cloudflare AI 使用
直接使用cloudflare AI接口(建议)
cloudflare提供接口可以直接使用
使用 Workers 来布署(相对复杂)
这种方式更加自由,可以自定义更多功能。
公众号回复服务
要求:需要一台服务器和基础编程能力
当用户给公众号发消息时,公众号会把消息发送到我们的服务器,微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。
由于cloudflare接口在国外,网络原因请求可以会超过5秒,以下是我的处理过程:
- 当收到消息时会把当前 msg_id 作为hash键保存到redis中,msg_id: {“error”: “错误信息”, “content”: “接口返回结果”}
- 创建一个apscheduler任务去发起请求,当请求完成后把结果保存到当前msg_id键的hash中,
- 在接口中每隔300ms检查一次是否有结果(5秒超时),有结果返回。
@router.post("/wx", )
def message(request: Request, param = Body()):
""""""
try:
params = xmltodict(param.decode())
event = params.get("Event")
to_user = params.get("FromUserName")
content = params.get("Content")
msg_id = params.get("MsgId")
# 回复文本消息
if params.get("MsgType") == "text":
# 检查是否存在当前msg_id, 没有则添加任务发送请求
if redis.exists(replay_key(msg_id)) == 0:
add_task(replay_key(msg_id), cf_request, (content, msg_id))
delay = 5000 # 等待时间5s
step = 300 # 间隔检查时间300ms
while delay > 0:
logger.info(f"{delay}_{msg_id}_{str(redis.hgetall(replay_key(msg_id)))}")
# 检查是否有错误
if redis.hget(replay_key(msg_id), "error"):
redis.delete(replay_key(msg_id))
return Response(replay_msg(to_user, "系统错误"))
content = redis.hget(replay_key(msg_id), "content")
# 有结果返回结果
if content:
redis.delete(replay_key(msg_id))
return Response(replay_msg(to_user, content))
delay -= step
time.sleep(step/1000)
# 用户关注回复消息
if event == "subscribe":
result = """[让我看看]"""
return Response(replay_msg(to_user, result))
except Exception as e:
logger.exception(e)
return Response("success")
对于这个过程还有什么优化方法,欢迎大佬指正
公众号回复服务2
还可以直接使用cloudflare的Workers来实现,不需要服务器,具体后续分享