AIGC-知识库-LLM:从0开始搭建智能问答钉钉机器人

简介: 本文描述在阿里云上从0开始构建个人/企业专属,具备私域知识库+LLM智能问答钉钉机器人。知识库技术方案使用了Lindorm AI数据服务平台知识库能力,LLM使用了开源ChatGLM2-6B。

一、开通和配置ECS

1、 创建ECS实例(以Ubuntu系统为例),作为登录数据库的客户端。设置ECS用户名及登录密码(使用ecs-user登录,如果使用root安装,后续部分安装包会提示有权限风险)。

2、 设置安全组配置,配置出方向端口22,并在源IP中加入本机IP

image.png

3、 本机ssh到云ECS

 

二、构建自己的知识库+LLM

1、 根据产品指导书,开通Lindorm知识库+LLM实例,并根据指导书导入或SQL方式写入自己的知识文档,完成知识库的构建。该方案安装部署LLM非常简便,仅需一条简单的SQL命令即可完成安装。

2、 ECS客户端IP加入到Lindorm数据库白名单,确保ECS可以正常访问Lindorm数据库。可以在ECS上安装Lindorm CLI客户端进行测试。

3、 ECS上安装phoenixdb(用于连接数据库):pip install phoenixdb==1.2.0

注意:有些系统版本在安装时,可能会报错“subprocess.CalledProcessError: Command 'krb5-config --libs gssapi' returned non-zero exit status 127”,原因是缺乏安装依赖,需执行如下命令后再安装:sudo apt-get -y install gcc libkrb5-dev

 

三、申请钉钉机器人

1、 在钉钉上申请钉钉机器人:选择一个群,点击右上角的“群设置”按钮,选择“机器人”进行添加。

image.png

 

2、 根据文档说明,完成机器人申请:

image.png

3、 机器人申请成功后,完成基础设置。其中消息接受模式选择“HTTP模式”;配置消息接受地址:将IP设置为前面申请的ECS大网IP,服务端口号设置为自定义好的端口号(本文以5000为例,后面的钉钉post程序中也需配置为该端口)。

image.png

 

四、编写钉钉机器人post程序

说明:该程序运行在ECS上,用于响应钉钉机器人从钉钉上获取的信息,进行应答。

1、 ECS上安装dingtalkchatbotfastapiuvicornpip install dingtalkchatbot fastapi uvicorn

2、 编写钉钉机器人服务端程序(Python脚本),示例:

#!/bin/python3# -*- coding: utf-8 -*-importosfromfastapiimportFastAPI, Requestfromdingtalkchatbot.chatbotimportDingtalkChatbotimportuvicornimportjsonimportloggingimportphoenixdbfromconfigs.dingtalk4lindormimport*# global env:如下配置正式使用时请放在单独的配置文件中,如:dingtalk4lindorm# 这里的链接地址与lindorm-cli的链接地址比,需要去掉http之前的字符串#LINDORM_URL = "http://ld-XXXX-proxy-lindorm-pub.lindorm.rds.aliyuncs.com:30060"#LINDORM_USER_NAME = 'XXXX'#LINDORM_USER_PW = 'XXXX'#LLM_MODEL = 'XXXX'# 连接到lindorm数据库defconnect(kw_args):
try:
returnphoenixdb.connect(LINDORM_URL, autocommit=True, **kw_args)
exceptAttributeError:
print("Failed to connect")
# logerlogging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename='/tmp/test.log',
filemode='w')
logger=logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# init FastAPI appapp=FastAPI()
# 使用FastAPI的装饰器定义路由@app.post("/generate")
asyncdefgenerate_response(request: Request):
# 读取请求的JSON数据json_post_raw=awaitrequest.json()
json_post=json.dumps(json_post_raw)
json_post_list=json.loads(json_post)
# 获取请求中的输入文本和会话Webhookprompt=json_post_list.get('text').get('content')
session_webhook=json_post_list.get('sessionWebhook')
logger.info("prompt: %s, session webhook is: %s "% (prompt, session_webhook))
print(session_webhook)
# 连接Lindorm数据库,调用AI数据服务平台SQL查询接口,获取Lindorm知识库问答结果# 用户名通过lindorm_user字段传递,密码使用lindorm_password字段设置,database字段设置连接初始化默认数据库。connect_kw_args= {'lindorm_user': LINDORM_USER_NAME, 'lindorm_password': LINDORM_USER_PW, 'database': 'default'}
connection=connect(connect_kw_args)
msg=""withconnection.cursor() asstatement:
# 查询sql_select="select ai_infer('%s', '%s')"% (LLM_MODEL , prompt)
# print(sql_select)statement.execute(sql_select)
response=statement.fetchall()
msg=response[0][0]      #查询返回是list格式,需要取list[0][0],转换为str格式# print("LLM response:", msg)logger.info("LLM return: %s"%msg)
connection.close()
# 实例化钉钉机器人对象dingtalk_chatbot=DingtalkChatbot(session_webhook)
returndingtalk_chatbot.send_markdown(title='数据库百事通', text=msg)
# 启动FastAPI应用if__name__=='__main__':
uvicorn.run(app, host='0.0.0.0', port=5000, workers=1)

