TeamWiseFlow / awada

Awada 是一个基于微信场景的团队知识助理智能体。它可以从群聊、公众号、网站等来源中进行在线自主学习(同时也接受自主文档上传),打造团队私域知识库,并为团队成员提供问答、资料查找以及写作(Word)服务。
Other
177 stars 28 forks source link

Awada 1.x 来啦!

Awada 0.x 版本已经停止维护,如您想继续使用基于 pocketbase 的新闻列表式界面(仅列表,无 RAG 相关功能),请下载 V0.x 的 Release

Awada - 团队知识助理智能体

Awada 是一个基于微信场景的团队知识助理智能体。它可以从群聊、公众号、网站等来源中进行在线自主学习(同时也接受自主文档上传),打造团队私域知识库,并为团队成员提供问答、资料查找以及写作(Word)服务。

宣传视频: Youtube Bilibili

功能与特性

目前已经实现的效果截图

在线自主学习

scope

知识问答、资料查找

scope

写作

scope

每日简报

scope

声明

任何对本项目代码的使用、阅读、拷贝、修改、分发以及整合都被视为完全阅读并理解、接受如下各项声明,并且以上行为的所有后果均为使用者本人承担,与awada、wiseflow项目作者、贡献者、运营者无关!

部署流程(getting started)

1、硬件以及操作系统准备

硬件配置推荐

2、LLM服务配置

2.1 使用在线的 MaaS 服务

推荐使用 Siliconflow 提供的在线 MaaS 服务,主流的开源模型基本都有,且价格在主流平台中基本是最便宜的,速度也相对较快,敏感词过滤也相对宽松。

使用 SF 提供的“Qwen/Qwen2.5-7B-Instruct”模型即可以实现基础的效果,SF平台目前对该款模型提供免费推理服务,如果并发比较大的话,可以使用 “Pro/Qwen/Qwen2.5-7B-Instruct” (¥0.35/1000 tokens)。

😄 如果您愿意,可以使用我的siliconflow邀请链接,你我都将获得2000万Tokens奖励 😄

注册好账号,并成功获得 API Key 后,更新 run_all.sh 文件中的如下两项:

LLM_API_BASE='https://api.siliconflow.cn/v1'
LLM_API_KEY='your_api_key'

2.2 使用由 AiHubMix 提供的gpt-4o API三方转发服务

针对有需求使用openai系列模型的用户,可以尝试第三方代理 AiHubMix,支持国内网络环境直连、支付宝充值(实际费率相当于官网86折)

🌹 欢迎使用如下邀请链接 AiHubMix邀请链接 注册 🌹

同样,注册好账号,并成功获得 API Key 后,更新 run_all.sh 文件中的如下两项:

LLM_API_BASE='https://aihubmix.com'
LLM_API_KEY='your_api_key'

注意:awada的 LLM wrapper实际上是基于 openai SDK 的,所以事实上任何使用 openai API消息格式的 LLM 服务都可以通过配置 run_all.sh 文件中的 LLM_API_BASELLM_API_KEY 来使用。

2.3 使用本地 LLM 服务

如需在本地部署 LLM 服务,推荐使用 Xinference,支持大多数主流开源模型,且内置 vLLM llama.cpp等高效推理引擎,支持苹果M系列芯片以及华为昇腾的 NPU, 支持一键下载模型文件,默认下载源为 modelscope,对国内网络环境友好。甚至也支持 lora 微调和加载,所以即便你有微调的需求,也可以使用。

以下以 X86 架构的 Linux 系统为例,示意如何安装 Xinference 并启动本地 LLM 服务(其他架构的系统请参考官方文档):

conda create -n xinference python=3.10
conda activate xinference
pip install "xinference[vllm]"

