概要

Azure OpenAIとLlamaIndexとGradioを用いたRAG型チャットの作成を試みたので、備忘録です。

Azure OpenAI

Azure OpenAIを作成します。

その後、「エンドポイント:エンドポイントを表示するには、ここをクリックします」をクリックして、エンドポイントとキーを控えておきます。

その後、Azure OpenAI Serviceに移動します。

「モデルカタログ」に移動して、「gpt-4o」と「text-embedding-3-small」をデプロイします。

結果、以下のように表示されます。

テキストのダウンロード

今回は、青空文庫で公開されている源氏物語を対象とします。

https://www.aozora.gr.jp/index_pages/person52.html

以下により、一括ダウンロードします。

ifiursfmrmreeopoplslromoperr=ocsmftbtnteeos"silmrr4oheoebestncemaffqit=streoooumpismzrrepsr=oboso:en=ermiafoirrsdtowtr/qrraefoipfeeoixsist/ueis_tzlassuvt.tgesneiuamoetopppmhBesplnrdearnhsc#oo==afentoselatoaa.onn=ko.ajsnecmstaz_m=pnpsssdepwui.slteadoueataeeBoidert.geeim=arrftis.euviniide[cobital="hns=eap.r(tflt"tne[na_d.unu.gsoeu.(si[r][uiaaeerctfe(p(liueo"sm"rnotxeoiitoatStrlnm:ellzaiqdfn_stxoclesemasao/suiudt.htu.)c:mbborttenl(ep,)pu.tbee=zaessgS"xa-jierlo_x(todtt"tsor["mrutos=ui(hwoons"]ear/p.pv)."kns"mt_l{agr(".d)y("]e=au.fteer,sio)]t=drsihtsetra.aalpl)(pscrnsad"tsle:aopliacaaa:inonoapmf.to[tazsns(e:jaz"(moess)(p"ov"er.e_o/]ra/}aa.=pd:al"._pt"aa"u)tupemtt:e[xraxaha"-tlrti)/]1")e,n,i.]n_ns.t"tefps_hexolpetxi.ilnmtsjticl"ts(to.)_o"(dpon,"iak".nr=""gsT))er[ru0"e]))

Indexの作成

環境変数を用意します。

AAZZUURREE__OOPPEENNAAII__EANPDIP_OKIENYT==xxxxxxxx

そして、以下により、indexを作成します。

ifff#aaa#l#eSS#d#iimrrrppzlmeeo.nnpoooiiuLmEbttDclddommm__rLmettauoeerkveM=mdaaabdmdaaaiitmiaxxtlllee_oepzpe_oepzpnnaend.lllyreAdpiuidmdpiuiggnp_=soaaasnzel_r_doel_r_ssStudtsmmm=idulokevidlokev..ostaVoaaaopr=ye_ene=ye_eleu_ter___onoe"myergl"myerlmr=dacaiiisiOge=nste=nsmbci(tgnnn.=nppnadi=enadieeSr)oedddgtettppoxtppo=di=r_eeee"n-_ionAt_ion_m"Scxxxt2=A4n_i=z-n_i=lmp.to...e0Ioaknaueaknalol/onlecn2o("metprmmetpmdDedrtlmov4s,ey=iebey=ieoDaeembr(-.=,a_Oe=,a_lcitIxsee"0g"zvpd"zvurant.dA5egueedtue=me/d.adiZ-tprrnierrectepzimU0etesAnxesentexeunpR1n-_iIgt_imtox.rrgoE-v4eoE--eobsrtfsesr_p(onnm3enney"ri_.tOr""d,b-md,dRosoaPeA,pesbp_emtpzSEvZodmeoma_(euiNiUidadioSddpnrmAeRnildndteoeaepIwEtnliteercri_l_"_,g"n,lp(usoeAO(,gmiipDPP-esmeiIE3ntpnr_N-t_oaeKAssdricEIm(ittY_adrio"Elo=Amr)Nlc"zpyD"u.uoRP,m/rreOedetaInaOdNttpAeTsaezr")/nu,)iArnIeSdOeeptxet"ni)AnIgEsm,beVdedcitnogrStoreIndex

Gradio

最後にGradioを用いたアプリを作成します。

iifffaaal#eSS#s#iq#dddmmrrrppzlmeetnueeeppoooiiumYbttroldeFfmmoommm__roetteroeruoorrkve=mdaaaudmdaaaiibaaxynepcfrhrfe]t.ttlllee_oepzp_oepzpnnugd_ccroueie=nx,illllyreAdpiuinmdpiuiggie=ethinlsst=ataogaaasnzel_r_eoel_r_ssl_iniontlptugemlusrmmm=idulokevedlokev..dcnlgo(te_oorrcp""enaaaaopr=ye_ede=ye_eleodoinm(xcnrn.hl=cd___onoe"myerl"myerlmsneane"tosyCoe"hiiiisiOge=nstte=nsmbttxdetsHne.rh,sL(onnn.=nppnadio=enadieoe_osi=taea=l)dddgtettppoxtppo=drxi=ase=pst[aaeeee"n-_iondAt_ion_atnhgt"xppImsxxxt2=A4n_i=ez-n_i=lmgdiaeo\tqeona...e0Ioaknapueaknaloe=enn,rnunntgclen2o("metplrmmetpmdxddy"=edseIrolmv4s,ey=ioebey=iecS_elh:.r(ernrmb(-.=,a_yOe=,a_lotfxei"jfy(fdese"0g"zvpd"zvnor.s,o"_m#ae.dA5egueyedtue=troacti{eecxiadZ-tprronierreamshohncnshemziU0etesuAnxesexg__ari(ogsi("CpunR1n-_irIgt_imtesqtys[nias"horgE-v4eoE--eobCtu)tftngt,ares_p(onnom3enneooem:o"eeeott_.Or""d,wb-md,dnrrerUx.,rboaPeA,pnesbp_taysystqyoSpzEvZodmeomeg_s)e}urtteuNiUiedadioxeear\ee"onrAeRnmildndt(ng:nrs,raeIwEtbnlite.sgeUypai__"_,eg"n,lftis{s(ogoAOd(,gronuefneipPPd-orewsrusCmeIEi3ma(ie:leopn_Nn-_gstrl)noaKAgsdeih_{_)triEIme_mmmcetY_mafcihseoxi"EolaoligsntAm)Ndlunas}st,zpDe"ltrt\aeuoPl,teiongxlrrOsxtrBetoetIa(tyyo})aONsp)_t".dpATet:r_ez"wroeinu)esp{snArli_bpdIelskooeOt=tnxpa_1_s_esd0mefni)srAyrgoIo=}mEu""_mr.sb/fteodoodwarrdntaiaugnc/seghie,anrtd_Semecxsto"gtm),ipnlbgeostti_omnsgmoidnelhistory])

以下のように、チャットボットを作成できました。

まとめ

間違った理解をしている点があるかもしれませんが、参考になりましたら幸いです。