跳到主要内容

OpsPilot功能介绍文档

快速入门

如何创建一个知识问答机器人

第一步:新建知识库

在“知识库”中创建一个知识库,以存储和管理机器人所需的所有信息和数据。可以手动输入内容、导入现有文档、网页链接等当时上传并训练知识库,使机器人能够快速和准确地检索相关信息。

创建知识库

进行知识库文档的上传和参数配置

第二步:新建技能

接下来,需要定义机器人的技能。这些技能可以包括自然语言处理、特定领域的问答、对话管理等。根据需求设定技能的逻辑和流程,以确保机器人能够有效地响应用户请求。

在配置机器人的技能信息时,选择内置的LLM模型,并调整温度参数以影响文本的随机性和创造性。通过输入提示语和设定对话历史数量,能够增强上下文理解和回复的相关性,同时利用RAG架构提升回答质量。

完成设置后,用户可通过与机器人对话来测试和优化技能效果。

第三步:新建机器人

(后面补充)

第四步:使用机器人

(后面补充)

功能介绍

1、工作室

机器人管理模块主要用于对Pilot进行管理,在这里可以对Pilot进行上线、下线,回复规则与对话记录管理等操作。为了适用不同的场景,比如服务台知识库问答,运维专门问答等场景,可以设置不同的机器人,一个机器人对应一个Pilot,Pilot被K8S所调度,每个Pilot本质上是一个Pod。

(图片后补)

1.1机器人列表

机器人列表展示了所有创建的机器人,支持对机器人进行上线/下线。上线的机器人可以正常运行,通过配置前端对话框响应与其交互的请求;下线的机器人则停止工作,不再响应请求。

(图片后补)

1.2 机器人基础配置

对每个机器人进行基础模型和LLM技能的配置,让该机器人具备对应能力

基本信息

针对每一台机器人,可以设置其名称、描述等基本信息。基本信息有助于理解机器人的作用和状态,并且可以作为识别和搜索的条件。

模型设置

为该机器人选择一个基础模型进行服务,基础模型是机器人在进行意图识别、语言处理等任务时所依赖的基本AI模型。目前已经内置了核心模型,其他模型语料撰写和模型训练可以在“拓展包-模型”中进行。

LLM技能

为该机器人选择对应的LLM技能,比如开放知识问答等等,LLM是在基础模型上增加的技能包,可以提供更精细、更高级的语言理解和任务执行。

高级设置

支持为该机器人设置域名/SSL/域名等设置,便于设置用户/管理员如何访问该机器人

保存和上线

1.3 消息通道

为了满足使用者多渠道的使用需求,机器人支持设置与用户进行交互的通道,比如Web、企微、钉钉等,通道配置,可以使机器人更好地为用户提供服务。OpsPilot内置了多种消息通道,让Pilot能够与用户进行交流,支持的消息通道包含:

  • Web:可以通过嵌入WebChat组件,在网页中与Pilot进行交流
  • 企业微信应用
  • 钉钉

消息通道的配置,需要选择类型填写配置参数(比如企业微信,需要填写AES密钥、企微应用的agentID、企微的企业ID、企微应用的Secret密钥和用于验证消息有效性的token)

消息通道创建完成后,可以被机器人所使用,成为和用户交互的门户。

1.4 机器人对话记录

对话记录里面记录了每个机器人与用户的对话记录,可以用于对话记录的审计等场景。

2、技能

在OpsPilot里面,技能是指机器人的能力,比如对话、自动执行等,技能创建完成后,可以被机器人所使用。

2.1 技能列表

技能列表以卡片的形式展示用户有权限的技能,普通用户可以查看/操作自己所在组织的所有技能;超管可以查看/操作所有的技能。

技能创建/编辑

这个页面的功能主要是用于添加新的技能。用户可以输入相关信息:

名称:输入名称
分组:选择所属的分组,其他用户只有在这个分组下,才能查看到该技能
简介 :输入详细介绍。

2.2 技能设置

基本信息

可以对技能的基本信息进行配置

基本信息:名称/分组/简介,可以进行修改

LLM模型:支持选择内置的LLM大模型,进行对话

LLM的温度参数:默认为0.7,用于控制文本生成的随机性和创造性;低温度(比如0.2)会生成更确定的结果,而高温度(比如0.9)则会增加文本的多样性和随机性。通过调节温度,用户可以根据需求平衡生成内容的准确性和创新性。