(建议使用 conda 创建虚拟环境后再安装使用,另外我们这里只是用 vllm,如果想使用transformers或者 llama.cpp,请参考官方文档

之后,启动本地 LLM 服务,可以直接使用本目录下的 start_local_llm.sh 脚本:

chmod +x start_local_llm.sh # 赋予执行权限,仅第一次需要
./start_local_llm.sh

(这个脚本使用 qwen2.5-7b-8bit 模型,全部启动后会占用至少17b 显存,如果需要使用其他模型,请修改脚本内容,第一次运行时会自动下载模型文件,耐心等待即可)

成功启动后,更新 run_all.sh 文件中的如下两项:

LLM_API_BASE='http://127.0.0.1:9997'
# LLM_API_KEY='' 本地服务无需这一项,请注释掉或删除

3、Qanything 配置

对于 linux/MacOS 用户,直接使用 Qanything 的 docker 镜像即可,windows 用户理论上也可以,但会有很多莫名其妙的问题,具体请参考 Qanything 的官方文档

以下以 Ubuntu 22.04 LTS 为例,示意如何安装 Qanything 的 docker 镜像:

首先Qanything使用 Onnx 在 CPU 上运行 Ebedding 和 rerank 模型,比较吃内存,建议这里先调整下系统的 swap 文件大小:

sudo fallocate -l 16G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

docker的安装这里不再赘述,请参考官方文档

装好docker 后首先配置 docker 的 daemon.json 文件(国内网络环境需要)

打开 /etc/docker/daemon.json 文件,添加如下内容:

{
  "registry-mirrors": ["https://registry.docker-cn.com","https://registry.dockermirror.com", "https://docker.nju.edu.cn", "http://hub-mirror.c.163.com", "https://mirror.baidubce.com", "https://ccr.ccs.tencentyun.com","https://dockerproxy.com", "http://mirrors.ustc.edu.cn/"]
}

之后在 ~ 下依次执行如下命令:

git clone https://github.com/netease-youdao/QAnything.git
cd QAnything
docker compose -f docker-compose-linux.yaml up -d

(Note) If the startup fails, you can try changing docker compose to docker-compose.

第一次使用会从网上拉取所需的 docker 镜像,耐心等待即可。

不要更改 Qanything 的服务端口等,这部分代码我是写死的,如果要更改的话,请修改 llms/qanything.py。

另外也不要更改 Qanything 代码仓的默认位置,如果你一定要这样做,记得更新 run_all.sh 文件中的如下项:

# export QANYTHING_LOCATION='/home/dsw'

额外说一句,Qanything 的 docker 配置文件和 entrypoint.sh 文件是我见过的开源项目中写的最好的,强烈推荐大家学习。

但是它的 logs 策略太啰嗦了,有能力的同学可以修改下 qanything_kernel/utils/custom_log.py 中 debug_log insert_log 为 WARNING 级别。默认的级别把报错信息都淹没了,虽然对于理解这个项目的运行机制很有帮助。

4、 wxbot 配置

awada 项目目前使用的 wxbot 方案来自大神jwping的 wxbot 项目,感谢大神的无私分享!

{ "addr": "0.0.0.0:8066" }

这样之后就可以直接双击 wxbot-sidecar.exe 启动,启动成功后会自动拉起微信 PC 客户端(如果未拉起,请手动打开微信 PC 客户端),此时使用作为 bot 账号的微信扫码登录即可。

注意:可以选择“自动登录该设备”,但不要选择“同步最近消息”,否则会导致程序批量处理近期消息,进而批量回复,轻则导致进程阻塞,重则导致微信账号触发风控。

声明:awada项目目前不涉及,也永远不会涉及任何对微信客户端的破解,逆向等,我们充分尊重并严格遵守微信的各项协议以及腾讯公司的知识产权,也请广大用户知悉。

4.1 企业微信配置(可选)

Awada 项目除支持个人微信外,也支持企业微信,企业微信接入方案来自国内 RPA 领导者 句子互动 提供的 workpro 搭配 wechaty 框架。

具体请参考wechaty/README.md

注意:个微和企微配置一个即可,但是你也可以选择两个同时配置,分别提供学习、问答、写作等服务。

目前实际应用效果:句子互动提供的企业微信接入更加稳定,且自带语音转文字功能,但是因为企业微信的限制,无法关注公众号,得不到公众号消息(不影响从群聊中学习)。

5、启动awada程序

都看到这了,还不给本项目点个star?↗

建议使用conda创建虚拟环境

git clone git@github.com:TeamWiseFlow/awada.git
cd awada
conda create -n awada python=3.10
conda activate awada

pip install -r requirements.txt
chmod +x run_all.sh # 赋予执行权限,仅第一次需要
./run_all.sh

注:最后一步也可以按需只启动主服务(run.sh),微信信息接口程序(run_weixin.sh)或者定时任务(run_tasks.sh)。但记得每一个脚本中都要配置环境变量,另外主服务是另两个的依赖,需要先启动。

至此部署过程已经完成,但在使用 awada 之前,请了解如下概念:

分身的 config 文件各字段的含义如下:

技术说明

注意:普通使用者无需关注本段内容,但如果想基于 awada 进行二次开发或者深入配置,如下内容可能对您更好的了解本项目有所帮助。

简明架构图

scope

业务流程示意图

scope

主服务出入参说明

入参格式

更多细节可以访问 fastapi docs:{'MAIN_SERVICE_ENDPOINT'}/docs

出参格式

出参格式为:{"flag": flag, "result": [{"type": str, "answer": str}]}

注意:1、result可能有多个,为列表;

2、type 要么为text,要么为file,为file的话,后面的answer是文件的绝对路径。

flag说明

flag 码 内容
-11 LLM 错误/异常
-4 语音asr失败(预留)
-3 qanything 数据库错误
-2 qanything 查询错误
-1 入参格式错误
0 正常返回
1 呼叫导演
2 功能暂不支持
3 bot未启动【端侧不同步】
11 用户所处流程正常结束
21 生成了新的文件

限制与不足

awada 项目目前主要存在以下限制与不足:

升级计划

awada 项目承诺永远开源免费,热忱欢迎大家贡献代码,一起完善。

致谢

awada 项目基于如下开源项目,特此致谢:

Citation

如果您在相关工作中参考或引用了本项目的部分或全部,请注明如下信息:

Author:Awada Team
https://github.com/TeamWiseFlow/awada
Licensed under Apache2.0

意见与反馈,请在 Github Issue 中提出。 合作与咨询,请发邮件:zm.zhao@foxmail.com 。