代码详解:

Lindorm提供了类JDBC的连接和使用方式,使用起来非常简便。对于知识库和LLM的调用,直接使用SQL查询方式即可返回LLM的问答结果,将返回的内容进行格式化整理即可:

sql_select = "select ai_infer('%s', '%s')" % (LLM_MODEL , prompt)

statement.execute(sql_select)

response = statement.fetchall()

msg = response[0][0]      #查询返回是list格式,需要取list[0][0],转换为str格式


3、 配置服务端口(本文设置为5000,见上述代码。也可以自定义端口,注意和钉钉机器人配置以及代码中保持一致),配置安全组,放通入方向IP。初始调试的时候,可以配置为0.0.0.0/0,以免因为网络配置导致程序不通。调测成功后再修改为钉钉机器人服务器对应的IP(见步骤5)

image.png

4、 运行脚本:nohup python3 dingtalkpost.py &

5、安全组入方向IP获取方法:上述步骤使用nohup方式运行脚本后,会在该脚本所在目录下生成一个“nohup.out”日志文件,该文件内会记录调用钉钉机器人的源端IP,比如:

INFO:     59.82.84.108:15922 - "POST /generate HTTP/1.1" 200 OK

持续使用一段时间后,通过分析该日志文件中的源端IP,即可获取到调用钉钉机器人的IP信息,从而配置安全组。如上示例,可配置59.82.0.0/16,见:

image.png


五、效果展示

在钉钉群中添加所申请的机器人,并@该机器人进行智能问答。则可以回答涉及私域知识的问题。

image.png

六、必薅羊毛

对于喜欢研究学习LLM、AIGC、知识库、智能问答、文生图等方面的爱好者,或想借助AIGC能力用于工作、学习中的人,发现阿里云最近有系列AIGC相关的优惠活动推出。


在此推荐一个智能问答、文生图相关的AIGC优惠活动:秒级开通,仅60元/月,即刻畅享私域知识库+LLM智能问答系统。该系统可以直接玩开源LLM、还可以上传自己的私域文档构建自己的知识库,文生图应用貌似也要上线了。


新用户首次开通还可获得100元猫超卡奖励,目前该奖励活动还在有效期内,手慢无。

活动链接:https://www.aliyun.com/activity/ambassador/Lindorm


开通后,即刻就能使用,界面截图:

image.png


附录

钉钉post程序示例:

https://code.alibaba-inc.com/pangshaoting.pst/PST/blob/master/dingtalk4lindorm.py

 

参考:

https://code.alibaba-inc.com/yeyan.wy/langchain-ChatGLM-dingdingbot/blob/master/dingbot.py

https://help.aliyun.com/document_detail/261165.html

