对接开源大模型应用开发平台最佳实践

news/2024/9/18 20:28:13/ 标签: 人工智能, opensearch, llm, 阿里云

本文以Dify为例介绍如何使用OpenSearch LLM智能问答版对接大模型应用开发平台构建RAG系统。

背景

随着AIGC技术日新月异的发展,LLM应用也在持续迭代。基于LLM、Agent框架、工作流编排能力等,可以搭建不同场景下丰富的应用服务。其中,检索增强生成(RAG)系统已经成为企业知识库、智能客服、电商导购等场景的核心环节。

OpenSearch LLM智能问答版内置数据解析与处理、切片、向量化、文本&向量检索、多模态LLM等模型和功能。本文将介绍如何使用OpenSearch LLM智能问答版对接大模型应用开发平台构建RAG系统。

大模型应用平台

在大模型行业中有越来越多的应用框架、开发平台,比如阿里云百炼、Dify等。开发者可以基于这些框架、平台快速搭建业务应用,RAG系统也是其中的常见环节。因此,大模型应用开发平台通常会内置RAG系统。

阿里云百炼:

Dify:

然而,RAG系统的准确性与搜索效果息息相关,应用开发平台经常会面临以下问题:

1、易用性差:对知识库文档格式、数量、大小等有各种各样的限制,开发者需要进行复杂的数据预处理,或无法满足实际应用的需求。

2、专业性差:大多是黑盒系统,开发者难以针对核心链路进行定制化调优和扩展,导致整体应用效果差。

3、企业级能力弱:不支持企业级权限隔离、数据快速导入/更新等能力,难以落地到实际生产应用中。

针对上述问题,可以使用OpenSearch LLM智能问答版作为RAG系统,应用到工作流程中,快速搭建企业级应用。目前OpenSearch已支持对接百炼中的模型,从而丰富LLM选型,实现定制级RAG效果,具体使用方式可参考:​​LLM管理​​。

此外,OpenSearch支持丰富的调用、鉴权机制,灵活对接百炼、Dify等应用开发平台。

下面将以Dify为例,介绍对接开源应用平台的最佳实践。

整体架构

开发者预先将知识库导入OpenSearch,并用工作流处理后的对话请求访问OpenSearch中的RAG系统。OpenSearch会基于知识库、LLM,返回对话结果、参考链接、参考图片。开发者再根据业务需求,通过工作流处理结果,并最终输出给终端用户。

在OpenSearch LLM智能问答版中搭建RAG系统

1.搭建RAG系统

OpenSearch LLM智能问答版是一站式RAG产品,可分钟级搭建RAG系统,并可以在控制台进行可视化模型选择、Prompt定制、效果调优等。详情请参见​​通过控制台实现企业知识库问答​​。

2.创建并获取API Key

创建并获取公网API域名、API Key并妥善保存,详情请参见​​管理API Key​​。

在应用平台中搭建业务应用

Step 1:在大模型应用平台中创建工作流

基础RAG工作流包含四个环节:

开始:获取用户输入的对话内容。

OpenSearch LLM智能问答版(HTTP请求):将对话内容输入OpenSearch,并基于RAG系统返回输出结果。

解析输出结果(代码执行):解析结果中的对话内容。

返回答案:向用户返回最终结果。

Step 2:使用HTTP请求访问OpenSearch RAG系统

鉴权API-Key:

  • 鉴权类型:API-Key
  • API鉴权类型:Bearer
  • API key:OpenSearch LLM智能问答版中获取的API Key。

URL地址:OpenSearch LLM智能问答版中获取的公网API域名 + OpenSearch接口地址(参考URL:v3/openapi/apps/[app_name]/actions/knowledge-search)

BODY:选择JSON格式,具体的内容和参数可参考:​​SearchKnowledge-问答文档查询​​。

Step 3:解析输出结果

OpenSearch的接口返回结果为JSON格式,包含对话结果、参考链接、参考图片等。开发者可以使用代码执行解析输出结果,按需获取返回结果。

只获取输出结果的参考代码:

def main(body: str) -> str:import jsondat = json.loads(body)return {'result': [ans['answer'] for ans in dat['result']['data']][0]}

效果预览

在此基础上,可以配合搭建其他工作流,构建丰富的业务应用流。

