快速入门
如何创建一个知识问答机器人
背景说明
企业中有大量知识和信息,包括政策、产品说明、流程文档和技术支持等。员工在日常工作中经常需要这些信息,以做出决策或解决问题。传统的查找方式(如手动搜索文档或向同事咨询)可能耗时且效率低下,可以借助OpsPilot,集中管理企业知识,并创建对外使用的机器人,结合大模型提供智能化回答,提升用户体验。
第一步:新建知识库
为了更好的使用机器人,需要对机器人引用的知识进行上传-存储-训练-检索,这些可在“OpsPilot-知识库”中实现。在“知识库”中创建一个知识库,以存储和管理机器人所需的所有信息和数据。
创建知识库
输入知识库的名称和描述,选择归属的组织(知识库的查看和操作权限和所属组织有关),选择Embed模型(用于知识库知识的存储,以便后续高效搜索)
进行知识库文档的上传
- 知识库文档的上传分为三类,每一类上传有其对应数据需提供。
- 本地文档(支持上传word、Excel、pdf等格式的文档)
- 网页文档(直接引用网站信息)
- 自定义文档(自行撰写的文档)
- 选择——提供知识本体
- 本地文件:点击提示区域自动打开资源管理器,打开需要上传文件夹选取文件上传;或者提前打开文件夹,选取文件直接拖拽到有效区域内。
- 网页文档:为此文档定义名称方便理解,输入需要上传的网址链接,选择对于该网址需要跳转的网址数量(深度)。
- 自定义文本:一些零散或者自创的内容可通过手动输入创建。
- 预处理——文档分块设置
- 分块解析:将大型文档切分为多个小块,设定每个小块的大小
- 语义分块:设定分块时是否需要根据语义分块。比如:一句话,2025.3.4xx新型手机上线,按照大小,”新型“前单独一块,”新型“及以后一块,按大小分会破坏语义导致难以理解。若开启,则优先保持语义完整,再按照大小分。
- OCR增强:开启则将图像中可识别字符转换为文本,不开启则默认保持图片原本状态。
- Excel解析:专门处理excel文件、表格。
- 完成阶段
- 训练状态:返回文档列表查看上传知识的状态。文档上传-切片完成后,会对所有的文档进行切片和训练,状态为“就绪”时,说明该文档可使用。
- 测试:文档创建好后,对该知识库的检索进行设置,并测试效果。
第二步:新建技能
接下来,需要定义机器人的技能,这些技能可以包括自然语言处理、特定领域的问答、对话管理等。根据需求设定技能的逻辑和流程,以确保机器人能够有效地响应用户请求。(注意权限分组设置)
在配置机器人的技能信息时,需要填写的参数如下:
基本信息:名称/分组/简介,可以进行修改
LLM模型:支持选择内置的LLM大模型,大模型可以根据在知识库搜索到的结果,进行再次总结,并且回复。
LLM的温度参数:默认为0.7,用于控制文本生成的随机性和创造性;低温度(比如0.2)会生成更确定的结果,而高温度(比如0.9)则会增加文本的多样性和随机性。通过调节温度,用户可以根据需求平衡生成内容的准确性和创新性。
提示:可以输入相关的提示语,引导模型生成特定的回复,通过提供上下文或问题以调节输出内容的方向和质量。
对话历史:默认是10:,聊天历史数量指的是系用户与机器人之间互动的对话轮次或消息总数。这一数量可以帮助机器人理解上下文,并增强回复的相关性和连贯性。
RAG:RAG是一种将信息检索与生成模型结合的架构,先从知识库中检索相关信息,然后使用生成模型产生上下文相关的回答。
来源:开启后,在对话时可以显示引用的知识来源
知识库:支持选择同一分组下的知识库作为知识来源,并为知识库调整阈值,从而提高回答的准确性和可靠性。
完成设置后,用户可通过与机器人对话来测试和优化技能效果。
第三步:新建机器人
当技能创建完成后,我们需要正式创建Bot,并且把Bot发布出去,以供大家使用。
Bot需要填写名称、分析和介绍等信息,并且选择使用的模型(目前只用内置核心模型可使用),并选择这个Bot使用的技能以及发布的渠道。
Bot的渠道目前支持四类,需要提前在Channel中设置好需要使用渠道的参数信息。
全部设置完后,点击“发布”按钮,即可进行Bot的发布
第四步:使用机器人
目前OpsPilOt支持 Web,企微和钉钉三类通知渠道,可以按照设定的机器人域名/端口等信息,在三类渠道上发布。
比如在企微工作台创建应用,并且接入机器人,即可实现对话。
第五步:查看对话情况
当用户对话完成后,可以在Bot中查看所有用户的对话记录。
功能介绍
工作室
机器人管理模块主要用于对Pilot进行管理,在这里可以对Pilot进行上线、下线,回复规则与对话记录管理等操作。为了适用不同的场景,比如服务台知识库问答,运维专门问答等场景,可以设置不同的机器人,一个机器人对应一个Pilot,Pilot被K8S所调度,每个Pilot本质上是一个Pod。
机器人列表
机器人列表展示了所有创建的机器人,支持对机器人进行上线/下线。上线的机器人可以正常运行,通过配置前端对话框响应与其交互的请求;下线的机器人则停止工作,不再响应请求。
机器人基础配置
对每个机器人进行基础模型和LLM技能的配置,让该机器人具备对应能力
基本信息
针对每一台机器人,可以设置其名称、描述等基本信息。基本信息有助于理解机器人的作用和状态,并且可以作为识别和搜索的条件。
模型设置
为该机器人选择一个基础模型进行服务,基础模型是机器人在进行意图识别、语言处理等任务时所依赖的基本AI模型。目前已经内置了核心模型。
LLM技能
为该机器人选择对应的LLM技能,比如开放知识问答等等,LLM是在基础模型上增加的技能包,可以提供更精细、更高级的语言理解和任务执行。
渠道
为机器人的对外沟通提供渠道,在“Channel”已经配置好,并且开启的渠道可以在这里进行勾选
保存和上线
当机器人都设置好后,可以进行发布和上线,上线后,可以通过通知渠道进行对话。
消息通道
为了满足使用者多渠道的使用需求,机器人支持设置与用户进行交互的通道,比如Web网站、企业微信、钉钉、公众号等通道配置,可以使机器人更好地为用户提供服务。OpsPilot内置了多种消息通道,让Pilot能够与用户进行交流,支持的消息通道包含:
企业微信应用
- 参数配置:需要选择类型填写配置参数,所有参数需在企业微信的后台管理中查询到。
- 1.在企业微信中创建应用
- 在网页中登录企业微信后台管理:https://work.weixin.qq.com/wework_admin
- 在应用管理中找到”自建“,创建新的应用
- 2.根据需求,自定义机器人的logo、命名、介绍,选择本企业微信中可见本应用的成员。
- 3.获取参数——agent id、secret
- AgentId即agent id,直接复制粘贴即可
- secret获取
- 点击查看后,在弹出的弹窗中点击发送
- 企业微信软件中收到该消息,在企业微信团队的聊天框中获取
- 4.参数获取——corp id
- 在”我的企业“中,找到企业ID。企业ID即corp id
- 5.参数获取——token、aes key
- 回到”应用管理-应用-自建-刚刚建立的应用“中
- 在该应用的详情页找到”功能- 设置API接收”即可生成token和aes Key
- URL一栏填入:https://ops-pilot.canway.net/opspilot/studio,实现机器人和企业微信应用的双向交流
- token=Token 、aes key=EncodingAESKey,点击随机生成保存即可。
钉钉
- 1.需要填写参数如下
- 2.创建应用以提供与机器人的交流接口
- 进入钉钉的开发者后台,网址:https://open-dev.dingtalk.com/
- 登陆后,进入“应用开发”页,选择创建“H5微应用”,填写基础信息
- 3.参数获取client id、client secret
创建完成后,在“凭证与基础信息”中,可获得Client ID(即client id)、Client Secret (即client secret)
- 4.参数enable eventbus
- 此参数一般情况下默认为false,即仅与大模型AI进行交流,不需要更改设置。
- 在有进一步需求的情况下设置为true。
- 你希望 接收钉钉的事件 并自动处理(如智能回复、自动审批)。
- 你的大模型应用 需要监听用户消息、审批流、考勤等行为 并基于此做出智能响应。
Web
可以通过嵌入WebChat组件,在网页中与Pilot进行交流
公众号
- 1.需要填写参数如下:appid、secret、token、aes key
- 2.登录服务号后台(企业公众号)
- 访问微信公众平台:https://mp.weixin.qq.com/,登录企业账号
- 若无服务号,根据企业自身信息进行填写注册后再操作
- 3.参数获取:appid、secret
- 找到”设置与开发“-“开发接口管理”-“基本配置”
- 开发者ID(AppID)即appid,开发者密码(AppSecret)即secret
- 4.参数获取:token、aes key
- 找到”账户开发信息“下方的”服务器配置“
- 未启用服务器配置——修改配置
- URL填入我们的OpsPilot网址:https://opspilot-dev.deadgay.cn/
- token自定义一串英文/数字
- 随机生成AESKEY
- 点击”启用“即完成配置
- 已启用配置:直接获取:令牌(Token)即token、消息加解密密钥 (EncodingAESKey)即aes key
机器人对话记录
对话记录里面记录了每个机器人与用户的对话记录,可以用于对话记录的审计等场景,点击详情可以查看每轮对话的细节。目前同一个渠道的同一个用户一天内的所有对话会聚合成一条记录。
技能
在OpsPilot里面,技能是指机器人的能力,比如对话、自动执行等,技能创建完成后,可以被机器人所使用。
技能列表
技能列表以卡片的形式展示用户有权限的技能,普通用户可以查看/操作自己所在组织的所有技能;超管可以查看/操作所有的技能。
技能创建/编辑
这个页面的功能主要是用于添加新的技能。用户可以输入相关信息:
名称:输入名称
分组:选择所属的分组,其他用户只有在这个分组下,才能查看到该技能
简介:输入详细介绍。
技能设置
基本信息
可以对技能的基本信息进行配置
基本信息:名称/分组/简介,可以进行修改
LLM模型:支持选择内置的LLM大模型,进行对话
LLM的温度参数:默认为0.7,用于控制文本生成的随机性和创造性;低温度(比如0.2)会生成更确定的结果,而高温度(比如0.9)则会增加文本的多样性和随机性。通过调节温度,用户可以根据需求平衡生成内容的准确性和创新性。
提示:可以输入相关的提示语,引导模型生成特定的回复应,通过提供上下文或问题以调节输出内容的方向和质量。
聊天增强
对于LLM技能,侧重于对话过程,所以可以在这里对对话的相关参数进行配置,以增强对话的准确度和体验。
对话历史:默认是10:,聊天历史数量指的是系用户与机器人之间互动的对话轮次或消息总数。这一数量可以帮助机器人理解上下文,并增强回复的相关性和连贯性。
RAG:RAG是一种将信息检索与生成模型结合的架构,先从知识库中检索相关信息,然后使用生成模型产生上下文相关的回答。
来源:开启后,在对话时可以显示引用的知识来源
知识库:支持选择同一分组下的知识库作为知识来源,并为知识库调整阈值,从而提高回答的准确性和可靠性。
技能测试
当基础信息和对话增强设置好后,可以通过与机器人对话的方式,测试一下效果。
知识库
知识管理模块提供了对知识库的管理,支持用户上传文件型知识、人工录入的知识、URL爬取的知识,由多个种类的知识聚合而成,并且利用各种算法提升知识索引的准确性。
知识库管理解决了以下问题
- 1、哪些知识组成了这个知识库:支持上传/爬取多种类型、多个领域的专业知识。
- 2、如何对知识使用怎么样的分块模式:内置
- 3、如何检索准确:使用混合检索+ReRank,让检索变得更加准确,混合搜索的时候,语义检索和文本检索的权重可以灵活分配
总的来说,在知识库这里对知识进行上传、管理和加工,进行精细化的配置,以供LLM技能使用。
知识库列表
知识库列表以卡片的形式展示用户有权限的知识库,普通用户可以查看/操作自己所在组织的所有知识库;超管可以查看/操作所有的知识库
知识库创建
名称:输入知识库名称
分组:选择该知识库所属的分组,其他用户只有在这个分组下,才能查看到该知识库
Embed模型:主要用于词汇和数据的向量化,以便计算机更好的理解,目前内置两个模型,可以根据实际情况进行切换使用(对于已经训练好的知识库,切换模型后将会重新训练)。
简介 :输入该知识库的详细介绍。
知识库编辑/删除
知识库可以进行内容的重新编辑,包括重新更新名称/分组/简介,其中可以切换Embed模型,切换后整个知识库将会根据新选择的Embed模型进行所有知识的重新训练,训练的进度可在知识库详情中查看。
知识库文档管理
OpsPilot能够管理知识,包括 文件知识
、手工录入
、网页知识
,并供知识库使用。
文档上传
新增知识的第一步是知识上传,包括三类,文本类的知识可以直接上传、网页知识需要填写对应URL、自定义文本需要手动录入
文本知识
在日常运维过程中,会产生多种类型的知识,他们一般会以文件类型存在,这也是OpsPilot知识库中最主要的私域知识来源,根据需求自行上传多个本地文件。
网页知识
- 互联网上有非常多有用的知识,例如RabbitMQ的官方文档、Redis的官方文档,这些软件会因为对应版本的不一样,具备不一样的特性,或者具备不一样的命令行参数,可以使用网页知识,对他们进行快速、持续的知识捕获。
- 深度:输入的网址内部有多个可以进一步跳转的网址,以此类推深入,选择需要跳转多少次。1次——只打开输入的网址,获取此页面内容;2次——获取输入网址的页面内容,并打开此网址内可跳转的链接,打开这些链接去获取这些页面的内容。以此类推。
自定义文本
运维脚本的代码段、零散的碎片知识,都适合用手工录入的方式形成知识,让OpsPilot能够对其进行使用
文档处理配置
新增知识的第二步是知识的预处理,对传入的知识进行分块处理,通过将知识进行分块,可以更有效地组织和存储数据,使得搜索引擎在查找相关信息时能够更快地定位目标数据,从而提高检索效率。
设置项包括分块解析、语义分块解析、OCR增强和Excel解析等多种算法,以提取和优化信息。设置完成,可以点击“查看块”,预览文档分块的情况,若不符合预期,则可以再次调整分块的算法。
1、分块解析
分块解析是将输入的文本或数据划分成较小的、易于处理的部分或“块”。块大小决定了每个分块所包含的文本量,默认每块是256个字符;块重叠是指在分块时,前一个块与下一个块之间的内容重叠部分,默认是0的,即相邻的两个分块之间不会有任何重叠部分。
2、语义分块解析
语义分块解析在分块解析的基础上,进一步考虑文本或数据的上下文和意义。通过分析句子、段落或数据块的语义关系,该算法可以更准确地识别出相关内容,从而确保信息的一致性和逻辑性。
3、OCR增强
OCR(Optical Character Recognition,光学字符识别)增强是指在图像或扫描文档中提取文本信息的过程。OCR增强不仅提高了文本识别的准确性,还可以结合其他处理技术,如图像预处理和后处理,以优化结果。
4、Excel解析
从Excel表格中提取和处理数据的算法。有两种方式:“Excel标题 + 行组合解析”提取Excel表格的标题(通常是第一行的列名),然后将后续的每一行数据与相应的标题进行组合。“全Excel内容解析”是指对整个Excel文档的所有内容进行提取和解析,而不仅仅限于标题和行组合。该方法会遍历每一个单元格,提取其中的所有数据,并根据需要重新组织或格式化。
文档分片和训练
新增知识的第三步是知识的分片和训练,知识上传完成后,点击“完成”即自动进入“上传-分块-训练”的阶段,可以在知识库的左下角查看每个文档的训练进度。
知识库测试
为了测试知识库分块和检索的效果,可以输入关键词进行检索,测试搜索到的结果。
测试时需要填写知识库相关配置,包括Embed模型(选择后,请在知识库的卡片页面进行编辑修改)、检索设置,调整完成后需要点击“应用配置”,该配置信息才会被保存,关于检索设置的解释说明如下:
文本检索:设置文本检索的权重。可以为知识库中的不同文本部分设置不同的权重,以影响检索结果的排序和相关性。分为两种模式:“匹配”模式用于查找包含特定关键词的文档,而不关心它们的顺序和相对位置。“精确匹配”模式则要求关键词按指定顺序相邻出现,适用于需要精确短语匹配的情况。
向量检索:设置向量检索的参数,包括检索权重、返回数量和候选数量,候选数量 是指在向量检索中经过初步筛选后,认为可能与查询相关的文档或项的总数。返回数量 则是最终展示给用户的与查询向量最相似的文档或项的数量。通过调整这些参数,可以控制向量检索的影响力、返回结果的数量以及候选结果的数量。
(两个同时开启,则表明使用混合模式进行检索。)
结果重排序:启用Rerank模型可以对检索到的结果进行再排序,在搜索结果初步生成后,通过特定的算法或规则对结果进行再次排序,以提升结果的相关性和用户满意度。
知识库设置
支持对知识库进行配置
- 基础配置:包括名称、简介等基本信息的修改
- 检索配置:检索配置与“知识库-测试”一致
供应商
在供应商功能块,可以对OpsPilot能够使用的相关模型进行管理和配置,目前已经内置常用模型,仅支持配置,不支持新增。
LLM模型
LLM模型用于配置模型的基础配置,如凭据,方便后续的“技能”所使用,OpsPilot内置以下LLM模型的支持:
DeepSeek | OpenAI |
---|---|
DeepSeek | GPT-1.3 |
DEEP-SEEK | GPT-3.5-Turbo-16K |
DeepSeek-R1:1.5b | GPT-4-32K |
GTP-4o |
LLM模型支持编辑和开关等操作:
配置URL:用户可以通过配置特定的API URL来接入供应商的LLM模型,这样应用程序能够与模型进行通信,从而发送请求和接收响应。
API密钥 :为了确保数据安全和访问控制,用户需要配置API密钥。这个密钥用于验证用户的身份,确保只有授权的用户能够访问和使用模型。
开启/关闭功能 :用户可以根据需要启用或禁用LLM模型,这样可以灵活使用相关模型。
Embed模型
Embed模型为知识提供向量化的能力,是知识库能够进行语义检索的支撑功能,OpsPilot内置以下Embed模型,内置的这些模块可以在“知识库“中进行使用。
- FastEmbed
- bge-small-zh-v1.5
- BCEmbedding
- bec-embedding-base_v1
ReRank模型
ReRank模型可以对检索出来的知识进行重排序,让大模型在使用RAG能力的时候,知识检索效果更好。OpsPilot内置以下ReRank模型,内置的这些模块可以在“知识库”中进行使用,用于知识库检索效果的优化。
- BCEReranker
- bce-reranker-base_v1
OCR模型
OCR(光学字符识别)模型是一种用于将图像中的文本信息转化为可编辑文本数据的技术,广泛应用于文档数字化和信息提取。主要用于“知识库-知识上传”时,识别知识时使用。OpsPilot内置以下模型
- PaddleOCR
- AzureOCR
API调用说明
技能API调用
API调用说明
提供技能的对外接口,用户可以调用接口实现技能的使用。
API调用示例
获取技能列表
请求参数
参数名称 | 是否必须 | 示例 |
---|---|---|
name | 否 | 技能1 |
page_size | 是 | 10 |
page | 是 | 1 |
返回数据
{
"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": []
}
]
}
}
字段说明如下:
result
:true
指示请求是否成功。code
:"20000"
状态码,表示请求成功。message
:"success"
请求结果的描述信息。data
: 数据对象,包含具体的返回数据。count
: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.7
RAG 分数阈值,决定哪些知识被纳入对话中。introduction
:"56"
记录的简介信息。team
:["8bb5627e-3a25-45b9-850b-62d570a9282b"]
团队的唯一标识 ID,用于关联团队。llm_model
:null
大语言模型的标识符,当前为空。knowledge_base
:[]
知识库的数组,当前为空,表示没有关联的知识内容。
技能测试
请求参数
Headers:
参数名称 | 是否必须 | 示例 |
---|---|---|
Content-Type | application/json | 是 |
Query:
参数名称 | 是否必须 | 示例 |
---|---|---|
name | 否 | 技能1 |
page_size | 是 | 10 |
page | 是 | 1 |
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,
"show_think": true, // 展示think内容
"tools": ["shell", "duckduckgo-search", "prometheus-search"] // 目前只支持这三种
}
字段说明:
user_message
:"你好"
用户消息,表示传递给大模型的信息。llm_model
:1
大模型ID,表示选择的大语言模型的标识符。skill_prompt
:"abc"
Prompt,用于引导大语言模型的提示信息。enable_rag
:true
布尔值,指示是否启用RAG(Retrieval-Augmented Generation)。enable_rag_knowledge_source
:true
布尔值,指示是否显示RAG知识来源。rag_score_threshold
:[{"knowledge_base": 1, "score": 0.7}]
RAG分数阈值,包含知识库ID和分数的数组。chat_history
:[{"event": "user", "text": "abc"}, {"event": "bot", "text": "ab"}]
对话历史,包含用户和机器人的聊天记录。conversation_window_size
:10
对话窗口大小,即可回顾的聊天记录条数。temperature
:0.7
大语言模型生成文本时的温度参数,控制输出的随机性。show_think
:true
布尔值,指示是否展示think内容,`false`
时不展示思考过程。tools
:["shell", "duckduckgo-search", "prometheus-search"]
工具的数组,目前支持shell, duckduckgo-search, prometheus-search。
返回数据
{
"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": []
}
]
}
}
字段说明
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
布尔值,指示是否启用 RAG(Retrieval-Augmented Generation)。enable_rag_knowledge_source
:false
布尔值,指示是否启用 RAG 知识来源。rag_score_threshold
:0.7
RAG 分数阈值,决定哪些知识会被纳入对话中。introduction
:"56"
记录的简介信息。team
:["8bb5627e-3a25-45b9-850b-62d570a9282b"]
团队的唯一标识 ID,用于关联团队。llm_model
:null
大语言模型的标识符,当前为空。knowledge_base
:[]
知识库的数组,当前为空,表示没有关联的知识内容。
技能设置保存
请求参数
路径参数:
参数名称 | 示例 | 备注 |
---|---|---|
id | 1 |
Headers:
参数名称 | 参数值 | 是否必须 |
---|---|---|
Content-Type | application/json | 是 |
Query:
参数名称 | 是否必须 | 示例 |
---|---|---|
name | 否 | 技能1 |
page_size | 是 | 10 |
page | 是 | 1 |
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.查询知识库
请求参数
参数名称 | 是否必须 | 示例 |
---|---|---|
name | 否 | 12 |
输出示例
{
"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
}
]
}
字段说明如下:
result
:`true`
请求是否成功,`true`
为成功。data
:`[...]`
数据条目的数组,包含具体的记录信息。id
:`1`
唯一标识符,表示该对象的 ID。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"`
团队的唯一标识 ID,用于关联团队。enable_vector_search
:`true`
布尔值,指示是否启用向量搜索。vector_search_weight
:`0.1`
向量搜索权重,取值0.0~1.0。enable_text_search
:`true`
布尔值,指示是否启用文本搜索。text_search_weight
:`0.9`
文本搜索权重,取值0.0~1.0。enable_rerank
:`false`
布尔值,指示是否启用重新排序。embed_model
:`2`
嵌入模型的标识符。rerank_model
:`1`
重新排序模型的标识符。
2. 查询知识库文章
请求参数
Query:
参数名称 | 是否必须 | 示例 | 备注 |
knowledge_base_id | 是 | 1 | 知识库ID |
name | 否 | aa | |
page | 是 | 1 | 当前页码 |
page_size | 是 | 1 | 每页条数 |
knowledge_source_type | 是 | file | 知识来源类型,file, web_page, manual |
train_status | 否 | 0 | 0:正在训练,1: 训练完成,2: 训练失败 |
返回数据
{
"result": true,
"data": {
"count": 11,
"items": [
{
"name": "文章1.doc",
"status": "Training",
"chunk_size": 11,
"created_at": "2021-12-12 12:12:12",
"created_by": "admin"
}
]
}
}
count
:`11`
数据条目数量。items
:`[...]`
数据条目的数组,包含具体的记录信息。name
:`"文章1.doc"`
文章名称。status
:`"Training"`
文章状态。chunk_size
:`11`
文章分块大小。created_at
:`"2021-12-12 12:12:12"`
文章创建时间。created_by
:`"admin"`
创建该文章的用户。
3. 文件上传
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
Content-Type | application/json | 是 |
Query:
参数名称 | 是否必须 | 示例 | 备注 |
knowledge_base_id | 是 | 1 | 知识库ID |
name | 否 | aa | |
page | 是 | 1 | 当前页码 |
page_size | 是 | 1 | 每页条数 |
source_type | 是 | file | 知识来源类型,file, web_page, manual |
Body:
{
"knowledge_base_id": 1,
"files": [] // 文件列表,以file的形式传参,多选
}
返回数据
{
"result": true,
"data": [1, 2, 3, 4] // 文件的ID列表
}
字段说明
knowledge_base_id
:1
知识库的唯一标识符,用于与具体知识库关联。files
:[]
文件列表,以file
的形式传参,可以多选上传。result
:`true`
请求是否成功。data
:`[1, 2, 3, 4]`
文件的ID列表。
4. 新增网页
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
Content-Type | application/json | 是 |
Query:
参数名称 | 是否必须 | 示例 | 备注 |
knowledge_base_id | 是 | 1 | 知识库ID |
name | 否 | aa | |
page | 是 | 1 | 当前页码 |
page_size | 是 | 1 | 每页条数 |
source_type | 是 | file | 知识来源类型,file, web_page, manual |
Body:
{
"knowledge_base_id": 1,
"name": "abcd",
"url": "http://wewewe.wewe",
"max_depth": 1
}
返回数据
{
"result": true,
"data": 1 // 网页知识库的ID
}
字段说明
knowledge_base_id
:1
知识库的唯一标识符,用于与具体知识库关联。name
:"abcd"
新增网页数据的名称。url
:"http://wewewe.wewe"
网页地址的 URL。max_depth
:1
网页爬取的最大深度,限制爬取范围。result
:`true`
请求是否成功。data
:`1`
新增网页的ID。
5. 新增自定义内容
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
Content-Type | application/json | 是 |
Query:
参数名称 | 是否必须 | 示例 | 备注 |
knowledge_base_id | 是 | 1 | 知识库ID |
name | 否 | aa | |
page | 是 | 1 | 当前页码 |
page_size | 是 | 1 | 每页条数 |
source_type | 是 | file | 知识来源类型,file, web_page, manual |
Body:
{
"knowledge_base_id": 1,
"name": "abcd",
"content": "abcd"
}
返回数据
{
"result": true,
"data": 1 // 自定义内容的ID
}
字段说明
knowledge_base_id
:1
知识库的唯一标识符,用于与具体知识库关联。name
:"abcd"
自定义内容的名称。content
:"abcd"
自定义添加的内容,文本记录。result
:`true`
请求是否成功。data
:`1`
自定义内容的ID。
6. 知识库文章批量训练
请求参数
Headers:
参数名称 | 参数值 | 是否必须 |
Content-Type | application/json | 是 |
Query:
参数名称 | 是否必须 | 示例 | 备注 |
knowledge_base_id | 是 | 1 | 知识库ID |
name | 否 | aa | |
page | 是 | 1 | 当前页码 |
page_size | 是 | 1 | 每页条数 |
source_type | 是 | file | 知识来源类型,file, web_page, manual |
Body:
{
"knowledge_document_ids": [
1,
2,
3
]
}
返回数据
{
"result": true
}
字段说明
knowledge_document_ids
:[1, 2, 3]
知识文档的 ID 列表,指定要训练的文档。result
:`true`
请求是否成功。
7. 知识库文章Testing
请求参数
Headers:
参数名称 | 参数值 | 是否必须 |
Content-Type | application/json | 是 |
Body:
{
"knowledge_base_id": 1,
"query": "",
"embed_model": 1, // 所选的模型
"enable_rerank": true, // 启用rerank
"rerank_model": 1, // 所选的rerank_model
"enable_text_search": true,
"text_search_weight": 0.9, // 文本权重
"enable_vector_search": true,
"vector_search_weight": 0.1, // 混合权重
"rag_k": 50, // 返回结果数量
"rag_num_candidates": 1000, //候选数量
"text_search_mode": "match" // match 模糊,match_phrase 完整匹配
}
返回数据
{
"result": true,
"data": [
{
"id": 1,
"name": "acb",
"knowledge_source_type": "file",
"created_by": "admin",
"created_at": "2020-12-12 12:21:12",
"content": "",
"score": 1000,
}
]
}
字段说明
knowledge_base_id
:1
知识库的唯一标识符,用于与具体知识库关联。query
:""
查询关键字。embed_model
:1
指定特定嵌入模型的 ID。enable_rerank
:true
是否启用重排序功能。rerank_model
:1
重排序启用时所选的模型 ID。enable_text_search
:true
是否启用文本搜索功能。text_search_weight
:0.9
文本搜索的权重。enable_vector_search
:true
是否启用向量搜索功能。vector_search_weight
:0.1
向量搜索的权重。rag_k
:50
返回结果的数量。rag_num_candidates
:1000
候选结果数量。text_search_mode
:"match"
文本搜索模式,match
表示模糊匹配,match_phrase
表示完整匹配。result
:`true`
请求是否成功。data
:`[...]`
数据条目的数组,包含具体的记录信息。id
:`1`
唯一标识符,表示该对象的 ID。name
:`"acb"`
文章名称。knowledge_source_type
:`"file"`
文章来源类型。created_by
:`"admin"`
创建该记录的用户。created_at
:`"2020-12-12 12:21:12"`
创建时间。content
:`""`
文章内容。score
:`1000`
文章评分。
8. 知识库文章块删除
请求参数
路径参数:
参数名称 | 示例 | 备注 |
id | 1 | 文档ID |
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
Content-Type | application/json | 是 |
Query:
参数名称 | 是否必须 | 示例 | 备注 |
search_text | 否 | 123 | 查询文本 |
Body:
{
"chunk_id": "35196cd0-bda7-49be-91f0-8b2983109685"
}
返回数据
{
"result": true
}
字段说明
chunk_id
:"35196cd0-bda7-49be-91f0-8b2983109685"
要删除的块的唯一标识符。result
:`true`
请求是否成功。
9. 知识库文章配置调整
请求参数
Headers:
参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
Content-Type | application/json | 是 |
Query:
参数名称 | 是否必须 | 示例 | 备注 |
knowledge_base_id | 是 | 1 | 知识库ID |
name | 否 | aa | |
page | 是 | 1 | 当前页码 |
page_size | 是 | 1 | 每页条数 |
source_type | 是 | file | 知识来源类型,file, web_page, manual |
Body:
{
"preview": false, // 是否预览,预览为true的情况下会文档分块返回
"knowledge_source_type": "file", // 本地文件:file, 网络链接: web_page, 自定义文本: manual
"knowledge_document_ids": [1, 2, 3], // 文章ID列表,文件上传时是多个,其它两个为单数字列表
"enable_general_parse": true, // 开启分块解析
"general_parse_chunk_size": 256, // 块大小
"general_parse_chunk_overlap": 32, // 分块重叠
"enable_semantic_chunk_parse": true,
"semantic_chunk_parse_embedding_model": 1,
"enable_ocr_parse": true,
"ocr_model": 1,
"enable_excel_parse": true,
"excel_header_row_parse": true,
"excel_full_content_parse": false,
"is_save_only": false // 是否仅保存
}
返回数据
{
"result": true,
"data": []
}
字段说明
preview
:false
是否预览,预览状态下文档会分块返回。knowledge_source_type
:"file"
知识源类型,可选值为:本地文件(file
)、网络链接(web_page
)、自定义文本(manual
)。knowledge_document_ids
:[1, 2, 3]
知识文档的 ID 列表,设置训练或配置的文档。enable_general_parse
:true
是否启用分块解析。general_parse_chunk_size
:256
块大小,定义每块的最大字符数。general_parse_chunk_overlap
:32
块重叠大小,定义块之间的重叠字符数。enable_semantic_chunk_parse
:true
是否启用语义分块解析。semantic_chunk_parse_embedding_model
:1
使用的语义嵌入模型 ID。enable_ocr_parse
:true
是否启用 OCR(光学字符识别)解析。ocr_model
:1
OCR 模型的 ID。enable_excel_parse
:true
是否启用 Excel 文件解析。excel_header_row_parse
:true
是否仅解析 Excel 文件的标题行。excel_full_content_parse
:false
是否解析 Excel 的完整内容。is_save_only
:false
是否仅保存配置,false
表示执行配置调整。result
:`true`
请求是否成功。data
:`[]`
返回的数据,当前为空。
设置
管理凭据
在此界面可以根据自身权限为不同角色设置不同的配额
我的凭据
显示我的总配额使用量。当配额不足时,可以联系管理员申请增加