提示:可以输入相关的提示语,引导模型生成特定的回复应,通过提供上下文或问题以调节输出内容的方向和质量。

聊天增强

对于LLM技能,侧重于对话过程,所以可以在这里对对话的相关参数进行配置,以增强对话的准确度和体验。

对话历史:默认是10:,聊天历史数量指的是系用户与机器人之间互动的对话轮次或消息总数。这一数量可以帮助机器人理解上下文,并增强回复的相关性和连贯性。

RAG:RAG是一种将信息检索与生成模型结合的架构,先从知识库中检索相关信息,然后使用生成模型产生上下文相关的回答。


来源:开启后,在对话时可以显示引用的知识来源

知识库:支持选择同一分组下的知识库作为知识来源,并为知识库调整阈值,从而提高回答的准确性和可靠性。

技能测试

当基础信息和对话增强设置好后,可以通过与机器人对话的方式,测试一下效果。

3、知识库

知识管理模块提供了对知识库的管理,支持用户上传文件型知识、人工录入的知识、URL爬取的知识,由多个种类的知识聚合而成,并且利用各种算法提升知识索引的准确性。

知识库管理解决了以下问题

  • 1、哪些知识组成了这个知识库:支持上传/爬取多种类型、多个领域的专业知识。

  • 2、如何对知识使用怎么样的分块模式:内置

  • 3、如何检索准确:使用混合检索+ReRank,让检索变得更加准确,混合搜索的时候,语义检索和文本检索的权重可以灵活分配

总的来说,在知识库这里对知识进行上传、管理和加工,进行精细化的配置,以供LLM技能使用。

3.1 知识库列表

知识库列表以卡片的形式展示用户有权限的知识库,普通用户可以查看/操作自己所在组织的所有知识库;超管可以查看/操作所有的知识库

知识库创建

这个页面的功能主要是用于添加新的知识库。用户可以输入相关信息:

名称:输入知识库名称
分组:选择该知识库所属的分组,其他用户只有在这个分组下,才能查看到该知识库
Embed模型:主要用于词汇和数据的向量化,以便计算机更好的理解,目前内置两个模型,可以根据实际情况进行切换使用(对于已经训练好的知识库,切换模型后将会重新训练)。
简介 :输入该知识库的详细介绍。

知识库编辑/删除

知识库可以进行内容的重新编辑,包括重新更新名称/分组/简介,其中可以切换Embed模型,切换后整个知识库将会根据新选择的Embed模型进行所有知识的重新训练,训练的进度可在知识库详情中查看。

3.2 知识库文档管理

OpsPilot能够管理知识,包括 文件知识手工录入网页知识,并供知识库使用。

文档上传

新增知识的第一步是知识上传,包括三类,文本类的知识可以直接上传、网页知识需要填写对应URL、自定义文本需要手动录入

  • 1、文本知识

在日常运维过程中,会产生多种类型的知识,他们一般会以文件类型存在,这也是OpsPilot知识库中最主要的私域知识来源,根据需求自行上传多个本地文件。

  • 2、网页知识

互联网上有非常多有用的知识,例如RabbitMQ的官方文档、Redis的官方文档,这些软件会因为对应版本的不一样,具备不一样的特性,或者具备不一样的命令行参数,可以使用网页知识,对他们进行快速、持续的知识捕获

  • 3、自定义文本

运维脚本的代码段、零散的碎片知识,都适合用手工录入的方式形成知识,让OpsPilot能够对其进行使用

文档处理配置

新增知识的第二步是知识的预处理,对传入的知识进行分块处理,通过将知识进行分块,可以更有效地组织和存储数据,使得搜索引擎在查找相关信息时能够更快地定位目标数据,从而提高检索效率。

设置项包括分块解析、语义分块解析、OCR增强和Excel解析等多种算法,以提取和优化信息。设置完成,可以点击“查看块”,预览文档分块的情况,若不符合预期,则可以再次调整分块的算法。

1、分块解析
分块解析是将输入的文本或数据划分成较小的、易于处理的部分或“块”。块大小决定了每个分块所包含的文本量,默认每块是256个字符;块重叠是指在分块时,前一个块与下一个块之间的内容重叠部分,默认是0的,即相邻的两个分块之间不会有任何重叠部分。

