RAG(检索增强生成)落地:基于阿里云opensearch视线智能问答机器人与企业知识库

文章目录

  • 一、环境准备
  • 二、阿里云opensearch准备
    • 1、产品文档
    • 2、准备我们的数据
    • 3、上传文件
  • 三、对接
    • 1、对接文本问答

一、环境准备

# 准备python环境
conda create -n opensearch
conda activate opensearch# 安装必要的包
pip install alibabacloud_tea_util
pip install alibabacloud_opensearch_util
pip install alibabacloud_credentials

二、阿里云opensearch准备

1、产品文档

新手指引:三步搭建智能问答机器人

需要购买LLM智能问答版的实例。
准备好accesskey、secret、API Key

2、准备我们的数据

在这里插入图片描述

3、上传文件

在这里插入图片描述

三、对接

1、对接文本问答

# -*- coding: utf-8 -*-import time
from typing import Dict, Anyfrom Tea.core import TeaCore
from Tea.exceptions import TeaException, UnretryableException
from Tea.model import TeaModel
from Tea.request import TeaRequest
from alibabacloud_credentials import models as credential_models
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_opensearch_util.opensearch_util import OpensearchUtil
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClientclass Config(TeaModel):"""Config用于配置环境相关参数信息."""def __init__(self,endpoint: str = None,protocol: str = None,type: str = None,security_token: str = None,access_key_id: str = None,access_key_secret: str = None,user_agent: str = "",):self.endpoint = endpointself.protocol = protocolself.type = typeself.security_token = security_tokenself.access_key_id = access_key_idself.access_key_secret = access_key_secretself.user_agent = user_agentclass Client:"""OpensearchClient用于 opensearch Client 请求 参数组装及发送请求."""_endpoint: str = None_protocol: str = None_user_agent: str = None_credential: CredentialClient = Nonedef __init__(self,config: Config,):if UtilClient.is_unset(config):raise TeaException({'name': 'ParameterMissing','message': "'config' can not be unset"})if UtilClient.empty(config.type):config.type = 'access_key'credential_config = credential_models.Config(access_key_id=config.access_key_id,type=config.type,access_key_secret=config.access_key_secret,security_token=config.security_token)self._credential = CredentialClient(credential_config)self._endpoint = config.endpointself._protocol = config.protocolself._user_agent = config.user_agentdef _request(self,method: str,pathname: str,query: Dict[str, Any],headers: Dict[str, str],body: Any,runtime: util_models.RuntimeOptions,) -> Dict[str, Any]:"""执行 TeaRequest .:param request: TeaRequest:param runtime: util_models.RuntimeOptions:return: Dict[str, Any]"""runtime.validate()_runtime = {'timeouted': 'retry','readTimeout': runtime.read_timeout,'connectTimeout': runtime.connect_timeout,'httpProxy': runtime.http_proxy,'httpsProxy': runtime.https_proxy,'noProxy': runtime.no_proxy,'maxIdleConns': runtime.max_idle_conns,'retry': {'retryable': runtime.autoretry,'maxAttempts': UtilClient.default_number(runtime.max_attempts, 3)},'backoff': {'policy': UtilClient.default_string(runtime.backoff_policy, 'no'),'period': UtilClient.default_number(runtime.backoff_period, 1)},'ignoreSSL': runtime.ignore_ssl}_last_request = None_last_exception = None_now = time.time()_retry_times = 0while TeaCore.allow_retry(_runtime.get('retry'), _retry_times, _now):if _retry_times > 0:_backoff_time = TeaCore.get_backoff_time(_runtime.get('backoff'), _retry_times)if _backoff_time > 0:TeaCore.sleep(_backoff_time)_retry_times = _retry_times + 1try:_request = TeaRequest()accesskey_id = self._credential.get_access_key_id()access_key_secret = self._credential.get_access_key_secret()security_token = self._credential.get_security_token()_request.protocol = UtilClient.default_string(self._protocol, 'HTTP')_request.method = method_request.pathname = pathname_request.headers = TeaCore.merge({'user-agent': UtilClient.get_user_agent(self._user_agent),'Content-Type': 'application/json','Date': OpensearchUtil.get_date(),'host': UtilClient.default_string(self._endpoint, f'opensearch-cn-hangzhou.aliyuncs.com'),'X-Opensearch-Nonce': UtilClient.get_nonce()}, headers)if not UtilClient.is_unset(query):_request.query = UtilClient.stringify_map_value(query)if not UtilClient.is_unset(body):req_body = UtilClient.to_jsonstring(body)_request.headers['Content-MD5'] = OpensearchUtil.get_content_md5(req_body)_request.body = req_bodyif not UtilClient.is_unset(security_token):_request.headers["X-Opensearch-Security-Token"] = security_token_request.headers['Authorization'] = OpensearchUtil.get_signature(_request, accesskey_id,access_key_secret)_last_request = _request_response = TeaCore.do_action(_request, _runtime)obj_str = UtilClient.read_as_string(_response.body)if UtilClient.is_4xx(_response.status_code) or UtilClient.is_5xx(_response.status_code):raise TeaException({'message': _response.status_message,'data': obj_str,'code': _response.status_code})obj = UtilClient.parse_json(obj_str)res = UtilClient.assert_as_map(obj)return {'body': res,'headers': _response.headers}except TeaException as e:if TeaCore.is_retryable(e):_last_exception = econtinueraise eraise UnretryableException(_last_request, _last_exception)
# -*- coding: utf-8 -*-import time, os
from typing import Dict, Anyfrom Tea.exceptions import TeaException
from Tea.request import TeaRequest
from alibabacloud_tea_util import models as util_models
from BaseRequest import Config, Clientclass LLMSearch:def __init__(self, config: Config):self.Clients = Client(config=config)self.runtime = util_models.RuntimeOptions(connect_timeout=10000,read_timeout=90000,autoretry=False,ignore_ssl=False,max_idle_conns=50,max_attempts=3)self.header = {}def searchDoc(self, app_name: str, body: Dict, query_params: dict = {}) -> Dict[str, Any]:try:response = self.Clients._request(method="POST",pathname=f'/v3/openapi/apps/{app_name}/actions/knowledge-search',query=query_params, headers=self.header, body=body, runtime=self.runtime)return responseexcept TeaException as e:print(e)if __name__ == "__main__":# 配置统一的请求入口和  需要去掉http://endpoint = "xxxxx-wm3.opensearch-cn-shanghai.aliyuncs.com"# 支持 protocol 配置 HTTPS/HTTPendpoint_protocol = "HTTP"# 用户识别信息# 从环境变量读取配置的AccessKey ID和AccessKey Secret,# 运行代码示例前必须先配置环境变量,参考文档上面“配置环境变量”步骤#access_key_id = os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_ID")#access_key_secret = os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_SECRET")access_key_id = 'xxxxx'access_key_secret = 'xxxxx'# 支持 type 配置 sts/access_key 鉴权. 其中 type 默认为 access_key 鉴权. 使用 sts 可配置 RAM-STS 鉴权.# 备选参数为:  sts 或者 access_keyauth_type = "access_key"# 如果使用 RAM-STS 鉴权, 请配置 security_token, 可使用 阿里云 AssumeRole 获取 相关 STS 鉴权结构.security_token = "OS-xxxxx"# 配置请求使用的通用信息.# type和security_token 参数如果不是子账号,需要省略Configs = Config(endpoint=endpoint, access_key_id=access_key_id, access_key_secret=access_key_secret,security_token=security_token, type=auth_type, protocol=endpoint_protocol)# 创建 opensearch 实例# 请将<应用名称>替换为您创建的智能问答版实例名称ops = LLMSearch(Configs)app_name = "test"# --------------- 文档搜索 ---------------docQuery = {"question": {"text": "袜子怎么卖的",  # 用户问题#"session" : "对话的session,设置了之后,会有多轮对话的功能","type": "TEXT"}}res1 = ops.searchDoc(app_name=app_name, body=docQuery)r2 = dict(res1.get('body')).get('result').get('data')[0].get('answer')res = r2print(res)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/17520.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt事件机制

