2024 年 Python 基于 Kimi 智能助手 Moonshot Ai 模型搭建微信机器人(更新中)

注册 Kimi 开放平台

Kimi:https://www.moonshot.cn/

Kimi智能助手是北京月之暗面科技有限公司(Moonshot AI)于2023年10月9日推出的一款人工智能助手,主要为用户提供高效、便捷的信息服务。它具备多项强大功能,包括多语言对话能力、文件阅读与理解、互联网信息访问、搜索能力、信息安全与准确性保障,以及友好的用户交互界面。Kimi是全球首个支持输入20万汉字的智能助手产品,并且已启动200万字无损上下文内测,显著提升了其处理长文本的能力。

Kimi 智能助手:https://kimi.moonshot.cn

Moonshot 模型

官方文档地址:https://platform.moonshot.cn/docs/intro

Moonshot 的文本生成模型(指moonshot-v1)是训练用于理解自然语言和书面语言的,它可以根据输入生成文本输出。对模型的输入也被称为"prompt"。通常我们建议您提供明确的指令以及给出一些范例,来让模型能够完成既定的任务,设计 prompt 本质上就是学会如何"训练"模型。moonshot-v1模型可以用于各种任务,包括内容或代码生成、摘要、对话、创意写作等。

语言模型推理服务

语言模型推理服务是一个基于我们 (Moonshot AI) 开发和训练的预训练模型的 API 服务。在设计上,我们对外主要提供了一个 Chat Completions 接口,它可以用于生成文本,但是它本身是不支持访问网络、数据库等外部资源,也不支持执行任何代码。

Token 基本单位

文本生成模型以 Token 为基本单位来处理文本。Token 代表常见的字符序列。例如,单个汉字"夔"可能会被分解为若干 Token 的组合,而像"中国"这样短且常见的短语则可能会使用单个 Token。大致来说,对于一段通常的中文文本,1 个 Token 大约相当于 1.5-2 个汉字。

需要注意的是,对于我们的文本模型,Input 和 Output 的总和长度不能超过模型的最大上下文长度。

moonshot 支持模型

模型名称 最大文本长度(字符/标记) 适用场景
moonshot-v1-8k 8 k 生成短文本
moonshot-v1-32k 32 k 生成长文本
moonshot-v1-128k 128 k 生成超长文本

模型的 8k、32k、128k 在描述 Moonshot-v1 系列语言模型时,具体指的是模型可以处理的最大上下文窗口长度或文本长度。这些数字代表了模型在理解和生成文本时能够考虑的连续文本字符或标记的数量。

设置 API Key 管理

设置管理地址:https://platform.moonshot.cn/console/api-keys

OpenAI SDK

更新 openai sdk 版本 openai>=1.0

cpp 复制代码
pip install --upgrade 'openai>=1.0'

我们可以这样简单检验下自己库的版本

cpp 复制代码
python -c "import openai; print(\"version =\",openai.__version__)"

版本结果

注意:输出可能是 version = 1.33.0,表示当前 python 实际使用了 openai 的 v1.33.0 的库

配置环境变量 .env

cpp 复制代码
MOONSHOT_API_KEY=sk-4LSbG9qlUDlTkRjGJtbe7BS23SGvDjM42hAUBoF9cWSs····

构建 chat_api.py

cpp 复制代码
import os

from openai import OpenAI

import dotenv
dotenv.load_dotenv(".env")

client = OpenAI(
    api_key=os.getenv("MOONSHOT_API_KEY"),
    base_url="https://api.moonshot.cn/v1"
)


def chat_answer(content):
    response = client.chat.completions.create(
        model="moonshot-v1-8k",
        messages=[
            {"role": "system", "content": "my name is edgehacker bot"},
            {"role": "user", "content": content}
        ]
    )
    return response.choices[0].message.content

print(chat_answer("hello"))

微信机器人搭建

微信机器人 wcferry 搭建教程:https://wrist.blog.csdn.net/article/details/138536720

基本原理

当微信收到消息时,抢在微信处理(显示到页面)前,先让工具处理,处理完之后再交还给原来的处理模块。需要发送消息时,模拟微信发送消息,组装好消息体,调用微信发送消息的模块。获取联系人,则是遍历一块特定的内存空间。通过好友验证,则是组装好验证信息,调用微信的验证模块。数据库相关功能,则是通过获取到数据库句柄,基于 sqlite3 的接口来执行。

python 复制代码
from queue import Empty
from threading import Thread
from wcferry import Wcf, WxMsg
import chat_api


wcf = Wcf()
bot = wcf.get_user_info()


def processMsg(msg: WxMsg, wcf: Wcf):
    if msg.sender == "weixin":
        return
    if msg.from_group():
        content = msg.content.replace(f"@{bot['name']}", "").strip()
        result = chat_api.chat_answer(content)
        wcf.send_text(msg=result, receiver=msg.roomid)
    else:
        content = msg.content
        result = chat_api.chat_answer(content)
        wcf.send_text(msg=result, receiver=msg.sender)


def enableReceivingMsg():
    def innerWcFerryProcessMsg():
        while wcf.is_receiving_msg():
            try:
                msg = wcf.get_msg()
                if msg.sender != bot['wxid']:
                    t = Thread(target=processMsg, args=(msg, wcf))
                    t.start()
            except Empty:
                continue
            except Exception as e:
                print(f"ERROR: {e}")

    wcf.enable_receiving_msg()
    Thread(target=innerWcFerryProcessMsg, name="ListenMessageThread", daemon=True).start()


enableReceivingMsg()
wcf.keep_running()

启动运行:提示登陆微信

python bot.py

自动回复问题预览

微信版本过低解决方案

问题预览


解决方案

通过先按提示,升级到最新版本。登录微信。正常使用一下(发发消息、发发图片......)。然后在 WeChat Files 目录下,应该可以看到账号对应 wxid 的目录。这时候,再卸载掉微信但保留数据(可以把 wxid 目录复制一份出来),然后重新安装 3.9.2.23,应该就可以用了。

更新本地微信版本号:https://www.ez4leon.top/archives/skip-wechat-version-check

相关推荐
好悬给我拽开线15 分钟前
【】AI八股-神经网络相关
人工智能·深度学习·神经网络
2401_858120264 小时前
探索sklearn文本向量化:从词袋到深度学习的转变
开发语言·python·机器学习
江畔柳前堤5 小时前
CV01_相机成像原理与坐标系之间的转换
人工智能·深度学习·数码相机·机器学习·计算机视觉·lstm
qq_526099135 小时前
为什么要在成像应用中使用图像采集卡?
人工智能·数码相机·计算机视觉
码上飞扬5 小时前
深度解析:机器学习与深度学习的关系与区别
人工智能·深度学习·机器学习
bigbearxyz5 小时前
Java实现图片的垂直方向拼接
java·windows·python
立秋67895 小时前
使用Python绘制堆积柱形图
开发语言·python
jOkerSdl6 小时前
第三十章 方法大全(Python)
python
super_Dev_OP6 小时前
Web3 ETF的主要功能
服务器·人工智能·信息可视化·web3
Sui_Network6 小时前
探索Sui的面向对象模型和Move编程语言
大数据·人工智能·学习·区块链·智能合约