例如,以下是一个基于OpenSearch、Qwen模型构建的智能对话助手。

首先,会判断用户对话的意图并进行分类,分为售后问题、产品使用问题和闲聊。

针对售后问题、产品使用问题,分别访问OpenSearch中的相应知识库,使用RAG系统进行回复。

对于闲聊类问题,访问Qwen模型与用户进行闲聊对话,解决通用类问题。

除使用一站式RAG产品搭建工作流外,还可使用阿里云AI搜索开发工作台,通过工作台提供的文档解析、向量化、搜索、重排等原子化能力,自定义dify工具,从而快速定制优化RAG系统的各个环节。

  • 了解OpenSearch LLM智能问答版详情,可参考:​​https://www.aliyun.com/activity/bigdata/opensearch/llmsearch​​
  • 如有RAG系统相关问题,欢迎加入​​OpenSearch LLM智能问答版钉钉支持群​​,了解更多技术细节和使用详情。
  • 钉钉群号:34895000837

http://www.ppmy.cn/news/1526356.html

相关文章

mac新手入门(快捷键)

系统常用快捷键 基本操作 Command-Z 撤销Command-X 剪切  Command-C 拷贝(Copy) Option Shift Command V 纯文本拷贝 Command-V 粘贴  Command-A 全选(All)Command-S 保存(Save) Command-F 查找&#xff0…

Vue3 Day4-计算、监视属性

4.1 computed计算属性 简写形式和全写形式 <template><div>person.firstName&#xff1a;<input type"text" v-model"person.firstName" /><br />person.lastName&#xff1a;<input type"text" v-model"pers…

鸿蒙开发(NEXT/API 12)【网络连接管理】 网络篇

简介 网络连接管理提供管理网络一些基础能力&#xff0c;包括WiFi/蜂窝/Ethernet等多网络连接优先级管理、网络质量评估、订阅默认/指定网络连接状态变化、查询网络连接信息、DNS解析等功能。 说明 为了保证应用的运行效率&#xff0c;大部分API调用都是异步的&#xff0c;对…

windows检查端口占用并关闭应用

要在Windows CMD中找到占用8888端口的应用并关闭该应用&#xff0c;你可以按照以下步骤操作&#xff1a; 打开命令提示符&#xff08;CMD&#xff09;。你可以通过在搜索栏输入 cmd 或使用 Win R 快捷键&#xff0c;然后输入 cmd 并回车来打开。 查找占用8888端口的进程。在C…

探索Go语言中的随机数生成、矩阵运算与数独验证

1. Go中的随机数生成 在许多编程任务中&#xff0c;随机数的生成是不可或缺的。Go语言通过 math/rand 包提供了伪随机数生成方式。伪随机数由种子(seed)决定&#xff0c;如果种子相同&#xff0c;生成的数列也会相同。为了确保每次程序运行时产生不同的随机数&#xff0c;我们…

2-92 基于matlab的KPCA的TE过程的故障监测

基于matlab的KPCA的TE过程的故障监测&#xff0c;利用核主元分析法(KPCA)来进行故障检测的思想,将输入空间中复杂的非线性问题转化为特征空间中的线性问题&#xff0c;计算步骤&#xff1a;&#xff08;1&#xff09; 选择监控变量&#xff0c;收集正常工况下的各变量的样本&am…

堆的概念与实现

目录 一、堆的介绍 1.堆的概念 2.堆的性质&#xff1a; 3.堆的结构 二、堆的实现 1.堆的定义 2.接口函数 三、堆的实现 1.堆的初始化 2.堆的销毁 3.获取堆顶数据 4.判断堆是否为空 5. 堆的插入 向上调整算法&#xff08;重点&#xff09; 向下调整算法(重点) 6.删除…

Redisson分布式锁实现及原理详解

随着技术快速发展&#xff0c;数据规模增大&#xff0c;分布式系统越来越普及&#xff0c;一个应用往往会部署在多台机器上&#xff08;多节点&#xff09;&#xff0c;在有些场景中&#xff0c;为了保证数据不重复&#xff0c;要求在同一时刻&#xff0c;同一任务只在一个节点…

【YashanDB知识库】YAS-02025 no free space in virtual memory pool