2、语义分块解析
语义分块解析在分块解析的基础上,进一步考虑文本或数据的上下文和意义。通过分析句子、段落或数据块的语义关系,该算法可以更准确地识别出相关内容,从而确保信息的一致性和逻辑性。


3、OCR增强
OCR(Optical Character Recognition,光学字符识别)增强是指在图像或扫描文档中提取文本信息的过程。OCR增强不仅提高了文本识别的准确性,还可以结合其他处理技术,如图像预处理和后处理,以优化结果。

4、Excel解析
从Excel表格中提取和处理数据的算法。有两种方式:“Excel标题 + 行组合解析”提取Excel表格的标题(通常是第一行的列名),然后将后续的每一行数据与相应的标题进行组合。“全Excel内容解析”是指对整个Excel文档的所有内容进行提取和解析,而不仅仅限于标题和行组合。该方法会遍历每一个单元格,提取其中的所有数据,并根据需要重新组织或格式化。

文档分片和训练

新增知识的第三步是知识的分片和训练,知识上传完成后,点击“完成”即自动进入“上传-分块-训练”的阶段,可以在知识库的左下角查看每个文档的训练进度。

3.3 知识库测试

为了测试知识库分块和检索的效果,可以输入关键词进行检索,测试搜索到的结果。

测试时需要填写知识库相关配置,包括Embed模型(选择后,请在知识库的卡片页面进行编辑修改)、检索设置,调整完成后需要点击“应用配置”,该配置信息才会被保存,关于检索设置的解释说明如下

  
文本检索:设置文本检索的权重。可以为知识库中的不同文本部分设置不同的权重,以影响检索结果的排序和相关性。分为两种模式:“匹配”模式用于查找包含特定关键词的文档,而不关心它们的顺序和相对位置。“精确匹配”模式则要求关键词按指定顺序相邻出现,适用于需要精确短语匹配的情况。

向量检索:设置向量检索的参数,包括检索权重、返回数量和候选数量,候选数量 是指在向量检索中经过初步筛选后,认为可能与查询相关的文档或项的总数。返回数量 则是最终展示给用户的与查询向量最相似的文档或项的数量。通过调整这些参数,可以控制向量检索的影响力、返回结果的数量以及候选结果的数量。

(两个同时开启,则表明使用混合模式进行检索。)

结果重排序:启用Rerank模型可以对检索到的结果进行再排序,在搜索结果初步生成后,通过特定的算法或规则对结果进行再次排序,以提升结果的相关性和用户满意度。

3.4 知识库设置

支持对知识库进行配置

1、基础配置:包括名称、简介等基本信息的修改

2、检索配置:检索配置与“知识库-测试”一致

4、供应商

在供应商功能块,可以对OpsPilot能够使用的相关模型进行管理和配置,目前已经内置常用模型,仅支持配置,不支持新增。

LLM模型

LLM模型用于配置模型的基础配置,如凭据,方便后续的“技能”所使用,OpsPilot内置以下LLM模型的支持:

  • OpenAI
    • GPT-3.5-Turbo-16K
    • GPT-4-32K
    • GTP-4o

