ð€ã¯ãããŠã®AIéçº ïœãŒãããã®IRISç°å¢æ§ç¯ãšOpenAI飿ºãã£ãããããäœãïœ
ðã³ã³ãããå©çšã㊠InterSystems IRIS ã®ç°å¢ãã³ãã³ã 1 ã€ã§ç«ã¡äžããæšæºç㪠IDE ã§ãã VSCode ã䜿çšããŠéçºäœéšãå³ãã£ãŠããã ããªãããOpenAI API ãšé£æºããã·ã³ãã«ãªãã£ããããããäœæããŸãã
IRIS ã®ç°å¢æ§ç¯ãããã£ãããããã¢ããªå®è£ ãŸã§ãäžç·ã«è©ŠããªãããAI ã¢ããªãäœæã§ããïŒæã£ãããç°¡åïŒããåå è ã®çãããšå ±æããŸãããïŒð¥
ïŒç®æ¬¡ïŒ
- Phase1-çéç°å¢æ§ç¯
- Phase2-IRIS ããŒã¿ããŒã¹ã®åºç€äœéš
- Phase3-ãã¯ãã«æ€çŽ¢
- Phase4-ããã³ããšã³ã飿ºãšãã£ããããã宿
以äžã®ã€ã³ã¹ããŒã«ãšã³ã³ããã€ã¡ãŒãžã® pull ãäºåã«è¡ã£ãŠãã ããã
-
VSCode
-
Docker
-
Docker compose
-
GitïŒå¯èœã§ããã°ïŒ
-
IRIS ã³ã³ããã® Pull
docker pull containers.intersystems.com/intersystems/iris-community:2025.2
æºåã¯ããããã§ããïŒïŒð
ããã§ã¯æ©éãã¯ãããŸãããïŒðš
docker compose ã䜿çšã㊠IRIS ã³ã³ãããç«ã¡äžããVSCode ã管çããŒã«ããã®æ¥ç¶ãäœéšããŸãã
æ©éã仿¥ã®æµããå«ãŸãããªããžããªã clone ãŸãã¯ãããŠã³ããŒãããŸãããã
WSL äžã« dockerãdocker composeãgit ãã€ã³ã¹ããŒã«ããŠããå Žåã¯ãWSL ã®ã¿ãŒããã«äžã§
git cloneãè¡ã£ãŠãã以äžã®æµãã§ VSCode ãéããšæäœãç°¡åã§ãã
git clone https://github.com/Intersystems-jp/TryAIDevelopment.git
Zipã§ããŠã³ããŒãããæ¹ã¯ãå±éããŠãã ããã
git clone ãŸãã¯å±éãããã£ã¬ã¯ããªã«ç§»åãã以äžå®è¡ãããš VSCode ãéãæ¬æ¥ã®ã¯ãŒã¯ã¹ããŒã¹ãéããŸãã
code .
ã¡ã¢ïŒVSCode äžã§ README ã以äžã®æ¹æ³ã§éããšè¡šç€ºåœ¢åŒã§åç §ã§ããŸãã
ã¯ãŒã¯ã·ã§ããçŽäžã« .env ãããã®ã§éããŸãã
çŸåš
OPENAI_API_KEY=
ãšèšèŒãããŠããŸããã= ã®å³åŽ OpenAI ã® APIããŒæ å ±ã远èšãä¿åããŠãã ããïŒäºéåŒçšç¬Šã¯äžèŠã§ãïŒã
次ã«ã以äžã®ã³ãã³ããå®è¡ããŸããååå®è¡æã®ã¿ã³ã³ããã®ãã«ããå®è¡ããããã«ããçµãããšã³ã³ãããéå§ããŸãã
docker compose up -d
äºåã« IRIS ã®ã³ã³ããã€ã¡ãŒãžã pull ããŠããªãå Žåã¯å°ãæéãããããŸãã
以äžã§ãæ¬æ¥ã®ç°å¢æ§ç¯å®äºã§ãïŒ
次ã¯ãVSCode ãå©çšã㊠IRIS ã«æ¥ç¶ããããã¿ãŒããã«ã»ãã·ã§ã³ãã IRIS ã«ãã°ã€ã³ããŠã¿ãŸãããïŒ
IRIS ã«æ¥ç¶ããããã«å¿ èŠãªãObjectScript ãšã¯ã¹ãã³ã·ã§ã³ãã€ã³ã¹ããŒã«ããŸãã
ã€ã³ã¹ããŒã«æ¹æ³ã®å³è§£ïŒ ãVSCodeã䜿ã£ãŠã¿ããïŒïŒ1ãObjectScriptçšãšã¯ã¹ãã³ã·ã§ã³ã®ã€ã³ã¹ããŒã«ããã芧ããã ããªããã€ã³ã¹ããŒã«ããŠã¿ãŸãããã
ã€ã³ã¹ããŒã«ãå®äºããããã³ã³ããã§èµ·åããŠãã IRIS ã«æ¥ç¶ããŸããæ¥ç¶ãããšã¯ãŒã¯ã¹ããŒã¹ã§ IRIS ã®ã¯ã©ã¹å®çŸ©ã®äœæããµãŒããŒåŽã³ãŒãã®åç §ã管çããŒã«ãèµ·åããããã®ã¡ãã¥ãŒè¡šç€ºãªã©ãè¡ããŸãã
æ¬æ¥ã®æ¥ç¶å æ å ±ã¯ä»¥äžã®éãã§ãã
| host | port | scheme | pathPrefix |
|---|---|---|---|
| 127.0.0.1 | 52773 | http | æå®ããŸãã |
æ¥ç¶æ¹æ³ã®å³è§£ïŒ ãVSCodeã䜿ã£ãŠã¿ããïŒ2ããµãŒããžæ¥ç¶ããããã芧ããã ããªããèšå®ããŠã¿ãŸãããã
æ¥ç¶ãå®äºãããšã管çããŒã¿ã«ãéãããã®ã¡ãã¥ãŒãªã©ãå³ã®ããã«éãããšãã§ããŸãã
VSCode äžéšã«è¡šç€ºãããã¡ãã¥ãŒã®äžãããOpen Management Portalããã¯ãªãã¯ãã管çããŒã¿ã«ãéããŠã¿ãŸãããã
ãŠãŒã¶åããã¹ã¯ãŒãã®å ¥åç»é¢ã衚瀺ãããŸãããã³ãºãªã³ç°å¢ã§ã¯ã以äžã®ãŠãŒã¶åããã¹ã¯ãŒãã§ãã°ã€ã³ããŠãã ããã
| ãŠãŒã¶å | ãã¹ã¯ãŒã |
|---|---|
| SuperUser | SYS |
ãã°ã€ã³ãå®äºãããšä»¥äžã®ç»é¢ãéããŸãã

