最近在做一些基于Oracle的一些AI应用测试工作,AI肯定离不开配置LLM相关,虽然是简单配置类,但实际还是遇到一些卡点,记录下来供今后参考。

  • 1.配置Embedding模型
  • 2.特殊语法传参JSON格式
  • 3.测试Embedding有效
  • 4.修改MAX_STRING_SIZE
  • 5.配置为DeepSeek的LLM
  • 6.测试Chat和Showsql有效

1.配置Embedding模型

在同事Hysun的Text2SQL RAG开源项目中,提供了一些非常实用的配置方法,方便大家使用,本文就以此开源项目为例。

我这里Embedding模型暂时选择的是 SiliconFlow 平台提供的 BAAI/bge-large-zh-v1.5 这个模型:

--使用 SiliconFlow Embedding:
BEGIN
CUSTOM_SELECT_AI.CREATE_EMBEDDING_CONF(
p_conf_id => 'EMBEDDING',
p_provider => 'OpenAI',
p_model => 'BAAI/bge-large-zh-v1.5',
p_endpoint => 'https://api.siliconflow.cn/v1/embeddings',
p_credential => 'ALFRED_SILICON_FLOW'
);
END;
/

起初我直接把API Key写到了p_credential中,发现不行,但是换成自定义的ALFRED_SILICON_FLOW后,通过dbms_vector.create_credential导入时,起初以为直接传JSON格式的参数,结果是不允许的。

另外,注意这里p_conf_id的名字,以后要用到,开始我没意识到,咨询同事后才知晓这个对应关系。后来同事为了大家更好理解,还修改了帮助文档,明确做了提示。

2.特殊语法传参JSON格式

翻阅官方文档,找到这种特殊的语法,专门用于传入JSON格式。

--特殊的语法,传入JSON格式方法
declare
jo json_object_t;
begin
jo := json_object_t();
jo.put('access_token', 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
dbms_vector.create_credential(
credential_name => 'ALFRED_SILICON_FLOW',
params => json(jo.to_string));
end;
/

API Key已脱敏,按照你的Key实际替换即可。

配置好之后,可以通过这张表查询到:

select * from CUSTOM_SELECT_AI_EMBEDDING_CONF;

3.测试Embedding有效

使用提供的测试用例来测试Embedding有效性:

--EMBEDDING接口 - 文本转向量
select CUSTOM_SELECT_AI.EMBEDDING(
p_text => '将文本转成向量',
p_embedding_conf => 'EMBEDDING'
);

注意这个p_embedding_conf需要和之前创建时的p_conf_id对应,后面使用都有这个对应关系,需要特别注意下。

测试返回报错:

ORA-06502: PL/SQL:值或转换错误 :  字符串缓冲区太小
ORA-06512: 在 line 1 https://docs.oracle.com/error-help/db/ora-06502/06502. 00000 - "PL/SQL: value or conversion error%s"
*Cause: An arithmetic, numeric, string, conversion, or constraint error
occurred. For example, this error occurs if you attempt to
assign the value NULL to a variable declared NOT NULL, or if you
attempt to assign an integer greater than 99 to a variable
declared NUMBER(2).
*Action: To resolve the issue, change the data, the way the data is
manipulated, or the data variable declaration.
*Params: 1) error_info
occurred.

4.修改MAX_STRING_SIZE

上面的报错很明显,文档中也有提到需要设置MAX_STRING_SIZE为EXTENDED才可以。

修改的参考步骤(生产环境请慎重评估可行性):

--1.查看参数当前值
SHOW PARAMETER MAX_STRING_SIZE; --2.设置MAX_STRING_SIZE=EXTENDED
ALTER SYSTEM SET MAX_STRING_SIZE=EXTENDED SCOPE=SPFILE; --3.关闭数据库
SHUTDOWN IMMEDIATE; --4.启动upgrade模式,执行脚本
STARTUP UPGRADE;
@$ORACLE_HOME/rdbms/admin/utl32k.sql --5.重启数据库
SHUTDOWN IMMEDIATE;
STARTUP; --6.查询MAX_STRING_SIZE参数已修改
SHOW PARAMETER MAX_STRING_SIZE;

再次运行Embedding测试用例,成功返回结果。

