主题
ai智能操作指引
1. 需求介绍
- 用户搜索功能时,可根据用户输入的内容返回最匹配的菜单信息列表;
- 用户点击菜单后,可跳转到菜单对应的页面,并且查询最匹配的模块及操作按钮,若存在则使用漫游式引导的交互方式逐步指向对应的功能;
- 增加菜单信息维护功能页面给产品经理使用,可手动修改菜单功能描述,新增菜单或菜单数据变更时支持手动更新知识库;
- 在养老管理平台中针对项目增加功能启停开关及对话次数限制。
2. 技术选型
- 开发语言:
nodejstypescript - 服务端应用框架:
nestjs - 爬虫框架:
puppeteerjs - ai框架:
langgraphjslangchainjs - 数据库:
PostgreSQL - 向量数据库:
PGVector - 大模型选择:
可配置,暂定通义千问?
3. 实现方案
3.1 使用爬虫+prompt生成菜单功能描述
TIP
建议在测试服完成此操作
- 调用
养老服务接口获取菜单数据,含路由地址和菜单名称等,存入数据库 - 使用爬虫技术根据
路由地址访问平台,获取可操作按钮信息,更新数据库,格式如下:
json
[{
"name":"待审核的工单",
"element":"",
"type": "module",
"children":[{
"name":"服务回访",
"element":".tab-action button",
"type": "action"
}, {
"name":"修改服务项目",
"element":".tab-action button",
"type": "action"
},{
"name":"工单审核",
"element":".tab-action button",
"type": "action"
}]
}]- 根据
菜单名称和可操作按钮信息,使用prompt生成功能描述,更新数据库,prompt模板如下:
你是一个平台的运维人员,
有个名为${menu_name}的菜单,其中${module_name}模块有如下可操作按钮:${button_name}。
请根据以上信息,为${menu_name}菜单生成功能描述。
要求描述应简洁明了,不要带有任何情感,不要扩展脱离模块和按钮以外的功能描述,不要超过100字,请确保回答是适合所有年龄的读者,不违反法律法规及道德规范。- 菜单更新同步机制,暂定为测试服定时同步并标记增量数据,重新生成
功能描述后手动同步到正式服?
3.2 构建RAG知识库
PGVector作为向量数据库PostgreSQL作为原始文档存储器- 文档切割规则如下:
js
this.parentDocumentRetriever = new ParentDocumentRetriever({
vectorstore: this.vectorStore,
docstore: this.docStore,
parentSplitter: new RecursiveCharacterTextSplitter({
chunkOverlap: 0,
chunkSize: 200,
separators: [':', ',', ',', '。', '!', '?'],
}),
childSplitter: new RecursiveCharacterTextSplitter({
chunkOverlap: 1,
chunkSize: 10,
separators: [':', ',', ',', '。', '!', '?'],
}),
childK: 20,
parentK: 3,
});
this.retriever = MultiQueryRetriever.fromLLM({
llm: this.llm,
retriever: this.parentDocumentRetriever,
verbose: true,
});3.3 构建智能体应用
- 判断意图
- 若判断为功能搜索,则查询菜单知识库
- 判断用户所在平台类型,选择不同的菜单知识库
- 过滤无权访问的菜单结果集
- ...其他待定?
3.4 操作指引
- 获取菜单下最匹配的模块及操作按钮,
prompt模板如下
Q: 您是一名人工智能语言模型助理,有个名为'业务管理-健康驿站-健康档案登记'的菜单,其中
'健康档案登记'模块拥有'新增、删除、导出、详情、编辑'5个按钮,
'体检登记'模块拥有'新增、删除、详情、编辑'4个按钮,
当前用户输入“在哪里进行体检登记”,请帮我找到最匹配的一个模块名称及该模块下的一个按钮名称。
若找不到,请返回'无'。
若找到了,请以XML标签格式返回。
例如:<module>模块名称</module><button>按钮名称</button>。A: <module>体检登记</module><button>新增</button>4. 接口说明
4.1 接口鉴权
客户端每次发起接口调用时需要携带养老服务的token,针对此token进行鉴权,可采用以下两种方案:
- 方案一:携带
token调用养老服务获取当前用户信息的接口,根据接口返回结果判断token是否有效; - 方案二:自行解密
token获取当前用户信息,并共用养老服务的redis,用于判断token是否过期。
方案二较方案一优势在于可减少接口调用,缺点是逻辑复杂,并依赖养老服务的redis。
4.2 插件状态判断
操作指引功能会以插件的方式接入到平台,所以需要提供插件状态判断接口,用于判断插件是否可用,客户端可根据返回结果显示/隐藏插件。该接口可从以下几个方面进行判断:
- 接口是否调用成功,判断服务是否正常;
- 养老管理平台中项目是否启用状态,对话次数是否超限;
- 判断大模型是否可用状态?
4.3 使用统计及限制
- 用户每次发起
操作指引相关接口调用,将问题描述、用户信息、执行结果等数据保存到数据库; - 根据养老管理平台的启停开关、对话次数配置,及数据库中当前项目的对话次数统计,控制用户是否允许访问;
- 根据当前用户信息及固定时间内的对话次数,控制用户访问频率。
4.4 菜单权限控制
- 养老平台中不同的平台需要构建不同的菜单知识库,根据用户所在平台的类型选择不同的知识库;
- 智能体
workflow中增加一个node,用于对RAG的结果集进行过滤,即调用养老服务接口过滤处理,只返回用户有权限访问的菜单; - 客户端也存有用户菜单数据,也需要对返回的结果进行过滤处理;
- 若过滤后无数据,需要以更加友好的方式提示用户
5. 数据库设计
待定...