Skip to content

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. 数据库设计

待定...

最后更新于: