1.配置Embedding模型
在同事Hysun的Text2SQL RAG开源项目中,提供了一些非常实用的配置方法,方便大家使用,本文就以此开源项目为例。
我这里Embedding模型暂时选择的是 SiliconFlow 平台提供的 BAAI/bge-large-zh-v1.5 这个模型:
1 2 3 4 5 6 7 8 9 10 11 | --使用 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_credential => 'ALFRED_SILICON_FLOW' ); END ; / |
起初我直接把API Key写到了p_credential中,发现不行,但是换成自定义的ALFRED_SILICON_FLOW
后,通过dbms_vector.create_credential导入时,起初以为直接传JSON格式的参数,结果是不允许的。
另外,注意这里p_conf_id
的名字,以后要用到,开始我没意识到,咨询同事后才知晓这个对应关系。后来同事为了大家更好理解,还修改了帮助文档,明确做了提示。
2.特殊语法传参JSON格式
翻阅官方文档,找到这种特殊的语法,专门用于传入JSON格式。
1 2 3 4 5 6 7 8 9 10 11 | --特殊的语法,传入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实际替换即可。
配置好之后,可以通过这张表查询到:
1 | select * from CUSTOM_SELECT_AI_EMBEDDING_CONF; |
3.测试Embedding有效
使用提供的测试用例来测试Embedding有效性:
1 2 3 4 5 | --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 1https://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 2 3 4 5 6 7 8 9 10 11 12 13 14 | --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。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | ----- Create service provider,deepseek BEGIN CUSTOM_SELECT_AI.CREATE_PROVIDER( p_provider => 'OpenAI' , 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 ; / |
创建好之后可以查询到:
1 2 3 | --创建好的PROVIDER和PROFILE可以查询表: select * from TPCH.CUSTOM_SELECT_AI_PROVIDERS; select * from TPCH.CUSTOM_SELECT_AI_PROFILES; |
配置错误或不再需要,可以这样删除掉:
1 2 3 4 5 6 7 8 9 10 11 12 13 | --删除不再需要的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功能:
1 2 3 4 5 6 | --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
就需要放开对应数据库用户对具体或所有外部的访问:
1 2 3 4 5 6 7 8 | 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功能:
1 2 3 4 5 6 | --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模型内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!