目录 一、事件基本概念 1.1 事件基本概念和产生 1.2 事件类 1.3 事件发送 二、事件的捕获处理 2.1 事件处理流程 2.2事件分发&#xff08;event&#xff09;处捕获事件 2.3 事件过滤器 2.4 重新实现事件处理函数 三、 QEventLoop 3.1事件循环基本概念 3.2 QEventL…

20250212:sigmastar系列2-获取UUID进行授权

距离上一篇Sigmastar文章已经过去3年了。最近基于Sigmastar-330 开发人脸识别SDK,需要进行授权管理,所以需要获取UUID作为激活、授权的凭证。 本文记录2个事情:授权逻辑 + sigmastar获取UUID 1:授权流程 step1:算法SDK在设备上电,算法初始化环节,校验本地是否有加密存…

STM32F407通过FSMC扩展外部SRAM和NAND FLASH

1 扩展外部SRAM 1.1 地址情况 FSMC控制器的存储区分为4个区(Bank)&#xff0c;每个区256MB。其中&#xff0c;Bank1可以用于连接SRAM、NOR FLASH、PSRAM&#xff0c;还可以连接TFT LCD。Bank1的地址范围是0x60000000&#xff5e;0x6FFFFFFF。Bank1又分为4个子区&#xff0c;每…