5.配置为DeepSeek的LLM

主要用到两个CUSTOM_SELECT_AI.CREATE_PROVIDER、CUSTOM_SELECT_AI.CREATE_PROFILE。

----- Create service provider,deepseek
BEGIN
CUSTOM_SELECT_AI.CREATE_PROVIDER(
p_provider => 'OpenAI',
p_endpoint => 'https://api.deepseek.com/chat/completions',
p_auth => 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
);
END;
/ ----- Create profile
BEGIN
CUSTOM_SELECT_AI.CREATE_PROFILE(
p_profile_name =>'HKE_DEMO',
p_description => 'SelectAI DEMO for HKE',
p_attributes => '{
"provider": "OpenAI",
"model" : "deepseek-chat",
"object_list": [{"owner": "TPCH", "name": "HKE_PROD_DEFECT"},
{"owner": "TPCH", "name": "HKE_PROD_OUT_YIELD_QTY"}
]
}'
);
END;
/

创建好之后可以查询到:

--创建好的PROVIDER和PROFILE可以查询表:
select * from TPCH.CUSTOM_SELECT_AI_PROVIDERS;
select * from TPCH.CUSTOM_SELECT_AI_PROFILES;

配置错误或不再需要,可以这样删除掉:

--删除不再需要的PROVIDER和PROFILE:
BEGIN
CUSTOM_SELECT_AI.DROP_PROVIDER(
p_provider => 'OpenAI'
);
END;
/ BEGIN
CUSTOM_SELECT_AI.DROP_PROFILE(
p_profile_name =>'HKE_DEMO'
);
END;
/

6.测试Chat和Showsql有效

按照开源项目文档中的说明,测试Chat和Showsql功能:

--CHAT接口 - 直接与 LLM 聊天
select CUSTOM_SELECT_AI.CHAT(
p_profile_name => 'HKE_DEMO',
p_user_text => '你是谁?',
p_system_text => '你是一个积极的、充满正能量的人工智能助手。'
);

注意:这里Chat配置好LLM应该就可以正常返回,如果报错ORA-29273,如下图所示:

  • 4-sys.utl_http.png

就需要放开对应数据库用户对具体或所有外部的访问:

BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => '*', -- 或者指定具体的域名,如 'api.example.com'
ace => xs$ace_type(privilege_list => xs$name_list('connect'),
principal_name => 'TPCH',
principal_type => xs_acl.ptype_db));
END;
/

继续测试Showsql功能:

--SHOWSQL接口 - 自然语言生成SQL
select CUSTOM_SELECT_AI.SHOWSQL(
p_profile_name => 'HKE_DEMO',
p_embedding_conf => 'EMBEDDING',
p_user_text => '查询符合条件的各YIELD小等级占比(即YIELD_QTY之和/OUT_QTY之和),条件为:公司名称为COMPANY1,工厂名称为FACTORYNAME1,产品名称为PRODUCT1。占比用百分比表示并排序,用中文别名返回。'
);

SHOWSQL需要按Demo要求导入成功表数据并向量化才OK。这里的p_embedding_conf要注意和之前配置的Embedding名字一样。

