一聚教程网:一个值得你收藏的教程网站

热门教程

Oracle AI应用的LLM模型典型配置做法实用指南

时间:2026-08-27 10:56:02 编辑:袖梨 来源:一聚教程网

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“Oracle AI应用的LLM模型典型配置做法”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。

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

(链接已移除) 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模型典型设置的文章就介绍到这了,更多相关Oracle LLM模型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多兼容脚本之家!

您可能感兴趣的文章:
  • 采用ef6新建oracle数据库的实体模型遇到的问题及解决方案

热门栏目