最近在做一些基于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. 思维导图学《Java性能权威指南》

    目录 性能测试 Java 性能调优工具箱 JIT 编译器 垃圾收集 原生内存 线程与同步的性能 Java API 技巧 GitHub LeetCode 项目 目录 YANO SPACE 2021 计划 ...

  2. 将 EasySQLite 从 .NET 8 升级到 .NET 9

    前言 EasySQLite是一个.NET 8操作SQLite入门到实战的详细教程,主要是对学校班级,学生信息进行管理维护.今天咱们的主要内容是将EasySQLite从.NET 8升级到.NET 9. ...

  3. Docker安装Redis并设置密码

    1. 镜像下载 docker pull redis 2. 创建目录 mkdir -p /etc/redis/redis.conf mkdir -p /data/redis 3. 启动容器 docker ...

  4. CDS标准视图:催款冻结描述 I_DunningBlockingReasonText

    视图名称:催款冻结描述 I_DunningBlockingReasonText 视图类型:基础视图 视图代码: 点击查看代码 @EndUserText.label: 'Dunning Blocking ...

  5. 《CUDA编程:基础与实践》读书笔记(3):同步、协作组、原子函数

    1. 单指令多线程模式 从硬件上看,一个GPU被分为若干个SM.线程块在执行时将被分配到还没完全占满的SM中,一个线程块不会被分配到不同的SM中,一个SM可以有一个或多个线程块.不同线程块之间可以并发 ...

  6. cpa-审计

    1.审计概述 2.审计计划 3.审计证据 4.审计抽样方法 5.信息技术对审计的影响 6.审计工作底稿 7.风险评估 8.风险应对 9.销售与收款循环的审计 10.采购与付款循环的审计 11.生产与存 ...

  7. w3cschool-HBase官方文档-2数据模型

    HBase数据模型 2018-03-03 15:20 更新 HBase数据模型 在 HBase 中,数据模型同样是由表组成的,各个表中又包含数据行和列,在这些表中存储了 HBase 数据.在本节中,我 ...

  8. PDCA使用指南详解(史上最强)

    PDCA循环,一个老话题了,大家都知道要这么做,但在平时的生活和工作当中,你是否真的都这样做呢? 当你发现你面对的困难重重,寸步难行时,是否反思过是因为自己一开始的方法就不正确? 本文包涵了PDCA循 ...

  9. 多方安全计算(6):MPC中场梳理

    学习&转载文章:多方安全计算(6):MPC中场梳理 前言 诚为读者所知,数据出域的限制约束与数据流通的普遍需求共同催生了数据安全计算的需求,近一两年业界又统将能够做到多方数据可用不可见的技术归 ...

  10. Java怎样实现将数据导出为Word文档

    文章首发于我的博客:Java怎样实现将数据导出为Word文档 - Liu Zijian's Blog 我们在开发一些系统的时候,例如OA系统,经常能遇到将审批单数据导出为word和excel文档的需求 ...