主题
ai智能操作指引
1. 需求介绍
- 用户搜索功能时,可根据用户输入的内容返回最匹配的菜单信息列表;
- 用户点击菜单后,可跳转到菜单对应的页面,并且查询最匹配的模块及操作按钮,若存在则使用漫游式引导的交互方式逐步指向对应的功能;
- 增加菜单信息维护功能页面给产品经理使用,可手动修改菜单功能描述,新增菜单或菜单数据变更时支持手动更新知识库;
- 在养老管理平台中针对项目增加功能启停开关及对话次数限制。
2. 技术选型
- 开发语言:
nodejs
typescript
- 服务端应用框架:
nestjs
- 爬虫框架:
puppeteerjs
- ai框架:
langgraphjs
langchainjs
- 数据库:
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. 数据库设计
待定...