Slide 1

Slide 1 text

5PNPLP'636,*ʢ!LPNP@GSʣ ݸਓͰ͸͡ΊΔ Ϛϧν"*ΤʔδΣϯτೖ໳ ʙ-BOH$IBJOº-BOH(SBQIͰΞΠσΞΛܗʹ͢Δεςοϓʙ 1Z$PONJOJ౦ւ!໊ݹ԰

Slide 2

Slide 2 text

ࣗݾ঺հ w 5PNPLP'VSVLJ w 9ʢ5XJUUFSʣ!LPNP@GS w ۽ຊਆಸ઒ͷڌ఺ੜ׆ w ॴଐגࣜձࣾϏʔϓϥ΢υ w 1ZUIPOΛ࢖ͬͨσʔλαΠΤϯε෼໺ͷٕज़ࢧԉ΍ɺγεςϜ։ൃ ͳͲʹैࣄ

Slide 3

Slide 3 text

࠷ۙͷϚΠϒʔϜ w --.Λ࢖ͬͨখ͞ͳझຯϓϩάϥϜΛ࡞Δ͜ͱ w Ի੠΍ը૾ʹ൓Ԡͯ͠ಈ͘3BTQCFSSZ1J1JDPΧʔ w จֶ࡞඼Λখֶ೥ੜ޲͚ʹϦϥΠτ͢ΔϚϧνΤʔδΣϯτͷϓ ϩάϥϜ

Slide 4

Slide 4 text