MySQL Workbench工具 导出导入数据库

第一步 数据库导出 1、打开workbench->连接数据库->Server->Data Export 2、选择要导出的数据库&#xff0c;Export Self-Contained File ->更改导出位置和数据库名->Start Export 3、提示“sql has finished”&#xff0c;没有error表示导出成功 第二步 数据…

我用AI做数据分析之四种堆叠聚合模型的比较

我用AI做数据分析之四种堆叠聚合模型的比较 这里AI数据分析不仅仅是指AI生成代码的能力&#xff0c;我想是测试AI数据分析方面的四个能力&#xff0c;理解人类指令的能力、撰写代码的能力、执行代码的能力和解释结果的能力。如果这四个能力都达到了相当的水准&#xff0c;才可…

广告深度学习计算:阿里妈妈大模型服务框架HighService

一、背景 HighService(High-Performance Pythonic AI Service) 是在支持阿里妈妈业务过程中&#xff0c;不断提炼抽象出的高性能Python AI服务框架&#xff0c;支持视频、图文、LLM等多种模型&#xff0c;能够显著加快模型的推理速度&#xff0c;提高集群的资源利用效率。随着S…

深度学习框架探秘|TensorFlow vs PyTorch:AI 框架的巅峰对决

在深度学习框架中&#xff0c;TensorFlow 和 PyTorch 无疑是两大明星框架。前面两篇文章我们分别介绍了 TensorFlow&#xff08;点击查看&#xff09; 和 PyTorch&#xff08;点击查看&#xff09;。它们引领着 AI 开发的潮流&#xff0c;吸引着无数开发者投身其中。但这两大框…

企语企业管理系iFair(F23.2_a0)在Debian操作系统中的安装

起因&#xff1a;在安装了F24.8版本后&#xff0c;发现生产用环境和测试、开发用环境还是分开的好。 旧版的用来实验、测试&#xff0c;新版的一步一步小心的配置、使用是比较稳妥的操作。因此&#xff0c;决定在KVM虚拟机上搭建一个F23.2版本的企语系统。 一、 存在的问题 而…

Redis 数据类型 Hash 哈希

在 Redis 中&#xff0c;哈希类型是指值本⾝⼜是⼀个键值对结构&#xff0c;形如 key "key"&#xff0c;value { { field1, value1 }, ..., {fieldN, valueN } }&#xff0c;Redis String 和 Hash 类型⼆者的关系可以⽤下图来表⽰。 Hash 数据类型的特点 键值对集合…

Elasticsearch:15 年来致力于索引一切,找到重要内容

作者&#xff1a;来自 Elastic Shay Banon 及 Philipp Krenn Elasticsearch 刚刚 15 岁了&#xff01;回顾过去 15 年的索引和搜索&#xff0c;并展望未来 15 年的相关内容。 Elasticsearch 刚刚成立 15 周年。一切始于 2010 年 2 月的一篇公告博客文章&#xff08;带有标志性的…

EF Core中实现值对象