![](https://wedoc.canway.net/imgs/img/opspilot/功能介绍/供应商1.png)

LLM模型支持编辑和开关等操作,配置URL:用户可以通过配置特定的API URL来接入供应商的LLM模型,这样应用程序能够与模型进行通信,从而发送请求和接收响应。API密钥 :为了确保数据安全和访问控制,用户需要配置API密钥。这个密钥用于验证用户的身份,确保只有授权的用户能够访问和使用模型。开启/关闭功能 :用户可以根据需要启用或禁用LLM模型,这样可以灵活使用相关模型。

Embed模型

Embed模型为知识提供向量化的能力,是知识库能够进行语义检索的支撑功能,OpsPilot内置以下Embed模型,内置的这些模块可以在“知识库“中进行使用。

ReRank模型

ReRank模型可以对检索出来的知识进行重排序,让大模型在使用RAG能力的时候,知识检索效果更好。OpsPilot内置以下ReRank模型,内置的这些模块可以在“知识库”中进行使用,用于知识库检索效果的优化。

  • BCEReranker
    • bce-reranker-base_v1

OCR模型

OCR(光学字符识别)模型是一种用于将图像中的文本信息转化为可编辑文本数据的技术,广泛应用于文档数字化和信息提取。主要用于“知识库-知识上传”时,识别知识时使用。OpsPilot内置以下模型

  • PaddleOCR
  • AzureOCR

API调用说明

技能API调用

API调用说明

提供技能的对外接口,用户可以调用接口实现技能的使用。

API调用示例

1、获取技能列表

请求参数

参数名称是否必须示例
name技能1
page_size10
page1

返回数据

{
"result": true,
"code": "20000",
"message": "success",
"data": {
"count": 1,
"items": [
{
"id": 10,
"team_name": [
"游客"
],
"created_by": "1406489435@qq.com",
"updated_by": "1406489435@qq.com",
"name": "你好hello",
"skill_id": null,
"skill_prompt": null,
"enable_conversation_history": false,
"conversation_window_size": 10,
"enable_rag": false,
"enable_rag_knowledge_source": false,
"rag_score_threshold": 0.7,
"introduction": "56",
"team": [
"8bb5627e-3a25-45b9-850b-62d570a9282b"
],
"llm_model": null,
"knowledge_base": []
}
]
}
}

字段说明如下

count: 1表示返回的条目数量,在此示例中为 1。

items: [...]数据条目的数组,包含具体的记录信息。在此示例中数组中有一个对象。

id: 10唯一标识符,表示该对象的 ID。

team_name: ["游客"]团队名称的数组,表示该对象所属的团队。

created_by: "1406489435@qq.com"创建该记录的用户的邮箱地址。

updated_by: "1406489435@qq.com"最后更新该记录的用户的邮箱地址。

name: "你好hello"名称。

skill_id: null技能标识符,当前为空,表示没有关联技能。

skill_prompt: null技能提示,当前为空,表示没有关联技能提示。

enable_conversation_history: false布尔值,指示是否启用对话历史。

conversation_window_size: 10指定对话窗口的大小,即可回顾的聊天记录条数。

enable_rag: false布尔值,指示是否启用 RAG(Retrieval-Augmented Generation)。

enable_rag_knowledge_source: false布尔值,指示是否启用 RAG 知识来源。

rag_score_threshold: 0.7RAG 分数阈值,决定哪些知识被纳入对话中。

introduction: "56"记录的简介信息。

team: ["8bb5627e-3a25-45b9-850b-62d570a9282b"]团队的唯一标识 ID,用于关联团队。

llm_model: null大语言模型的标识符,当前为空。

knowledge_base: []知识库的数组,当前为空,表示没有关联的知识内容。

2、技能测试

请求参数

Headers:

参数名称是否必须示例
Content-Typeapplication/json

Query:

参数名称是否必须示例
name技能1
page_size10
page1

Body:

{
"user_message": "你好", // 用户消息
"llm_model": 1, // 大模型ID
"skill_prompt": "abc", // Prompt
"enable_rag": true, // 是否启用RAG
"enable_rag_knowledge_source": true, // 是否显示RAG知识来源
"rag_score_threshold": [{"knowledge_base": 1, "score": 0.7}], // RAG分数阈值
"chat_history": [{"event": "user", "text": "abc"}, {"event": "bot", "text": "ab"}], // 对话历史
"conversation_window_size": 10, // 对话窗口大小
"temperature": 0.7
}

返回数据

{
"result": true,
"code": "20000",
"message": "success",
"data": {
"count": 1,
"items": [
{
"id": 10,
"team_name": [
"游客"
],
"created_by": "1406489435@qq.com",
"updated_by": "1406489435@qq.com",
"name": "你好hello",
"skill_id": null,
"skill_prompt": null,
"enable_conversation_history": false,
"conversation_window_size": 10,
"enable_rag": false,
"enable_rag_knowledge_source": false,
"rag_score_threshold": 0.7,
"introduction": "56",
"team": [
"8bb5627e-3a25-45b9-850b-62d570a9282b"
],
"llm_model": null,
"knowledge_base": []
}
]
}
}

count: 1表示返回的条目数量,此示例中为 1,说明只有一条数据。

items: [...]数据条目的数组,包含特定记录的信息。

id: 10唯一标识符,用于标识该数据对象。

team_name: ["游客"]团队名称的数组,表示该记录所属的团队是“游客”。

created_by: "1406489435@qq.com"创建用户的邮箱地址。

updated_by: "1406489435@qq.com"最后更新该记录的用户的邮箱地址。

name: "你好hello"名称,表明这是一个对话主题或标识。

skill_id: null技能标识符,当前为空,表示此记录并未指定任何技能。

skill_prompt: null技能提示,当前为空,表示没有为该记录提供技能提示。

enable_conversation_history: false布尔值,指示是否启用对话历史记录。此处为 false 表示不启用。

conversation_window_size: 10指定对话窗口的大小,为 10,表示可回顾的聊天记录条数。

enable_rag: false布尔值,指示是否启用 RAG(Retrieval-Augmented Generation)。此处值为 false 表示不启用。

enable_rag_knowledge_source: false布尔值,指示是否启用 RAG 知识来源,此处值为 false 表示不启用。

rag_score_threshold: 0.7RAG 分数阈值,决定哪些知识会被纳入对话中,当前设置为 0.7。

introduction: "56"记录的简介信息。

team: ["8bb5627e-3a25-45b9-850b-62d570a9282b"]团队队的唯一标识符,用于关联到具体的团队。

llm_model: null大语言模型的标识符,当前为空,表示没有指定任何模型。

knowledge_base: []知识库的数组,当前为空,表示没有关联的知识内容。

3、技能设置保存

请求参数

路径参数:

参数名称示例备注
id1

Headers: |参数名称|是否必须|示例 |---|---|---| |Content-Type|application/json|是|

Query:

参数名称是否必须示例
name技能1
page_size10
page1

Body:

{
"name": "abc",
"team": ["11", "22"],
"introduction": "introduction", // 用户消息
"llm_model": 1, // 大模型ID
"skill_prompt": "abc", // Prompt
"enable_conversation_history": true,
"enable_rag": true, // 是否启用RAG
"enable_rag_knowledge_source": true, // 是否显示RAG知识来源
"rag_score_threshold": [{"knowledge_base": 1, "score": 0.7}], // RAG分数阈值
"temperature": 0.7,
"conversation_window_size": 10 // 对话窗口大小
}

返回数据

{
"result": true
}

知识库API调用

API调用说明

提供知识库的对外接口,用户可以基于关键字进行检索相关知识库内容

API调用示例

1、查询知识库

请求参数

参数名称是否必须示例
name12

输出示例

{
"result": true,
"data": [
{
"id": 1,
"team_name": [
"admin"
],
"created_at": "2024-09-04 15:52:21",
"updated_at": "2024-09-04 15:52:21",
"created_by": "admin",
"updated_by": "",
"name": "知识库测试",
"introduction": "abcjde",
"team": "2135b2b5-cbb4-4aea-8350-7329dcb6671a",
"enable_vector_search": true,
"vector_search_weight": 0.1,
"enable_text_search": true,
"text_search_weight": 0.9,
"enable_rerank": false,
"embed_model": 2,
"rerank_model": 1
}
]
}

字段说明如下

id: 1 唯一标识符,表示该知识库的ID。

team_name: ["admin"]团队名称的数组,表示该数据对象所属的团队。

created_at: "2024-09-04 15:52:21"记录创建的时间戳。

updated_at: "2024-09-04 15:52:21"记录最后更新的时间戳。 c reated_by: "admin"创建该记录的用户。

updated_by: ""最后更新该记录的用户(为空表示没有更新记录)。

name: "知识库测试"记录的名称。

introduction: "abcjde"记录的简介信息。

team: "2135b2b5-cbb4-4aea-8350-7329dcb6671a"团队的唯一标识ID,用于关联团队。

enable_vector_search: true布尔值,指示是否启用向量搜索。

vector_search_weight: 0.1向量搜索的权重.

enable_text_search: true布尔值,指示是否启用文本搜索。

text_search_weight: 0.9文本搜索的权重,表示在搜索算法中文本搜索的重要性。

enable_rerank: false布尔值,是否启用重新排序功能。

embed_model: 2嵌入模型的标识符,用于表示模型的类型或版本。

rerank_model: 1重新排序模型的标识符,用于表示模型的类型或版本。