࠷ۙͷϚΠϒʔϜ w --.Λ࢖ͬͨখ͞ͳझຯϓϩάϥϜΛ࡞Δ͜ͱ w Ի੠΍ը૾ʹ൓Ԡͯ͠ಈ͘3BTQCFSSZ1J1JDPΧʔ w จֶ࡞඼Λখֶ೥ੜ޲͚ʹϦϥΠτ͢ΔϚϧνΤʔδΣϯτͷϓ ϩάϥϜ ࠓ೔ͷൃද಺༰ w ࢼ࡞͢ΔதͰײͨͭ͡·͖ͣ΍ɺࢼͨ͠޻෉ w -BOH$IBJO΍-BOH(SBQIͷجຊػೳͷ࢖͍Ͳ͜Ζ ΰʔϧ w -BOH$IBJO΍-BOH(SBQIͰԿ͕Ͱ͖Δͷ͔Կͱͳ͘ΠϝʔδΛ௫Ή w ʮࣗ෼΋Կ͔࡞ͬͯΈΑ͏ʂʯͱࢥ͑ΔΑ͏ʹͳΔʢͱ͍͍ͳʣ

Slide 5

Slide 5 text

Ξ΢τϥΠϯ w ԿΛ࡞ͬͨͷ͔ w Ͳ͏࡞ͬͨͷ͔ w 4UFQ࠷ॳͷϓϩτλΠϓΛ࡞Δ w 4UFQָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ w 4UFQΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ w ·ͱΊ εϥΠυ಺ͷαϯϓϧίʔυ͸ɺ࣮ࡍͷ࣮૷ʢ(JU)VCܝࡌ൛ʣΛ؆ུԽͨ͠΋ͷͰ͢ɻ ࣗ࡞ͷΫϥεఆٛͳͲΛলུ͠ɺओཁͳॲཧͷྲྀΕΛத৺ʹ঺հ͍ͯ͠·͢ɻ εϥΠυͷαϯϓϧίʔυʹ͍ͭͯ

Slide 6

Slide 6 text

ԿΛ࡞ͬͨͷ͔

Slide 7

Slide 7 text

͖͔͚ͬ w ࠷ۙϚϧνΤʔδΣϯτ͕࿩୊͚ͩͲɺ͍·͍ͪΠϝʔδ͕͔ͭΊͳ͍ʜ w ϚϧνΤʔδΣϯτෳ਺ͷ"*ΤʔδΣϯτ͕ڠௐͯ͠λεΫΛਐΊΔγεςϜ w ͓ษڧ͕ͯΒɺࣗ෼ͷؔ৺ͷ͋Δ෼໺Ͱ࣮ࡍʹ࡞ͬͯΈΑ͏ w ֶੜ࣌୅ʹࣇಐจֶαʔΫϧʹॴଐ w 👉จֶ࡞඼Λখֶɺ೥ੜ޲͚ͷ؆୯ͳจষʹม׵͢ΔϓϩάϥϜΛ࡞ͬͯ ΈΑ͏ w จֶ࡞඼தֶɾߴߍͷڭՊॻʹࡌ͍ͬͯͨΑ͏ͳ୹ฤΛ૝ఆ w ྫ தౡರʮࢁ݄هʯɺև઒ཾ೭հʮཏੜ໳ʯ

Slide 8

Slide 8 text

ྫதౡರʮࢁ݄هʯ w ੲͷதࠃͷࢻਓ͕ϓϥΠυΛ͜͡ΒͤͯދʹͳΔ࿩ ݪจ ͔͠͠ɺจ໊͸༰қʹ༲Βͣɺੜ׆͸೔Λஞʬ͓ʭ ͏ͯۤ͘͠ͳΔɻ ཥ௃͸઴ʬΑ͏΍ʭ͘য᪮ʬ͠ΐ͏ͦ͏ʭʹۦΒ Εͯདྷͨɻ ͜ͷࠒʬ͜Ζʭ͔Βͦͷ༰๴ʬΑ͏΅͏ʭ΋ቆࠁ ʬ͠ΐ͏͘͜ʭͱͳΓɺ೑མͪࠎʛलʬͻ͍ʭͰɺ ؟ޫͷΈెʬ͍ͨͣʭΒʹᖲʑʬ͚͍͚͍ʭͱ͠ ͯɺિʬ͔ͭʭͯਐ࢜ʹొୈʬͱ͏͍ͩʭͨ͠ࠒ ͷ๛๹ʬ΄͏͖ΐ͏ʭͷඒগ೥ͷးʬ͓΋͔͛ʭ ͸ɺԿॲʬͲ͜ʭʹٻΊΑ͏΋ͳ͍ɻ "*ΤʔδΣϯτʹΑΔϦϥΠτ Ͱ΋ɺཥ௃ʬΓͪΐ͏ʭ͞Μͷࢻʬ͠ʭ͸ɺͳ ͔ͳ͔ΈͱΊΒΕ·ͤΜͰͨ͠ɻ͓ۚʬ͔Ͷʭ ΋ͳ͘ͳΓɺՈ଒ʬ͔ͧ͘ʭ΋͝͸Μ͕৯ʬͨʭ ΂ΒΕͳ͘ͳΓ·ͨ͠ɻ ͩΜͩΜɺཥ௃ʬΓͪΐ͏ʭ͞Μ͸ΠϥΠϥ͠ ͖ͯ·ͨ͠ɻ ͦͯ͠ɺإʬ͔͓ʭ΋΍ͤͯɺ໨ʬΊʭ͚͕ͩΩ ϥΩϥͱ͜Θ͘ޫʬͻ͔ʭΔΑ͏ʹͳΓ·͠ ͨɻΉ͔͠ͷݩؾʬ͛Μ͖ʭͳإʬ͔͓ʭͱ͸ɺ ·͕ͬͨͪͬͯ͘͠·͍·ͨ͠ɻ

Slide 9

Slide 9 text

Ͳ͏࡞ͬͨͷ͔

Slide 10

Slide 10 text

4UFQ ࠷ॳͷϓϩτλΠϓΛ࡞Δ

Slide 11

Slide 11 text

࠷ॳͷΤʔδΣϯτߏ੒ 4UFQ࠷ॳͷϓϩτλΠϓΛ࡞Δ

Slide 12

Slide 12 text

-BOH$IBJO w ೥ʹ࡞ΒΕͨ--.ΞϓϦέʔγϣϯ։ൃͷͨΊͷϑϨʔϜϫʔΫ w ؆୯ʹ"*ΤʔδΣϯτΛ࡞ΕΔ w ෳ਺ͷੜ੒"*ͷϓϩόΠμʔʢ0QFO"*ɺ"OUISPQJDɺ(PPHMFͳͲʣ Λಉ͡ΠϯλϑΣʔεͰѻ͑Δ w ೥݄ʹW͕ϦϦʔε͞Εͨ 4UFQ࠷ॳͷϓϩτλΠϓΛ࡞Δ

Slide 13

Slide 13 text

࣮૷ͷΠϝʔδʢͭ໨ͷϦϥΠτΤʔδΣϯτʣ from langchain.chat_models import init_chat_model from langchain_core.prompts import ChatPromptTemplate …ུ… # LLMΛॳظԽ͢Δ llm = init_chat_model(model="gpt-4.1", temperature=0.3) # ϓϩϯϓτͷςϯϓϨʔτΛఆٛ͢Δ prompt = ChatPromptTemplate( [("system", REWRITER_PROMPT), # γεςϜϓϩϯϓτ ("human", "# ݪจ\n{text}")]) # ੨ۭจݿͷݪߘςΩετ # ϓϩϯϓτͱLLMΛͭͳ͗ɺνΣʔϯΛߏங͢Δ chain = prompt | llm # ݪจͷݪߘΛ༩࣮͑ͯߦ͠ɺϦϥΠτͷ݁ՌΛऔಘ͢Δ result = chain.invoke({"text": text}) γεςϜϓϩϯϓτ ͋ͳͨ͸খઆΛখֶߍ1-2೥ੜ޲͚ʹϦϥΠ τ͢Δઐ໳ՈͰ͢ɻ ҎԼͷࢦࣔʹैͬͯจষΛॻ͖׵͑ͯͩ͘͞ ͍ɿ 1. ௕͍จ͸୹͘෼ׂ͍ͯͩ͘͠͞ 2. ೉͍͠ݴ༿͸қ͍͠ݴ༿ʹஔ͖׵͑ͯ͘ ͍ͩ͞ …ུ… 4UFQ࠷ॳͷϓϩτλΠϓΛ࡞Δ ϞσϧΛࢦఆ

Slide 14

Slide 14 text

࣮૷ͷΠϝʔδʢখֶੜϨϏϡΞʔΤʔδΣϯτʣ # LLMΛॳظԽ͢Δ llm = init_chat_model(model="gpt-4.1", temperature=0.7) # ϓϩϯϓτͷςϯϓϨʔτΛఆٛ͢Δ prompt = ChatPromptTemplate( [(“system", CHILD_REVIEWER_PROMPT), # γεςϜϓϩϯϓτ ("human", "{text}")]) # ϦϥΠτΤʔδΣϯτ͕ग़ྗͨ͠ୈ1ߘ # ϓϩϯϓτͱLLMΛͭͳ͗ɺνΣʔϯΛߏங͢Δ chain = prompt | llm # ݪจͷݪߘΛ༩࣮͑ͯߦ͠ɺϦϥΠτͷ݁ՌΛऔಘ͢Δ result = chain.invoke({"text": text}) γεςϜϓϩϯϓτ ͋ͳͨ͸খֶ1-2೥ੜͷࢹ఺ͰจষΛධՁ͢Δઐ໳ՈͰ͢ɻҎԼͷ3ͭͷ؍఺ ͔ΒจষΛධՁ͠ɺϑΟʔυόοΫΛฦ͍ͯͩ͘͠͞ɻ ධՁͷ؍఺ɿ 1. Ή͔͍ͣ͠ݴ༿ɿখֶ1-2೥ੜʹ͸ཧղ͕೉͍͠ݴ༿΍දݱΛϦετ Ξοϓɻ೉͍͠ॱͰฒ΂Δɻ 2. ௕͗͢ΔจɿҰ౓ͰಡΉͷ͕೉͍͠௕͍จΛϦετΞοϓɻ௕͍ॱͰฒ ΂Δɻ …ུ… w ಉ͡Α͏ʹ࣮૷ 4UFQ࠷ॳͷϓϩτλΠϓΛ࡞Δ

Slide 15

Slide 15 text

࠷ॳͷ՝୊ w ಡΈ΍͍͢จষ͕ͩɺ؆ܿ͗ͯ͢৘ॹ͕ͳ͍ʢͨͩͷʮ͋Β͢͡ʯΈ͍ͨʜʣ w ྫʮཏੜ໳ʯͰԼਓ͕࿝ംͱग़ձͬͯ਎͙ΔΈണ͙·Ͱͷల։͕εϐʔσΟա ͗ͯɺԼਓͷᷤ౻͕શવײ͡ΒΕͳ͍ w ରԠ w ϓϩϯϓτΛؤுΔ w ʮ෺ޠͷల։͕ٸʹͳΓ͗͢ͳ͍Α͏ʹɺඞཁʹԠͯ͡ొ৔ਓ෺ͷʮ৺ͷ ੠ʯΛೖΕ͍ͯͩ͘͞ʯ w ରԠ w ݪจͷҹ৅తͳϑϨʔζΛ࢒ͨ͢ΊͷΤʔδΣϯτΛ௥Ճ͢Δ 4UFQ࠷ॳͷϓϩτλΠϓΛ࡞Δ

Slide 16

Slide 16 text

վળݪจͷʮҹ৅తͳϑϨʔζʯΛ࢒͢ w ໊࡞୹ฤʹ͸ɺҹ৅ʹ࢒ΔϑϨʔζ͕͋Δ w ෺ޠͷςʔϚ΍ੈք؍ɺΩϟϥΫλʔͷߦಈཧ೦Λද͢Ұจ w ࢁ݄هʮڞʹɺզ͕Բපͳࣗଚ৺ͱɺଚେͳᠤஏ৺ͷॴҝͰ͋Δʯ w ಡޙײ΁ͷӨڹ w ཏੜ໳ʮԼਓͷߦํ͸୭΋஌Βͳ͍ʯ 4UFQ࠷ॳͷϓϩτλΠϓΛ࡞Δ

Slide 17

Slide 17 text

ʮҹ৅తͳϑϨʔζʯநग़ΤʔδΣϯτΛಋೖ w ϦϥΠτલʹʮҹ৅తͳϑϨʔζʯΛߴߍੜࢹ఺Ͱநग़͢ΔΤʔδΣϯτΛ௥Ճ w நग़ͨ͠ϑϨʔζ͸ϦϥΠτΤʔδΣϯτʹ౉͢ w ϓϩϯϓτͰʮ͜ͷϑϨʔζ͸࢒ͯ͠ϦϥΠτͯ͠ͶʯͱࢦࣔΛ௥Ճ ʲ௥Ճࢦࣔʳ ʮҹ৅తͳϑϨʔζҰཡʯ͸ɺݩͷ࡞඼ͷதͰ**ಛʹҹ৅తͰ͋Δͱ൑அ͞ΕͨηϦϑ΍දݱ**Ͱ͢ɻ ͜ΕΒ͸෺ޠͷงғؾ΍ಡޙײʹେ͖͘Өڹ͢ΔͨΊɺͰ͖Δ͚ͩ࡟আͤͣɺ**΍͍͞͠දݱʹݴ͍׵͑ͯͰ ΋࢒͢Α͏ʹ͍ͯͩ͘͠͞ɻ** 4UFQ࠷ॳͷϓϩτλΠϓΛ࡞Δ

Slide 18

Slide 18 text

நग़͞ΕͨϑϨʔζͱϦϥΠτޙͷจষ ϦϥΠτޙͷରԠ͢Δจষ ཧ༝ʬΓΏ͏ʭ΋෼ʬΘʭ͔Βͣʹɺ͍ΖΜͳ͜ͱΛडʬ͏ʭ͚ೖʬ͍ʭΕͯɺཧ༝ʬΓΏ͏ʭ΋෼ʬΘʭ͔Βͣʹੜʬ͍ʭ ͖͍ͯ͘ͷ͕ɺ΅ͨͪ͘ੜʬ͍ʭ͖΋ͷͷͩ͞ΊͰ͢ɻ ΅͘ͷதʬͳ͔ʭͷਓؒʬʹΜ͛Μʭͷ৺ʬ͜͜Ζʭ͕͔ͬ͢Γ͖͑ͯ͠·ͬͨΒɺͨͿΜͦͷ΄͏͕ɺ΅͘͸͋͠Θͤʹ ͳΕΔͰ͠ΐ͏ɻ நग़͞ΕͨϑϨʔζʢࢁ݄هʣ ͸͔͍ͣ͠࿩ʬ͸ͳ͠ʭ͚ͩͲɺࠓʬ͍·ʭͰ΋ɺ͜ΜͳΈ͡Ίͳ͕ͨ͢ʹͳͬͨࠓʬ͍·ʭͰ΋ɺ΅͘͸ɺࣗ෼ʬ͡Ϳ Μʭͷࢻʬ͠ʭ͕͑Β͍ਓͨͪͷصʬͭ͑͘ʭͷ্ʬ͏͑ʭʹ͋ΔເʬΏΊʭΛݟʬΈʭΔ͜ͱ͕͋Γ·͢ɻ 4UFQ࠷ॳͷϓϩτλΠϓΛ࡞Δ

Slide 19

Slide 19 text

4UFQ ָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ

Slide 20

Slide 20 text

ࢼߦࡨޡ͢Δ͏ͪʹݟ͖͑ͯͨ՝୊ w ՝୊ΤʔδΣϯτ͕ग़ྗ͢Δσʔλͷߏ଄͕೺Ѳ͠ʹ͍͘ w ՝୊ΤʔδΣϯτશମͷߏ଄΍ݱࡏͷঢ়ଶ͕Θ͔Γʹ͍͘ w ՝୊࣮ߦ݁Ռ΍్த݁Ռͷϩάه࿥ɾ੔ཧ͕खؒ 4UFQָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ

Slide 21

Slide 21 text

ࢼߦࡨޡ͢Δ͏ͪʹݟ͖͑ͯͨ՝୊ w ՝୊ΤʔδΣϯτ͕ग़ྗ͢Δσʔλͷߏ଄͕೺Ѳ͠ʹ͍͘ w ՝୊ΤʔδΣϯτશମͷߏ଄΍ݱࡏͷঢ়ଶ͕Θ͔Γʹ͍͘ w ՝୊࣮ߦ݁Ռ΍్த݁Ռͷϩάه࿥ɾ੔ཧ͕खؒ 4UFQָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ

Slide 22

Slide 22 text

՝୊ΤʔδΣϯτ͕ग़ྗ͢Δσʔλͷߏ଄͕೺Ѳ͠ʹ͍͘ w ॳظ֤ΤʔδΣϯτͷग़ྗΛ+40/ܗࣜͷจࣈྻͰฦ͢Α͏ࢦࣔ w ϓϩϯϓτ಺Ͱσʔλߏ଄Λఆ͍ٛͯ͠ΔΑ͏ͳঢ়ଶʜ w *%&ͷิ׬͕ޮ͔ͣɺΩʔ໊΍σʔλܕ͕೺Ѳͮ͠Β͍ খֶੜϨϏϡΞʔΤʔδΣϯτͷϓϩϯϓτʢҰ෦ʣ ʲॏཁʳඞͣҎԼͷΩʔΛ࣋ͭܗࣜͷ **JSON** Ͱग़ྗ͍ͯͩ͘͠͞ɿ - Ωʔ"difficult_words": Ή͔͍ͣ͠ݴ༿ͷϦετʢྫ: ["Ή͔ͣ͠ ͍ݴ༿1", "Ή͔͍ͣ͠ݴ༿2"]ʣ - Ωʔ"long_sentences": ௕͗͢ΔจͷϦετʢྫ: ["௕͗͢Δจ1", "௕͗͢Δจ2"]ʣ - Ωʔ"unclear_parts": Θ͔Γʹ͍͘෦෼ͷϦετʢྫ: ["Θ͔Γʹ ͍͘෦෼1", "Θ͔Γʹ͍͘෦෼2"]ʣ ग़ྗྫ { "difficult_words": [ "ӡ໋ʢ͏ΜΊ͍ʣ", “໘Өʢ͓΋͔͛ʣ", ...], "long_sentences": [ “΅͘͸ɺࣗ෼ʬ͡ͿΜʭ͕͍͢͝ਓʬͻͱʭͰͳ͍͜ͱΛ͜Θ͕ͬ ͨͷͰɺҰੜʬ͍ͬ͠ΐ͏ʭ͚ΜΊ͍͕Μ͹ͬͯɺΈ͕͜͏ͱ͸͠· ͤΜͰͨ͠ɻ", ...], "unclear_parts": [ “ཥ௃ʬΓͪΐ͏ʭ͕Ͳ͏ͯ͠ދʬͱΒʭʹͳͬͨͷ͔ɺ͸͖ͬΓ ͱͨ͠ཧ༝͕ॻ͔Ε͍ͯ·ͤΜɻ", ...] } 4UFQָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ

Slide 23

Slide 23 text

1ZEBOUJDʹΑΔग़ྗߏ଄Λ໌ࣔ͠ɺ1ZUIPOΦϒδΣΫτʹม׵ ग़ྗͷߏ଄Λ1ZEBOUJDΛ࢖ͬͯఆٛ ΤʔδΣϯτͷग़ྗߏ଄Λࢦఆ͢Δʢwith_structured_output()ʣ from pydantic import BaseModel, Field class ChildFeedback(BaseModel): # খֶੜϨϏϡΞʔΤʔδΣϯτͷग़ྗ݁Ռ difficult_words: List[str] = Field(default_factory=list, description="Ή͔͍ͣ͠ݴ༿ͷϦετ") long_sentences: List[str] = Field(default_factory=list, description="௕͗͢ΔจͷϦετ") unclear_parts: List[str] = Field(default_factory=list, description="Θ͔Γʹ͍͘෦෼ͷϦετ") # LLMʢGPT-4.1ʣΛॳظԽ͢Δ llm = init_chat_model(model="gpt-4.1", temperature=0.3) # LLMͷग़ྗΛChildFeedbackͷܗࣜͰड͚औΔΑ͏ʹઃఆ͢Δ llm = llm.with_structured_output(ChildFeedback) w 1ZEBOUJDͰσʔλߏ଄Λఆٛ͠ɺwith_structured_output Ͱࢦఆ ࣗಈͰ1ZUIPOΦϒδΣΫτʹม׵ 4UFQָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ

Slide 24

Slide 24 text

ࢼߦࡨޡ͢Δ͏ͪʹݟ͖͑ͯͨ՝୊ w ՝୊ΤʔδΣϯτ͕ग़ྗ͢Δσʔλͷߏ଄͕೺Ѳ͠ʹ͍͘ w ՝୊ΤʔδΣϯτશମͷߏ଄΍ঢ়ଶ͕Θ͔Γʹ͍͘ w ՝୊࣮ߦ݁Ռ΍్த݁Ռͷϩάه࿥ɾ੔ཧ͕खؒ 4UFQָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ

Slide 25

Slide 25 text

՝୊ΤʔδΣϯτશମͷߏ଄΍ঢ়ଶ͕Θ͔Γʹ͍͘ w -BOH$IBJO͚ͩͩͱɺΤʔδΣϯτͷ෼ذ΍߹ྲྀͳͲͷશମͷߏ଄͕ݟ͑ͳ͍ w தؒ݁Ռʢୈߘ΍ϨϏϡʔ݁ՌͳͲʣ͕ؔ਺ͷҾ਺Ͱόϥ͚ͯ౉͞ΕΔ # ҹ৅తͳϑϨʔζͷநग़ notable_lines = run_highlight_executor(input_text) # ϦϥΠτΤʔδΣϯτ͕ϦϥΠτ rewritten_text = run_rewriter(input_text) # খֶੜϨϏϡΞʔʹΑΔϨϏϡʔ child_feedback = run_child_reviewer(rewritten_text) # େਓϨϏϡΞʔʹΑΔϨϏϡʔ adult_feedback = run_adult_reviewer(rewritten_text) # վળఏҊAgentͷ࣮ߦ suggester_output = run_suggester(input_text, rewriten_text, ...ུ...) # ϨϏϡʔ൓өAgentͷ࣮ߦ final_text = run_suggestion_applier(input_text, rewritten_text, ...ུ...) -BOH$IBJO͚ͩͰ࡞Δ৔߹ͷΠϝʔδ 7 ΤʔδΣϯτΛ࣮ߦ͢Δؔ਺Λॱ൪ʹݺͿ ࣮ࡍͷΤʔδΣϯτͷߏ଄ 4UFQָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ

Slide 26

Slide 26 text

-BOH(SBQIͷಋೖ w -BOH(SBQI w ෳࡶͳ--.ΞϓϦΛߏங͢ΔͨΊͷϥΠϒϥϦ w ΤʔδΣϯτͷϫʔΫϑϩʔΛάϥϑߏ଄Ͱఆٛ w ֤ΤʔδΣϯτ͕ಡΈॻ͖͢ΔσʔλΛҰݩ؅ཧʢεςʔτʣ 4UFQָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ

Slide 27

Slide 27 text

࣮૷άϥϑͷॳظԽɾεςʔτͷఆٛ # WorkflowStateΛঢ়ଶͱͯ࣋ͭ͠άϥϑΛॳظԽ graph_builder = StateGraph(WorkflowState) class WorkflowState(BaseModel): original_text: str = Field(..., description="ݩͷςΩετ") model: str = Field(..., description="Ϟσϧ໊") # ֤ΤʔδΣϯτͷೖग़ྗͰ࢖͏σʔλΛ࣋ͨͤΔ highlight_output: HighlightExtractorOutput = Field(default_factory=HighlightExtractorOutput, description="ݪߘΛ΋ͱʹநग़ͨ͠ҹ৅తͳจ΍ηϦϑ") rewritten_sentence: RewrittenSentence = Field(default_factory=RewrittenSentence, description="ϦϥΠτ͞ΕͨςΩετͷৄࡉ") child_feedback: ChildFeedbackDict = Field(default_factory=ChildFeedback, description="খֶੜͷϨϏϡΞʔAgent͔ΒͷϑΟʔυόοΫ") adult_feedback: AdultFeedbackDict = Field(default_factory=AdultFeedback, description="େਓͷϨϏϡΞʔAgent͔ΒͷϑΟʔυόοΫ") …ུ… ϫʔΫϑϩʔΛఆٛ͢ΔάϥϑͷॳظԽ ঢ়ଶʢεςʔτʣͷߏ଄Λఆٛ 4UFQָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ

Slide 28

Slide 28 text

࣮૷ϊʔυʢΤʔδΣϯτʣͷ௥Ճ graph_builder.add_node("ϑϨʔζநग़Agent", _extract_highlight_node) graph_builder.add_node("ϦϥΠτAgent", _rewrite_text_node) graph_builder.add_node("ࢠڙϨϏϡΞʔAgent", _review_child_node) graph_builder.add_node("େਓϨϏϡΞʔAgent", _review_adult_node) graph_builder.add_node("վળఏҊAgent", _suggest_improvements_node) graph_builder.add_node("ϨϏϡʔ൓өAgent", _apply_suggestions_node) ֤ΤʔδΣϯτΛϊʔυͱͯ͠௥Ճ ϊʔυΛࣝผ͢ΔͨΊͷ໊લ ϊʔυͰ࣮ߦ͢ΔॲཧΛॻ͍ͨؔ਺ 4UFQָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ

Slide 29

Slide 29 text

graph_builder.add_node("ϑϨʔζநग़Agent", _extract_highlight_node) graph_builder.add_node("ϦϥΠτAgent", _rewrite_text_node) graph_builder.add_node("ࢠڙϨϏϡΞʔAgent", _review_child_node) graph_builder.add_node("େਓϨϏϡΞʔAgent", _review_adult_node) graph_builder.add_node("վળఏҊAgent", _suggest_improvements_node) graph_builder.add_nodee(“ϨϏϡʔ൓өAgent", _apply_suggestions_node) ֤ΤʔδΣϯτΛϊʔυͱͯ͠௥Ճ ϊʔυΛࣝผ͢ΔͨΊͷ໊લ ϊʔυͰ࣮ߦ͢ΔॲཧΛॻ͍ͨؔ਺ ࣮૷ϊʔυʢΤʔδΣϯτʣͷ௥Ճ খֶੜϨϏϡΞʔͷϊʔυͰ࣮ߦ͢Δॲཧ def _review_child_node(state: WorkflowState) -> dict: # LLMͷॳظԽ΍ϓϩϯϓτͷఆٛ llm = init_chat_model(...ུ...).with_structured_output(ChildFeedback) prompt = ChatPromptTemplare(...ུ...) # νΣʔϯΛߏங + ࣮ߦ chain = prompt | llm child_feedback = chain.invoke(state.rewritten_sentence.rewritten_text) return {"child_feedback": child_feedback} Ҿ਺Ͱঢ়ଶʢεςʔτʣΛड͚औΔ εςʔτ͔ΒɺୈߘͷσʔλΛऔಘ ໭Γ஋ͰεςʔτΛߋ৽ 4UFQָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ

Slide 30

Slide 30 text

# Τοδͷఆٛ graph_builder.add_edge("ϑϨʔζநग़Agent", "ϦϥΠτAgent") graph_builder.add_edge("ϦϥΠτAgent", "ࢠڙϨϏϡΞʔAgent") graph_builder.add_edge("ϦϥΠτAgent", "େਓϨϏϡΞʔAgent") graph_builder.add_edge("ࢠڙϨϏϡΞʔAgent", "վળఏҊAgent") graph_builder.add_edge("େਓϨϏϡΞʔAgent", "վળఏҊAgent") graph_builder.add_edge("վળఏҊAgent", "ϨϏϡʔ൓өAgent") # ։࢝ϊʔυͱऴྃϊʔυͷઃఆ graph_builder.set_finish_point("ϑϨʔζநग़Agent") graph_builder.set_finish_point("ϨϏϡʔ൓өAgent") # ίϯύΠϧ graph = graph_builder.compile() Τοδͷ௥Ճ ࣮૷ϊʔυؒͷ઀ଓʢΤοδʣ ࣮ߦՄೳͳάϥϑ 4UFQָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ

Slide 31

Slide 31 text

࣮૷άϥϑͷ࣮ߦ # εςʔτͷॳظঢ়ଶΛ࡞੒ state = WorkflowState(original_text=original_text, model="gpt-4.1") # ϫʔΫϑϩʔͷάϥϑΛ࣮ߦ result = graph.invoke(state) άϥϑͷ࣮ߦ 4UFQָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ w invoke()ͰΤʔδΣϯτΛॱʹ࣮ߦ͢Δ

Slide 32

Slide 32 text

άϥϑߏ଄ͷՄࢹԽ graph.get_graph().draw_mermaid_png() 4UFQָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ

Slide 33

Slide 33 text

ࢼߦࡨޡ͢Δ͏ͪʹݟ͖͑ͯͨ՝୊ w ՝୊ΤʔδΣϯτ͕ग़ྗ͢Δσʔλͷߏ଄͕೺Ѳ͠ʹ͍͘ w ՝୊ΤʔδΣϯτશମͷߏ଄΍ݱࡏͷঢ়ଶ͕Θ͔Γʹ͍͘ w ՝୊࣮ߦ݁Ռ΍్த݁Ռͷϩάه࿥ɾ੔ཧ͕खؒ 4UFQָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ

Slide 34

Slide 34 text

՝୊࣮ߦ݁Ռ΍్த݁Ռͷϩάه࿥ɾ੔ཧ͕खؒ w ̒ͭͷΤʔδΣϯτͦΕͧΕʹதؒ੒Ռ෺͕͋Δ w நग़ͨ͠ϑϨʔζɺϨϏϡʔίϝϯτɺվળఏҊʜ w ͲͷΤʔδΣϯτ·Ͱ͸͏·͍͍ͬͯͨ͘ͷ͔ɺ్த݁ՌΛ௥͏ͷ͕େม w ྑ͍ѱ͍ͷه࿥ɺಛఆ৚݅ʹΑΔ݁ՌͷߜΓࠐΈ͕൥ࡶ 4UFQָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ

Slide 35

Slide 35 text

-BOH4NJUIͷಋೖ w -BOH4NJUIͱ͸ w -BOH$IBJOͷ։ൃݩ͕ఏڙ͢Δ--.ΞϓϦͷͨΊͷϓϥοτϑΥʔϜ w ࣮ߦϩάɾग़ྗɾίετͳͲΛࣗಈͰه࿥͠ɺ8FC্ͷμογϡϘʔ υͰ֬ೝɾՄࢹԽͰ͖Δ w ධՁࢦඪ΍Ϣʔβ͔ΒͷϑΟʔυόοΫ؅ཧ΋Ͱ͖Δ 4UFQָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ

Slide 36

Slide 36 text

ಋೖ͸؆୯  -BOH4NJUIͰΞΧ΢ϯτ࡞੒͠ɺ"1*ΩʔΛൃߦ  ؀ڥม਺Λઃఆ  -BOH$IBJOΛ࢖͍ͬͯΔϓϩάϥϜΛ࣮ߦ͢Δ 👉͜Ε͚ͩͰɺ࣮ߦ࣌ͷϩάΛ-BOH4NJUI্ʹૹ৴ͯ͘͠ΕΔ 4UFQָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ "1*ͷ ྉۚίετ Τϥʔͷ ൃੜঢ়گ τʔΫϯ਺ ॲཧ࣌ؒ

Slide 37

Slide 37 text

4UFQָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ ࣗ෼ͰϝλσʔλΛ ௥Ճ͢Δ͜ͱ΋Ͱ͖Δ ϞσϧͰ࢖ͬͨ ύϥϝʔλͷ஋ ࢖ͬͨϞσϧ ϥΠϒϥϦͷ όʔδϣϯ ֤ϩάͷৄࡉ "*ͷग़ྗ݁Ռ ֤ΤʔδΣϯτ͕ग़ྗ͢Δ தؒσʔλΛ֬ೝͰ͖Δ

Slide 38

Slide 38 text

ධՁ΍ίϝϯτͷه࿥ w -BOH4NJUIʹ͸ɺϢʔβ͔ΒͷϑΟʔυόοΫΛऩू͢Δػೳ͕͋Δ w -BOH4NJUIͷClientΛ࡞Γɺcreate_feedback()ΛݺͿ from langsmith import Client ...ུ... vote = input("ධՁΛೖྗ͍ͯͩ͘͠͞(good/so-so/bad): ") comment = input("ίϝϯτΛೖྗ͍ͯͩ͘͠͞: ") client = Client() client.create_feedback(run_id, key="quality_vote", value=vote, comment=comment) ϑΟʔυόοΫͷऩू 4UFQָʹ։ൃͰ͖ΔΑ͏ʹ͢Δ -BOH4NJUIʹධՁͱίϝϯτΛૹ৴

Slide 39

Slide 39 text

4UFQ ΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ

Slide 40

Slide 40 text

ϦϥΠτͷ࣭ʹؔ͢Δ՝୊ w ՝୊ݪ࡞ͷҹ৅తͳදݱ͕े෼ʹ൓ө͞Εͳ͍ w ՝୊త֬Ͱͳ͍վળఏҊ͕ͦͷ··ద༻͞Εͯ͠·͏ w ՝୊දݱʹʮ೔ຊޠͷඒ͠͞ʯ΍ʮ৺஍Α͍ϦζϜײʯ͕͚͍ܽͯ Δ 4UFQΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ

Slide 41

Slide 41 text

՝୊ݪ࡞ͷҹ৅తͳදݱ͕े෼ʹ൓ө͞Εͳ͍ w ࢁ݄هͰҹ৅తͳϑϨʔζͱ͍͑͹ɺ ΍͸Γʮଚେͳᠤஏ৺ͱԲපͳࣗଚ৺ʯͰ͸ʜʁʢओ؍ w ʮڞʹɺզ͕Բපͳࣗଚ৺ͱɺଚେͳᠤஏ৺ͱͷॴҝͰ͋Δɻʯ w ʮϑϨʔζநग़ΤʔδΣϯτʯͷײੑͩͱબ͹ͳ͍͜ͱ͕͋Δ w ݪߘ͚ͩͰ͸ͳ͘ɺ8FCͷ৘ใʢײ૝هࣄʣͳͲΛࢀরͤ͞Δͱɺ ʮੈؒҰൠతʹҹ৅తͩͱݴΘΕΔϑϨʔζʯΛબ΂ΔͷͰ͸ʁ 4UFQΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ

Slide 42

Slide 42 text

3FUSJFWFS֎෦৘ใΛࢀরͤ͞ΔͨΊͷػೳ w ݕࡧΫΤϦΛड͚औͬͯɺؔ࿈͢ΔυΩϡϝϯτΛฦ͢ w TavilySearchRetrieverAPIΫϥε w 5BWJMZʢ"*ΤʔδΣϯτ༻ͷ8FCݕࡧΤϯδϯʣΛ࢖͏3FUSJFWFS 4UFQΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ

Slide 43

Slide 43 text

࣮૷3FUSJFWFSͱ࣭໰จͷ࡞੒ 5BWJMZΛ࢖ͬͨ8FC৘ใͷऔಘ४උ from langchain_community.retrievers import TavilySearchAPIRetriever from langchain_core.runnables import RunnablePassthrough # TavilyݕࡧAPIͷretrieverΛॳظԽʢ࠷େ10݅ͷݕࡧ݁ՌΛऔಘʣ retriever = TavilySearchAPIRetriever(k=10) # ݕࡧΫΤϦΛ࡞੒ʢஶऀͱ࡞඼λΠτϧ͔Β໊ݴΛ୳͢ʣ question = f"""{author}ͷʮ{title}ʯͷ໊ݴɺ໊୆ࢺɺ༗໊ͳϑϨʔζΛબΜͰ͍ͩ͘͞ɻ ಛʹɺSNSͰ༗໊ͳϑϨʔζ΍ɺωοτϛʔϜʹͳ͍ͬͯΔ͔Ͳ͏͔΋ߟྀʹೖΕ͍ͯͩ͘͞ɻ""" # LLMΛॳظԽ & ϓϩϯϓτςϯϓϨʔτΛ࡞੒ llm = init_chat_model(model=model_name, temperature=0). llm = llm.with_structured_output(HighlightExtractorOutput) prompt = ChatPromptTemplate([ ("system", HIGHLIGHT_WITH_WEB_EXTRACTOR_PROMPT), ("human", "# ஶऀ໊: {author}\n# λΠτϧ: {title} # ίϯςΩετ\n{context}"), ]) ༩͑ΒΕͨίϯςΩετ͚ͩʹج͍ͮͯ ϑϨʔζΛநग़͢ΔΑ͏ɺϓϩϯϓτͰࢦࣔ DPOUFYUʹ5BWJMZͰݕࡧͨ݁͠ՌΛೖΕΔ 4UFQΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ

Slide 44

Slide 44 text

࣮૷ݕࡧΛ࣮ߦͯ͠ɺ݁ՌΛϓϩϯϓτʹ౉͢ νΣʔϯͷ૊Έཱͯͱ࣮ߦ # questionʹج͍ͮͯWebݕࡧΛߦ͍ɺͦͷ݁ՌΛcontextͱͯ͠ϓϩϯϓτʹ౉͢Α͏ # νΣʔϯΛ૊ΈཱͯΔ chain = ( RunnablePassthrough.assign(context=(lambda x: x["question"]) | retriever) | prompt | llm ) # νΣʔϯΛ࣮ߦ໊ͯ͠ݴΛநग़͢Δ highlighted_executor_output = chain.invoke({"question": question,
 ɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹɹ "author": author,
 "title": title}) ࣭໰จΛRVFTUJPO͔ΒऔΓग़͠ɺ SFUSJFWFSͰݕࡧ࣮ߦͯ͠ɺ ݁ՌΛDPOUFYUʹׂΓ౰ͯͯ࣍ͷQSPNQUʹ౉͢ wRunnablePassthrough.assign wೖྗσʔλΛอ࣋͠ͳ͕Βɺ৽͍͠σʔλʢ͜͜Ͱ͸contextʣΛ࣍ͷॲཧʹ࣋ͪӽͤΔίϯϙʔ ωϯτ 4UFQΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ

Slide 45

Slide 45 text

ࢁ݄هͷ໊ݴͷݕࡧ݁ՌʢҰ෦ʣ ݕࡧ݁Ռ ݕࡧ݁Ռ 4UFQΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ 8FCϖʔδͷλΠτϧ 63- ࢁ݄هΛಡΈฦͨ͠ͱ͍͏/PUFͷهࣄ͕ώοτ͍ͯ͠Δ

Slide 46

Slide 46 text

8FC৘ใʹج͍ͮͯϑϨʔζΛநग़ͨ݁͠Ռ w ׂͱྑ͍ઢΛ͍͍ͬͯΔʢओ؍ʣ͕ɺ ݪจͦͷ··ϑϨʔζʹͳ͍ͬͯͳ͍ நग़͞ΕͨϑϨʔζ ݪจʹ࣮ࡍʹ͋ΔϑϨʔζ ਓؒ͸୭Ͱ΋໠्࢖Ͱ͋Γɺͦͷ໠्ʹ౰Δͷ͕ɺ֤ਓͷੑ৘ͩͱ͍͏ ڞʹɺզ͕Բපͳࣗଚ৺ͱɺଚେͳᠤஏ৺ͱͷॴҝʬ͍ͤʭͰ͋Δ ݾʬ͓ͷΕʭͷचʬͨ·ʭʹඇʬ͋Βʭ͟Δ͜ͱΛዧʬ͓ͦʭΕΔ͕ނʬΏ͑ʭʹɺ׶ʬ͋͑ʭͯࠁ ۤͯ͠ຏʬΈ͕ʭ͜͏ͱ΋ͤͣɺຢɺݾͷचͳΔ΂͖Λ൒͹৴ͣΔ͕ނʹɺᛦʑʬΖ͘Ζ͘ʭͱͯ͠… 4UFQΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ

Slide 47

Slide 47 text

औಘͨ͠ϑϨʔζʹ࠷΋ྨࣅ͢ΔݪจΛಛఆ w TFOUFODFUSBOTGPSNFSΛ࢖ͬͯҎԼΛϕΫτϧԽ  ݪจΛจͣͭ෼ׂͨ͠ςΩετ  "*ΤʔδΣϯτ͕8FC৘ใΛݩʹநग़ͨ͠ʮҹ৅తͳϑϨʔζʯ w ίαΠϯྨࣅ౓Λܭࢉͯ͠ɺ࠷΋ࣅ͍ͯΔݪจΛಛఆ w ࣅ͍ͯΔϑϨʔζ͕΋ͷ͕ͳ͍ʢྨࣅ౓Ҏ্ͷϑϨʔζ͕ͳ͍ʣ৔߹͸ഁغ Ұ൪͍ۙݪจ ྨࣅ౓ "*ΤʔδΣϯτ͕நग़ͨ͠ϑϨʔζ ಛఆͨ݁͠Ռ 4UFQΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ

Slide 48

Slide 48 text

ϦϥΠτͷ࣭ʹؔ͢Δ՝୊ w ՝୊ݪ࡞ͷҹ৅తͳදݱ͕े෼ʹ൓ө͞Εͳ͍ w ՝୊త֬Ͱͳ͍վળఏҊ͕ͦͷ··ద༻͞Εͯ͠·͏ w ՝୊දݱʹʮ೔ຊޠͷඒ͠͞ʯ΍ʮ৺஍Α͍ϦζϜײʯ͕͚͍ܽͯ Δ 4UFQΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ

Slide 49

Slide 49 text

՝୊త֬Ͱͳ͍վળఏҊ͕ͦͷ··ద༻͞Εͯ͠·͏ w ͍·͍ͪͳఏҊ͸ਓ͕ؒνΣοΫͯ͠٫Լ͍ͨ͠ w ྫʮӡ໋ʢ͏ΜΊ͍ʣͱ͍͏ݴ༿͕೉͍͔͠ΒɺؙׅހͰzͩ͞Ίzͱ ิ଍͠Ζʯ 4UFQΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ

Slide 50

Slide 50 text

ਓؒʹΑΔ൑அͷհೖʢ)VNBOJOUIFMPPQʣ w ঝೝɺฤूɺ٫ԼͳͲɺਓؒʹΑΔ൑அ͕ඞཁͱͳΔ࣌ͷύλʔϯ w ࠓճͷ৔߹վળఏҊ"HFOUͷޙ޻ఔͰΤʔδΣϯτͷ࣮ߦΛҰ୴ఀࢭ͠ɺ ਓؒʹΑΔνΣοΫʢఏҊͷ࠾༻ෆ࠾༻ͷ൑அʣΛߦ͏ 4UFQΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ

Slide 51

Slide 51 text

࣮૷ਓ͕ؒհೖ͢ΔͨΊͷϊʔυΛఆٛ from langgraph.types import interrupt ...ུ... def _human_review_edit_node(state: WorkflowState) -> dict: result = interrupt({"task": "ఏҊͷऔࣺબ୒Λ͍ͯͩ͘͠͞ɻ"}) edited_suggester_output = result["edited_suggestions"] return {"suggester_output": edited_suggester_output} w interrupt()Ͱάϥϑͷ࣮ߦΛҰ࣌தஅ͠ɺ֎෦ೖྗΛ଴ͭ άϥϑͷ࣮ߦΛҰ࣌தஅ͠ɺ֎෦ೖྗΛऔಘ͢Δ ฤूޙͷఏҊͰεςʔτΛߋ৽ 4UFQΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ

Slide 52

Slide 52 text

࣮૷ޙ͔Β࠶։Ͱ͖ΔΑ͏ઃఆ graph_builder = StateGraph(WorkflowState) # ϊʔυͷ௥Ճ ...ུ... graph_builder.add_node("ਓؒʹΑΔνΣοΫ", _human_review_edit_node) ...ུ... # Τοδͷఆٛ ...ུ... graph_builder.add_edge("վળఏҊAgent", "ਓؒʹΑΔνΣοΫ") graph_builder.add_edge("ਓؒʹΑΔνΣοΫ", "ϨϏϡʔ൓өAgent") ...ུ... checkpointer = InMemorySaver() # ޙͰ࠶։Ͱ͖ΔΑ͏ʹঢ়ଶΛอଘՄೳʹ graph = graph_builder.compile(checkpointer=checkpointer) w InMemorySaverΛ࢖ͬͯɺ࣮ߦதͷάϥϑͷঢ়ଶΛอଘͰ͖ΔΑ͏ʹ͢Δ ͋ͱͰ࠶։Ͱ͖ΔΑ͏ʹɺঢ়ଶΛอଘՄೳʹ 4UFQΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ

Slide 53

Slide 53 text

࣮૷άϥϑͷதஅͱ࠶։ from langgraph.types import Command ...ུ... # ࠶։࣌ʹඞཁͳࣝผࢠΛ࡞੒ɾઃఆ config = {"configurable": {"thread_id": uuid.uuid4()}} result = graph.invoke(state, config=config) # interrept()ʹ౸ୡͨ͠λΠϛϯάͰॲཧ͕தஅ͢ΔͷͰɺݱࡏͷঢ়ଶΛऔಘ state = WorkflowState.model_validate(result) edited_sugesstions = _human_review_edit(state) # ࢒ΓͷΤʔδΣϯτͷॲཧΛ࠶։ resumed_result = graph.invoke( Command(resume={"edited_suggestions": edited_sugesstions}), config=config ) ୯७ʹɺඪ४ೖྗͰ֤ఏҊʹ͍ͭͯ0,/(Λೖྗͤ͞ɺ 0,ͩͬͨఏҊ͚ͩΛ࢒ͯ͠ฦؔ͢਺ ࣮ߦ࣌ʹɺฤूࡁΈͷఏҊΛάϥϑͷεςʔτʹ౉ͯ͠ ߋ৽͢Δ 4UFQΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ

Slide 54

Slide 54 text

ϦϥΠτͷ࣭ʹؔ͢Δ՝୊ w ՝୊ݪ࡞ͷҹ৅తͳදݱ͕े෼ʹ൓ө͞Εͳ͍ w ՝୊త֬Ͱͳ͍վળఏҊ͕ͦͷ··ద༻͞Εͯ͠·͏ w ՝୊දݱʹʮ೔ຊޠͷඒ͠͞ʯ΍ʮ৺஍Α͍ϦζϜײʯ͕͚͍ܽͯ Δ 4UFQΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ

Slide 55

Slide 55 text

՝୊දݱʹʮ೔ຊޠͷඒ͠͞ʯ΍ʮ৺஍Α͍ϦζϜײʯ͕͚͍ܽͯΔ և઒ͷʮཏੜ໳ʯΛΤʔδΣϯτʹϦϥΠτͤͨ݁͞Ռ ͋Δ೔ͷ ༦ํʬΏ͏͕ͨʭͷ͜ͱͰ͢ɻͻͱΓͷ Լਓʬ͛ʹΜʭ͕ɺཏੜ໳ʬΒ͠ΐ͏΋Μʭͷ Լʬͨ͠ʭͰɺӍʬ͋Ίʭ͕ ΍ΉͷΛ ·͍ͬͯ·ͨ͠ɻ޿ʬͻΖʭ͍໳ʬ΋ΜʭͷԼʹ͸ɺ͜ͷ உʬ͓ͱ͜ʭ͔͠ ͍·ͤΜɻେ͖ͳ ·Δ͍ ͸͠Βʹɺ͖Γ͗Γ͕͢ ͽΐΜͱ ͱ·͍ͬͯ·͢ɻ և઒ͷʮ஖ᥨͷࢳʯͷݪจ ͋Δ೔ͷࣄͰ͍͟͝·͢ɻޚऍ༷ᷟʬ͓͠Ό͔͞·ʭ͸ۃָͷ࿇஑ʬ͸͍͚͢ʭͷ;ͪΛɺಠΓͰ ͿΒͿΒޚา͖ʹͳ͍ͬͯΒͬ͠Ό͍·ͨ͠ɻ஑ͷதʹ࡙͍͍ͯΔ࿇ʬ͸͢ʭͷՖ͸ɺΈΜͳۄͷ Α͏ʹ·ͬനͰɺͦͷ·Μதʹ͋Δۚ৭ʬ͖Μ͍Ζʭͷࣵʬ͍ͣʭ͔Β͸ɺԿͱ΋Ӡ͑ͳ͍޷ʬΑʭ ͍೏ʬʹ͓͍ʭ͕ɺઈؒʬͨ͑·ʭͳ͋ͨ͘Γ΁ᷓʬ͋;ʭΕͯډΓ·͢ɻۃָ͸ஸ౓ேͳͷͰ͝ ͍͟·͠ΐ͏ɻ w ಉ͡࡞ऀ͕ॻ͍ͨಐ࿩ͷݪจͱൺֱ͢ΔͱɺϦζϜײ΍৘ॹ͕ҧ͏ʜʁ 4UFQΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ

Slide 56

Slide 56 text

՝୊΁ͷରԠจମ໛฿ΤʔδΣϯτͷಋೖ w ࠷ޙͷ޻ఔͰɺ໛฿ݩͷςΩετʢಉ͡࡞Ոͷผ࡞඼ͷݪߘͳͲʣ͕ ͋Δ৔߹͸ɺࢀরͤͯ͞ߋʹϦϥΠτ w ৚݅Λຬͨ࣌͢ʹ͚ͩϊʔυΛ࣮ߦ͢Δ

Slide 57

Slide 57 text

࣮૷ΤοδͰϧʔτΛ෼ذͤ͞Δ # Τοδͷఆٛ …ུ… graph_builder.add_edge("ਓؒʹΑΔνΣοΫ", "ϨϏϡʔ൓өAgent") # ৚݅ʹΑͬͯ࣍ͷભҠઌͷϊʔυΛܾΊΔΑ͏ΤοδΛఆٛ graph_builder.add_conditional_edges( “ϨϏϡʔ൓өAgent", # ભҠݩͷϊʔυ # ৚݅ʮ໛฿ݩͷจষ͕͋Δ͔ʁʯ lambda state: state.style_source_text is not None, { True: "จମ໛฿Agent", # ͋Δ৔߹͸ɺจମ໛฿ΤʔδΣϯτͷϊʔυ΁ False: END, # ͳ͍৔߹͸ऴྃϊʔυ΁ }, ) w add_conditional_edge()Ͱɺ৚݅ʹΑͬͯભҠઌͷϊʔυΛม͑Δ 4UFQΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ

Slide 58

Slide 58 text

จମ໛฿ΤʔδΣϯτͷద༻ྫ ద༻લ ద༻ޙ ͋Δ೔ͷ ༦ํʬΏ͏͕ͨʭͷ͜ͱͰ͢ɻ ͻͱΓͷ Լਓʬ͛ʹΜʭ͕ɺཏੜ໳ʬΒ ͠ΐ͏΋Μʭͷ Լʬͨ͠ʭͰɺӍʬ͋Ίʭ ͕ ΍ΉͷΛ ·͍ͬͯ·ͨ͠ɻ ޿ʬͻΖʭ͍໳ʬ΋ΜʭͷԼʹ͸ɺ͜ͷ உʬ͓ͱ͜ʭ͔͠ ͍·ͤΜɻ େ͖ͳ ·Δ͍ ͸͠Βʹɺ͖Γ͗Γ͕͢ ͽΐΜͱ ͱ·͍ͬͯ·͢ɻ ͋Δ೔ͷ༦ํʬΏ͏͕ͨʭͷ͜ͱͰ͍͟͝ ·ͨ͠ɻ ͻͱΓͷԼਓʬ͛ʹΜʭ͕ɺཏੜ໳ʬΒ͠ΐ ͏΋Μʭͷେ͖ͳ໳ʬ΋ΜʭͷԼͰɺͬ͡ ͱӍʬ͋Ίʭͷ΍ΉͷΛ଴ʬ·ʭ͓ͬͯΓ ·ͨ͠ɻ ͋ͨΓʹ͸ɺ͜ͷஉʬ͓ͱ͜ʭͷ΄͔ɺͩ ΕͻͱΓ࢟ʬ͕ͨ͢ʭ͸͍͟͝·ͤΜɻ ੺ʬ͔͋ʭ͍৭ʬ͍Ζʭͷ͸͛ͨଠʬ;ͱʭ ͍பʬ͸͠Βʭʹ͸ɺ͖Γ͗Γ͕͢Ұͽ ͖ɺ੩ʬͣ͠ʭ͔ʹͱ·͓ͬͯΓ·͢ɻ w ʮཏੜ໳ʯͷϦϥΠτ݁Ռʹɺʮ஖ᥨͷࢳʯݪจͷจମΛద༻ 4UFQΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ

Slide 59

Slide 59 text

จମ໛฿ΤʔδΣϯτͷద༻ྫ ద༻લ ద༻ޙ ͋Δ೔ͷ ༦ํʬΏ͏͕ͨʭͷ͜ͱͰ͢ɻ ͻͱΓͷ Լਓʬ͛ʹΜʭ͕ɺཏੜ໳ʬΒ ͠ΐ͏΋Μʭͷ Լʬͨ͠ʭͰɺӍʬ͋Ίʭ ͕ ΍ΉͷΛ ·͍ͬͯ·ͨ͠ɻ ޿ʬͻΖʭ͍໳ʬ΋ΜʭͷԼʹ͸ɺ͜ͷ உʬ͓ͱ͜ʭ͔͠ ͍·ͤΜɻ େ͖ͳ ·Δ͍ ͸͠Βʹɺ͖Γ͗Γ͕͢ ͽΐΜͱ ͱ·͍ͬͯ·͢ɻ ͋Δ೔ͷ༦ํʬΏ͏͕ͨʭͷ͜ͱͰ͍͟͝ ·ͨ͠ɻ ͻͱΓͷԼਓʬ͛ʹΜʭ͕ɺཏੜ໳ʬΒ͠ΐ ͏΋Μʭͷେ͖ͳ໳ʬ΋ΜʭͷԼͰɺͬ͡ ͱӍʬ͋Ίʭͷ΍ΉͷΛ଴ʬ·ʭ͓ͬͯΓ ·ͨ͠ɻ ͋ͨΓʹ͸ɺ͜ͷஉʬ͓ͱ͜ʭͷ΄͔ɺͩ ΕͻͱΓ࢟ʬ͕ͨ͢ʭ͸͍͟͝·ͤΜɻ ੺ʬ͔͋ʭ͍৭ʬ͍Ζʭͷ͸͛ͨଠʬ;ͱʭ ͍பʬ͸͠Βʭʹ͸ɺ͖Γ͗Γ͕͢Ұͽ ͖ɺ੩ʬͣ͠ʭ͔ʹͱ·͓ͬͯΓ·͢ɻ w ʮཏੜ໳ʯͷϦϥΠτ݁Ռʹɺʮ஖ᥨͷࢳʯݪจͷจମΛద༻ 4UFQΤʔδΣϯτʹΑΔϦϥΠτͷ࣭Λ্͛Δ

Slide 60

Slide 60 text

࠷ऴతͳΤʔδΣϯτߏ੒ w ݸͷΤʔδΣϯτ ਓؒʹΑΔհೖ

Slide 61

Slide 61 text

ϦϥΠτͤͨ݁͞Ռͷαϯϓϧ IUUQTHJUIVCDPNLPNPGSFBTZMJUFSBUVSFBHFOUTUSFFNBJOPVUQVU@TBNQMFT

Slide 62

Slide 62 text

·ͱΊ

Slide 63

Slide 63 text

·ͱΊ w จֶ࡞඼Λখֶੜ޲͚ʹϦϥΠτ͢ΔϚϧνΤʔδΣϯτͷ࡞੒Λ௨͡ ͯɺ-BOH$IBJO-BOH(SBQI-BOH4NJUIͷػೳɾ໾ׂΛ঺հ͠· ͨ͠ w -BOH$IBJO਺ߦͷίʔυͰ"*ΤʔδΣϯτΛ࣮૷Ͱ͖Δ w -BOH(SBQIϚϧνΤʔδΣϯτͷϫʔΫϑϩʔΛάϥϑߏ଄Ͱఆٛ Ͱ͖Δ w -BOH4NJUI࣮ߦϩάͳͲΛه࿥ͯ͠μογϡϘʔυͰ؅ཧͰ͖Δ

Slide 64

Slide 64 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ (JU)VC3FQPTJUPSZ 4MJEFT εϥΠυ IUUQTTQFBLFSEFDLDPNLPNPGSQZDPONJOJUPLBJ (JU)VCϦϙδτϦ IUUQTHJUIVCDPNLPNPGSFBTZMJUFSBUVSFBHFOUT 9 5XJUUFS  !LPNP@GS