目录 值对象优点 值对象的需求 值类型的实现 值类型GEO的实现 值类型MultilingualString的实现 案例&#xff1a;构建表达式树&#xff0c;简化值对象的比较 值对象优点 把有紧密关系的属性打包为一个类型把领域知识放到类的定义中 class shangjia {long id;string nam…

ETHEREAL:使用压缩Tsetlin机器实现能效高吞吐量推理

论文标题 英文标题&#xff1a;ETHEREAL: Energy-efficient and High-throughput Inference using Compressed Tsetlin Machine 中文标题&#xff1a;ETHEREAL&#xff1a;使用压缩Tsetlin机器实现能效高吞吐量推理 作者信息 Shengyu Duan, Newcastle University, Newcastle…

PyCharm 批量替换

选择替换的内容 1. 打开全局替换窗口 有两种方式可以打开全局替换窗口&#xff1a; 快捷键方式&#xff1a; 在 Windows 或 Linux 系统下&#xff0c;按下 Ctrl Shift R。在 Mac 系统下&#xff0c;按下 Command Shift R。菜单操作方式&#xff1a;点击菜单栏中的 Edit&…

mars3d接入到uniapp的时候ios上所有地图的瓦片都无法加载解决方案

用的是【Mars3d】官网的uniapp的仓库&#xff0c;安卓没有问题&#xff0c;但是ios的不行 相关链接 mars3d-uni-app: uni-app技术栈下的Mars3D项目模板 解决方案&#xff1a;感觉所有图片请求全被拦截了 uniapp的ios内核不允许跨域&#xff0c;需要先把瓦片下载后转base64&…

SpringBoot速成(十)更新用户信息P11-P12

1.代码展示&#xff1a; 1.RequestBody 是 Spring 框架中用于处理 HTTP 请求体的注解&#xff0c;通常用于控制器&#xff08;Controller&#xff09;层的方法参数中。当客户端发送一个包含 JSON 或 XML 数据的 HTTP 请求时&#xff0c;可以使用 RequestBody 将这些数据绑定到一…

3.3.3 VO-O语法- 语法算子(二)

循环遍历 由于VO语言是面向数据集的&#xff0c;其所有隐含的语义中都已经带有了遍历并计算的数据逻辑。因此&#xff0c;VO语言只提供了一种支持循环语法的算子--Loop算子。 Loop算子 Loop算子是一个容器算子&#xff0c;其可以实现对其内部子流程的循环迭代运行。但Loop算…

java后端开发day13--面向对象综合练习

&#xff08;以下内容全部来自上述课程&#xff09; 注意&#xff1a;先有javabean&#xff0c;才能创建对象。 1.文字版格斗游戏 格斗游戏&#xff0c;每个游戏角色的姓名&#xff0c;血量&#xff0c;都不相同&#xff0c;在选定人物的时候&#xff08;new对象的时候&#…

RocketMQ和Kafka如何实现顺序写入和顺序消费?

0 前言 先说明kafka&#xff0c;顺序写入和消费是Kafka的重要特性&#xff0c;但需要正确的配置和使用方式才能保证。本文需要解释清楚Kafka如何通过分区来实现顺序性&#xff0c;以及生产者和消费者应该如何配合。   首先&#xff0c;顺序写入。Kafka的消息是按分区追加写入…

DeepSeek系统崩溃 | 极验服务如何为爆火应用筑起安全防线?

引言 极验服务让您的产品站在风口之时&#xff0c;不必担心爆红是灾难的开始&#xff0c;而是期待其成为驱动持续创新的全新起点。 01现象级狂欢背后&#xff0c;你的业务安全防线抗得住吗&#xff1f; “近期DeepSeek线上服务受到大规模恶意攻击&#xff0c;注册可能繁忙&am…

【故障处理】- RMAN-06593: platform name ‘Linux x86 64-bitElapsed: 00:00:00.00‘

【故障处理】- RMAN-06593: platform name Linux x86 64-bitElapsed: 00:00:00.00 一、概述二、报错原因三、解决方法 一、概述 使用xtts迁移&#xff0c;在目标端进行恢复时&#xff0c;遇到RMAN-06593: platform name Linux x86 64-bitElapsed: 00:00:00.00’报错。 二、报错…