æ¬èšäºã¯æ¥æ¬ãªã©ã¯ã«ãéå¶ããäžèšMeetupã§çºè¡šäºå®ã®å 容ã«ãªããŸããçºè¡šãŸã§ã«ä»åŸãå 容ã¯äºåãªã倿Žãããå¯èœæ§ãããããšãããããããäºæ¿ãã ããã
ã¯ããã«
ãããŸã§ BETAãªãªãŒã¹ã ã£ã Oracle Database ã®ãã¯ãã«ããŒã¿ããŒã¹æ©èœ AI Vector Search ãæèŒããããŒãžã§ã³ãå æ¥ããããæ£åŒãªãªãŒã¹ãšãªããŸããããã®å㯠Oracle Database 23ai ã§ãããããŸã§ããããã¯ãŒã¯ããŒããåãå ¥ããŠãã Oracle Database ã§ãããæŽããŠãã¯ãã«ããŒã¿ããŒã¹ã®ã«ããŽãªã«ä»²éå ¥ãã§ãã
Oracle Databaseã¯æ²¢å±±ã®å é²çãªæ©èœãåã蟌ãã ããŒã¿ããŒã¹ã§ããããã®ãªãªãŒã¹ã¯ååãããããéããèããæ©ãã§æ¡å€§ããŠããAIåžå ŽãæèããããŒãžã§ã³ãšãªããŸãããšãããæšä»ã®AIåžå Žã®è©±é¡ã®äžå¿ã¯ãã¯ãå€§èŠæš¡èšèªã¢ãã«ãæ¬èšäºãããã«å£ã£ãŠããã¯ãã«ããŒã¿ããŒã¹ãšããŠã®Oracle Database 23aiã䜿ã£ãã·ã³ãã«ãªRAGæ§æã«ããããã¹ãçæã®å®è£ ãµã³ãã«ãã玹ä»ããããšæããŸãã
â» RAGãšã¯äœã§ããïŒãšããæ¹ã¯ãã¡ãã®èšäºããåç §ãã ããã
RAGã®æ§æãšã·ããªãª
RAGã®æ§æ
æ¬èšäºã§ã玹ä»ããRAGã®æ§æãšåŠçãããŒã®æŠèŠãäžå³ã«ãªããŸããããã¹ãçæã¢ãã«ãRerankã¢ãã«ããã¯ãã«ããŒã¿ããŒã¹ã䜿ã£ãå žåçãªã¿ã€ãã®RAGæ§æã§ããLangChainãLlamaIndexãªã©ã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«ã䜿çšããªããã«ã¹ã¯ã©ããã®RAGãšãªããŸãã
æ§æã«å©çšãããµãŒãã¹ã¯ä»¥äžã®éãã
- å€§èŠæš¡èšèªã¢ãã«ïŒOCI Generative AI Service(Command R/Command R Plus)ãçªå€ç·šã§Cohere(Command R Plus)
- Rerank ã¢ãã«ïŒCohere(rerank-multilingual-v3.0)
- ãã¯ãã«ããŒã¿ããŒã¹: Oracle Database 23ai Free
- ããã¥ã¡ã³ãããŒã¿ã®ãã¯ãã«åã«å©çšããã¢ãã« : Oracle Cloud Generative AI Service(embed-multilingual-v3.0)
ããã¥ã¡ã³ãããŒã¿
ãã¯ãã«ããŒã¿ããŒã¹ã«ããŒãããããã¥ã¡ã³ãããŒã¿ã¯äžå³ã®ãããªå 容ã®PDFãã¡ã€ã«ã§ããããã¹ãã®å 容ãšããŠã¯æ¶ç©ºã®è£œåã§ãããã±ãããšã³ãžã³OraBoosterã®èª¬ææç« ã§ããäŒæ¥å ã®ããŒã¿ãæ³å®ããããã¹ãã®å 容ãšããŠã¯ãååšããªã補åãã€å®å šãªåµäœæç« ããšããããšã§LLMãåŠç¿ããŠããã¯ãã®ãªãããŒã¿ãšããããšã«ãªããŸããåŸã®æé ã§ãã¡ãã®PDFãã¡ã€ã«ããã¯ãã«ããŒã¿ããŒã¹ã«ããŒãããŸãã
ã·ããªãª
æ¬èšäºã§ã¯äžèšã®ãããªã·ããªãªã§ããã¹ãçæãè¡ããLLMãåŠç¿ããŠããªãããŒã¿(äžè¿°ã®PDFã®å 容)ã«é¢ãã質åã«å¯ŸããŠRAGæ§æã§ããŸãåçã§ããããšã確èªããŸãããŸããéRAGæ§æãšã®ããã¹ãçæçµæãæ¯èŒããRAGã®æå¹æ§ã確èªããŸãã
- æ¶ç©ºã®è£œåOraBoosterã«ã€ããŠè³ªåãããŸãã
- LLMã¯ãã®è£œåã®ç¥èãæã¡åãããŠããªãããããã¯ãã«ããŒã¿ããŒã¹ã«é¡äŒŒæ€çŽ¢ãè¡ãããã³ããšãªãããã¹ãããŒã¿(ãã£ã³ã¯ããã¹ã)ãè€æ°æ€çŽ¢ããŸããäžèšã®ã³ãŒãã§ã¯é¡äŒŒåºŠã®é«ãããã¹ãããŒã¿ã5ã€æ€çŽ¢ããã³ãŒãã«ããŠããŸãã
- é¡äŒŒæ€çŽ¢åŠçã§åŸããã5ã€ã®ããã¹ããRerankã¢ãã«ã§åã¹ã³ã¢ãªã³ã°ãããã®çµæããé¡äŒŒåºŠã®é«ãããã3ã®ããã¹ãããŒã¿ãåãåºããŸãã
- Rerankã¢ãã«ã§åãåºããããã¹ãããŒã¿3ã€ãšãããšããšã®ããã³ããã®ããã¹ãããŒã¿ãããã¹ãçæã¢ãã«ã«å ¥åããOraBoosterã®èª¬æããã¹ããçæãããŠããããšã確èªããŸãã
- ãã¯ãã«ããŒã¿ããŒã¹ãžã®é¡äŒŒæ€çŽ¢åŠçãã¹ãããããç¶æ (ã€ãŸããRAGã§ã¯ãªãåã«LLMã«ã¯ãšãªããŠããç¶æ )ã§ããã¹ãçæãè¡ããäžèšã4ãã§çæãããããã¹ããšæ¯èŒãRAGã®æå¹æ§ã確èªããŸãã
â» å®è£ ã¯èå³ãªãã®ã§çµæã ãç¥ãããã§ããšããæ¹ã¯ãããã¹ãçæãå®è¡ãã®ç« ããåç §ãã ããã
å®è£
äžèšã®æµãã§å®è£ ããŠãããŸãã
- ããŒã¿ããŒã¹ã€ã³ã¹ã¿ã³ã¹ãšããŒã¿ããŒã¹ã®äœæ
- ããã¥ã¡ã³ããã¡ã€ã«(PDF)ãããŒã¿ããŒã¹ã«ããŒããããã¯ãã«å
- RAGã®å®è£
ããŒã¿ããŒã¹ã€ã³ã¹ã¿ã³ã¹ãšããŒã¿ããŒã¹ã®äœæ
ãŸãã¯ããã¯ãã«ããŒã¿ããŒã¹ãšãªãOracle DatabaseãæºåããŸããäžèšã®ãã¥ãŒããªã¢ã«ã«æ²¿ã£ãŠComputeã€ã³ã¹ã¿ã³ã¹ã«Oracle Database 23ai Freeãã€ã³ã¹ããŒã«ããŸãã
ããŒã¿ããŒã¹ã€ã³ã¹ããŒã«åŸãäžèšã®æµãã§ãŠãŒã¶ãŒäœæããã®ä»ã®èšå®ãè¡ããŸãã
æ¥æ¬èªè¡šç€ºã®ãããäžèšç°å¢å€æ°ãå®çŸ©ããŸãã
export NLS_LANG=Japanese_Japan.AL32UTF8
ã³ã³ããããŒã¿ããŒã¹(CDB)å ã®ãã©ã¬ãã«ã»ããŒã¿ããŒã¹(PDB)ã«sysãŠãŒã¶ãŒã§sysdbaãšããŠæ¥ç¶ããŸãã
sqlplus /nolog
CONN sys@freepdb1 as sysdba
DBãŠãŒã¶ãŒ(docuser)ãäœæããå¿ èŠãªæš©éãä»äžããŸãã
drop user docuser cascade;
grant connect, ctxapp, unlimited tablespace, create credential, create procedure, create table to docuser identified by docuser;
grant execute on sys.dmutil_lib to docuser;
grant create mining model to docuser;
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => '*',
ace => xs$ace_type(
privilege_list => xs$name_list('connect'),
principal_name => 'docuser',
principal_type => xs_acl.ptype_db));
END;
/
ã€ã³ã¹ã¿ã³ã¹ã«é 眮ããPDFããã¥ã¡ã³ããèªã¿èŸŒãããã«ãã£ã¬ã¯ããªãªããžã§ã¯ããäœæããŸãããã¡ãã®OSã®ãã£ã¬ã¯ããªã«äžè¿°ããPDFãã¡ã€ã«(rocket.pdf)ãé 眮ããŠãããŸãã
create directory VEC_DUMP as '/home/oracle/data/vec_dump';
grant read, write on directory VEC_DUMP to docuser;
commit;
Oracle Databaseã«æ¥ç¶ããŸãã
sqlplus /nolog
CONN docuser@freepdb1
SQL*Plusã®è¡šç€ºã調æŽããŸãã
SET ECHO ON
SET FEEDBACK 1
SET NUMWIDTH 10
SET LINESIZE 80
SET TRIMSPOOL ON
SET TAB OFF
SET PAGESIZE 10000
SET LONG 10000
ããã¥ã¡ã³ãããŒã¿ãããŒã¿ããŒã¹ã«ããŒããããã¯ãã«ããŒã¿ã«å€æ
Oracle Database 23aiã«ã¯ããã¥ã¡ã³ãããŒã¿ãããŒã¿ããŒã¹ã«ããŒããããã¯ãã«åããããã®äžèš3ã€ã®ããã·ãŒãžã£ããããŸãããã®3ã€ã®ããã·ãŒãžã£ãå®è¡ããã ãã§ãPDFãWordãã¡ã€ã«ãªã©æ§ã ãªããã¥ã¡ã³ãããŒã¿ãç°¡åã«ãã¯ãã«ããŒã¿ããŒã¹ã«åã蟌ãããšãã§ããããã«ãªã£ãŠããŸãã
- UTL_TO_TEXT : PDFãã¡ã€ã«ãªã©ãæ§é è§£æããããã¹ãã«å€æ(ã€ãŸãããã¥ã¡ã³ãããŒããŒã§ãã)
- UTL_TO_CHUNK : 倿ãããããã¹ãããŒã¿ããã£ã³ã¯ã«åå²(ã€ãŸãããã¹ãã¹ããªãã¿ãŒ(ãã£ã³ã«ãŒ)ã§ãã)
- UTL_TO_EMBEDDINGS : ãã£ã³ã¯ããã¹ãããã¯ãã«ã«å€æ(ããã·ãŒãžã£ã®äžã§åã蟌ã¿ã¢ãã«ãæå®ããã£ã³ã¯ããã¹ãããã¯ãã«ã«å€æããŸãã)
æµããšããŠã¯äžå³ã®ããã«3ã€ã®ããã·ãŒãžã£ãé çªã«å®è¡ããã ãã§ãã
以éãé çªéãã«åŠçãå®è¡ããŸãããŸãã衚(documentation_tab)ãäœæãããã®è¡šã«PDFããã¥ã¡ã³ããæ ŒçŽããŸãã
drop table documentation_tab purge;
CREATE TABLE documentation_tab (id number, data blob);
INSERT INTO documentation_tab values(1, to_blob(bfilename('VEC_DUMP', 'rocket.pdf')));
commit;
UTL_TO_TEXTãå®è¡ããŠPDFãããã¹ã圢åŒã«å€æããŸãã
SELECT dbms_vector_chain.utl_to_text(dt.data)
from documentation_tab dt;
UTL_TO_CHUNKSãå®è¡ããŠãããã¹ãã®å šæãã©ã®ããã«ãã£ã³ã¯ã«åå²ãããããäžèšSQLã§ç¢ºèªããŸããä»åã¯åºå®é·ã§åå²ããã®ã§äžèšSQLã§ãã£ã³ã¯ããã¹ãã確èªããªãã max ãš overlap ã®å€ã調æŽããŸãã
SELECT ct.*
from documentation_tab dt,
dbms_vector_chain.utl_to_chunks(
dbms_vector_chain.utl_to_text(dt.data),
json('{"max": "100", "overlap": "10%", "language": "JAPANESE", "normalize": "all", "split": "sentence"}')
) ct;
æçµçã«ãã£ã³ã¯ããã¹ãããã¯ãã«ã«å€æããããã«Oracle Cloudã®Generative AI Serviceã®åã蟌ã¿ã¢ãã«ãå©çšããŸãããã®ãµãŒãã¹ãå©çšããã«ã¯APIããŒã§ã®èªèšŒãå¿ èŠã«ãªããŸããããAPIããŒãCredentialãšããŠããŒã¿ããŒã¹ã«ç»é²ããåŠçãäžèšæé ã§è¡ããŸãã
ãŸããäžèšã·ã§ã«ã³ãã³ããå®è¡ããŠãAPIããŒã®çæã§ååŸããkey_fileã®æååãååŸããŸãã
awk '/^--/{ next } { printf "%s", $0 } END { printf "\n" }' ~/.oci/oci_api_key.pem | tr -d '\n'
äžèšã§ååŸããæååãprivate_keyã«å ¥åããAPIããŒã®çæã§ååŸããuser_ocidãtenancy_ocidãfingerprintããã³compartment_ocidãå ¥åããŠå®è¡ããŸãã
exec dbms_vector.drop_credential('OCI_CRED');
declare
jo json_object_t;
begin
jo := json_object_t();
jo.put('user_ocid', 'user ocid value');
jo.put('tenancy_ocid', 'tenancy ocid value');
jo.put('compartment_ocid', 'compartment ocid value');
jo.put('private_key', 'private key value');
jo.put('fingerprint', 'fingerprint value');
dbms_output.put_line(jo.to_string);
dbms_vector.create_credential(
credential_name => 'OCI_CRED',
params => json(jo.to_string));
end;
/
OCI GenAIãµãŒãã¹ã«ã¢ã¯ã»ã¹ããããã®ãã©ã¡ãŒã¿ãèšå®ããŸãã
var embed_genai_params clob;
exec :embed_genai_params := '{"provider": "ocigenai", "credential_name": "OCI_CRED", "url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText", "model": "cohere.embed-multilingual-v3.0"}';
äžèšã®èšå®ãåäœãããOCI GenAIãµãŒãã¹ãžã®ã¢ã¯ã»ã¹ããŠç¢ºèªããŠã¿ãŸãã
select et.* from dbms_vector_chain.utl_to_embeddings(
'ããã«ã¡ã¯',
json(:embed_genai_params)
) et;
äžèšã®ããã«ãå ¥åããããã¹ããããã«ã¡ã¯ãã®ãã¯ãã«å€ãååŸã§ããŠããã°æåã§ãã
COLUMN_VALUE
--------------------------------------------------------
{"embed_id":"1","embed_data":"ããã«ã¡ã¯","embed_vector":"[0.0035 934448,0.028701782,0.031051636,-0.001415
...
1è¡ãéžæãããŸããã
ãããŸã§ã®æé ã§ãã£ã³ã¯äœæãšãã¯ãã«åã®æºåãã§ããŸããã
å®éã«UTL_TO_EMBEDDINGSãå®è¡ããŠããã£ã³ã¯ããã¹ãããã¯ãã«ã«å€æããŸãã
äžèšã®SQLã§ã¯äžè¿°ããUTL_TO_CHUNKSã§åå²ãããã£ã³ã¯ã®ããã¹ãããŒã¿ãUTL_TO_EMBEDDINGSã§ãã¯ãã«åããã®å€ãä¿åãã衚ãäœæããŠããŸãã
CREATE TABLE doc_chunks AS
WITH t_chunk AS (
SELECT
dt.id AS doc_id,
et.chunk_id AS embed_id,
et.chunk_data AS embed_data
FROM
documentation_tab dt,
dbms_vector_chain.utl_to_chunks(
dbms_vector_chain.utl_to_text(dt.data),
JSON('{"max": "100", "overlap": "10%", "language": "JAPANESE", "normalize": "all", "split": "sentence"}')
) t,
JSON_TABLE(
t.column_value,
'$[*]' COLUMNS (
chunk_id NUMBER PATH '$.chunk_id',
chunk_data VARCHAR2(4000) PATH '$.chunk_data'
)
) et
WHERE
dt.id = 1
),
t_embed AS (
SELECT
dt.id AS doc_id,
ROWNUM AS embed_id,
to_vector(t.column_value) AS embed_vector
FROM
documentation_tab dt,
dbms_vector_chain.utl_to_embeddings(
dbms_vector_chain.utl_to_chunks(
dbms_vector_chain.utl_to_text(dt.data),
JSON('{"max": "100", "overlap": "10%", "language": "JAPANESE", "normalize": "all", "split": "sentence"}')
),
JSON('{
"provider": "ocigenai",
"credential_name": "OCI_CRED",
"url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText",
"model": "cohere.embed-multilingual-v3.0"
}')
) t
WHERE
dt.id = 1
)
SELECT
t_chunk.doc_id AS doc_id,
t_chunk.embed_id AS embed_id,
t_chunk.embed_data AS embed_data,
t_embed.embed_vector AS embed_vector
FROM
t_chunk
JOIN
t_embed
ON
t_chunk.doc_id = t_embed.doc_id
AND t_chunk.embed_id = t_embed.embed_id;
PDFãã¡ã€ã«ããã¯ãã«åãããŠãã衚ã«å¯ŸããŠããOraBoosterãšã¯äœã§ããïŒããšããæç« ã§é¡äŒŒæ€çŽ¢ãå®è¡ããé¡äŒŒåºŠã®é«ãäžäœ5ã€ãã¯ãšãªããŠã¿ãŸãã
SELECT doc_id, embed_id, embed_data
FROM doc_chunks
ORDER BY vector_distance(embed_vector , (
SELECT to_vector(et.embed_vector) embed_vector
FROM dbms_vector_chain.utl_to_embeddings('OraBoosterãšã¯äœã§ããïŒ', JSON(:embed_genai_params)) t,
JSON_TABLE ( t.column_value, '$[*]' COLUMNS (
embed_id NUMBER PATH '$.embed_id',
embed_data VARCHAR2 ( 4000 ) PATH '$.embed_data',
embed_vector CLOB PATH '$.embed_vector'
)) et
), COSINE)
FETCH EXACT FIRST 5 ROWS ONLY;
äžèšã®ãããªåºåãåŸãããã°æåã§ãã
DOC_ID EMBED_ID
---------- ----------
EMBED_DATA
--------------------------------------------------------------------------------
1 1
PowerPoint Presentation
åœç€Ÿãéçºãããã±ãããšã³ãžã³ã§ããOraBoosterã¯ã次äžä»£ã®å®å®æ¢æ»ãæ¯ããå
é²ç
ãªæšé²æè¡ã®
象城ã§ãããã®ç¬èªã®èšèšã¯ã髿§èœãšé©æ°æ§ãèåããã人é¡ã®å®å®é²åºãå éããã
ããã®é©åœç
ãªäžæ©ãšãªããŸãã
1 5
ãŸãããã€ããŒãã©ãã³ã»ãžã£ã€ãã¹ã³ãŒããæèŒãããŠãããæ¥µããŠé«ã粟床ã§ãã±ã
ãã®å§¿å¢ãç¶
æããç®æšã远跡ããŸãã
....
....
....
....
....
ãããŸã§ã®æé ã§ãPDFãã¡ã€ã«ã®ããã¹ãããŒã¿ããã¯ãã«ããŒã¿ããŒã¹ã«ãã¯ãã«ããŒã¿ãšããŠããŒãããéšåãå®äºããŸãããé¡äŒŒæ€çŽ¢ãåäœããããšã確èªã§ããŸãããRAGã®äžã§æãéèŠãªããŒããæ§æã§ããç¶æ ã§ãã
RAGã®å®è£
ãããããRAGã®å®è£ ã§ãããã以éã®åŠçã¯Pythonã§å®è£ ããŸããããŒã¿ããŒã¹ã€ã³ã¹ã¿ã³ã¹ã«Pythonç°å¢ãå®è£ ããŠããã ããŠãããã§ããããªã³ãã¬ãã¹ãã¯ã©ãŠãç°å¢ã§åŠçããŠã倧äžå€«ã§ãã
ããã³ãããå ¥åããéã«äžèšã®æµãã§ã³ãŒããç¹ããRAGã®ãããŒãå®è£ ããŸãã
- ããã³ããã®ããã¹ãããã¯ãã«åãããã¯ãã«ããŒã¿ããŒã¹ã§é¡äŒŒæ€çŽ¢å®è¡ãããã5ã®ãã£ã³ã¯ããã¹ããæœåº
- ãã®çµæããªã©ã³ã¯ã¢ãã«ã§åã¹ã³ã¢ãªã³ã°ã粟床ã®é«ãããã3ã®ãã£ã³ã¯ããã¹ããæœåº
- ãªã©ã³ã¯çµæã®ããã3ã®ãã£ã³ã¯ããã¹ããšããšããšã®ããã³ãããLLMã«å ¥åãããã¹ããçæ
ãŸãã¯ããŒã¿ããŒã¹ã®æ¥ç¶ãšã«ãŒãœã«ãå®çŸ©ããŸãã
import oracledb
conn = oracledb.connect(user="docuser", password="docuser", dsn="localhost/freepdb1")
cur = conn.cursor()
ãããããã¯ãã«ããŒã¿ããŒã¹ã§ã®é¡äŒŒæ€çŽ¢ãè¡ããŸãã
ãŸãã¯ãquery(ããã³ããã®æç« )ãå®çŸ©ããŸãããã®queryã¯ãã¯ãã«ããŒã¿ããŒã¹ã®é¡äŒŒæ€çŽ¢ã®æãšãããã¹ãçæã¢ãã«ã«å ¥åããæã«äœ¿ããŸãã
query = 'OraBoosterãšã¯äœã§ããïŒ'
ãã®ããã³ããã§ãã¯ãã«ããŒã¿ããŒã¹ã«é¡äŒŒæ€çŽ¢ãå®è¡ããŸããSQLã¯äžè¿°ãããã¯ãã«ããŒã¿ããŒã¹ã®é¡äŒŒæ€çŽ¢ã®åäœç¢ºèªæã«å®è¡ãããã®ãšã»ãŒåãã§ãã(SQLæåŸã®è¡"FETCH FIRST 5 ROWS ONLY"ã®ä»¶æ°ã倿°ã«ããŠããããšæããŸãã)
sql_query = """
SELECT doc_id, embed_id, embed_data
FROM doc_chunks
ORDER BY vector_distance(
embed_vector,
(
SELECT TO_VECTOR(et.embed_vector) AS embed_vector
FROM DBMS_VECTOR_CHAIN.UTL_TO_EMBEDDINGS(
:query,
JSON('{"provider": "ocigenai", "credential_name": "OCI_CRED", "url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText", "model": "cohere.embed-multilingual-v3.0"}')
) t,
JSON_TABLE (
t.column_value,
'$[*]' COLUMNS (
embed_id NUMBER PATH '$.embed_id',
embed_data VARCHAR2(4000) PATH '$.embed_data',
embed_vector CLOB PATH '$.embed_vector'
)
) et
)
, COSINE)
FETCH FIRST 5 ROWS ONLY
"""
cur.execute(sql_query, {'query': query})
rows = cur.fetchall()
rows
åºåãšããŠã¯ãäžèšã®ããã«é¡äŒŒæ€çŽ¢ã®çµæãOraBoosterãšã¯äœã§ããïŒããšããããã¹ãã®ãã¯ãã«å€ãšé¡äŒŒåºŠã®é«ã5ä»¶ã®ãã£ã³ã¯ããã¹ããååŸã§ããŠããŸãã(ååŸãããã£ã³ã¯ããã¹ãå ã«äžèŠãªæååãæ¹è¡ã³ãŒããå ¥ã£ãŠããŸãããæ¬æ¥ã¯ååŠçã§ã¡ãããšã¯ã¬ã³ãžã³ã°ããŸãã)
[(1,1,'PowerPoint Presentation\n\nåœç€Ÿãéçºãããã±ãããšã³ãžã³ã§ããOraBoosterã¯ã次äžä»£ã®å®å®æ¢æ»ãæ¯ããå
é²çãªæšé²æè¡ã®\n\n象城ã§ãããã®ç¬èªã®èšèšã¯ã髿§èœãšé©æ°æ§ãèåããã人é¡ã®å®å®é²åºãå éãããããã®é©åœç\n\nãªäžæ©ãšãªããŸãã'),
(1,5,'ãŸãããã€ããŒãã©ãã³ã»ãžã£ã€ãã¹ã³ãŒããæèŒãããŠãããæ¥µããŠé«ã粟床ã§ãã±ããã®å§¿å¢ãç¶\n\næããç®æšã远跡ããŸãã'),
(1,6,'ããã«ãããé·æéã«ãããå®å®é£è¡äžã§ãå®å®ããé£è¡è»éãç¶æãã\n\nããã·ã§ã³ã®æåã確ä¿ããŸãã\n\nããã«ããã€ãªããã¯ã»ãªã¢ã¯ã·ã§ã³ã»ã¬ã¹ãã³ããŒãçµ±åãããŠããŸãã'),
(1,8,'ç·ããŠããã®æ°éçºã®ãã±ãããšã³ãžã³ã¯ã驿°çãªæè¡ãšæªæ¥å¿åã®èšèšã«ãã£ãŠãå®å®æ¢æ»ã®æ°ã\n\nãªæä»£ãåãéãããšã§ãããããã®é«ãæ§èœãšä¿¡é Œæ§ã¯ã人é¡ã®å€¢ãå®çŸããããã®ååŒ·ãæ¯æŽãšãª\n\nãããšã§ãããã'),
(1,2,'ãã®ãšã³ãžã³ã®æ žãšãªãã®ã¯ãéåãã€ãããã¯ã¹ã»ãã©ãºãã»ããŒã¹ã¿ãŒã§ãããã®ããŒã¹ã¿ãŒã¯ã\n\néåååŠã®åçã«åºã¥ããŠãã©ãºããçæããè¶
é«éã§å éãããŸãã')]
å°ãèŠã«ããã®ã§dataframeã«å€æããŠè¡šç€ºããŠã¿ãŸãã
import pandas as pd
df = pd.DataFrame(rows)
print(df)
0ã®åã¯ããã¥ã¡ã³ãIDã§ããä»åã¯äžã€ã®PDFãã¡ã€ã«ãããŒãããŸããããè€æ°ã®PDFãã¡ã€ã«ãããŒãããå Žåã¯1以å€ã®ããã¥ã¡ã³ãIDãããã«è¡šããå¯èœæ§ããããŸãã1ã®åããã£ã³ã¯IDã§2ã®åããã£ã³ã¯ã«åå²ãããããã¹ãã§ãã
ãOraBoosterãšã¯äœã§ããïŒããšããããã¹ãã§æ€çŽ¢ããŠããã®ã§ããã£ã³ã¯ID 8(æ°éçºã®ãã±ãããšã³ãžã³)ããäžäœã«æ¥ãŠã»ããæããããŸãããæ®å¿µãªããé¡äŒŒåºŠãäžäœã«èšç®ãããŠãããšããç¶æ³ã§ãããããã»ãã³ãã£ãã¯æ€çŽ¢ã®é£ããã§ããããåŸã£ãŠããã®ã©ã³ãã³ã°ãå°ãã§ã人éã®æèŠã«è¿ã¥ããã¹ãããã®åŸã«Rerankã®ã¢ãã«ã§åã¹ã³ã¢ãªã³ã°ãè¡ããŸãã
â»å ã¿ã«ããã¯ãã«ã®é¡äŒŒæ€çŽ¢èªäœã¯ãããã¹ãçæã¢ãã«ã®å ¥ååŠçãšã¯å šãç°ãªããŸãããããããã¯äœã§ããïŒãã®ããã«è³ªåã®ãããªããã¹ãã«ããå¿ èŠã¯ãããŸããã
ãã®çµæã»ããã«ã¯ããã¥ã¡ã³ãIDããã£ã³ã¯IDãšãã£ãéèŠãªããŒã¿ãå«ãŸããŠããŸãããããã䜿ãããšã«ãã£ãŠãæçµçãªããã¹ãçæãšã®ãã«ã©ã®ããã¥ã¡ã³ãã®ã©ã®ãã£ã³ã¯ããã¹ããåç §ããã®ããšããæ å ±ããŠãŒã¶ãŒã«èŠããããã«ããããšãã§ããŸããããä»åã¯ã·ã³ãã«ã«åºæ¬ã®ã³ãŒãã®éªšæ Œãçè§£ãããã®ã§ãã®éšåãçãããšæããŸããäžèšã®ã³ãŒãã§ããã¹ãã®éšåã ããåãåºããŸãã
results = [row[2] for row in rows]
ããã§Cohereã®Rerankã¢ãã«ã®ç»å Žã§ããäžèšã®ããã«ããšããšã®ã¯ãšãªããã¹ã(query)ãšé¡äŒŒæ€çŽ¢ã®çµæã®ãã£ã³ã¯ããã¹ã(results)ãRerankã¢ãã«ã«å ¥åããåã¹ã³ã¢ãªã³ã°åŸã®é¡äŒŒåºŠããã3ã®ãã£ã³ã¯ããã¹ããåãåºããŸãã
import cohere
co = cohere.Client("xxxxxxxxx")
# query = 'OraBoosterãšã¯äœã§ããïŒ'
results_rerank = co.rerank(
model = "rerank-multilingual-v3.0",
# queryã¯ããã³ããããã¹ãã§ãããé¡äŒŒæ€çŽ¢ã®æ€çŽ¢ããã¹ãã§ãã
query = query,
# resultsã¯é¡äŒŒæ€çŽ¢çµæãä»åã®å Žåäžè¿°ãã5ã€ã®ãã£ã³ã¯ããã¹ããå
¥ã£ããªã¹ãã§ãã
documents = results,
return_documents = True,
top_n = 3
)
print(results_rerank)
äžèšã®ããã«3ã€ã®ãã£ã³ã¯ããã¹ããã¹ã³ã¢ãªã©æ§ã ãªæ å ±ã確èªã§ããŸãããã£ã³ã¯ããã¹ã以å€ã®ããŒã¿ãéèŠã§ã¯ãããŸãããä»åã¯ã·ã³ãã«ã«ããã¹ãããŒã¿ã®ã¿ã䜿ããŸãã
RerankResponse(id='35c5e447-3163-4ab6-8a44-adecc6bbca0f', results=[RerankResponseResultsItem(document=RerankResponseResultsItemDocument(text='PowerPoint Presentation\n\nåœç€Ÿãéçºãããã±ãããšã³ãžã³ã§ããOraBoosterã¯ã次äžä»£ã®å®å®æ¢æ»ãæ¯ããå
é²çãªæšé²æè¡ã®\n\n象城ã§ãããã®ç¬èªã®èšèšã¯ã髿§èœãšé©æ°æ§ãèåããã人é¡ã®å®å®é²åºãå éãããããã®é©åœç\n\nãªäžæ©ãšãªããŸãã'), index=0, relevance_score=0.9998378), RerankResponseResultsItem(document=RerankResponseResultsItemDocument(text='ããã«ãããé·æéã«ãããå®å®é£è¡äžã§ãå®å®ããé£è¡è»éãç¶æãã\n\nããã·ã§ã³ã®æåã確ä¿ããŸãã\n\nããã«ããã€ãªããã¯ã»ãªã¢ã¯ã·ã§ã³ã»ã¬ã¹ãã³ããŒãçµ±åãããŠããŸãã'), index=2, relevance_score=0.01302049), RerankResponseResultsItem(document=RerankResponseResultsItemDocument(text='ç·ããŠããã®æ°éçºã®ãã±ãããšã³ãžã³ã¯ã驿°çãªæè¡ãšæªæ¥å¿åã®èšèšã«ãã£ãŠãå®å®æ¢æ»ã®æ°ã\n\nãªæä»£ãåãéãããšã§ãããããã®é«ãæ§èœãšä¿¡é Œæ§ã¯ã人é¡ã®å€¢ãå®çŸããããã®ååŒ·ãæ¯æŽãšãª\n\nãããšã§ãããã'), index=3, relevance_score=0.011115014)], meta=ApiMeta(api_version=ApiMetaApiVersion(version='1', is_deprecated=None, is_experimental=None), billed_units=ApiMetaBilledUnits(input_tokens=None, output_tokens=None, search_units=1.0, classifications=None), warnings=None))
äžèšã®åºåã ãšèŠã«ããã®ã§å°ãæŽåœ¢ããŸããããã¹ãããŒã¿ã ããåãåºããæ¹è¡ã³ãŒããåé€ããŠã¿ãŸãã
contents = []
for result in results_rerank.results:
contents.append(result.document.text)
def remove_newline(text):
return text.replace('\n', '')
contents_list = [remove_newline(text) for text in contents]
print(contents_list)
çµæãåã©ã³ãã³ã°ãããTop3ã®ãã£ã³ã¯ããã¹ããäžèšã®3ã€ããã®ãªã©ã³ã¯ã®åŠçã«ãããæåŸ ããŠãããæ°éçºã®ãã±ãããšã³ãžã³ããšãéåãã€ãããã¯ã¹ã»ãã©ãºãã»ããŒã¹ã¿ãŒãã®ãã£ã³ã¯ããã¹ããTop3ã«ã©ã³ã¯ã€ã³ããŠãããŸããããã¯ãRerankã¢ãã«ã¯ãªããªã䜿ããŸãã
['PowerPoint Presentation\n\nåœç€Ÿãéçºãããã±ãããšã³ãžã³ã§ããOraBoosterã¯ã次äžä»£ã®å®å®æ¢æ»ãæ¯ããå
é²çãªæšé²æè¡ã®\n\n象城ã§ãããã®ç¬èªã®èšèšã¯ã髿§èœãšé©æ°æ§ãèåããã人é¡ã®å®å®é²åºãå éãããããã®é©åœç\n\nãªäžæ©ãšãªããŸãã',
'ããã«ãããé·æéã«ãããå®å®é£è¡äžã§ãå®å®ããé£è¡è»éãç¶æãã\n\nããã·ã§ã³ã®æåã確ä¿ããŸãã\n\nããã«ããã€ãªããã¯ã»ãªã¢ã¯ã·ã§ã³ã»ã¬ã¹ãã³ããŒãçµ±åãããŠããŸãã',
'ç·ããŠããã®æ°éçºã®ãã±ãããšã³ãžã³ã¯ã驿°çãªæè¡ãšæªæ¥å¿åã®èšèšã«ãã£ãŠãå®å®æ¢æ»ã®æ°ã\n\nãªæä»£ãåãéãããšã§ãããããã®é«ãæ§èœãšä¿¡é Œæ§ã¯ã人é¡ã®å€¢ãå®çŸããããã®ååŒ·ãæ¯æŽãšãª\n\nãããšã§ãããã']
äžèšã®ãªã¹ãã¯stringåã§ãããCohereã®ããã¹ãçæã®LLMã¯jsonåããå ¥åã§ããªãããäžèšã®ããã«å倿ãè¡ããŸãã
json_contents_list = []
for content in contents_list:
json_contents_list.append({"text": content})
print(json_contents_list)
jsonåã«ãªããŸããã®ã§ãã®json_contents_listãããã¹ãçæã¢ãã«ã®å ¥åã«äœ¿ããŸãã
[{'text': 'ããã«ãããé·æéã«ãããå®å®é£è¡äžã§ãå®å®ããé£è¡è»éãç¶æããããã·ã§ã³ã®æåã確ä¿ããŸããããã«ããã€ãªããã¯ã»ãªã¢ã¯ã·ã§ã³ã»ã¬ã¹ãã³ããŒãçµ±åãããŠããŸãã'}, {'text': 'ç·ããŠããã®æ°éçºã®ãã±ãããšã³ãžã³ã¯ã驿°çãªæè¡ãšæªæ¥å¿åã®èšèšã«ãã£ãŠãå®å®æ¢æ»ã®æ°ããªæä»£ãåãéãããšã§ãããããã®é«ãæ§èœãšä¿¡é Œæ§ã¯ã人é¡ã®å€¢ãå®çŸããããã®ååŒ·ãæ¯æŽãšãªãããšã§ãããã'}, {'text': 'ãã®ãšã³ãžã³ã®æ žãšãªãã®ã¯ãéåãã€ãããã¯ã¹ã»ãã©ãºãã»ããŒã¹ã¿ãŒã§ãããã®ããŒã¹ã¿ãŒã¯ãéåååŠã®åçã«åºã¥ããŠãã©ãºããçæããè¶
é«éã§å éãããŸãã'}]
ããã¹ãçæãå®è¡(Generative AI Service ã® Command Rãããã¯Command R Plus)
ãããŸã§åŠçããå 容ã¯ä»¥äžã®éãã§ãã
- PDFãã¡ã€ã«ããã¯ãã«åãããŒã¿ããŒã¹ã«ããŒã
- ããã³ããã®å å®¹ã«æ²¿ã£ãé¡äŒŒæ€çŽ¢ãå®è¡ãé¡äŒŒåºŠã®é«ãããã5ãååŸ
- Rerankã¢ãã«ã«ããããã5ã®ããã¹ãããŒã¿ãåã¹ã³ã¢ãªã³ã°ããããã3ãååŸ
äžèš3ã®Rerankingã®çµæã®ããã3ã®ãã£ã³ã¯ããã¹ããšããšããšã®ããã³ãããããã¹ãçæã¢ãã«ã«å ¥åããŠæçµçãªããã¹ãçæãè¡ããŸãããã®ããã¹ãçæã¢ãã«ã«ããŸãã¯OCI Generative AI Serviceã®Command-Rã䜿ã£ãŠã¿ãããšæããŸãã
ãŸãã¯OCIã®ç°å¢ãšGenerative AI Serviceã®ãšã³ããã€ã³ããå®çŸ©ããŸãã
import oci
compartment_id = "ocid1.compartment.oc1..xxxxxxxx2bijwewlq"
CONFIG_PROFILE = "DEFAULT"
config = oci.config.from_file('~/.oci/config', CONFIG_PROFILE)
# Service endpoint
endpoint = "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com"
次ã«ãã¢ãã«ãšã¢ãã«ã®ãã©ã¡ãŒã¿ãå®çŸ©ããŸããäžèšã»ã«ã®äž2è¡ã®ãšãããchat_request.messageã«queryã®ããã¹ãããchat_request.documentsã«ãã¯ãã«é¡äŒŒæ€çŽ¢ããã³rerankingçµæã®ãã£ã³ã¯ããã¹ããå ¥åããŠããŸãã
generative_ai_inference_client = oci.generative_ai_inference.GenerativeAiInferenceClient(config=config, service_endpoint=endpoint, retry_strategy=oci.retry.NoneRetryStrategy(), timeout=(10,240))
chat_detail = oci.generative_ai_inference.models.ChatDetails()
chat_request = oci.generative_ai_inference.models.CohereChatRequest()
# ã¢ãã«(Command Rãããã¯Command R Plus)ã®å®çŸ©
# command-r ã®ã¢ãã«ãå®çŸ©
# chat_detail.serving_mode = oci.generative_ai_inference.models.OnDemandServingMode(model_id="ocid1.generativeaimodel.oc1.us-chicago-1.amaaaaaask7dceyawk6mgunzodenakhkuwxanvt6wo3jcpf72ln52dymk4wq")
# command-r-plusã®ã¢ãã«ãå®çŸ©
chat_detail.serving_mode = oci.generative_ai_inference.models.OnDemandServingMode(model_id="ocid1.generativeaimodel.oc1.us-chicago-1.amaaaaaask7dceya7ozidbukxwtun4ocm4ngco2jukoaht5mygpgr6gq2lgq")
chat_detail.chat_request = chat_request
chat_detail.compartment_id = compartment_id
# ã¢ãã«(Command Rãããã¯Command R Plus)ã®ãã©ã¡ãŒã¿ã®å®çŸ©
chat_request.max_tokens = 600
chat_request.temperature = 1
chat_request.frequency_penalty = 0
chat_request.top_p = 0.75
chat_request.top_k = 0
# ããã³ããã®å
¥å
chat_request.message = query
# é¡äŒŒæ€çŽ¢çµæã®å
¥å
chat_request.documents = json_contents_list
ã¢ãã«ã®å®çŸ©ãçµãããŸããã®ã§ããã¹ãçæãè¡ããçµæã衚瀺ããŸãã
chat_response = generative_ai_inference_client.chat(chat_detail)
print(chat_response.data.chat_response.text)
åºåãšããŠã¯ä»¥äžã®éããRerankingçµæ(ãšãã¯ãã«ããŒã¿ããŒã¹ã®é¡äŒŒæ€çŽ¢çµæ)ã䜿ã£ãŠæ£ããããã¹ããçæãããŠããããšãåãããŸãã
OraBoosterã¯ãå
é²çãªæšé²æè¡ãæã€åœç€Ÿéçºã®ãã±ãããšã³ãžã³ã§ãããã®ç¬èªæ§ãšé«æ§èœãã¯äººé¡ã®å®å®é²åºã«é©åœãããããã§ããããé·æéã«ãããå®å®é£è¡äžãå®å®ããé£è¡è»éãç¶æããããã·ã§ã³ã®æåçãé«ããŸãããã€ãªããã¯ã»ãªã¢ã¯ã·ã§ã³ã»ã¬ã¹ãã³ããŒãæèŒãããŠããŸãã
ã€ãã§ã«ãRerankingçµæ(ãšãã¯ãã«ããŒã¿ããŒã¹ã®é¡äŒŒæ€çŽ¢çµæ)ã䜿ããªããã¿ãŒã³ãã€ãŸãRAGã§ãªãæ§æã§ããã¹ãçæãããŠã¿ãŸããäžèšã®ãšãããã¢ãã«ã®å®çŸ©ã®ã³ãŒãã®chat_request.documentsã®éšåãã³ã¡ã³ãã¢ãŠãããŠRAGã§ãªãç¶æ³ãäœããŸãã
generative_ai_inference_client = oci.generative_ai_inference.GenerativeAiInferenceClient(config=config, service_endpoint=endpoint, retry_strategy=oci.retry.NoneRetryStrategy(), timeout=(10,240))
chat_detail = oci.generative_ai_inference.models.ChatDetails()
chat_request = oci.generative_ai_inference.models.CohereChatRequest()
# ã¢ãã«(Command Rãããã¯Command R Plus)ã®å®çŸ©
# command-r ã®ã¢ãã«ãå®çŸ©
# chat_detail.serving_mode = oci.generative_ai_inference.models.OnDemandServingMode(model_id="ocid1.generativeaimodel.oc1.us-chicago-1.amaaaaaask7dceyawk6mgunzodenakhkuwxanvt6wo3jcpf72ln52dymk4wq")
# command-r-plusã®ã¢ãã«ãå®çŸ©
chat_detail.serving_mode = oci.generative_ai_inference.models.OnDemandServingMode(model_id="ocid1.generativeaimodel.oc1.us-chicago-1.amaaaaaask7dceya7ozidbukxwtun4ocm4ngco2jukoaht5mygpgr6gq2lgq")
chat_detail.chat_request = chat_request
chat_detail.compartment_id = compartment_id
chat_request.max_tokens = 600
chat_request.temperature = 1
chat_request.frequency_penalty = 0
chat_request.top_p = 0.75
chat_request.top_k = 0
# ããã³ããã®å
¥å
chat_request.message = query
# é¡äŒŒæ€çŽ¢çµæã®å
¥å
# chat_request.documents = json_contents_list
ãã®ç¶æ ããããã¹ãèšæ£ãè¡ããŸãã
chat_response = generative_ai_inference_client.chat(chat_detail)
print(chat_response.data.chat_response.text)
ãããšãäžèšã®éãããã«ã·ããŒã·ã§ã³ãçºçããããã¹ããçæãããŠããããšãåãããŸãã
OraBoosterã¯ãå£è
è¡çãšæ¯ã®å¥åº·ã«è¯ã圱é¿ãäžããããšãç®çãšããå£è
è¡çããã€ã¹ã§ãããªãŒã©ã«ã»Bã«ãã£ãŠäœãããããœããã¯æè¡ã䜿ã£ãå£è
æŽæµããã€ã¹ã§ãæ¯ã®ã¯ãªãŒãã³ã°ãšæ¶æ¯ãå©ãããšèšãããŠããŸãããªãŒã©ã«ã»ã±ã¢ã®ã«ãŒãã£ã³ãåäžãããããã«èšèšãããæ¯ç§å»ã«ããã¯ãªãŒãã³ã°ã®åœæã«è¿ã¥ããããšãç®çãšããŠããŸãã Ø·Ø§ÙãªãŒãã¯ãããåç©æŽæµãmassageã¢ãŒããªã©ã®æ©èœãããã€ããããå£è
è¡çãæ¹åããããã«äœ¿çšã§ããŸããããã¯ããªãã®æ¯ç§è¡çç¿æ
£ã«è¿œå ã§ããããŒã¿ãã«ã§äŸ¿å©ãªããã€ã¹ã§ããããããæ¯ç§å»ãæ¯ç§è¡ç士ã«ããå°éçãªã¯ãªãŒãã³ã°ã®ä»£æ¿ãšã¯èŠãªãããŸããã
ããã¹ãçæ(Cohere瀟 Command-R-Plusã®ã¢ãã«)
çªå€ç·šãšããŠCohere瀟 Command-R-Plusã®ã¢ãã«ã§ãããã¹ãçæãããŠã¿ãããšæããŸããäžèšã³ãŒãã®messageãããã³ããã®ããã¹ãããŒã¿ãdocumentsãé¡äŒŒæ€çŽ¢ãšRerankã«ããåŸãããããã3ã®ãã£ã³ã¯ããã¹ãã§ãã
import cohere
co = cohere.Client("xxxxxxxxx")
response = co.chat(
model='command-r-plus',
# queryã¯ããã³ããããã¹ããä»åã®å Žåã¯ãOraBoosterãšã¯äœã§ããïŒãã§ãã
message=query,
# documentsã«ãªã©ã³ã¯åŸã®ãã£ã³ã¯ããã¹ã3ã€ãå
¥åããŸãã
documents=json_contents_list
)
print(response.text)
å®è¡ããŠã¿ããšãã¡ãããšãã¯ãã«ããŒã¿ããŒã¹ã®ããã¥ã¡ã³ãã䜿ã£ãŠããã¹ããçæãããŠããããšãããããŸãã
'OraBoosterã¯ã次äžä»£ã®å®å®æ¢æ»ã®ããã®å
é²çãªæšé²æè¡ãåãããåœç€Ÿãéçºãããã±ãããšã³ãžã³ã§ãããã®é©æ°çãªæè¡ãšæªæ¥å¿åã®èšèšã«ãããå®å®æ¢æ»ã®æ°ããªæä»£ãåãéããšãšãã«ãé·æéã®å®å®é£è¡äžã§ãå®å®ããé£è¡è»éãç¶æããããšãã§ããŸãã'
æŽã«ãRAGãæ§æããã«ããã¹ãçæã¢ãã«ã ãã«ä»»ããŠããã¹ãçæãããŠã¿ãŸããLLMãžã®åãåãããããäžèšã³ãŒãã®äžã§ããã¯ãã«ããŒã¿ããŒã¹ãžã®é¡äŒŒæ€çŽ¢çµæãæå®ããåŒæ°documentsã®é ç®ãã³ã¡ã³ãã¢ãŠãããŠã¿ãŸãã
response = co.chat(
model='command-r-plus',
message=query,
# documentsãã³ã¡ã³ãã¢ãŠãããé¡äŒŒæ€çŽ¢ã®çµæã䜿ããªãããã«èšå®
# documents=json_contents_list
)
print(response.text)
ãããšãçµæã¯åœç¶ãã«ã·ããŒã·ã§ã³æºèŒã®ããã¹ããçæãããŸãã
'OraBooster ã¯ãæ¯ã®å¥åº·ããµããŒãããå£è
å
ã®ç°å¢ãæ¹åããããšãç®çãšããå£è
è¡ççšåã®ãã©ã³ãã§ããOraBooster ã®è£œåã«ã¯ãæ¯ç£šãç²ãããŠã¹ãŠã©ãã·ã¥ãæ¯ãã©ã·ãªã©ãå«ãŸããå£è
å
ã®çްèã®ãã©ã³ã¹ãæŽããæ¯ãšæ¯èã®å¥åº·ãä¿é²ãããšãããŠããŸãã\n\nOraBooster ã®è£œåã¯ãå€©ç¶æåã䜿çšããŠãããå£è
å
ã® pH ãã©ã³ã¹ãæé©åããããšã§ãã©ãŒã¯ãæ¯å¢ã®åœ¢æãæå¶ããæ¯èçãæ¯åšç
ãäºé²ãã广ãæåŸ
ã§ããŸãããããã®è£œåã¯ãæ¯ã®ãšãã¡ã«è³ªã匷åããæ¯ãçœããã广ããããšèšãããŠããŸãã\n\nOraBooster ã¯ãå£è
å
ã®å¥åº·ãå
šèº«ã®å¥åº·ãšå¯æ¥ã«é¢ä¿ããŠãããšããèãã«åºã¥ããŠéçºãããŠãããå£è
å
ã®ç°å¢ãæ¹åããããšã§ãããå¥åº·çãªç掻ãéãããšãç®æããŠããŸãããããã®è£œåã¯ãæ¯ç§å»ãå»çå°éå®¶ãšååããŠéçºãããŠãããå£è
è¡çã®ç¶æã«åœ¹ç«ã€äŸ¿å©ã§å¹æçãªãœãªã¥ãŒã·ã§ã³ãæäŸããããšãç®çãšããŠããŸãã'
ãã®ããã«æ¯èŒãããšRAGã®æå¹æ§ãããããããŸããã
ãããã«
çŸåšãã¯ãã«ããŒã¿ããŒã¹ã®åžå Žã«ã¯æ°åãšããããã補åãååšããŸãã(ãããLangChainããµããŒãããŠãããã¯ãã«ããŒã¿ããŒã¹ã¯70以äžãã£ããšæããŸãã)ãã®ãããªäžã§ãã¯ãã«ããŒã¿ããŒã¹ãšããŠOracle Databaseã䜿ãã¡ãªããã¯äœãªã®ãïŒãšèããŠã¿ããšä»¥äž3ã€ã»ã©ãæãæµ®ãã³ãŸãã
-
Oracle Databaseã¯èšããŸã§ããªãRDBã§ãã®ã§ãåºæ¬çãªåŠçã¯SQLã§å®è¡ããŸãããã®ç¹SQLã«æ £ã芪ããã§ãããŠãŒã¶ãŒã«ãšã£ãŠæ±ãããããšããç¹ã¯ééããªãã§ããããããããSQLã§å®è¡ã§ãããã®åºæ¬åŠçãåçŽãªãã¯ãã«æ€çŽ¢ã ãã§ã¯ãªããããã¥ã¡ã³ãããŒããŒãããã¹ãã¹ããªãã¿ãŒ(ãã£ã³ã«ãŒ)ãŸã§ã«ããŒããŠããŸãããŸããæšä»ã¯RAGã®ç²ŸåºŠæ¹åã«ããã³ãã倿ãšåŒã°ããææ³ã䜿ãã±ãŒã¹ããããŸããLangChainãLlamaIndexã«ãå®è£ ãããŠãããã䜿ããããã¯ããã¯ã§ãã AI Vector Searchã§ãUTL_TO_GENERATE_TEXT()ãšããããã·ãŒãžã£ã§é¡äŒŒã®åŠçãã§ããããã«ãªã£ãŠããŸãããã®ä»ã®UTL_TO_XXXç³»ã¯æ¯é䜿ãããªããŠã¿ãŠãã ããã
-
RDBãããã«ãPineconeãFaissãChromaãšãã£ããã¯ãã«ãã€ãã£ããªãã¯ãã«ããŒã¿ããŒã¹ãšç°ãªãã衚æ§é ãå©çšããæ€çŽ¢ãããããããšæããŸããä»åã®èšäºã§ã¯ããã¥ã¡ã³ãå ã®ããã¹ãããŒã¿ããã¯ãã«æ€çŽ¢ããã ãã®ã·ã³ãã«ãªåŠçãµã³ãã«ãã玹ä»ããŸããããå®ã·ã¹ãã ã§ã¯ãã®ãããªåçŽãªéæ§é åããŒã¿ã«ãã©ã¹ããŠãæ§é åããŒã¿ãçµã¿åãããæ€çŽ¢ã®ããŒãºããããšæããŸãããã®ãããªå Žåã衚æ§é ãçãããæŽã«SQLã§æ€çŽ¢ã§ããRDBã®ä»çµã¿ã¯å€§ãã«æå¹ã ãšæããŸããçããŸã®äŒæ¥ã«ããããŸããŠãOracle DatabaseãéçšããŠããã ããŠããã±ãŒã¹ã¯å€ãããšæããŸãããã®Oracle Databaseã®äžã«ã¯ããžãã¹ã®äŸ¡å€ãçã¿åºãããŒã¿ããããããããæå¹æŽ»çšããããã®ãã¯ãã«ããŒã¿ããŒã¹ãéžå®ããå Žåããã¯ãåãOracle Databaseã®èŠªåæ§ã¯ééããªãã§ãããã
-
ãã¯ãã«ããŒã¿ããŒã¹ã§ã¯ã€ãã€ãAIé¢é£ã®æ°æ©èœãããã¯ãã«ããŒã¿ã®ããŒã¿åŠçé¢é£ã®æ©èœã°ããã«ç®ãè¡ããã¡ã§ããããããã¯ã·ã§ã³ã·ã¹ãã ãäœãå Žåã¯ããã¯ãããŒã¿ããŒã¹ã®éžå®ãããŠãããšããæèãå¿ããªãããã«ããããã®ã§ãããããã«ãã¯ãã«ããŒã¿ããŒã¹ãšã¯ããçµå±ã¯æ§èœãå¯çšæ§ãéçšæ§ãªã©ã®èŠä»¶ãããŒã¹ã«è£œåéžå®ãããããšã«ããŸãããã®ç¹ã«ãããŠãèèã®Oracle Databaseã¯ãšã³ã¿ãŒãã©ã€ãºã®ããŒã¿ããŒã¹ãšããŠå ç¢ãªæ©èœãä»çµã¿ãæ±ãããŠãŒã¶ãŒã«éžã°ããŠããå®çžŸãããããã®ãããªããŒã¿ããŒã¹ãä»ãã¯ã©ãŠãã§ç°¡åã«ãããŠå®äŸ¡ã«å©çšã§ããç¹ã¯å€§ããªã¡ãªããã ãšæããŸãã
ãšãå€å°ãªã©ã¯ã«èŽå±ã«æžããŠããŸããŸããããå°ãªããããè³åããã ããæ¹ãããã£ãããã®ã§ã¯ãªãã§ããããããã®æ©äŒã«ãšã³ã¿ãŒãã©ã€ãºåãã®Oracle Database 23aiãšCohereã§å®è£ ãããšã³ã¿ãŒãã©ã€ãºRAGãOracle Cloudã§åãããŠã¿ãã®ã¯ãããã§ããããã