https://help.aliyun.com/document_detail/2401799.html

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
弹性计算 自然语言处理 Ubuntu
从0开始在阿里云上搭建基于通义千问的钉钉智能问答机器人
本文描述在阿里云上从0开始构建一个LLM智能问答钉钉机器人。LLM直接调用了阿里云百炼平台提供的调用服务。
从0开始在阿里云上搭建基于通义千问的钉钉智能问答机器人
|
5月前
|
人工智能 自然语言处理 关系型数据库
DMS+AnalyticDB助力钉钉AI助理,轻松玩转智能问数
DMS+AnalyticDB助力钉钉AI助理,轻松玩转智能问数
200 3
|
6月前
|
人工智能 机器人 API
AppFlow:无代码部署Dify作为钉钉智能机器人
本文介绍如何通过计算巢AppFlow完成Dify的无代码部署,并将其配置到钉钉中作为智能机器人使用。首先,在钉钉开放平台创建应用,获取Client ID和Client Secret。接着,创建消息卡片模板并授予应用发送权限。然后,使用AppFlow模板创建连接流,配置Dify鉴权凭证及钉钉连接凭证,完成连接流的发布。最后,在钉钉应用中配置机器人,发布应用版本,实现与Dify应用的对话功能。
1532 7
AppFlow:无代码部署Dify作为钉钉智能机器人
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
PeterCat:一键创建开源项目 AI 问答机器人,自动抓取 GitHub 仓库信息、文档和 issue 等构建知识库
PeterCat 是一款开源的智能答疑机器人,能够自动抓取 GitHub 上的文档和 issue 构建知识库,提供对话式答疑服务,帮助开发者和社区维护者高效解决技术问题。
443 7
PeterCat:一键创建开源项目 AI 问答机器人,自动抓取 GitHub 仓库信息、文档和 issue 等构建知识库
|
7月前
|
人工智能 数据库 自然语言处理
拥抱Data+AI|DMS+AnalyticDB助力钉钉AI助理,轻松玩转智能问数
「拥抱Data+AI」系列文章由阿里云瑶池数据库推出,基于真实客户案例,展示Data+AI行业解决方案。本文通过钉钉AI助理的实际应用,探讨如何利用阿里云Data+AI解决方案实现智能问数服务,使每个人都能拥有专属数据分析师,显著提升数据查询和分析效率。点击阅读详情。
拥抱Data+AI|DMS+AnalyticDB助力钉钉AI助理,轻松玩转智能问数
|
10月前
|
人工智能 自然语言处理 运维
钉钉x昇腾:用AI一体机撬动企业数字资产智能化
大模型在过去两年迅速崛起,正加速应用于各行各业。尤其在办公领域,其主要模态——文字和图片,成为了数字化办公的基础内容,催生了公文写作、表格生成、文本翻译等多种应用场景,显著提升了工作效率。然而,AI引入办公场景也带来了数据安全与成本等问题。为此,钉钉与昇腾联合推出的“钉钉专属AI一体机解决方案”,通过本地化部署解决了数据安全、成本高昂及落地难等痛点,实现了从硬件到软件的深度协同优化,为企业提供了开箱即用的AI服务,推动了办公场景的智能化升级。
347 11
|
9月前
|
存储 安全 机器人
MemoryScope:为LLM聊天机器人配备的长期记忆系统
如何选择合适的方法构建自己的智能体助理呢?这里向您介绍强大、低延迟、安全可控的MemoryScope开源项目。
|
11月前
|
存储 安全 API
"解锁企业级黑科技!用阿里云视觉智能打造钉钉级人脸打卡系统,安全高效,让考勤管理秒变智能范儿!"
【8月更文挑战第14天】随着数字化办公的发展,人脸打卡成为企业考勤的新标准。利用阿里云视觉智能开放平台构建类似钉钉的人脸打卡系统,其关键在于:高精度人脸识别API支持复杂场景下的快速检测与比对;活体检测技术防止非生物特征欺骗,确保安全性;云端存储与计算能力满足大数据处理需求;丰富的SDK与API简化集成过程,实现高效、安全的考勤管理。
263 2
|
11月前
|
机器学习/深度学习 人工智能 运维
"颠覆传统运维!揭秘阿里云AIGC如何化身运维界超级大脑,让故障预警、智能告警不再是梦,运维大神之路从此开启!"
【8月更文挑战第14天】随着AI技术的发展,AIGC正革新依赖人工经验的传统运维行业。阿里云凭借其领先的云计算能力和AI服务生态,为运维智能化提供了坚实基础。通过分析历史数据和系统日志,AIGC能自动发现并预测故障,大幅提升运维效率。例如,结合阿里云SLS和PAI,可构建智能告警系统,实现异常检测和实时预警。随着AIGC技术的进步,运维领域将迎来全面智能化转型,开启运维新时代。
299 3
|
11月前
|
机器学习/深度学习 算法 搜索推荐
"震撼揭秘!阿里云AIGC智能图像识别:黑科技如何颠覆你的视界,让图像识别秒变超能力,生活工作全面革新!"
【8月更文挑战第12天】在数字化浪潮中,图像数据激增,高效准确处理成为关键。阿里云智能图像识别服务(AIGC)应运而生,依托深度学习与计算机视觉技术,实现图像特征精确提取与理解。通过大规模数据训练及优化算法,AIGC在图像分类、目标检测等方面表现出色。其应用场景广泛,从电商的商品识别到内容安全审核,再到智能交通和医疗影像分析,均展现出巨大潜力。示例代码展示了AIGC图像生成的基本流程,彰显其技术实力与未来前景。
291 1