Oracle AI應(yīng)用的LLM模型典型配置方法
1.配置Embedding模型
在同事Hysun的Text2SQL RAG開(kāi)源項(xiàng)目中,提供了一些非常實(shí)用的配置方法,方便大家使用,本文就以此開(kāi)源項(xiàng)目為例。
我這里Embedding模型暫時(shí)選擇的是 SiliconFlow 平臺(tái)提供的 BAAI/bge-large-zh-v1.5 這個(gè)模型:
--使用 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寫(xiě)到了p_credential中,發(fā)現(xiàn)不行,但是換成自定義的ALFRED_SILICON_FLOW
后,通過(guò)dbms_vector.create_credential導(dǎo)入時(shí),起初以為直接傳JSON格式的參數(shù),結(jié)果是不允許的。
另外,注意這里p_conf_id
的名字,以后要用到,開(kāi)始我沒(méi)意識(shí)到,咨詢(xún)同事后才知曉這個(gè)對(duì)應(yīng)關(guān)系。后來(lái)同事為了大家更好理解,還修改了幫助文檔,明確做了提示。
2.特殊語(yǔ)法傳參JSON格式
翻閱官方文檔,找到這種特殊的語(yǔ)法,專(zhuān)門(mén)用于傳入JSON格式。
--特殊的語(yǔ)法,傳入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實(shí)際替換即可。
配置好之后,可以通過(guò)這張表查詢(xún)到:
select * from CUSTOM_SELECT_AI_EMBEDDING_CONF;
3.測(cè)試Embedding有效
使用提供的測(cè)試用例來(lái)測(cè)試Embedding有效性:
--EMBEDDING接口 - 文本轉(zhuǎn)向量 select CUSTOM_SELECT_AI.EMBEDDING( p_text => '將文本轉(zhuǎn)成向量', p_embedding_conf => 'EMBEDDING' );
注意這個(gè)p_embedding_conf
需要和之前創(chuàng)建時(shí)的p_conf_id
對(duì)應(yīng),后面使用都有這個(gè)對(duì)應(yīng)關(guān)系,需要特別注意下。
測(cè)試返回報(bào)錯(cuò):
ORA-06502: PL/SQL:值或轉(zhuǎn)換錯(cuò)誤 : 字符串緩沖區(qū)太小
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
上面的報(bào)錯(cuò)很明顯,文檔中也有提到需要設(shè)置MAX_STRING_SIZE為EXTENDED才可以。
修改的參考步驟(生產(chǎn)環(huán)境請(qǐng)慎重評(píng)估可行性):
--1.查看參數(shù)當(dāng)前值 SHOW PARAMETER MAX_STRING_SIZE; --2.設(shè)置MAX_STRING_SIZE=EXTENDED ALTER SYSTEM SET MAX_STRING_SIZE=EXTENDED SCOPE=SPFILE; --3.關(guān)閉數(shù)據(jù)庫(kù) SHUTDOWN IMMEDIATE; --4.啟動(dòng)upgrade模式,執(zhí)行腳本 STARTUP UPGRADE; @$ORACLE_HOME/rdbms/admin/utl32k.sql --5.重啟數(shù)據(jù)庫(kù) SHUTDOWN IMMEDIATE; STARTUP; --6.查詢(xún)MAX_STRING_SIZE參數(shù)已修改 SHOW PARAMETER MAX_STRING_SIZE;
再次運(yùn)行Embedding測(cè)試用例,成功返回結(jié)果。
5.配置為DeepSeek的LLM
主要用到兩個(gè)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; /
創(chuàng)建好之后可以查詢(xún)到:
--創(chuàng)建好的PROVIDER和PROFILE可以查詢(xún)表: select * from TPCH.CUSTOM_SELECT_AI_PROVIDERS; select * from TPCH.CUSTOM_SELECT_AI_PROFILES;
配置錯(cuò)誤或不再需要,可以這樣刪除掉:
--刪除不再需要的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.測(cè)試Chat和Showsql有效
按照開(kāi)源項(xiàng)目文檔中的說(shuō)明,測(cè)試Chat和Showsql功能:
--CHAT接口 - 直接與 LLM 聊天 select CUSTOM_SELECT_AI.CHAT( p_profile_name => 'HKE_DEMO', p_user_text => '你是誰(shuí)?', p_system_text => '你是一個(gè)積極的、充滿(mǎn)正能量的人工智能助手。' );
注意:這里Chat配置好LLM應(yīng)該就可以正常返回,如果報(bào)錯(cuò)ORA-29273,如下圖所示:
- 4-sys.utl_http.png
就需要放開(kāi)對(duì)應(yīng)數(shù)據(jù)庫(kù)用戶(hù)對(duì)具體或所有外部的訪(fǎng)問(wèn):
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; /
繼續(xù)測(cè)試Showsql功能:
--SHOWSQL接口 - 自然語(yǔ)言生成SQL select CUSTOM_SELECT_AI.SHOWSQL( p_profile_name => 'HKE_DEMO', p_embedding_conf => 'EMBEDDING', p_user_text => '查詢(xún)符合條件的各YIELD小等級(jí)占比(即YIELD_QTY之和/OUT_QTY之和),條件為:公司名稱(chēng)為COMPANY1,工廠(chǎng)名稱(chēng)為FACTORYNAME1,產(chǎn)品名稱(chēng)為PRODUCT1。占比用百分比表示并排序,用中文別名返回。' );
SHOWSQL需要按Demo要求導(dǎo)入成功表數(shù)據(jù)并向量化才OK。這里的p_embedding_conf
要注意和之前配置的Embedding名字一樣。
到此這篇關(guān)于Oracle AI應(yīng)用的LLM模型典型配置的文章就介紹到這了,更多相關(guān)Oracle LLM模型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Oracle數(shù)據(jù)庫(kù)如何將DATE類(lèi)型字段格式轉(zhuǎn)換為YYYY/MM/DD
在Oracle數(shù)據(jù)庫(kù)中,盡管DATE類(lèi)型本身并不攜帶任何特定的格式信息,但通過(guò)TO_CHAR函數(shù)我們可以方便地將DATE類(lèi)型的數(shù)據(jù)轉(zhuǎn)換為我們所需要的格式,下面給大家介紹Oracle數(shù)據(jù)庫(kù)如何將DATE類(lèi)型字段格式轉(zhuǎn)換為YYYY/MM/DD樣式,感興趣的朋友跟隨小編一起看看吧2024-04-04Oracle數(shù)據(jù)庫(kù)的備份與恢復(fù)
Oracle數(shù)據(jù)庫(kù)的備份與恢復(fù)...2007-03-03利用windows任務(wù)計(jì)劃實(shí)現(xiàn)oracle的定期備份
我們搞數(shù)據(jù)庫(kù)管理系統(tǒng)的經(jīng)常會(huì)遇到數(shù)據(jù)庫(kù)定期自動(dòng)備份的問(wèn)題,有各種各樣的方法,這里介紹一種利用windows任務(wù)計(jì)劃實(shí)現(xiàn)oracle定期備份的方法供大家分享。2009-08-08pl/sql導(dǎo)入、導(dǎo)出csv等格式文件詳細(xì)步驟
在 PL/SQL 開(kāi)發(fā)中數(shù)據(jù)的導(dǎo)入和導(dǎo)出是常見(jiàn)的操作,下面這篇文章主要給大家介紹了關(guān)于pl/sql導(dǎo)入、導(dǎo)出csv等格式文件的詳細(xì)步驟,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04oracle ORA-00988 missing or invalid password 錯(cuò)誤
在設(shè)置數(shù)據(jù)庫(kù)實(shí)例的密碼時(shí),注意不要以數(shù)字開(kāi)頭,否則您將會(huì)遇到 ORA-00988 missing or invalid password (口令缺失或無(wú)效) 錯(cuò)誤2015-01-01oracle Dbeaver存儲(chǔ)過(guò)程語(yǔ)法詳解
這篇文章主要介紹了oracle Dbeaver存儲(chǔ)過(guò)程語(yǔ)法詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10oracle查詢(xún)一天前、幾天前、幾小時(shí)前、一小時(shí)前的數(shù)據(jù)以及恢復(fù)誤刪的數(shù)據(jù)
這幾天工作經(jīng)常需要查詢(xún)某天之前的數(shù)據(jù),整理了下相關(guān)的查詢(xún),下面這篇文章主要給大家介紹了關(guān)于oracle查詢(xún)一天前、幾天前、幾小時(shí)前、一小時(shí)前的數(shù)據(jù)以及恢復(fù)誤刪的數(shù)據(jù),需要的朋友可以參考下2024-03-03Oracle對(duì)兩個(gè)數(shù)據(jù)表交集的查詢(xún)
Oracle對(duì)兩個(gè)數(shù)據(jù)表交集的查詢(xún)...2007-03-03