OpenWebUI 是一个综合媒体平台,具有一套 AI 工具:OpenAI、Ollama、Automatic1111、ComfyUI、Whisper API、自定义模型训练、基于 Langchain 的 RAG 和 ChromaDB、混合 BM25/web 搜索等。
虽然所有这些都已经存在一段时间了,并且有文档记录,并且可以通过 Python 编程知识实现,但 OpenWebUI 提供了一个独特的机会,即使没有丰富的编码经验也可以构建迷人而有用的聊天机器人。
在本文中,我们将分享创建技术支持聊天机器人的历程,该聊天机器人旨在通过回答用户问题来协助我们的一线团队(并最终成为我们团队的一部分)。
租用具有即时部署功能的 GPU 服务器或具有专业级 NVIDIA Tesla A100 / H100 80Gb或 A5000 / A4000 卡的自定义配置的服务器。还提供带有游戏 RTX4090 卡的 GPU 服务器。
我们使用 Material for MkDocs 构建了用户文档。这将产生一个包含 Markdown 格式的 .md 文件的目录结构。我们还部署了 OpenWebUI 和 Ollama 设置,并加载了 llama3-8b-instruct 模型。
项目目标:
我们最初的尝试是简单地以原始 Markdown 格式加载现有文档,并使用 llama3 模型而不进行任何修改。结果,说实话,令人失望:
首先:我们的 Markdown 文件包含各种元素,例如图像标签、脚注、代码块、粗体和斜体格式、内部和外部链接、图标,甚至按钮的“ ** ”结构。所有这些额外的“噪音”在将文档分成块进行处理时都会产生问题。
第二:OpenWebUI 默认使用 sentence-transformers/all-MiniLM-L6-v2 模型来表示 384 维向量空间中的句子和段落(这对于聚类和语义搜索等 RAG 任务至关重要),该模型主要针对英语进行训练。我们希望我们的机器人最终也能支持其他语言。
第三:虽然 llama3 是一个指导模型,但它仍然可以被引导到非主题讨论中,而不是专注于回答用户查询。70b 模型可能更合适,但它需要具有 40GB 视频内存的 GPU,而 llama3-8b 可以在只有 8GB 的 GPU 上运行。
虽然第三个问题可以通过创建自定义模型(OpenAI 术语中的代理)来解决,但前两个问题需要更重要的解决方法。以下是我们目前想到的方法。
首先,我们将文档转换为适合加载到我们的 RAG(检索增强生成)系统的格式。我们创建了一个名为 ai_text_generator 的强大 bash 脚本来自动执行此过程。
该脚本遍历所有文档目录,并使用 sed、awk 和 perl 中的正则表达式删除和替换 RAG 不需要的 Markdown 标记。最后,它在每个文档末尾添加指向https://hostkey.com/documentation上托管的原始文档的链接。
此脚本精心准备了您的文档,以便与 OpenWebUI 中的 RAG 系统一起使用。以下是其操作的分步摘要:
运行脚本后, ai_data目录将包含一组可加载到 OpenWebUI 的 RAG 系统的文件。
接下来,我们需要向 OpenWebUI 添加一个新模型,以便使用我们的文档向量数据库和 Ollama LLM。此模型应支持更随意的“你”(ты)语气,而不仅仅是英语。我们计划在未来增加对土耳其语等其他语言的支持。
首先,我们转到管理面板 - 设置 - 文档。在嵌入模型字段中,我们将选择sentence-transformers/all-MiniLM-L12-v2 。我们已经测试了此列表(https://www.sbert.net/docs/sentence_transformer/pretrained_models.html)中推荐的所有模型,发现这个模型最适合。
我们将点击嵌入模型字段旁边的下载图标来下载并安装它。
我们将立即设置 RAG 参数:
• Top K = 10:这意味着系统在生成响应时将考虑最相关的前 10 个文档。
• 块大小 = 1024:文档将被分解为 1024 个标记的块进行处理。
• 块重叠 = 100:连续块之间将有 100 个令牌重叠。
之后,您可以前往工作区 - 文档部分并上传我们的文档。最好给它一个特定的集合标签(在我们的例子中是 hostkey_en),以便以后更轻松地连接到模型或 API 请求。
接下来,我们将为聊天机器人创建一个自定义模型。为此,我们将返回工作区 - 模型并单击加号图标。
我们将为我们的聊天机器人命名并选择基础模型(在我们的例子中是 llama3-latest)。
然后,我们将定义系统提示。这将告诉聊天机器人如何看待自己和如何表现。它概述了它的角色、局限性以及我们期望的结果。
这是我们为技术支持聊天机器人设计的系统提示:
You are HOSTKEY an IT Support Assistant Bot, focused on providing users with IT support based on the content from knowledge base. Stay in character and maintain your focus on IT support, avoiding unrelated activities such as creative writing or engaging in non-IT discussions.
If you cannot find relevant information in the knowledge base or if the user asks non-related questions that are not part of the knowledge base, do not attempt to answer and inform the user that you are unable to assist and print text "Visit https://hostkey.com/documentation for more information" at the end.
Provide short step-by-step instructions and external links
Provide a link to relevant doc page about user question started with 'See more information here:'Add text "Visit https://hostkey.com/documentation for more information" at the end.
Example of answer: " User: How can I cancel my server?
Bot:
You can cancel your server at any time. To do this, you need to access the Invapi control panel and follow these steps:
- Go to the "Billing" tab in the specific server management menu.
- Click the [Cancel service] button.
- Describe the reason for the cancellation and select its type.
- Click the [Confirm termination] button.
Please note that for immediate cancellation, we will not refund the hours of actual server usage, including the time to provision the server itself, order software, and process the cancellation request (up to 12 hours). The unused balance will be returned to your credit balance. Withdrawal of funds from the credit balance will be made in accordance with our refund policy.
You can cancel the service cancellation request in the Billing tab using the [Revoke] button.
Additionally, if you need to cancel a service that includes an OS/software license or has a customized/non-standard configuration, please contact us via a ticketing system for manual refund processing.
See more information here: https://hostkey.com/documentation/billing/services_cancellation/ "
接下来,我们将连接必要的文档集合。在知识部分,我们将单击选择文档按钮并根据其标签选择所需的集合。
租用具有即时部署功能的 GPU 服务器或具有专业级 NVIDIA Tesla A100 / H100 80Gb或 A5000 / A4000 卡的自定义配置的服务器。还提供带有游戏 RTX4090 卡的 GPU 服务器。
我们还需要配置“高级参数”选项卡下隐藏的一些其他参数。单击“显示”将显示这些设置。我们将“温度”设置为 0.3,将“上下文长度”设置为 4089。
最后,我们单击“保存并更新”来创建我们的自定义技术支持聊天机器人模型。
就这样!我们的聊天机器人已准备好工作并处理用户请求。它礼貌、耐心,并且全天候可用。
以下是一些需要牢记的重要提示:
现在我们已经测试了聊天机器人,下一步就是将其集成到我们公司现有的聊天系统中。OpenWebUI 提供了一个 API,可以作为 Ollama 的代理,添加其自己的独特功能。但是,文档仍然缺乏,这使得集成有点困难。
通过检查代码和提交历史,我们获得了一些关于如何构建 API 请求的见解,但它还没有完全按预期工作。我们设法调用了自定义模型,但没有 RAG 功能。
我们热切期待开发人员在即将发布的版本中承诺的功能,包括 RAG、网络搜索以及详细的示例和说明。
测试过程还揭示了我们的文档中存在一些不一致和冗余。这为我们提供了一个机会,让我们既能提高聊天机器人的性能,又能提高我们文档的整体清晰度和准确性。
租用具有即时部署功能的 GPU 服务器或具有专业级 NVIDIA Tesla A100 / H100 80Gb或 A5000 / A4000 卡的自定义配置的服务器。还提供带有游戏 RTX4090 卡的 GPU 服务器。