ãã³ãºãªã³ã§ã¯ã管çããŒã¿ã«ã®SQLã¡ãã¥ãŒãäžå¿ã«æäœããŠããŸãã
管çããŒã¿ã« > [ã·ã¹ãã ãšã¯ã¹ãããŒã©] > [SQL]
ãªããSQL ã®æäœã«ã€ããŠã¯ãSQL shell ã§ãè¡ããŸããSQL shell ãéãããã«ãIRIS ã«ãã°ã€ã³ããŠã¿ãŸãããã
VSCode ã®ãTerminalãã¡ãã¥ãŒãã¯ãªãã¯ãããNew Terminalããã¯ãªãã¯ããã³ã³ããã«ãã°ã€ã³ããŸãã
æ¬æ¥ã®IRISã®ã³ã³ããåã¯ãtryaidevelop ã§ãã
docker exec -it tryaidevelop bash
ã³ã³ããã«ãã°ã€ã³ã§ããããæ¬¡ã¯ IRIS ã«ãã°ã€ã³ããŸãïŒä»¥é IRIS ã«ãã°ã€ã³ãã端æ«ããIRIS ã¿ãŒããã«ããšåŒãã§ãããŸãïŒã
iris session iris
å®è¡äŸã¯ä»¥äžã®éãã§ãã
irisowner@0809d9d83a12:/opt/src$ iris session iris
ããŒã: 0809d9d83a12 ã€ã³ã¹ã¿ã³ã¹: IRIS
USER>
USER> ã¯ããŒã ã¹ããŒã¹ã®ããã³ããã§ãIRIS ã® USER ããŒã ã¹ããŒã¹ã«ãã°ã€ã³ããããšã衚ããŠããŸãã
ãã®ããã³ããã衚瀺ãããããã°ã€ã³æåã§ãã
USER ããŒã ã¹ããŒã¹ã¯ãUSER ããŒã¿ããŒã¹ã«æ¥ç¶ããå®çŸ©ãè¡ãããŠããŸãã®ã§ãããã§ SQL shell ã«åãæ¿ã㊠CREATE TABLE æãå®è¡ãããšãUSER ããŒã¿ããŒã¹ã«ããŒãã«å®çŸ©ãä¿åãããããã«ãªããŸãã
SQL shell ã«åãæ¿ããã«ã¯ã:s ãå
¥åããŸããSQL shell ãçµäºãããšãã¯ãquit ãŸãã¯ãq ãå
¥åããŸãã
äŸïŒ
USER>:s
SQL Command Line Shell
----------------------------------------------------
The command prefix is currently set to: <<nothing>>.
Enter <command>, 'q' to quit, '?' for help.
[SQL]USER>>quit
USER>
ã¡ãªã¿ã«ãã³ã³ãããã°ã€ã³åŸãçŽæ¥ IRIS ã® SQL shell ãéãããšãã§ããŸããiris sql iris
詊ãããæ¹ã¯ãäžæŠ IRISã®æ¥ç¶ãçµäºãããããhalt ãŸã㯠h ãå
¥åããŸãã
USER>h
irisowner@0809d9d83a12:/opt/src$
çŽæ¥ IRIS ã® SQL shell ãèµ·åããæ¹æ³ã¯ä»¥äžã®éãã§ããçµäºããå Žåã¯ãquit ãŸã㯠q ãå
¥åããŸãã
å®è¡äŸã¯ä»¥äžã®éãã§ãã
irisowner@0809d9d83a12:/opt/src$ iris sql iris
SQL Command Line Shell
----------------------------------------------------
The command prefix is currently set to: <<nothing>>.
Enter <command>, 'q' to quit, '?' for help.
[SQL]USER>>q
irisowner@0809d9d83a12:/opt/src$
ãªããã³ã³ããããã°ã¢ãŠãããå Žå㯠exit ãå
¥åããŠãã ããã
ãããŸã§ã®æµãã§ãIRIS ã³ã³ãããéå§ããVSCode ã® ObjectScript ãšã¯ã¹ãã³ã·ã§ã³ã䜿çšããŠãIRIS ã«æ¥ç¶ãè¡ããŸããã
VSCode ã䜿çšããŠã管çããŒã¿ã«ã®èµ·åããTerminal ãå©çšã㊠IRIS ãžã®ãã°ã€ã³ïŒIRIS ã¿ãŒããã«ã«ãã°ã€ã³ïŒãSQL shell ã®èµ·åã確èªããŸããã
管çããŒã¿ã«ãã¿ãŒããã«ã»ãã·ã§ã³ãããã°ã©ãã³ã°èšèªããæ¥ç¶ãããšãã®æ¥ç¶å æ å ±ã«ã¯ãããŒã ã¹ããŒã¹ãæå®ããã«ãŒã«ããããŸãã®ã§ããã³ãºãªã³ç°å¢ã§ã¯ãUSER ããŒã ã¹ããŒã¹ ãæ¥ç¶å æ å ±ãšããŠå¿ ãæå®ããŠããŸãããã
ããŒã ã¹ããŒã¹ãšã¯ïŒã«ã€ããŠè©³ããã¯ãåèåç»ããåç §ãã ããïŒð¥ InterSystems IRIS ã§éçºãå§ããŠã¿ããïŒïŒ7:03以éïŒããŒã ã¹ããŒã¹ãšããŒã¿ããŒã¹ã«ã€ããŠïŒ
ããŒãã«å®çŸ©ãäœæã VSCode ã管çããŒã«ããããŒã¿ã®åç §ïŒæŽæ°ãªã©ã詊ããŸãã
ãã³ãºãªã³ã§ã¯ãð€AI ãã£ããããããäœæããŠãããŸãã
ãã£ããç»é¢ãéããŠããååã®äŒè©±å±¥æŽãåçŸã§ãããšäŸ¿å©ã§ãã®ã§ãäŒè©±å±¥æŽãããŒã¿ããŒã¹ã«ç»é²ã§ããããã«ããŒãã«ãçšæããŠã¿ãŸãã
ããŒãã«ïŒFS.MyLog ã®ã«ã©ã å®çŸ©ã¯ä»¥äžã®éãã§ãã
| ã«ã©ã å | å | å 容 |
|---|---|---|
| LogDT | DATETIME | ãã°ãèšé²ããæ¥ä»æå» |
| Content | VARCHAR(10000) | ãã°èšé²æç¹ã®äŒè©±å±¥æŽå šäœ |
ã§ã¯ãæ©éããŒãã«å®çŸ©ãäœæããŸãããïŒ
DDL æã®å®è¡ã¯ã管çããŒã¿ã«ã®SQLç»é¢ããã§ããIRIS ã¿ãŒããã«ã SQL Shell ã«åãæ¿ããŠå®è¡ã§ããã©ã¡ãã§ãããŸããŸããã
SQL Shell ã¯èµ·ååŸãè€æ°è¡ã®å®è¡ã¢ãŒãã§ã¯ãããŸããã®ã§ã1床 Enter å ¥åãããšäŸ¿å©ã§ããå®è¡åœä»€ã«ã¯ãgo ãå ¥åããŠãã ããã
å®è¡ããæç« ã¯ä»¥äžã®éãã§ãã
create table FS.MyLog (LogDT DATETIME,Content VARCHAR(100000))
å®è¡åŸã詊ãã«ããŒã¿ãç»é²ããŠã¿ãŸãããïŒ
insert into FS.MyLog (LogDT,Content) VALUES('2025-10-31 12:10:05','仿¥ã¯äœã®æ¥ïŒ')
衚瀺ããŠã¿ãŸãããã
select * from FS.MyLog
åŸã§ãã£ãããããããã®äŒè©±å±¥æŽãç»é²ãããã®ã§ãäžæŠããŒã¿ãã¯ãªã¢ãããæ¹ã¯ãtruncate table ãå®è¡ããŠãã ããã
truncate table FS.MyLog
ãããŸã§ã®æµãã§ãIRIS ã®ç®¡çããŒã¿ã«ã SQL shell ã䜿ã£ãŠããŒãã«å®çŸ©ãäœæããããŒã¿ç»é²ãåç §ãè¡ããããšã確èªããäžè¬ç㪠RDB 補åãšåãããã« SQL ã®æäœãã§ããããšç¢ºèªã§ããŸãã
次ã¯ããããããã¯ãã«æ€çŽ¢ã®ããã®æºåãè¡ã£ãŠãããŸãïŒ
VSCode ã® SQLTools ãšã¯ã¹ãã³ã·ã§ã³ãå©çšããŠãæäœã§ããŸãã詳ããã¯ãVSCodeïŒSQLTools ã§ IRIS ã«æ¥ç¶ããæ¹æ³ãããåç §ãã ããã
ç€Ÿå ææžã䜿ã£ãçæ AI 掻çšãç®æãããµã³ãã«æç« ããã¯ãã«åãããã®ã IRIS ã«æ ŒçŽããŸãã
瀟å ã®èŠåïŒäººäºèŠå®ïŒãããç¥ã AI ãã£ããããããäœã£ãŠä»¥äžã®ãããªè³ªåã«åçã§ããããã«ããŸãã
-
è²äŒããšãããšæããã©ãç³è«ã®ä»æ¹ãæºåããªããšãããªããã®ã¯äœïŒ
-
å€åäžã«é段ã§èžã¿å€ããŠè¶³ã骚æããŸãããæ²»çè²»ãªã©äŒç€Ÿã«è«æ±ã§ããŸããïŒ
-
ä»è·äŒæãååŸããå Žåã®ç³è«æé ãæããŠãã ãããäžè¬çãªç€Ÿå ã®å ±åé ãæããŠãã ããã
-
ãã¯ãã©ãåããŠãã人ãããããšã人äºã«äŒããããšæããŸããå¯åè ãä¿è·ããèŠåã¯ãããŸããïŒ
çæ AI ã«äžèšè³ªåããããšãã¡ããåçã¯è¿ããŸãããäžè¬çãªåçããè¿ããªãããã瀟å ã®äººäºèŠå®ã«åã£ãŠããã®ããŸã§ã¯ããããŸããã
ããã§ã瀟å ã®èŠåã«æ²¿ã£ãåçãè¿ããããã«ããã£ãããããã«å ¥åããã質åã«é¡äŒŒããæ å ±ã人äºèŠå®ããå ¥æãããŠãŒã¶ã®è³ªåã«æ·»ããŠçæ AI ã«æž¡ããåçãäœã£ãŠãããããšæããŸãã
ãã³ãºãªã³ã§äœ¿çšãã人äºèŠå®ã¯ãåççãå ¬éããŠãã ãã¢ãã«å°±æ¥èŠåã ã䜿çšããŸãã
泚æïŒã¢ãã«å°±æ¥èŠåã§ãããããå ·äœçãªæ°å€ãªã©ã¯å«ãŸããŠããŸããããã®ãããååãªè£è¶³æ å ±ã«ãªããªãå¯èœæ§ããããŸãã
çæ AI ã«ãã¡ã€ã«ãæ·»ä»ããŠåçãããŠãããã®ã 1 ã€ã®ææ®µã§ããã人äºèŠå®ã¯æ å ±éãå€ããããã£ããå ã§äœ¿çšã§ããããŒã¯ã³æ°ã®å¶éãããã«è¶ ããŠããŸãå¯èœæ§ãé«ãã§ãã
ãã®ãããæ²¢å±±ããæ å ±ã®äžããã質åã«é¡äŒŒããæ å ±ã ããæœåºããã°ãããŒã¯ã³æ°ãæžããããšãã§ããŸãã
ãã® ãé¡äŒŒããæ å ±ã ããæœåºããã ããã«ã¯ãã©ããããããã§ããããã»ã»ã
ããã§ã ð¡ãã¯ãã«æ€çŽ¢ã§ãïŒð¡
IRIS ã§ãã¯ãã«æ€çŽ¢ãè¡ãããã«ã¯ã人äºèŠå®ã®äžã«å«ãŸããæ å ±ãããã¯ãã«ãäœã£ãŠããŒãã«ã«æ ŒçŽããŠããå¿ èŠããããŸãã
ããã§åé¡ã«ãªãã®ãã人äºèŠå®ã¯éåžžã«é·ãæç« ã§ãããã³ãºãªã³ã§äœ¿çšãã OpenAI ã® text-embedding-3-small ã® EmbeddingïŒãã¯ãã«åïŒã¯ã1536 ããŒã¯ã³ãªã®ã§ãPDF ã«ããå
šæååãããã¯ãã«ãäœãããšã¯äžå¯èœã§ãã
ãã¯ãã«ãæ£ããäœãããã«ã¯ã人äºèŠå®ã®æç« ã 1536 ããŒã¯ã³ã®å¶éã«åãããã«ãåå²ããŠããå¿ èŠãããããã§ãã
åèæ å ±ïŒTiktokenizer ã§ã¯ãã¢ãã«ãæå®ããåŸã確èªãããæååãå ¥åãããšããŒã¯ã³ãµã€ãºãã«ãŠã³ãããŠãããŸããgpt-4-mini ã¯ãão200k_baseã text-embedding-3-small ã¯ããcl100k_baseããæå®ããŸãããåèïŒEncodings
次ã«åé¡ã«ãªãã®ããPDF ããã©ã®ããã«æç« ãåãåºãããã«ã€ããŠã§ãã
æ§ã ãªæ¹æ³ããããŸãããä»åã¯è±å¯ãªæ©èœãæã€ Docling ã®åãåããŸããã
åèæ å ±ïŒããã¥ã¡ã³ããã¡ã€ã«ã®è§£æãšå€æã«ç¹åãããªãŒãã³ãœãŒã¹ããŒã«ãdoclingãã詊ããŠã¿ã
Docling ã䜿ããäžæŠ PDF ãããŒã¯ããŠã³åœ¢åŒã«å€æããŠããŸãã
ããŒã¯ããŠã³åœ¢åŒã§ãªããŠãåçŽãªæåã®æœåºãã§ããŸãããããŒã¯ããŠã³ã®è¯ãç¹ã¯ãææžã®ã¿ã€ãã«ãèŠåºãæ å ±ãã¿ã€ããããç¹ã§ãããŸã衚ãããŒã¯ããŠã³ã§è¡šçŸã§ãããããä»åã¯ãããŒã¯ããŠã³âããŒã¯ã³ã®å¶éæªæºã®æååæœåº ãè¡ã£ãŠããŸãã
ãã®ã»ãã«ãããã£ãšè¯ãæ¹æ³ããããããããŸããïŒãåç¥ã§ããããã²å ±æãé¡ãããŸãïŒ
PDF ããã®å€æåŠçã§ãããæäœãããæ©æã«ãã£ãŠåŠçé床ãããªãéãããïŒMacã ãšæ°åç§ãè³Œå ¥ãã 3 幎çµéã® Windwos ã Google Colab ã ãš 20 åããªã©æ§ã ã§ããïŒãã³ãºãªã³ã§ã¯ãPDF ããããŒã¯ããŠã³ãããŒã¯ããŠã³ããããŒãã«æ ŒçŽã«å¿ èŠãªæ å ±ã«å€æãããã¡ã€ã«ïŒEmbeddingä»ãïŒã䜿çšããããšã«ããŸãã
| ãã¡ã€ã«å | ãã¡ã€ã«ã®åœ¢åŒ | ãåèïŒå€æã«äœ¿ã£ãããã°ã©ã |
|---|---|---|
| mhlw_full_caption_only.md | ããŒã¯ããŠã³ | pdfmarkdown.py |
| mhlw_hr_rules_chunk_embeddings.jsonl â»ãã®ãã¡ã€ã«ã®äžèº«ããã¯ãã«æ€çŽ¢ã§äœ¿çšããããŒãã«ã«æ ŒçŽããŸã |
JSON | markdownToChunk.py |
mhlw_hr_rules_chunk_embeddings.jsonl ã®äžã®æ å ±ãããŒãã«ã«ç»é²ããŸãã
JSON ã®äžèº«ã¯ä»¥äžã®éãã§ãã
{"id": "mhlw-hr-00001", "title": "ã¢ãã«å°±æ¥èŠå", "text": "什åïŒå¹ŽïŒæçåçåŽåçåŽååºæºå±ç£ç£èª²", "n_tokens": 30, "embedding": [-0.020464539527893066, 0.05013052746653557,ã-- çç¥]}
"text" ã®äžèº«ã® Embedding ã "embedding" ã«èšå®ãããŠããŸãã
"embedding" ã¯ãã¯ãã«ã§ãOpenAIã® text-embedding-3-small ã® EmbeddingïŒãã¯ãã«åïŒã¯ã1536 次å
ãªã®ã§ãVECTOR åãå©çšããŠã以äžã®ããã«ããŒãã«ãäœæããŸãã
CREATE TABLE FS.Document (
Source VARCHAR(100),
Title VARCHAR(100),
Text VARCHAR(100000),
NumOfToken INTEGER,
TextVec VECTOR(Float,1536)
)
ããŒãã«å®çŸ©ãããèŠããšããã¯ãã«çšã® VECTOR å以å€ã®éåžžã®åïŒVARCHARãINTEGERïŒã䜿çšããåãå«ãŸããŠããŸãã
äŸãã°ãããå€ã§ãã£ã«ã¿ãªã³ã°ããåŸããã¯ãã«æ€çŽ¢ã§é¡äŒŒãããã®ãååŸãããããšãããããªäœ¿ãæ¹ã«å©çšã§ããŸãã
ããã§ã¯ã管çããŒã¿ã«ã® SQL ç»é¢ããŸãã¯ãIRISã¿ãŒããã«ã SQL shell ã«åãæ¿ããŠãäžèš CREATE æãå®è¡ããŠãã ããã
ããŒãã«å®çŸ©ã®äœæãå®äºãããããã¯ãã«æ€çŽ¢ãé«éã«åŠçã§ããããã«ã以äžã®ã€ã³ããã¯ã¹æãå®è¡ããŸãã
CREATE INDEX HNSWIndex ON TABLE FS.Document (TextVec)
AS HNSW(Distance='DotProduct')
åŸã¯ãmhlw_hr_rules_chunk_embeddings.jsonl ãããŒãã«ã«ã€ã³ããŒãããã ãã§ãã
äºã IRIS ã®ã¯ã©ã¹å®çŸ©ã«ã€ã³ããŒãçšã¡ãœãããçšæããŠããŸããïŒFS.InstallUtils.clsã¯ã©ã¹ã®loadvectorjsonl() ã§ããïŒ
ã¡ãœããã®å®è¡ã¯ãIRIS ã¿ãŒããã«ã§è¡ããŸãã
iris session iris ã§ IRIS ã¿ãŒããã«ãèµ·åãã以äžå®è¡ããŸãã
do ##class(FS.InstallUtils).loadvectorjsonl("/data/mhlw_hr_rules_chunk_embeddings.jsonl",1)
IRIS ã¯ããŒã¿ããŒã¹åŽã§ããã°ã©ãã³ã°ãã§ããç¹åŸŽããããŸããã¡ãœããã®ã³ãŒã㯠IRIS ç¬èªã® ObjectScript ãŸã㯠Python ãéžæã§ããŸãã
以äžã§ãã¯ãã«æ€çŽ¢ã®ããã®ããŒãã«ã®æºåãå®äºã§ãã
æ©éããã¯ãã«æ€çŽ¢ã§ã質åå 容ã«é¡äŒŒãã人äºèŠå®ãæŸããã確èªããŠã¿ãŸãã
æ€çŽ¢ãè¡ãããã«ã¯ã質åå å®¹ã®æååã Embedding ããå¿ èŠããããŸãã
Embedding ã®ããã®ã³ãŒãã¯ããããããçšæããŠãã utils.py ã® getEmbed() 颿°ã«èšèŒããŠããŸãã
質åå 容ã getEmbed() ã®åŒæ°ã«æå®ãããã¯ãã«ãå ¥æããåŸãä»¥äž SQL ãå®è¡ããé¡äŒŒãã人äºèŠå®ãå ¥æã§ããããã¹ãããŸãïŒå®éã®å®è¡ã¯åŸã»ã©è¡ããŸãïŒã
select TOP 5 VECTOR_DOT_PRODUCT(TextVec,TO_VECTOR(?,FLOAT,1536)) as sim ,Source,Title,Text
FROM FS.Document ORDER BY sim DESC
ã¡ã¢ïŒSQL æå ã® ? ã¯åŒæ°å ¥åã®çœ®ãæãæåïŒãã¬ãŒã¹ãã«ãïŒã§ãã
ããã§ã¯æ©éãPython ã·ã§ã«ãèµ·åããŸããæ¬æ¥ã¯ãIRIS ã«ãã°ã€ã³ããã¿ãŒããã«ã Python ã·ã§ã«ã«åãæ¿ããŠå®éšããŠã¿ãŸãã
ïŒïŒ IRIS ã«ãã°ã€ã³ããã¿ãŒããã«ã Python shell ã«åãæ¿ããïŒïŒ
ããã¯ã©ãããããšããšèšããŸããšã
IRIS ã¯ãããŒã¿ããŒã¹ãªã®ã§ããããµãŒãåŽã§ Python ãå®è¡ã§ããŸãããã® Python ã¯ããEmbedded Python ãŸãã¯åã蟌㿠PythonããšåŒã°ããŠããŠãIRIS ãµãŒãå ã« Python ã®ã©ã³ã¿ã€ã ãçµã¿èŸŒãã§ããããããããã¯ãŒã¯ã³ãã¯ã·ã§ã³ã䜿çšããã« IRIS ã«ããããŒã¿ã«ã¢ã¯ã»ã¹ã§ããŸãã
ããã§ã¯æ©é詊ããŠã¿ãŸãããïŒ
IRIS ã«ãã°ã€ã³ããåŸãPython shell ã«åãæ¿ããã«ã¯ã:p ãå
¥åããŸãã
ã³ã³ããã«ãã°ã€ã³ããåŸã®ç¶æ
ãã iris session iris ã§ IRIS ã¿ãŒããã«ãéããŸãã
iris session iris
Python shell ã«åãæ¿ããŸãã
:p
ãããŸã§ã®ç»é¢äŸã¯ä»¥äžã®éãã§ãã
irisowner@6eb0d94d6ff1:/opt/src$ iris session iris
ããŒã: 6eb0d94d6ff1 ã€ã³ã¹ã¿ã³ã¹: IRIS
USER>:p
Python 3.12.3 (main, Aug 14 2025, 17:47:21) [GCC 13.3.0] on linux
Type quit() or Ctrl-D to exit this shell.
>>>
Embedding ã«å¿ èŠãª utils.py ãã€ã³ããŒãããæå®æåã®ãã¯ãã«ãä»»æã®å€æ°ã«ä»£å ¥ããŸãã
utils.py 㯠/src 以äžã«é 眮ããŠããŸãã
import sys
sys.path+=["/src"]
import utils
ãè²äŒããšãããšæããã©ãç³è«ã®ä»æ¹ãæºåããªããšãããªããã®ã¯äœïŒããã®ãã¯ãã«ãäœæããŸãã
embedding=utils.getEmbed("è²äŒããšãããšæããã©ãç³è«ã®ä»æ¹ãæºåããªããšãããªããã®ã¯äœïŒ")
ç¶ããŠãSQL ãå®è¡ããŸããEmbedded Python å
ã§ IRIS ã®æäœãããã«ã¯ãimport iris ãè¡ããŸãã
import iris
å®è¡ãã SQL æã倿°ã«èšå®ããŸãã
åŒæ°ã«ã¯çœ®ãæãæåïŒãã¬ãŒã¹ãã«ããŒïŒã® ? ãæå®ã§ããŸãã
sql="""
select TOP 5 VECTOR_DOT_PRODUCT(TextVec,TO_VECTOR(?,FLOAT,1536)) as sim ,Source,Title,Text
FROM FS.Document ORDER BY sim DESC
"""
ð¡è§£èª¬ïŒVECTOR_DOT_PRODUCT(TextVec,TO_VECTOR(?,FLOAT,1536)) ã®æå³
VECTOR_DOT_PRODUCT()颿°ã¯ããã¯ãã«ã®ãããç©ãæ±ãã颿°ã§ãã
OpenAI ã® Embeddings ã®ããã¥ã¡ã³ãããããEmbeddingã®é·ãã¯1ã«æ£èŠåãããŠããããšããã®ã§ããã¯ãã«ã®ãããç©ãæ±ãã颿°ãå©çšããŠããŸãã
SQL ãå®è¡ããŸããdataframe() 颿°ã䜿ã£ãŠçµæã確èªããŠã¿ãŸãã
SQL ã®å®è¡ã¯ãiris.sql.exec(SQLæ)ããŸã㯠statement=iris.sql.prepare(SQLæ) ïŒ statement.execute(åŒæ°) ã§å®è¡ã§ããŸãã
åŒæ°ãããã®ã§ãiris.sql.prepare() ã§å®è¡ããŠã¿ãŸãã
statement=iris.sql.prepare(sql)
result=statement.execute(embedding).dataframe()
result
for text in result["text"]:
print(text)
ã©ãã§ãããããé¡äŒŒããæç« ãè¿ã£ãŠããã§ããããïŒð
IRIS ã«ã¯ãVECTOR åã®çšæãããã®ã§ãEmbedding ããæ å ±ãããŒãã«ã«æ ŒçŽã§ãããã€ãã® SQL ã§ãã¯ãã«æ€çŽ¢ãè¡ããŸãã
Embedding ã«ã€ããŠã¯ããã³ãºãªã³ã§ã¯ OpenAI ã¢ãã«ãå©çšããŸããããããŒã«ã«ã§å®è¡ã§ããä»ã®ã¢ãã«ãå©çšããããšããã¡ããã§ããŸãã
ãã²ããããããªã¢ãã«ã§ã® Embedding ãã詊ããã ããïŒ
ããããã¯ãããã³ããšã³ããéçºããŸãã
ãã³ãºãªã³ã§ã¯ããã£ãããããã®äœæã«äŸ¿å©ãª Streamlit ã䜿ã£ãŠãããŸãã
Streamlit ã¯ãPython ã§ Web ã¢ããªã±ãŒã·ã§ã³ãç°¡åã«äœæã§ãããã¬ãŒã ã¯ãŒã¯ã§ãã
以äžã®ãã£ããããããäœã£ãŠãããŸãïŒãœãŒã¹ã³ãŒãã¯åŸã»ã©éããŸãïŒã
ã§ã¯å®éã«åãããŠãOpenAI ã«è³ªåããŠã¿ãŸãããïŒ
ã³ã³ããã«ãã°ã€ã³ããŠããã¿ãŒããã«ãããã°ãããã䜿ããŸãããã°ã€ã³ããŠããªãå Žåã¯ãã³ã³ããã«ãã°ã€ã³ããŸãã
docker exec -it tryaidevelop bash
ã¢ããªãèµ·åããŸãïŒãããã°ã¢ãŒãã§èµ·åããŠãŸãïŒã
/home/irisowner/.local/bin/streamlit run /src/Phase4/app.py --server.port 8080 --logger.level=debug
ã³ã³ããå ã® 8080 ããŒãã§ã¢ããªãèµ·åããŠããŸãããã¹ãåŽã§ã¯ 8080 ã 9090 ã«å²ãåœãŠãŠããŸãã®ã§ã以äžURLã§ã¢ããªãèµ·åããŠãã ããã
â» ãäŒè©±å±¥æŽãæ¶å»ã以å€ã®ãã¿ã³ã¯å ·äœçãªåŠçãèšè¿°ããŠããªãããåããŸããã
ã©ãã§ãããããã¡ãããšãã£ããããããšããŠæ©èœããŠãŸããïŒ
ããã§ã¯ãã³ãŒããéããŠäžèº«ã確èªããŸãã
ã³ãŒãïŒPhase4/app.py
ãäŒè©±å±¥æŽãæ¶å»ãã®ãã¿ã³ã®åãã¯ã56è¡ç®ä»¥éã«èšèŒããŠããŸãã
ãã®ãã¿ã³ãæŒããŸã§ã¯ãäŒè©±ã®å±¥æŽã st.session_state.messages_model ã«è¿œèšãç¶ããŠããŸãã
ãã®ãã¿ã³ãã¯ãªãã¯ãããšãåæã®ããã³ãããèšå®ãããŸãã
st.session_state.messages_model = [
{
"role":"system",
"content":"ããªãã¯èŠªåãªã¢ã·ã¹ã¿ã³ãã§ãã"
}
]
ã³ãŒãïŒPhase4/app.py ã®72è¡ç®ä»¥éã«ããæªå®è£ ã®ãã¿ã³ãããŒã¿ããŒã¹ã«å±¥æŽä¿åãã«åŠçã远èšããŠã¿ãŸãã
ç»é¢ãæ¶å»ãããŸã§ãäŒè©±ã®å±¥æŽã¯å
šãŠ st.session_state.messages_model ã«ä¿åããŠããŸãã
ãããŒã¿ããŒã¹ã«å±¥æŽä¿åããã¯ãªãã¯ããå Žåãst.session_state.messages_model ã«ä¿åããã dictionary ã JSONæååã«å€æŽã IRIS ã«çšæãã FS.MyLog ã«ç»é²ããŠã¿ãŸãã
ç»é²ããæ¥ä»æå»ãããããšå¬ããã®ã§ããã¿ã³ã¯ãªãã¯æã®æ¥ä»æå»ãååŸããINSERT ããŠã¿ãŸãã
ãã³ãºãªã³ã§ã¯ãsqlalchemy-iris ãå©çšã㊠IRIS ãžã®æ¥ç¶ãªããžã§ã¯ããäœã INSERT ãå®è¡ããŸãã
ã³ã³ããéå§æã«ããã±ãŒãžãã€ã³ã¹ããŒã«ããŠããŸãã
æ¥ç¶ãªããžã§ã¯ãäœæãŸã§æµãã¯ä»¥äžã®éãã§ãã
from sqlalchemy import create_engine,text
engine = create_engine("iris://SuperUser:SYS@localhost:1972/USER")
conn=engine.connect()
åŸã§å®è£ ãããã¯ãã«æ€çŽ¢ã«å¿ èŠãª utils.py ãã€ã³ããŒããããã以äžèšèŒããŸãã
import sys
sys.path+=["/src"]
import utils
ãã®åŸå®è¡ãã SQLæ 㯠Phase2-IRIS ããŒã¿ããŒã¹ã®åºç€äœéš ã§å®è¡ãã FS.MyLog ãžã® INSERT æã§ãã
insert into FS.MyLog (LogDT,Content) (çŸåšã®æ¥ä»æå»,äŒè©±å±¥æŽã®JSON)
çŸåšã®æ¥ä»æå»ã DATETIME 圢åŒã§ååŸããå¿ èŠãããã®ã§ãã®æºåãããŸãã
import datetime
today=datetime.datetime.today()
formatted_dt = today.strftime('%Y-%m-%d %H:%M:%S')
åŸã¯äŒè©±å±¥æŽã®JSONãæž¡ãã°ãã°ãžã® INSERT ã¯å®æã§ãã
ãã®åŸãããŒã¿ããŒã¹ãžã«å¯ŸããåŠçã远å ãããã®ã§ãPhase4/tryiris.py ã«ã³ãŒãã远èšããŸãïŒçŸåšãã¡ã€ã«ã®äžèº«ã¯ç©ºã§ãïŒã
ã³ãŒãäŸã¯ä»¥äžã®éãã§ãã
äŸïŒtryiris.py ã« jsonToDB(input) 颿°ãçšæããäŸ
from sqlalchemy import create_engine,text
import datetime
import sys
sys.path+=["/src"]
import utils
from sqlalchemy import create_engine,text
engine = create_engine("iris://SuperUser:SYS@localhost:1972/USER")
conn=engine.connect()
#----------------
#äŒè©±å±¥æŽãä¿åãã
#input : ããã³ããã§æž¡ããŠãJSONæåãæ¥ã
#----------------
def jsonToDB(input):
today=datetime.datetime.today()
formatted_dt = today.strftime('%Y-%m-%d %H:%M:%S')
sql="insert into FS.MyLog (LogDT,Content) values(:logdate,:content)"
para={"logdate":formatted_dt,"content":input}
conn.execute(text(sql),para)
conn.commit()
Phase4/app.py ã« (2) ã®æé ã§è¿œå ãã Python ã¹ã¯ãªãããã¡ã€ã«ãã€ã³ããŒãããŸãã
ã€ã³ããŒãåŸãäœæãã颿°ããããŒã¿ããŒã¹ã«å±¥æŽä¿åããã¿ã³ãã¯ãªãã¯ãããšãã«åŠçãšããŠè¿œå ããããŒã¿ããŒã¹ã«ä¿åã§ãããã©ãã確èªããŸãã
äœæãã颿°ã«æž¡ãåŒæ°ã®æ
å ±ãšã㊠st.session_state.messages_model ã䜿ããŸãããã®äžã¯ dictionary ã§ããŒã¿ãç»é²ãããŠããã®ã§ãjson.dumps() å©çšã㊠JSON æåãæž¡ããŠããŸãã
äŸïŒ
# import ã®è¿œå ïŒã¹ã¯ãªãããã¡ã€ã«åã tryiris ãšããå Žåã®äŸïŒ
import tryiris
import json
ãããŒã¿ããŒã¹ã«å±¥æŽä¿åããã¿ã³ãã¯ãªãã¯ãããšãã«åŠç远å
with col3:
if st.button("ããŒã¿ããŒã¹ã«å±¥æŽä¿å"):
tryiris.jsonToDB(json.dumps(st.session_state.messages_model,ensure_ascii=False))
#st.rerun()
ãã©ãŠã¶ã§è¡šç€ºããŠããç»é¢ããªããŒããããã¹ãããŠã¿ãŸãã
ãããŒã¿ããŒã¹ã«å±¥æŽä¿åããã¿ã³ã¯ãªãã¯åŸãããŒãã«ã«å±¥æŽã远èšãããŠããããšã確èªããŸãã
ããããããããã¯ããã£ãããããã«ç€Ÿå ã®äººäºèŠå®ã®æ å ±ã远å ããããã« IRIS ã®ãã¯ãã«æ€çŽ¢ã®åŠçã远å ããŠãããŸãïŒ
æµãã¯ä»¥äžã®éãã§ãã
-
ãŠãŒã¶ãŒããã£ãããããã«è³ªåå ¥å
-
å ¥åæååã«é¡äŒŒãã人äºèŠå®ã®ææžãæŸãããããã¯ãã«æ€çŽ¢ã宿œïŒäžäœ 3 ä»¶ã®ã¿å©çšïŒ
-
OpenAI ã«éãããã³ããã«ãã¯ãã«æ€çŽ¢ã®çµæã远å ããã
远å ããã¹ã¯ãªãããã¡ã€ã«ã«ïŒäŸã§ã¯ tryiris.pyïŒã«ãã¯ãã«æ€çŽ¢ãå®è¡ãã颿°ãçšæããŸãã
å®è¡ã«äœ¿ã SQL ã¯ã(4) ãã¯ãã«æ€çŽ¢ã®ãã¹ã ã®æµãã§å©çšããä»¥äž SELECT æã§ãã
select TOP 5 VECTOR_DOT_PRODUCT(TextVec,TO_VECTOR(?,FLOAT,1536)) as sim ,Source,Title,Text
FROM FS.Document ORDER BY sim DESC
? ã®éšåã :embed ã«ãTOP 5 ã 3 ã«å€æŽããäžèš SQL ãå®è¡ãã颿°ãçšæããŸãã
å ¥ååŒæ°ã¯ããã£ãããããã«å ¥åããã質åã§ãã
äŸïŒ
def search(input):
embed=utils.getEmbed(input)
sql=(
"select TOP 3 VECTOR_DOT_PRODUCT(TextVec,TO_VECTOR(:embed,FLOAT,1536)) as sim ,Source,Title,Text"
" FROM FS.Document ORDER BY sim DESC"
)
rset = conn.execute(text(sql), {'embed': embed}).fetchall()
docref=[]
for reco in rset:
docref.append(
{"Source":reco[1],"Title":reco[2],"Doc":reco[3]}
)
return docref
ãŠãŒã¶ãŒããã®å ¥åãè¡ã£ããšãã«åã以äžã®åŠçã®äžã«
if prompt := st.chat_input("ã¡ãã»ãŒãžãå
¥å..."):
st.session_state.messages_model.append({"role":"user","content":prompt})
with st.chat_message("user"):
st.markdown(prompt)
ãã¯ãã«æ€çŽ¢ã®åŒã³åºããè¡ã以äžã®é¢æ°å®è¡ã远å ããŸãã
#IRISã«ãã¯ãã«æ€çŽ¢
vresult=tryiris.search(prompt)
with st.expander("ð ãã¯ãã«æ€çŽ¢ã®çµæïŒãããã°"):
st.write(vresult)
if not vresult:
# èŠã€ãããªããšãã®ãã©ãŒã«ããã¯
st.warning("ãã¯ãã«æ€çŽ¢ã§é¢é£ããã¥ã¡ã³ããèŠã€ãããŸããã§ããã")
sourceinfo = ""
sourcetext = ""
# ãã¯ãã«æ€çŽ¢ã®çµæã倿°ã«èšå®
sourcetext=""
for item in vresult:
sourcetext+="title="+ item["Title"]+ ",info=" +item["Doc"]+ ", sourcefile="+ item["Source"] +"\n"
st.session_state.messages_model.append(
{"role":"system","content":f"sourcetext: {sourcetext}"}
)
çŸæç¹ã®ã·ã¹ãã ããã³ããã¯ã
{"role":"system","content":"ããªãã¯èŠªåãªã¢ã·ã¹ã¿ã³ãã§ãã"}
ãªã®ã§ããã£ãããã¯ãã«æ€çŽ¢ã®çµæãããã³ããã«è¿œå ããŠããäœ¿ãæ¹ã説æããŠããªãããçæ AI ãè£è¶³æ å ±ãšããŠèªèããªãå¯èœæ§ãé«ãã§ãã
ã·ã¹ãã ããã³ããã«ããã¯ãã«æ€çŽ¢çµæãå å³ããçµæãè¿ãããã«ä»¥äžã®ããã«ä¿®æ£ããŸãã
çŸåšä»¥äžã®ããã«æç€ºããŠããŸãïŒapp.pyïŒã
# äŒè©±å±¥æŽïŒç¶ç¶äŒè©±ã®èïŒ
if "messages_model" not in st.session_state:
st.session_state.messages_model = [
{"role":"system","content":"ããªãã¯èŠªåãªã¢ã·ã¹ã¿ã³ãã§ãã"}
]
st.session_state.messages_model=ãã®ãªã¹ãã®äžèº«ã以äžã®ããã«ä¿®æ£ããŠãã ããã
st.session_state.messages_model = [
{
"role":"system",
"content":"""
ããªãã¯èŠªåãªã¢ã·ã¹ã¿ã³ãã§ãã
ãŠãŒã¶ã®è³ªåã«é¡äŒŒãã瀟å
æ
å ±ãsourcetext以äžã«èšèŒããŸãã
ãŠãŒã¶ãåžæããå
容ã瀟å
æ
å ±sourcetextã®èšèŒã«æ²¿ã£ãŠåçããŠãã ããã
åçã®ãµããªãäœæããŠãã ããã瀟å
ææžã®ã©ã®æ
å ±ã䜿çšãããtitleã®å
容ãå«ããŠãã ããã
""".strip()
}
]
ã¡ã¢ïŒå€æ° sourcetext ã¯ããã¯ãã«æ€çŽ¢ã§ååŸãã質åã«é¡äŒŒããæç« ãä¿åããŠãã倿°ã§ãã
app.py ãä¿åããã£ãããããããã®åçã人äºèŠå®ã®æ å ±ãå«ããåçãè¿ã£ãŠããããã¹ãããŸãã
ä»åã¯ã·ã¹ãã ããã³ããã倿Žããã®ã§ãäžåºŠã¢ããªã±ãŒã·ã§ã³ã忢ããŠããå床起åããŠãããã¹ãããŠã¿ãŸãããã
æ¹æ³ïŒ app.py ãå®è¡ããŠãããŠã£ã³ããŠã§ Ctrl+C ãæŒããŠåæ¢ããåŸãå床 app.py ãå®è¡ããŸãã
/home/irisowner/.local/bin/streamlit run /src/Phase4/app.py --server.port 8080 --logger.level=debug
ð¡ãã¯ãã«æ€çŽ¢çµæããããã°ãšããŠç»é¢ã«è¡šç€ºãŠããŸããååŸã§ãã人äºèŠå®ã®ã¿ã€ãã«ãåçã®äžã«å«ãŸããŠããã確èªããŠã¿ãŸãããïŒ
æèšäŸïŒ
-
è²äŒããšãããšæããã©ãç³è«ã®ä»æ¹ãæºåããªããšãããªããã®ã¯äœïŒ
-
å€åäžã«é段ã§èžã¿å€ããŠè¶³ã骚æããŸãããæ²»çè²»ãªã©äŒç€Ÿã«è«æ±ã§ããŸããïŒ
-
ä»è·äŒæãååŸããå Žåã®ç³è«æé ãæããŠãã ãããäžè¬çãªç€Ÿå ã®å ±åé ãæããŠãã ããã
-
ãã¯ãã©ãåããŠãã人ãããããšã人äºã«äŒããããšæããŸããå¯åè ãä¿è·ããèŠåã¯ãããŸããïŒ
ãããŸã§ã®æµãã§ã以äžã®äºã確èªã§ããŸããã
- Streamlit ã䜿ã£ãŠç°¡åã«ã§ãããã£ããããããäœæã§ããããš
- IRIS ã®ãã¯ãã«æ€çŽ¢ãå©çšããããšã§ãç€Ÿå ææžã®é¡äŒŒããæç« ãæœåºã§ããããš
- ãã£ãããããã§èšå®ããŠããã·ã¹ãã ããã³ããã«ãã¯ãã«æ€çŽ¢ã®çµæã远å ããçæ AI ã«éãããšã§ãäžè¬çãªåçã§ã¯ãªãã瀟å ã®äººäºèŠå®ã«æ²¿ã£ãåçãçæ AI ããååŸã§ããããš
ð€ãã£ãããããã¯å®æããŸããããå®ã¯ãŸã æ¹è¯ã§ãããšããããããŸãã
-
AïŒäŒè©±å±¥æŽãå šãŠä¿æããæ¬¡ã®ããã³ããã«éã£ãŠãããããäŒè©±å±¥æŽãå€ããªããšããã³ãããå€ããªãïŒãã€ãããŒã¯ã³å¶éãè¶ ããŠããŸããããããªãã
-
BïŒäŒè©±å±¥æŽãæ¶å»ããŠããç»é¢ãæ¶å»ããŠããªãéã¯å±¥æŽã衚瀺ããŠããããïŒä»ã¯äŒè©±å±¥æŽæ¶å»ã§ç»é¢è¡šç€ºãäžç·ã«æ¶ããŠããŸããŸãïŒ
A ã«ã€ããŠã¯ãäŸãã°ã3åã®ããåããè¿ãããšããã§ãä»ãŸã§ã®äŒè©±å±¥æŽã®èŠçŽãçæ AI ã«äœãããŠããã³ããã«ä¿æãããŠãããšããŒã¯ã³æ°ãæãã€ã€ãéå»ã®äŒè©±æŠèŠãçæ AI ã«äŒããããšãã§ããŸãã
B ã«ã€ããŠã¯ãStreamlit ã® session_state ã«ç»é¢è¡šç€ºçšã®æ å ±ãã»ããããããã«è¿œå ããäŒè©±å±¥æŽæ¶å»ã®æã¯ããã³ããçšã®å±¥æŽã ããæ¶å»ããããã«å€æŽããããšã§ãããŠãŒã¶ãŒãã¬ã³ããªãŒãªç»é¢ãäœæã§ããŸãã
å ·äœçãªã³ãŒãäŸã¯ãSample 以äžã«çšæããããŸãããã²ãåç §ãã ããã
A ã®åŠç远å äŸ
if prompt := st.chat_input("ã¡ãã»ãŒãžãå
¥å..."): ã®ã¿ã€ãã³ã°ã§ä»¥äžè¿œèš
# åŸåŸ©ã«ãŠã³ãïŒãŠãŒã¶âã¢ã·ã¹ã¿ã³ãã§+1ïŒ
st.session_state.turn_count += 1
# äŸïŒ3åŸåŸ©ããšã«å§çž®
if st.session_state.turn_count % 3 == 0:
previous = st.session_state.summary or "(none)"
new_dialogue = build_transcript(st.session_state.messages_model)
#èšé²ããŠãã¡ãã»ãŒãžãåæå
st.session_state.messages_model=[]
summaryprompt=f"""
ãããŸã§ã®èŠçŽã¯ History:以éã«ãããŸããæ°ããªäŸé Œã¯NewDialogue:以äžã«ãããŸãã
1) ãããŸã§ã®èŠçŽãšæ°ããªäŸé Œã1ã€ã®æŽæ°ãããèŠçŽã«300ãã500æåã§äœæããŸãã
2) æ°ããªäŸé ŒãšççŸããªãéãããããŸã§ã®èŠçŽã®éèŠãªäºå®ããã¹ãŠåŒãç¶ãã§ãã ããã
3) ççŸãããå Žåã¯ãæ°ããæ
å ±ãåªå
ããŸãã
4) é¢é£æ§ãããå ŽåãåŒçšãããã¿ã€ãã«/ã»ã¯ã·ã§ã³ïŒäŸïŒèŠçšåã»æ¡çªå·ïŒã¯ãã®ãŸãŸäœ¿çšããŸãã
5) æŠèŠããã¹ãã®ã¿ãåºåããŸããèŠåºããã©ãã«ã¯å«ããŸããã
History: {previous}
NewDialogue:{new_dialogue}
""".strip()
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "system", "content": summaryprompt}]
)
summary_answer = resp.choices[0].message.content
st.session_state.summary = summary_answer
#ããã³ããåèšå®
st.session_state.messages_model = [
{
"role":"system",
"content":f"""
ããªãã¯èŠªåãªã¢ã·ã¹ã¿ã³ãã§ãããŠãŒã¶ã®è³ªåã«é¡äŒŒãã瀟å
æ
å ±ãsourcetext以äžã«èšèŒããŸãã
ãŠãŒã¶ãåžæããå
容ã瀟å
æ
å ±sourcetextã®èšèŒã«æ²¿ã£ãŠåçããŠãã ããã
åçã®ãµããªãäœæããŠãã ããã瀟å
ææžã®ã©ã®æ
å ±ã䜿çšãããtitleã®å
容ãå«ããŠãã ããã
éå»ã®äŒè©±ã®èŠçŽã¯ãSummaryHistory以éã«ãããŸãã
SummaryHistory: {st.session_state.summary}
""".strip()
}
]
print(f"èŠçŽåŸã®ã¢ãã«ãžã®ã¡ãã»ãŒãžïŒ{st.session_state.messages_model}")
ãã²ãããããã詊ããã ããïŒ
ãç²ãæ§ã§ããïŒð€