Oracle AI应用的LLM模型典型配置的更多相关文章

  1. 快来玩AI画图!StableDiffusion模型搭建与使用入门~

    前言 最近AI很火,先是AI画图,然后就ChatGPT,后者我已经用了一段时间了,用来写作文挺不错的,但OpenAI屏蔽了中国IP,加上用户太多啥的,用起来没那么爽,但没办法全球只此一家,只能捏着鼻子 ...

  2. Oracle数据库11g基于rehl6.5的配置与安装

    REDHAT6.5安装oracle11.2.4 ORACLE11G R2官档网址: http://docs.oracle.com/cd/E11882_01/install.112/e24326/toc ...

  3. Oracle 客户端安装 + pl/sql工具安装配置

    Oracle 客户端安装 +  pl/sql工具安装配置 下载oracle客户端,并在本地安装. 11g下载地址为: http://www.oracle.com/technetwork/databas ...

  4. oracle instantclient basic +pl/sql 安装和配置

    oracle instantclient basic +pl/sql 安装和配置 大家都知道,用PL/SQL连接Oracle,是需要安装Oracle客户端软件的,oracle客户端有点大,比较耗资源. ...

  5. JVM典型配置

    堆大小设置: JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存 限制.32位系统下,一般限制在1.5G~2G:64为 ...

  6. 基于端口的VLAN典型配置指导

    本文为转发,简单明了,我喜欢 VLAN典型配置全过程如下: 组网图 图1-1 基于端口的VLAN组网示意图 应用要求 如图1-1所示,Switch A和Switch B分别连接了不同部门使用的Host ...

  7. JVM调优总结(七)-典型配置举例1

    以下配置主要针对分代垃圾回收算法而言. 堆大小设置 年轻代的设置很关键 JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理 ...

  8. 7.oracle学习门户系列七---网络管理和配置

    oracle学习门户系列七 网络管理和配置 们学习了模式和用户.包含模式定义以及模式的作用. 这篇我么来看下ORACLE数据库中的网络管理和配置.只是这篇好像和上篇没有继承啊.这怎么看? Ok,事实上 ...

  9. java虚拟机学习-JVM调优总结-典型配置举例(10)

    以下配置主要针对分代垃圾回收算法而言. 堆大小设置 年轻代的设置很关键 JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理 ...

  10. Linux平台 Oracle 12cR2 RAC安装Part2:GI配置

    Linux平台 Oracle 12cR2 RAC安装Part2:GI配置 三.GI(Grid Infrastructure)安装 3.1 解压GI的安装包 3.2 安装配置Xmanager软件 3.3 ...

随机推荐

  1. 网络编程懒人入门(十三):一泡尿的时间,快速搞懂TCP和UDP的区别

    本文引用了作者Fundebug的"一文搞懂TCP与UDP的区别"一文的内容,感谢无私分享. 1.引言 网络协议是每个搞网络通信应用开发(比如IM.推送.网关等等)的程序员都必须要掌 ...

  2. 有关主席树的一些 trick

    主席树做题记录. 主席树,即可持久化权值线段树. P3248 [HNOI2016] 树 难爆了这题.题目中会多次把模板树的某个子树放到大树上的某个节点下,我们把这一整个子树看作一个大节点,把模板树.大 ...

  3. Django使用问题记录

    1.python3下出现问题(首先安装pymysql与mysqlclient):django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3 ...

  4. Docker 多平台打包错误

    1. Multi-platform build is not supported for the docker driver. 问题 因为 Docker 默认使用的 builder 不支持多架构构建镜 ...

  5. IoC究竟shift什么?——IoC的基础分析

    IoC全称Inversion of Control,直译为控制反转.这是一种设计理念,并非技术. 在明白控制反转之前,应该知道"反转"反的是什么. 被反转的正转 我们从生活中的做饭 ...

  6. springboot-权限控制shiro

    1. 场景描述 (1)权限控制是IT项目特别是企业项目,绕不开的重要模块,接下来结合springboot介绍下权限控制框架shiro. (2)springboot集成shiro的东西有点多,一篇博客完 ...

  7. 经典算法的Java实现

    1.快速排序描述 1.每一轮排序选择一个基准点(pivot)进行分区 1.让小于基准点的元素进入一个分区,大于基准点的元素进入另一个分区 2.当分区完成时,基准点元素的位置就是其最终位置 2.在子分区 ...

  8. Nacos、Apollo、SpringCloud Config微服务配置中心对比

    1为什么需要配置中心 配置实时生效: 传统的静态配置方式要想修改某个配置只能修改之后重新发布应用,要实现动态性,可以选择使用数据库,通过定时轮询访问数据库来感知配置的变化.轮询频率低感知配置变化的延时 ...

  9. Solon Cloud Gateway 开发:导引

    Solon Cloud Gateway 是 Solon Cloud 体系提供的分布式网关实现(轻量级实现). 分布式网关的特点(相对于本地网关): 提供服务路由能力 提供各种拦截支持 1.分布式网关推 ...

  10. nvme磁盘故障注入方法

    本文分享自天翼云开发者社区<nvme磁盘故障注入方法>,作者:曹****飞 在存储系统中,磁盘的故障是很可能出现的问题.存储软件的设计需要对故障进行处理,提高系统的健壮性.然而磁盘的故障是 ...