Share
Embed
watsonx.ai Dojo #4 生成AIを使ったアプリ開発、応用編
目的
* RAGを実行するための基本事項を知る
* テキストファイルの内容を適切な大きさの文書に分割する方法を知る
* 文書をベクトル・データベースに追加する方法、検索する方法を知る
* LangChainの仕組みを使って、RAGを実行し、結果を得る方法を知る
ゴール
* 言語モデルにない知識をテキストファイルにまとめておき、IBM watsonx.ai とLangChainを使って、RAGを試せるようになる
※ もし時間の余裕があれば、Doclingの紹介も行います
Akira Onishi (IBM) PRO
November 19, 2024
Transcript
25 slides
-
ࣗݾհ 1SPQFSUZ 7BMVF ࢯ໊ େ জ Y-JOLFE*O POJBL *5ۀքྺ
ۙͷ৬ྺ Microsoft *#.🎉 )BTI5BH ͍͍Ͷ͐੩Ԭੜ׆RVBOUJD ࠲ӈͷ ౿·Εͯͳ্ཱ͓͕ͪΔಓͷ Α͘͏ٕ มͰࣗΛϙδςΟϒʹ IUUQTXXXGBDFCPPLDPNBLJSBPOJTIJ 'BDFCPPLʮ͓ʹ͋͘ʯͰݕࡧ -
γϯϓϧͳϢʔεέʔεͰখ͘͞"*Λ׆༻͠ͳ͕Βɺ"*ΞϓϦΛ։ൃ͠ɺ ஈ֊తʹൃలͤ͞ɺۀͷσδλϧԽΛਐԽͤ͞Δ ϏδωεͷͨΊͷ"*ɺϢʔεέʔε จॻੜ ࣭ٙԠ ίʔυੜ ྨ ݴ༿ͷநग़ ཁ ݕࡧʴཁ
3"( ࣗಈԽ 3"(3FUSJFWBM"VHNFOUFE(FOFSBUJPOɺ"*Ϟσϧ͕Βͳ͍ใΛݕࡧ͠ɺͦͷ݁ՌΛͬͯ"*ϞσϧͰςΩετΛੜ͢Δ ςΩετ ੜ ༁ ϋϯζΦϯ༰ -
%FNPΛݟͯײ͡·͠ΐ͏ εϥΠυ͚ͩͷߨԋͰͳ͘ɺ%FNPΛަ͑ͨηογϣϯΛఏڙ͠·͢ श͏ΑΓ׳Ε·͠ΐ͏ ٕज़Λମݧ͢ΔͨΊͷԋशΛ௨ͯ͡ɺٕज़ΛֶͿ͖͔͚ͬΛ࡞Γ·͢ ࣭େܴɺηογϣϯΛҰॹʹ࡞Γ·͠ΐ͏ ߨࢣֶࣗͼͳ͕ΒηογϣϯΛ࣮ࢪ͍ͯ͠·͢ օ͞Μ͔Βؾ͖ϑΟʔυόοΫΛͲΜͲΜڞ༗͍ͯͩ͘͠͞
ػցֶशϞσϧ"*ϞσϧɺXBUTPOYBJΛ༑ୡʹ͠Α͏ ࠷ऴඪɺօ͞Μ͕طଘͷϞσϧΛͬͯɺ"*ΞϓϦΛ։ൃ͠ɺར༻ ͢Δ͜ͱͰ͢ ୭͕࣮ߦͰ͖ͳ͍ɾқ͕ߴ͍ςʔϚʹ৮Ε·ͤΜ ػցֶशϞσϧ"*ϞσϧΛθϩ͔Β։ൃ͢ΔੈքऔΓ্͛·ͤΜ XBUTPOYBJ%PKPͷάϥϯυɾϧʔϧ -
XBUTPOYBJ%PKPୈճͱୈճ ճ λΠτϧ ࣮ࢪ ੜ"*ͱ͖߹͏ͨΊͷ४උฤ ਫ *#.XBUTPOYBJΛ׆༻͢Δʹ͋ͨΓɺੜ"*ͱ ͖߹͏ͨΊʹ͓ͬͯ͘ͱྑ͍ٕज़ʹ͍ͭͯɺ
͘ઙֶ͘ͼ·͢ɻಛʹલఏࣝෆཁͰ͕͢ɺ 1ZUIPOݴޠΛ͓ͬͯ͘ͱɺཧղ͕ਂ·Γ·͢ɻ ΦʔϓϯιʔεطଘͷϥΠϒϥϦΛͬͯੜ "*Λಈ࡞ͤ͞ΔͨΊͷڥͷશମ૾ΛΔ͜ͱͰɺ "*ϓϥοτϑΥʔϜͰ͋Δ*#. XBUTPOYBJͷओ ཁͳٕज़ཁૉΛֶΜͰ͍͖·͠ΐ͏ɻ ੜ"*ΛͬͨΞϓϦ։ൃɺೖฤ ਫ *#.XBUTPOYBJͷϓϩϯϓτϥϘΛͬͯେن ݴޠϞσϧΛૢ࡞͢Δํ๏ɺग़དྷ্͕ͬͨϓϩϯ ϓτΛΞϓϦ͔Βݺͼग़͢ํ๏Λֶͼ·͢ɻ *#. XBUTPOYBJʹଂ͞Ε͍ͯΔେنݴޠϞσ ϧΛΓɺ͍ΖΜͳϞσϧΛ࣮ࡍʹࢼ͍͖ͯ͠· ͠ΐ͏ɻ -
XBUTPOYBJ%PKPୈճͱୈճ ճ λΠτϧ ࣮ࢪ ϓϩϯϓτΤϯδχΞϦϯάೖ ਫ େنݴޠϞσϧΛૢ࡞͢ΔͨΊͷϓϩϯϓτΛ ࡞͢Δ্ͰɺิॿతͳใΛՃ࣭͑ͯͷҙਤ
Λ໌֬ʹ͢Δํ๏ɺྫࣔʹΑΓճͷਫ਼ΛߴΊ Δํ๏ͳͲʹֶ͍ͭͯͼ·͢ɻେنݴޠϞσϧ ʹվྑΛՃ͑ͣʹɺظͨ͠ճʹ͚ۙͮΔํ๏ Λࢼ͍͖ͯ͠·͠ΐ͏ɻ ੜ"*ΛͬͨΞϓϦ։ൃɺԠ༻ ฤ ਫ େنݴޠϞσϧͷ੍ࣄ߲ΛΓӽ͑ΔͨΊʹɺ 3"(-BOH$IBJOΛͬͨ"*ΞϓϦͷ։ൃʹͭ ֶ͍ͯͼ·͢ɻ͜Ε·ͰͷճΑΓएׯқ͕ ্͕Γ·͕͢ɺαϯϓϧίʔυΛݟͳ͕Βɺงғ ؾΛ௫Έɺօ͞Μ͕։ൃ͍ͨ͠"*ΞϓϦͷ ΛߴΊ͍͖ͯ·͠ΐ͏ɻ -
XBUTPOYBJ%PKPୈճͱୈճ ճ λΠτϧ ࣮ࢪ ϑΝΠϯνϡʔχϯάͱ *OTUSVDU-BC ਫ ࣭ͱ͑Λ༻ҙ͢Δ͜ͱͰɺେنݴޠϞσ
ϧʹ৽͍ࣝ͠ΛՃ͢ΔͨΊͷϑΝΠϯ νϡʔχϯάͷํ๏Λֶͼ·͢ɻ·ͨɺاۀಠ ࣗͷେنݴޠϞσϧͷܧଓతͳվྑʹ࠷దͳ *OTUSVDU-BCʹֶ͍ͭͯͼ·͢ɻ ܧଓతͳ"*ΞϓϦ։ൃͱల։ ਫ ͜Ε·Ͱֶश͖ͯͨ͜͠ͱΛΈ߹Θͤͯɺେ نݴޠϞσϧΛར༻ͨ͠"*ΞϓϦͷܧଓతͳ ։ൃͱల։ͷํ๏Λֶͼ·͢ɻاۀಠࣗͷ"*Ξ ϓϦ͚ͩͰͳ͘ɺ"*ΛΈࠐΜͩιϦϡʔ γϣϯͷܧଓతͳൃలɺύʔτφʔΤίγες ϜͷൃలͳͲΛҰॹʹߟ͍͖͑ͯ·͢ɻ -
ϋϯζΦϯڥ֬ೝ νϟοτʹΑΔճΛ͓ئ͍͠·͢ ࠲ֶฒͼʹϋϯζΦϯͷ༰%FNP ͠ڥ͕͍ͬͯͳ͍ํɺ४උΛ͠ͳ͕Β͝ཡ͍ͩ͘͞ ຊɺͲ͏ͯ͠ڥΛ͑ΒΕͳ͍ํɺ%FNPΛ͝ཡʹͳΓɺ ޙɺ͓ࢼ͍ͩ͘͠͞ օ͞ΜࣗͰͷϋϯζΦϯ
ࠓճͷXBUTPOYBJ্ͷૢ࡞ϓϩδΣΫτͷ࡞ͱ1SPKFDU*%Λ औΓग़͢͜ͱͷΈͰ͢ɻ ϋϯζΦϯͷத৺ɺ1ZUIPOίʔυͷ࣮ߦͰ͢ɻ ຊͷྲྀΕ -
%PKPͷࢿྉΛࢀߟʹɺ1ZUIPOͷڥΛ͍͑ͯͩ͘͞ ˞ݱ࣌Ͱ*OTUSVDU-BC͕1ZUIPOʹରԠ͍ͯ͠ͳ͍͜ͱ͕ཧ༝Ͱ͢ ˞ࠓճͷ1ZUIPOΛͬͨԋश1ZUIPOʹ͓͍ͯಈ࡞͢Δ͜ͱΛ֬ೝ͍ͯ͠·͢ 8JOEPXTڥʹ͓͍ͯɺ8JOEPXT4VCTZTUFNGPS-JOVYͱ6CVOUVΛͬͯ-JOVYڥΛ͑ ͯɺͦͷ্ʹ1ZUIPOͷ࣮ߦڥΛ͍͑ͯͩ͘͞ ˞8JOEPXT .BDͰಉ͡$-*ૢ࡞ͰϋϯζΦϯΛਐΊΒΕΔΑ͏ʹ͢ΔͨΊ ࠓޙɺෳͷ1ZUIPOόʔδϣϯʹΓସ͑ΒΕΔΑ͏ɺQZFOWʹΑΔԾڥͷߏஙΛਪ͠ ·͢ .BDڥͰ1ZUIPOͷϏϧυʹࣦഊ͢Δ߹ɺ9DPEF$PNNBOE5PPMTΛ࠶Πϯετʔϧͯ͘͠
͍ͩ͞YDPEFTFMFDUJOTUBMM XBUTPOYBJ%PKPʹࢀՃ͍ͯ͠ͳ͍ํͷ͓ئ͍ -
४උͷͨΊͷࢀߟࢿྉ IUUQTTQFBLFSEFDLDPNPOJBLJCNXBUTPOYBJEPKPQSFSFR ϋϯζΦϯڥͷ४උ ڥ ରऀ *#.5FDIOPMPHZ;POF *#.άϧʔϓࣾһ *#.1BSUOFS1MVTʹొࡁΈͷϏδωεɾύʔτφʔ༷ *#.XBUTPOYBJແྉධՁ൛ ҰൠͷࢀՃऀͰɺ*#.$MPVEͷΞΧϯτΛ͓࣋ͪͰͳ͍߹
ධՁ൛ͷΞΫηεʹΫϨδοτɾΧʔυෆཁ ܦաޙɺΫϨδοτɾΧʔυΛొ͢Δͱैྔ՝ۚΞΧϯτͱ ͯ͠ɺશͯͷ*#.$MPVEͷαʔϏε͕͝ར༻͍͚ͨͩ·͢ *#.$MPVE ҰൠͷࢀՃऀͰɺ*#.$MPVEͷΞΧϯτΛ͓࣋ͪͷ߹ -
ར༻͢ΔݴޠϞσϧ*#.HSBOJOUFC+BQBOFTF ୈճͷϑϦʔϑΥʔϜͰ࣮ߦͨ͠༰Λϕʔεʹ৽نʹ3"(൛ͷΞϓϦΛ࡞Γ·͢ *#.XBUTPOYBJ্Ͱ৽نϓϩδΣΫτΛ࡞͢Δ *#.$MPVE͔Β"1*,FZΛऔΓग़͢ 1ZUIPOίʔυ͔ΒɺXBUTPOYBJʹଓ͠ɺݴޠϞσϧʹΞΫηε͢Δ ࣝΛؚΜͩςΩετɾϑΝΠϧΛಡΈࠐΈɺదͳจॻʹׂ͢Δ
$ISPNBσʔλϕʔεΛ࡞͠ɺจॻΛՃ͢ΔɺจॻΛݕࡧ͢Δ ϓϩϯϓτɾςϯϓϨʔτΛ࡞͢Δ ͍߹Θͤͷ༰ɺͦΕʹؔ࿈͢Δݕࡧ݁ՌɺϓϩϯϓτɾςϯϓϨʔτɺݴޠ ϞσϧɺͦΕͧΕΛͭͳ͗߹Θͤͯɺ-BOH$IBJOʹΑΔ3"(Λ࣮ߦ͢Δ ຊͷϋϯζΦϯ3"(Ͱ੩ԬݝͷັྗΛ͑ΔจষΛੜ͢Δ -
࣭ ੩ԬݝΛΒͳ͍ਓʹ͚ͯɺ੩ԬݝͷཱྀߦΛ͓קΊ͢ΔจষΛ࡞ͬͯ ͍ͩ͘͞ɻྫ͕͋ΕͦͷྫΛࢀߟʹͯ͠ɺ࣍ͷʮݟग़͠Ұཡʯʹ͋Δ߲ ΛؚΊͯॻ͍͍ͯͩ͘͞ɻจষͷ࠷ޙʮັྗ͋;ΕΔ੩Ԭݝʹ͓ӽ͠ ͍ͩ͘͞ʂʯͱ͍ͯͩ͘͠͞ɻಉ͡༰Λ܁Γฦ͞ͳ͍Ͱ͍ͩ͘͞ɻ ʮݟग़͠Ұཡʯ: - ੩Ԭݝʹ͋Δ؍ޫ໊ॴ3ϲॴ - ੩Ԭݝग़ͷ༗໊ਓɺܳೳਓ4ਓ
- ੩ԬݝͰ༗໊ͳϨετϥϯ3ͭ - ੩Ԭݝ͕Ϟσϧͱͳ͍ͬͯΔΞχϝ࡞3ͭ ϋϯζΦϯͰࢼ͢͜ͱ -
3"(ͷجຊྫͱͳΔใΛ֎෦σʔλιʔε͔Βऔಘ͢Δ ϓϩϯϓτɾ ςϯϓϨʔτΛͬͯ ϓϩϯϓτΛ࡞͢Δ ࣭ \RVFTUJPO^ σʔλιʔε͔Β \RVFTUJPO^Ͱݕࡧ͠ɺ ݁ՌΛ\DPOUFYU^ͱ͢Δ ࣭\RVFTUJPO^
ݕࡧ݁Ռ\DPOUFYU^ ϓϩϯϓτΛͬͯ ݴޠϞσϧͰਪ͢Δ ਪ݁Ռ จ຺ͱ࣭͕ຒΊࠐ·Εͨϓϩϯϓτ σʔλιʔε \RVFTUJPO^ ݁Ռ ϓϩϯϓτɾ ςϯϓϨʔτ จ຺: {context} ### ೖྗ: {question} ### Ԡ:" -
3"(ͷ۩ମྫ-BOH$IBJOͱ$ISPNBσʔλϕʔεͷར༻ NZ1SPNQU5FNQMBUF ϓϩϯϓτΛ࡞ ࣭ \RVFTUJPO^ 3FUSJFWFS \RVFTUJPO^Ͱݕࡧ͠ɺ ݁ՌΛ\DPOUFYU^ͱ͢Δ ࣭\RVFTUJPO^ ݕࡧ݁Ռ\DPOUFYU^
DVTUPN@MMN ϓϩϯϓτΛ ར༻ͯ͠ਪ͢Δ ਪ݁Ռ จ຺ͱ࣭͕ຒΊࠐ·Εͨϓϩϯϓτ $ISPNB σʔλϕʔε \RVFTUJPO^ ݁Ռ ϓϩϯϓτɾ ςϯϓϨʔτ จ຺: {context} ### ೖྗ: {question} ### Ԡ:" -
# Chromaσʔλϕʔε͔Β retrieverΛ࡞Δ # watsonx.ai Dojo #3ͰͬͨϓϩϯϓτɾςϯϓϨʔτΛ࠶ར༻͢Δ # langchain_ibm͔Βcustom_llm Λ༻ҙ͢Δ
(granite-8b-japaneseʣ rag_chain = ( {"context": retriever, "question": RunnablePassthrough()} | myPromptTemplate | custom_llm # rag_chainʹ͍߹ΘͤΛ࣮ߦ͢Δ result = rag_chain.invoke(query_shizuoka) -BOH$IBJOͰͷදݱ question = query_shizuoka -
from langchain.prompts import PromptTemplate prompt_template = """ҎԼɺλεΫΛઆ໌͢Δࢦࣔͱɺจ຺ͷ͋Δೖྗͷ Έ߹ΘͤͰ͢ɻཁٻΛదʹຬͨ͢ԠΛॻ͖ͳ͍͞ɻ ### ࢦࣔ:
༩͑ΒΕ࣭ͨʹରͯ͠ɺจ຺͕͋Δ߹ͦΕར༻͠ɺճ͍ͯͩ͘͠͞ɻ จ຺: {context} ### ೖྗ: {question} ### Ԡ:""" myPromptTemplate = PromptTemplate.from_template(prompt_template) ϓϩϯϓτɾςϯϓϨʔτ -
શମ૾DVTUPN@MMNXBUTPOYBJͷݴޠϞσϧΞΫηε 1ZUIPO 6CVOUVNBD04 MDRBQZ ίϯϐϡʔλʔ ϧʔλʔ ϧʔλʔ ϩʔΧϧڥ *#.XBUTPOYBTB4FSWJDF ෳͷ
ίϯϐϡʔλʔ (16 3FE)BU0QFO4IJGULT XBUTPOY8BUTPO4UVEJP 8BUTPO.BDIJOF-FBSOJOH XBUTPOY "1* 8FC ΞϓϦ ΞΫηε τʔΫϯ from langchain_ibm import WatsonxLLM custom_llm = WatsonxLLM( model_id= "ibm/granite-8b-japanese", url=credentials.url, apikey=credentials.api_key, Params=generate_params, project_id=MY_PROJECT_ID) 0CKFDU 4UPSBHF $ISPNB ϝϞϦ্ $VTUPN@MMN -
XBUTPOYBJͷΑ͏ͳ"*ϓϥοτϑΥʔϜ͕ඞཁͳཧ༝ ΞϓϦʢ8FCϢʔβʔΠϯλʔϑΣΠεʣ ΞϓϦɾϓϥοτϑΥʔϜ "*ΞϓϦ Ϗδωεɾ ϩδοΫ "*Ϟσϧ ϥΠϒϥϦ"1* "*ΞϓϦɾϓϥοτϑΥʔϜ ͍߹Θͤ
ੜ݁Ռ ཤྺ σʔλ ༻ྔ σʔλ "*ͷ࣮ݧΦʔϓϯιʔεͰՄೳ ҰํɺاۀϨϕϧͷల։՝͕ଟ͍ 4BB4൛ͷXBUTPOYBJΛ͑ɺ ΞϓϦ։ൃɺల։ɺӡ༻ʹूதͰ͖Δ -
ࢀߟEPDMJOH IUUQTHJUIVCDPN%44%EPDMJOH 1ZUIPOΛͬͯɺΑ͘ΘΕΔจॻͷ ϑΝΠϧΛ+40/ܗࣜɺ͋Δ͍ .BSLEPXOܗࣜʹม͢ΔϥΠϒϥϦʔ 1%' %0$9 1159 *NBHFT )5.-
"TDJJ%PD .BSLEPXO Πϯετʔϧํ๏ pip install docling from docling.document_converter import DocumentConverter # PDF path or URL source = "https://arxiv.org/pdf/2408.09869" converter = DocumentConverter() result = converter.convert(source) # output: "### Docling Technical Report[...]" print(result.document.export_to_markdown()) -
ϫʔΫγϣοϓɺηογϣϯɺ͓Αͼࢿྉɺ*#.·ͨηογϣϯൃදऀʹΑͬͯ४උ͞ΕɺͦΕͧΕಠࣗͷݟղΛөͨ͠ͷͰ͢ɻͦΕΒใ ఏڙͷతͷΈͰఏڙ͞Ε͓ͯΓɺ͍͔ͳΔࢀՃऀʹରͯ͠๏త·ͨͦͷଞͷࢦಋॿݴΛҙਤͨ͠ͷͰͳ͘ɺ·ͨ*#.αʔϏε͕͓ ٬༷ʹద༻͋Δಛఆͷ๏ྩʹద߹͢Δ͜ͱΛอূ͢ΔͷͰ͋Γ·ͤΜɻຊߨԋࢿྉʹؚ·Ε͍ͯΔใʹ͍ͭͯɺશੑͱਖ਼֬ੑΛظ͢ΔΑ͏ Ί͓ͯΓ·͕͢ɺʮݱঢ়ͷ··ʯఏڙ͞Εɺ໌ࣔ·ͨࣔʹ͔͔ΘΒͣɺۀੑɺಛఆͷతͷద߹ੑɺඇ৵ੑΛؚΊɺ͍͔ͳΔอূΘͳ͍ ͷͱ͠·͢ɻຊߨԋࢿྉ·ͨͦͷଞͷࢿྉͷ༻ʹΑͬͯɺ͋Δ͍ͦͷଞͷؔ࿈ʹΑͬͯɺ͍͔ͳΔଛ͕ੜͨ͡߹ɺ*#.ΛෛΘͳ͍ ͷͱ͠·͢ɻ ຊߨԋࢿྉͰݴٴ͞ΕΔ*#.ɺϓϩάϥϜɺ·ͨαʔϏεɺ*#.͕ϏδωεΛߦ͍ͬͯΔͯ͢ͷࠃɾҬͰ͝ఏڙՄೳͳΘ͚ Ͱ͋Γ·ͤΜɻຊߨԋࢿྉͰݴٴ͞ΕΔকདྷͷలʢϦϦʔεػೳΛؚΉʣɺࢢػձ·ͨͦͷଞͷཁҼʹج͍ͮͯ*#.ಠࣗͷܾ ఆݖΛ͍ͬͯͭͰมߋͰ͖Δͷͱ͠ɺকདྷͷ·ͨػೳ͕༻ՄೳʹͳΔ͜ͱɺ͘͠ಛఆͷ݁ՌΛ֬͢Δ͜ͱΛҙਤ͢ΔͷͰ͋Γ ·ͤΜɻຊߨԋࢿྉɺݴٴ͞ΕΔ
*#.·ͨαʔϏεʹద༻͋Δܖ݅Λมߋ͢ΔͷͰɺՃͷද໌·ͨอূΛҙਤ͢ΔͷͰ͋Γ· ͤΜɻ ຊߨԋࢿྉʹؚ·Ε͍ͯΔ༰ɺࢀՃऀͷ׆ಈʹΑͬͯಛఆͷ݁Ռ͕ੜ͡Δͱड़Δɺ·ͨ҉ࣔ͢Δ͜ͱΛҙਤͨ͠ͷͰɺ·ͨͦͷΑ͏ͳ݁Ռ ΛੜΉͷͰ͋Γ·ͤΜɻ ύϑΥʔϚϯεɺཧ͞Εͨڥʹ͓͍ͯඪ४తͳ*#.ϕϯνϚʔΫΛ༻ͨ͠ଌఆͱ༧ଌʹج͍͍ͮͯ·͢ɻϢʔβʔ ͕ܦݧ͢Δ࣮ࡍͷεϧʔϓοτύϑΥʔϚϯεɺϢʔβʔͷδϣϒɾετϦʔϜʹ͓͚ΔϚϧνϓϩάϥϛϯάͷྔɺೖग़ྗߏɺετϨʔδߏɺ ͓Αͼॲཧ͞ΕΔϫʔΫϩʔυͳͲͷߟྀࣄ߲ΛؚΉɺଟ͘ͷཁҼʹԠͯ͡มԽ͠·͢ɻ͕ͨͬͯ͠ɺݸʑͷϢʔβʔ͕͜͜Ͱड़ΒΕ͍ͯΔͷͱ ಉ༷ͷ݁ՌΛಘΒΕΔͱ֬͢ΔͷͰ͋Γ·ͤΜɻهड़͞Ε͍ͯΔͯ͢ͷ͓٬༷ࣄྫɺͦΕΒͷ͓٬༷͕ͲͷΑ͏ʹ*#.Λ༻͔ͨ͠ɺ· ͨͦΕΒͷ͓٬༷͕ୡͨ݁͠Ռͷ࣮ྫͱͯࣔ͠͞ΕͨͷͰ͢ɻ࣮ࡍͷڥίετ͓ΑͼύϑΥʔϚϯεಛੑɺ͓٬༷͝ͱʹҟͳΔ߹͕͋Γ·͢ɻ • *#.ɺ*#.ϩΰɺJCNDPNɺ%C *#.XBUTPOY *#.$MPVEɺ ੈքͷଟ͘ͷࠃͰొ͞Εͨ*OUFSOBUJPOBM#VTJOFTT.BDIJOFT$PSQPSBUJPOͷඪͰ͢ɻଞͷ ໊͓ΑͼαʔϏε໊ɺͦΕͧΕ*#.·֤ͨࣾͷඪͰ͋Δ߹͕͋Γ·͢ɻݱ࣌Ͱͷ *#.ͷඪϦετʹ͍ͭͯɺXXXJCNDPNMFHBMDPQZUSBEFTIUNM Λ͝ཡ͍ͩ͘͞ɻ • %PDMJOH"QBDIFϥΠηϯεͰެ։͞Ε͍ͯΔΦʔϓϯιʔεͷϥΠϒϥϦʔͰ͢ɻ