本文转自YashanDB官网&#xff0c;具体内容请见YAS-02025 no free space in virtual memory pool 【标题】YAS-02025 no free space in virtual memory pool 【问题分类】业务SQL执行 【关键字】YAS-02025 【问题描述】在崖山环境查询数据提示报错 YAS-02025 no free space…

非凸科技钻石赞助第四届Rust China Conf 2024

9月7-8日&#xff0c;由Rust中文社区主办的第四届Rust China Conf 2024在上海成功举办。非凸科技作为钻石赞助商&#xff0c;全力协助大会顺利开展&#xff0c;共同为中国Rustaceans带来一场精彩的技术交流盛宴。会上&#xff0c;非凸科技首席运营官郑媛姿作为赞助商代表发言&a…

2024年华为9月4日秋招笔试真题题解

2024年华为0904秋招笔试真题 二叉树消消乐好友推荐系统维修工力扣上类似的题--K站中转内最便宜的航班 二叉树消消乐 题目描述 给定原始二叉树和参照二叉树(输入的二叉树均为满二叉树&#xff0c;二叉树节点的值范围为[1,1000]&#xff0c;二叉树的深度不超过1000)&#xff0c…

macOS系统Homebrew工具安装及使用

1.打开Homebrew — The Missing Package Manager for macOS (or Linux) 2.复制安装命令到终端执行 复制 执行 3. 开始自动安装过程 4.安装成功 5.使用brew安装wget工具

基于双向RRT算法的三维空间最优路线规划matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 单向RRT算法 4.2 双向RRT算法 5.完整程序 1.程序功能描述 基于双向RRT&#xff08;Randomly Exploring Random Trees, 随机探索随机树&#xff09;算法的三维空间最优路径规划是一种解…

【AI绘画】Midjourney进阶:景别详解

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AI绘画 | Midjourney 文章目录 &#x1f4af;前言&#x1f4af;为什么要学习景别景别的作用景别在Midjourney中的应用实例 &#x1f4af;大景别&#x1f4af;远景特点提示词书写技巧测试 &#x1f4af;全景特点提示词书写技巧测试…

3177. 求出最长好子序列 II

3177. 求出最长好子序列 II 题目链接&#xff1a;3177. 求出最长好子序列 II 代码如下&#xff1a; class Solution { public:int maximumLength(vector<int>& nums, int k){unordered_map<int, vector<int>> fd;vector<int> mx(k 2);for (int…

C++实现unordered_map和unordered_set

1. 结构示意 2. 模版参数控制 我们知道&#xff0c;unordered_set和unordered_map与set和map是一样的&#xff0c;前者不是真正的键值对&#xff0c;它的value值和key值相同&#xff1b;后者是真正的键值对。STL非常注重代码的复用&#xff0c;它们在底层使用了同一棵红黑树模…

Python Pandas轻松处理大规模类别数据

大家好&#xff0c;在数据分析中&#xff0c;类别数据&#xff08;Categorical Data&#xff09;是一种常见的数据类型。它表示有限数量的离散值&#xff0c;例如产品类别、性别、国家等。与数值数据不同&#xff0c;类别数据并不代表连续的数值&#xff0c;而是离散的分类信息…

在Flask中实现日志记录

在Flask中实现日志记录是一个关键的功能&#xff0c;它有助于监控应用的运行情况、调试问题以及记录重要的运行信息。以下是在Flask中实现日志记录的详细步骤和最佳实践&#xff1a; 一、使用Python内置的logging模块 Flask应用通常会使用Python的logging模块来进行日志记录。…

4.接口测试基础(Jmter工具/场景二:一个项目由多个人负责接口测试,我只负责其中三个模块,协同)

一、场景二&#xff1a;一个项目由多个人负责接口测试&#xff0c;我只负责其中三个模块&#xff0c;协同 1.什么是测试片段&#xff1f; 1&#xff09;就相当于只是项目的一部分用例&#xff0c;不能单独运行&#xff0c;必须要和控制器&#xff08;include,模块&#xff09;一…

Neo4j入门案例:西游记

创建一个基于《西游记》中“孙悟空”的黑神话版本的知识图谱。这个图谱将会包括《西游记》中的一些主要角色、地点、事件以及它们之间的关系。我们将创建至少10个节点和20个关系&#xff0c;并提供相应的Cypher语句。 数据模型定义 实体类型&#xff08;节点&#xff09; 角色…