Oracle AI應(yīng)用的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中,發(fā)現(xiàn)不行,但是換成自定義的ALFRED_SILICON_FLOW
后,通過dbms_vector.create_credential導(dǎo)入時,起初以為直接傳JSON格式的參數(shù),結(jié)果是不允許的。
另外,注意這里p_conf_id
的名字,以后要用到,開始我沒意識到,咨詢同事后才知曉這個對應(yīng)關(guān)系。后來同事為了大家更好理解,還修改了幫助文檔,明確做了提示。
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接口 - 文本轉(zhuǎn)向量 select CUSTOM_SELECT_AI.EMBEDDING( p_text => '將文本轉(zhuǎn)成向量', p_embedding_conf => 'EMBEDDING' );
注意這個p_embedding_conf
需要和之前創(chuàng)建時的p_conf_id
對應(yīng),后面使用都有這個對應(yīng)關(guān)系,需要特別注意下。
測試返回報錯:
ORA-06502: PL/SQL:值或轉(zhuǎn)換錯誤 : 字符串緩沖區(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
上面的報錯很明顯,文檔中也有提到需要設(shè)置MAX_STRING_SIZE為EXTENDED才可以。
修改的參考步驟(生產(chǎn)環(huán)境請慎重評估可行性):
--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ù)庫 SHUTDOWN IMMEDIATE; --4.啟動upgrade模式,執(zhí)行腳本 STARTUP UPGRADE; @$ORACLE_HOME/rdbms/admin/utl32k.sql --5.重啟數(shù)據(jù)庫 SHUTDOWN IMMEDIATE; STARTUP; --6.查詢MAX_STRING_SIZE參數(shù)已修改 SHOW PARAMETER MAX_STRING_SIZE;
再次運行Embedding測試用例,成功返回結(jié)果。
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; /
創(chuàng)建好之后可以查詢到:
--創(chuàng)建好的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應(yīng)該就可以正常返回,如果報錯ORA-29273,如下圖所示:
- 4-sys.utl_http.png
就需要放開對應(yīng)數(shù)據(jù)庫用戶對具體或所有外部的訪問:
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ù)測試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,產(chǎn)品名稱為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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Oracle數(shù)據(jù)庫如何將DATE類型字段格式轉(zhuǎn)換為YYYY/MM/DD
在Oracle數(shù)據(jù)庫中,盡管DATE類型本身并不攜帶任何特定的格式信息,但通過TO_CHAR函數(shù)我們可以方便地將DATE類型的數(shù)據(jù)轉(zhuǎn)換為我們所需要的格式,下面給大家介紹Oracle數(shù)據(jù)庫如何將DATE類型字段格式轉(zhuǎn)換為YYYY/MM/DD樣式,感興趣的朋友跟隨小編一起看看吧2024-04-04利用windows任務(wù)計劃實現(xiàn)oracle的定期備份
我們搞數(shù)據(jù)庫管理系統(tǒng)的經(jīng)常會遇到數(shù)據(jù)庫定期自動備份的問題,有各種各樣的方法,這里介紹一種利用windows任務(wù)計劃實現(xiàn)oracle定期備份的方法供大家分享。2009-08-08pl/sql導(dǎo)入、導(dǎo)出csv等格式文件詳細(xì)步驟
在 PL/SQL 開發(fā)中數(shù)據(jù)的導(dǎo)入和導(dǎo)出是常見的操作,下面這篇文章主要給大家介紹了關(guān)于pl/sql導(dǎo)入、導(dǎo)出csv等格式文件的詳細(xì)步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04oracle ORA-00988 missing or invalid password 錯誤
在設(shè)置數(shù)據(jù)庫實例的密碼時,注意不要以數(shù)字開頭,否則您將會遇到 ORA-00988 missing or invalid password (口令缺失或無效) 錯誤2015-01-01oracle查詢一天前、幾天前、幾小時前、一小時前的數(shù)據(jù)以及恢復(fù)誤刪的數(shù)據(jù)
這幾天工作經(jīng)常需要查詢某天之前的數(shù)據(jù),整理了下相關(guān)的查詢,下面這篇文章主要給大家介紹了關(guān)于oracle查詢一天前、幾天前、幾小時前、一小時前的數(shù)據(jù)以及恢復(fù)誤刪的數(shù)據(jù),需要的朋友可以參考下2024-03-03