{"id":22832,"date":"2025-11-08T16:40:18","date_gmt":"2025-11-08T16:40:18","guid":{"rendered":"https:\/\/pokecon.jp\/job\/?p=22832"},"modified":"2025-11-08T16:40:18","modified_gmt":"2025-11-08T16:40:18","slug":"dspy-langsmith%e3%81%a7%e3%83%97%e3%83%ad%e3%83%b3%e3%83%97%e3%83%88%e3%82%92%e5%85%a8%e8%87%aa%e5%8b%95%e3%81%a7%e8%82%b2%e3%81%a6%e3%81%a6%e3%81%bf%e3%81%9f","status":"publish","type":"post","link":"https:\/\/pokecon.jp\/job\/22832\/","title":{"rendered":"DSPy + LangSmith\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u5168\u81ea\u52d5\u3067\u80b2\u3066\u3066\u307f\u305f"},"content":{"rendered":"\n<\/p>\n<div>\n<p data-line=\"0\" class=\"code-line\"><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/zenn-user-upload\/b10cb78bc4f8-20251009.png\" alt=\"\u8a18\u4e8b\u30a4\u30e1\u30fc\u30b8\u753b\u50cf\" class=\"md-img\" loading=\"lazy\"\/><\/p>\n<h2 id=\"%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB\" data-line=\"1\" class=\"code-line\">\n \u306f\u3058\u3081\u306b<\/h2>\n<p data-line=\"3\" class=\"code-line\">\u300c\u30b7\u30b9\u30c6\u30e0\u306b\u7d44\u307f\u8fbc\u3080\u30d7\u30ed\u30f3\u30d7\u30c8\u3063\u3066\u3001\u3069\u3046\u3084\u3063\u3066\u4fee\u7e55\u30fb\u7ba1\u7406\u3059\u308c\u3070\u3044\u3044\u3093\u3060\u2026\uff1f\u300d<\/p>\n<p data-line=\"5\" class=\"code-line\">LLM\u95a2\u4fc2\u306e\u30d7\u30ed\u30c0\u30af\u30c8\u3092\u4f5c\u3063\u3066\u3044\u3066\u3001\u3053\u306e\u60a9\u307f\u306b\u3076\u3064\u304b\u3063\u305f\u4eba\u306f\u591a\u3044\u3093\u3058\u3083\u306a\u3044\u3067\u3057\u3087\u3046\u304b\u3002\u79c1\u3082\u305d\u306e\u4e00\u4eba\u3067\u3057\u305f\u3002<\/p>\n<p data-line=\"7\" class=\"code-line\">\u6700\u521d\u306f\u624b\u52d5\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u66f8\u3044\u3066\u3001\u7d50\u679c\u3092\u76ee\u8996\u3067\u78ba\u8a8d\u3057\u3066\u3001\u3061\u3087\u3063\u3068\u305a\u3064\u4fee\u6b63\u3057\u3066\u2026\u3092\u7e70\u308a\u8fd4\u3057\u307e\u3059\u3002\u6570\u30d1\u30bf\u30fc\u30f3\u306a\u3089\u4f55\u3068\u304b\u306a\u308a\u307e\u3059\u304c\u3001\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u304c\u5897\u3048\u3066\u304f\u308b\u3068\u3059\u3050\u306b\u7834\u7dbb\u3057\u307e\u3059\u3002\u300c\u3042\u306e\u30d7\u30ed\u30f3\u30d7\u30c8\u5909\u66f4\u3067\u3053\u3063\u3061\u306e\u30b1\u30fc\u30b9\u304c\u58ca\u308c\u305f\u300d\u300c\u524d\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u65b9\u304c\u3088\u304b\u3063\u305f\u6c17\u304c\u3059\u308b\u2026\u300d\u3068\u3044\u3063\u305f\u72b6\u6cc1\u3001\u7d4c\u9a13\u3042\u308a\u307e\u305b\u3093\u304b\uff1f<\/p>\n<p data-line=\"9\" class=\"code-line\">\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001<strong>\u8a55\u4fa1\u00d7\u6539\u5584\u306e\u30eb\u30fc\u30d7\u3092\u81ea\u52d5\u5316<\/strong>\u3057\u3066\u3001\u30d7\u30ed\u30f3\u30d7\u30c8\u304c\u52dd\u624b\u306b\u9032\u5316\u3057\u3066\u3044\u304f\u74b0\u5883\u3092\u3001AI\u30d7\u30ed\u30c0\u30af\u30c8\u958b\u767a\u30c1\u30fc\u30e0\u306e\u65b0\u7c73\u30a8\u30f3\u30b8\u30cb\u30a2\u304c\u4f5c\u3063\u3066\u307f\u305f\u306e\u3067\u7d39\u4ecb\u3057\u307e\u3059\u3002\u30bf\u30a4\u30c8\u30eb\u306b\u3042\u308b\u901a\u308a\u3001\u4e3b\u5f79\u306fDSPy\u3068LangSmith\u306e2\u3064\u3067\u3059\u3002<\/p>\n<ul data-line=\"11\" class=\"code-line\">\n<li data-line=\"11\" class=\"code-line\">\n<strong>DSPy<\/strong>: \u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u81ea\u52d5\u6700\u9069\u5316\u3059\u308b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/li>\n<li data-line=\"12\" class=\"code-line\">\n<strong>LangSmith<\/strong>: LLM\u30a2\u30d7\u30ea\u306e\u5b9f\u884c\u30c8\u30ec\u30fc\u30b9\u3068\u8a55\u4fa1\u3092\u4e00\u5143\u7ba1\u7406\u3059\u308b\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0<\/li>\n<\/ul>\n<p data-line=\"14\" class=\"code-line\">\u4eca\u56de\u3001\u300c\u624b\u66f8\u304d\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u30e1\u30e2\u304b\u3089\u4e88\u5b9a\u3092\u30c7\u30fc\u30bf\u5316\u3057\u3066\u62bd\u51fa\u3059\u308b\u300d\u30bf\u30b9\u30af\u306b\u3064\u3044\u3066\u3001\u30eb\u30fc\u30d7\u306e\u4e2d\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u304c\u3069\u3046\u9032\u5316\u3059\u308b\u304b\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\u3002\u7d50\u679c\u3068\u3057\u3066\u3001\u521d\u671f\u306e\u300c\u753b\u50cf\u304b\u3089\u4e88\u5b9a\u3092\u51fa\u3057\u3066\u300d\u3068\u3044\u3046\u6975\u3081\u3066\u30b7\u30f3\u30d7\u30eb\u306a\u30d7\u30ed\u30f3\u30d7\u30c8\u304c\u3001\u6700\u7d42\u7684\u306b\u306f\u300c\u3042\u306a\u305f\u306f\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u7ba1\u7406\u306e\u30a8\u30ad\u30b9\u30d1\u30fc\u30c8\u3067\u3042\u308a\u2026\u300d\u3068\u3044\u3063\u305f1000\u5b57\u3092\u8d85\u3048\u308b\u9577\u6587\u30d7\u30ed\u30f3\u30d7\u30c8\u306b\u81ea\u52d5\u9032\u5316\u3057\u3001<strong>\u30b9\u30b3\u30a2\u304c70.5%\u219277.6%\uff08+7.0%\uff09\u307e\u3067\u6539\u5584<\/strong>\u3057\u307e\u3057\u305f\u3002<\/p>\n<h3 id=\"%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83\" data-line=\"16\" class=\"code-line\">\n \u5b9f\u884c\u74b0\u5883<\/h3>\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"18\">Python: 3.12\nOS: Ubuntu 22.04 (WSL2)\n\u4e3b\u8981\u30e9\u30a4\u30d6\u30e9\u30ea:\n  - dspy-ai: 3.0.3+\n  - langsmith: 0.4.31+\n  - google-genai: 1.41.0+\nLLM: vertex_ai\/gemini-2.0-flash-exp\n<\/code><\/pre>\n<\/div>\n<hr data-line=\"28\" class=\"code-line\"\/>\n<h2 id=\"%E6%8A%80%E8%A1%93%E9%81%B8%E5%AE%9A%E3%81%A8%E6%A7%8B%E6%88%90\" data-line=\"30\" class=\"code-line\">\n \u6280\u8853\u9078\u5b9a\u3068\u69cb\u6210<\/h2>\n<h3 id=\"dspy\" data-line=\"32\" class=\"code-line\">\n DSPy<\/h3>\n<p data-line=\"33\" class=\"code-line\"><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/zenn-user-upload\/52870c121a84-20251008.png\" alt=\"DSPy\u30a2\u30a4\u30b3\u30f3\" width=\"300\" class=\"md-img\" loading=\"lazy\"\/><\/p>\n<p data-line=\"35\" class=\"code-line\">DSPy\u306f\u3001\u30b9\u30bf\u30f3\u30d5\u30a9\u30fc\u30c9\u5927\u5b66\u304c\u958b\u767a\u3057\u3066\u3044\u308b\u30d7\u30ed\u30f3\u30d7\u30c8\u30a8\u30f3\u30b8\u30cb\u30a2\u30ea\u30f3\u30b0\u3092\u81ea\u52d5\u5316\u3059\u308b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002\u5f93\u6765\u306eLangChain\u306a\u3069\u3068\u9055\u3063\u3066\u3001\u30d7\u30ed\u30f3\u30d7\u30c8\u81ea\u4f53\u3092\u300c\u30d1\u30e9\u30e1\u30fc\u30bf\u300d\u3068\u3057\u3066\u6271\u3063\u3066\u6700\u9069\u5316\u3067\u304d\u308b\u306e\u304c\u7279\u5fb4\u3067\u3059\u3002<\/p>\n<p data-line=\"37\" class=\"code-line\">\u4eca\u56de\u4f7f\u3063\u305f\u306e\u306f<strong>MIPROv2<\/strong>\uff08Multi-prompt Instruction Proposal and Refinement Optimizer v2\uff09\u3068\u3044\u3046\u30aa\u30d7\u30c6\u30a3\u30de\u30a4\u30b6\u30fc\u3067\u3059\u3002\u3053\u308c\u304c\u975e\u5e38\u306b\u512a\u79c0\u3067\u3001\u4ee5\u4e0b\u306e\u3053\u3068\u3092\u81ea\u52d5\u3067\u3084\u3063\u3066\u304f\u308c\u307e\u3059\u3002<\/p>\n<ul data-line=\"39\" class=\"code-line\">\n<li data-line=\"39\" class=\"code-line\"><strong>\u8907\u6570\u306e\u30d7\u30ed\u30f3\u30d7\u30c8\u5019\u88dc\u3092\u81ea\u52d5\u751f\u6210<\/strong><\/li>\n<li data-line=\"40\" class=\"code-line\">\n<strong>\u30d9\u30a4\u30ba\u6700\u9069\u5316\u3067\u52b9\u7387\u7684\u306b\u63a2\u7d22<\/strong>\uff08N\u56de\u306e\u8a66\u884c\u3067\u6700\u826f\u306e\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u767a\u898b\uff09<\/li>\n<li data-line=\"41\" class=\"code-line\"><strong>Instruction Optimization\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u6587\u305d\u306e\u3082\u306e\u3092\u9032\u5316<\/strong><\/li>\n<\/ul>\n<p data-line=\"43\" class=\"code-line\">\u7279\u306b\u91cd\u8981\u306a\u306e\u304c3\u3064\u76ee\u3067\u3059\u3002Few-Shot Learning\uff08\u5165\u51fa\u529b\u4f8b\u3092\u57cb\u3081\u8fbc\u3080\u65b9\u5f0f\uff09\u3067\u306f\u306a\u304f\u3001<strong>\u30d7\u30ed\u30f3\u30d7\u30c8\u306e\u6587\u7ae0\u305d\u306e\u3082\u306e\u3092\u6539\u5584<\/strong>\u3057\u3066\u304f\u308c\u308b\u305f\u3081\u3001\u5fdc\u7528\u304c\u52b9\u304d\u307e\u3059\u3002<\/p>\n<h3 id=\"langsmith\" data-line=\"45\" class=\"code-line\">\n LangSmith<\/h3>\n<p data-line=\"46\" class=\"code-line\"><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/zenn-user-upload\/4c6e93a01101-20251008.png\" alt=\"LangSmith\u30a2\u30a4\u30b3\u30f3\" width=\"300\" class=\"md-img\" loading=\"lazy\"\/><\/p>\n<p data-line=\"48\" class=\"code-line\">LangSmith\u306fLangChain\u304c\u63d0\u4f9b\u3059\u308bLLM\u30a2\u30d7\u30ea\u306e<strong>\u30c8\u30ec\u30fc\u30b7\u30f3\u30b0\u30fb\u8a55\u4fa1\u30fb\u30c7\u30d0\u30c3\u30b0\u57fa\u76e4<\/strong>\u3067\u3059\u3002\u4eca\u56de\u306f\u3053\u306e\u3088\u3046\u306a\u4f7f\u3044\u65b9\u3092\u3057\u307e\u3057\u305f\u3002<\/p>\n<ul data-line=\"50\" class=\"code-line\">\n<li data-line=\"50\" class=\"code-line\">\n<strong>DSPy\u306e\u6700\u9069\u5316\u904e\u7a0b\u3092\u5168\u90e8\u8a18\u9332\u3059\u308b\u300c\u9ed2\u7bb1\u300d<\/strong> \u3068\u3057\u3066\u4f7f\u7528<\/li>\n<li data-line=\"51\" class=\"code-line\">\u5404\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u30d7\u30ed\u30f3\u30d7\u30c8\u3001LLM\u306e\u5fdc\u7b54\u3001\u8a55\u4fa1\u30b9\u30b3\u30a2\u3092\u5168\u90e8\u30c8\u30ec\u30fc\u30b9<\/li>\n<li data-line=\"52\" class=\"code-line\">\u5931\u6557\u30d1\u30bf\u30fc\u30f3\u306e\u7279\u5b9a\uff08\u4f8b\uff1aJSON\u30d1\u30fc\u30b9\u30a8\u30e9\u30fc\u304c\u3069\u3053\u3067\u8d77\u304d\u305f\u304b\uff09<\/li>\n<li data-line=\"53\" class=\"code-line\">\u30b3\u30b9\u30c8\u30fb\u30ec\u30a4\u30c6\u30f3\u30b7\u306e\u53ef\u8996\u5316<\/li>\n<\/ul>\n<p data-line=\"55\" class=\"code-line\">DSPy\u3060\u3051\u3067\u3082\u6700\u9069\u5316\u306f\u3067\u304d\u307e\u3059\u304c\u3001LangSmith\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u300c\u306a\u305c\u3053\u306e\u30d7\u30ed\u30f3\u30d7\u30c8\u304c\u9078\u3070\u308c\u305f\u306e\u304b\u300d\u300c\u3069\u306e\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u3067\u5931\u6557\u3057\u3066\u3044\u308b\u306e\u304b\u300d\u304c\u4e00\u76ee\u3067\u5206\u304b\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<h3 id=\"%E5%85%A8%E4%BD%93%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3\" data-line=\"57\" class=\"code-line\">\n \u5168\u4f53\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/h3>\n<p data-line=\"59\" class=\"code-line\">\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u69cb\u6210\u3067\u52d5\u3044\u3066\u3044\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"61\">[\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9] \u2192 [DSPy\u30d7\u30ed\u30b0\u30e9\u30e0] \u2192 [LLM (Gemini 2.0 Flash)] \u2192 [\u8a55\u4fa1\u30b9\u30b3\u30a2\u7b97\u51fa]\n                        \u2191                                              \u2193\n                   [MIPROv2\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u6700\u9069\u5316] \u2190---------- [\u30b9\u30b3\u30a2\u3092\u4f7f\u3063\u3066\u6539\u5584]\n                        \u2191\n                   [LangSmith\u3067\u30c8\u30ec\u30fc\u30b9]\n<\/code><\/pre>\n<\/div>\n<ol data-line=\"69\" class=\"code-line\">\n<li data-line=\"69\" class=\"code-line\">\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\uff08\u753b\u50cf\uff0b\u671f\u5f85\u5024JSON\uff09\u3092\u8aad\u307f\u8fbc\u3080<\/li>\n<li data-line=\"70\" class=\"code-line\">DSPy\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u753b\u50cf\u304b\u3089\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u3092JSON\u62bd\u51fa<\/li>\n<li data-line=\"71\" class=\"code-line\">\u671f\u5f85\u5024\u3068\u6bd4\u8f03\u3057\u30660.0~1.0\u306e\u30b9\u30b3\u30a2\u3092\u7b97\u51fa<\/li>\n<li data-line=\"72\" class=\"code-line\">MIPROv2\u304c\u4f4e\u30b9\u30b3\u30a2\u306e\u30b1\u30fc\u30b9\u3092\u5206\u6790\u3057\u3066\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u6539\u5584\u63d0\u6848<\/li>\n<li data-line=\"73\" class=\"code-line\">\u6539\u5584\u3055\u308c\u305f\u30d7\u30ed\u30f3\u30d7\u30c8\u3067\u518d\u8a55\u4fa1<\/li>\n<li data-line=\"74\" class=\"code-line\">\u3053\u306e\u904e\u7a0b\u3092LangSmith\u306b\u8a18\u9332<\/li>\n<\/ol>\n<p data-line=\"76\" class=\"code-line\">\u3053\u308c\u30923\u56de\u7e70\u308a\u8fd4\u3059\u3053\u3068\u3067\u3001\u30d7\u30ed\u30f3\u30d7\u30c8\u304c\u7d2f\u7a4d\u7684\u306b\u9032\u5316\u3057\u3066\u3044\u304d\u307e\u3059\u3002<br \/>MIPROv2\u304c\u5185\u90e8\u306710\u56de\u306e\u8a66\u884c\u3092\u3057\u3066\u3044\u308b\u306e\u3067\u5408\u8a0830\u306e\u65bd\u884c\u304c\u7d2f\u7a4d\u3057\u3066\u3044\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p data-line=\"79\" class=\"code-line\">\u203b\u6700\u521d\u304b\u3089\u6210\u7e3e\u304c\u3044\u3044\u3068\u30d7\u30ed\u30f3\u30d7\u30c8\u306e\u9032\u5316\u306e\u610f\u5473\u304c\u8584\u3044\u306e\u3067\u3001\u3042\u3048\u3066Gemini\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u4e0b\u3052\u3066\u3044\u307e\u3059\u3002<\/p>\n<hr data-line=\"81\" class=\"code-line\"\/>\n<h2 id=\"%E3%83%87%E3%83%A2%E3%82%BF%E3%82%B9%E3%82%AF%EF%BC%9Aocr%E3%81%AB%E3%82%88%E3%82%8B%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E6%A7%8B%E9%80%A0%E3%83%87%E3%83%BC%E3%82%BF%E6%8A%BD%E5%87%BA\" data-line=\"83\" class=\"code-line\">\n \u30c7\u30e2\u30bf\u30b9\u30af\uff1aOCR\u306b\u3088\u308b\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u69cb\u9020\u30c7\u30fc\u30bf\u62bd\u51fa<\/h2>\n<h3 id=\"%E3%82%BF%E3%82%B9%E3%82%AF%E9%81%B8%E5%AE%9A%E7%90%86%E7%94%B1\" data-line=\"85\" class=\"code-line\">\n \u30bf\u30b9\u30af\u9078\u5b9a\u7406\u7531<\/h3>\n<p data-line=\"87\" class=\"code-line\">\u30d7\u30ed\u30f3\u30d7\u30c8\u6700\u9069\u5316\u306e\u30c7\u30e2\u306b\u306f\u300c\u6b63\u89e3\u304c\u5ba2\u89b3\u7684\u306b\u6c7a\u307e\u308b\u30bf\u30b9\u30af\u300d\u304c\u9069\u3057\u3066\u3044\u307e\u3059\u3002\u611f\u60c5\u5206\u6790\u3084\u8981\u7d04\u3060\u3068\u8a55\u4fa1\u304c\u4e3b\u89b3\u7684\u306b\u306a\u308a\u304c\u3061\u3067\u3001\u81ea\u52d5\u8a55\u4fa1\u304c\u96e3\u3057\u304f\u306a\u308a\u307e\u3059\u3002<\/p>\n<p data-line=\"89\" class=\"code-line\">\u305d\u3053\u3067\u9078\u3093\u3060\u306e\u304c<strong>\u624b\u66f8\u304d\u98a8\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u753b\u50cf\u304b\u3089\u306e\u69cb\u9020\u5316\u30c7\u30fc\u30bf\u62bd\u51fa<\/strong>\u3067\u3059\u3002\u6b63\u89e3\u304cJSON\u5f62\u5f0f\u3067\u660e\u78ba\u306b\u5b9a\u7fa9\u3067\u304d\u308b\u3001\u96e3\u6613\u5ea6\u8abf\u6574\u304c\u7c21\u5358\u3068\u3044\u3063\u305f\u30e1\u30ea\u30c3\u30c8\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<h3 id=\"%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%E8%A8%AD%E8%A8%88\" data-line=\"91\" class=\"code-line\">\n \u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u8a2d\u8a08<\/h3>\n<p data-line=\"93\" class=\"code-line\">\u96e3\u6613\u5ea6\u30923\u6bb5\u968e\u306b\u5206\u3051\u3066\u3001\u8a086\u679a\u306e\u753b\u50cf\u3092\u7528\u610f\u3057\u307e\u3057\u305f\u3002<\/p>\n<div class=\"s_table\"><table data-line=\"95\" class=\"code-line\">\n<thead data-line=\"95\" class=\"code-line\">\n<tr data-line=\"95\" class=\"code-line\">\n<th>\u96e3\u6613\u5ea6<\/th>\n<th>\u7279\u5fb4<\/th>\n<th>\u753b\u50cf\u6570<\/th>\n<\/tr>\n<\/thead>\n<tbody data-line=\"97\" class=\"code-line\">\n<tr data-line=\"97\" class=\"code-line\">\n<td>1\uff08\u7c21\u5358\uff09<\/td>\n<td>\u304d\u308c\u3044\u306a\u8868\u5f62\u5f0f\u3001\u5168\u9805\u76ee\u5165\u529b\u6e08\u307f<\/td>\n<td>1\u679a<\/td>\n<\/tr>\n<tr data-line=\"98\" class=\"code-line\">\n<td>2\uff08\u4e2d\uff09<\/td>\n<td>\u624b\u5e33\u98a8\u306e\u30ec\u30a4\u30a2\u30a6\u30c8\u3001\u5834\u6240\u304c\u90e8\u5206\u7684\u306b\u6b20\u640d<\/td>\n<td>2\u679a<\/td>\n<\/tr>\n<tr data-line=\"99\" class=\"code-line\">\n<td>3\uff08\u96e3\uff09<\/td>\n<td>\u5d29\u3057\u5b57\u3001\u66d6\u6627\u306a\u8868\u73fe<\/td>\n<td>3\u679a<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<h3 id=\"%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E7%94%BB%E5%83%8F%E4%BE%8B\" data-line=\"101\" class=\"code-line\">\n \u30b5\u30f3\u30d7\u30eb\u753b\u50cf\u4f8b<\/h3>\n<p data-line=\"103\" class=\"code-line\"><strong>\u96e3\u6613\u5ea61\u306e\u4f8b<\/strong>\uff08easy_schedule_01.jpg\uff09:<br \/><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/zenn-user-upload\/d67097e1c824-20251009.png\" alt=\"easy_schedule_01.jpg\" width=\"300\" class=\"md-img\" loading=\"lazy\"\/><\/p>\n<p data-line=\"106\" class=\"code-line\"><strong>\u96e3\u6613\u5ea63\u306e\u4f8b<\/strong>\uff08hard_schedule_03.jpg\uff09:<\/p>\n<p data-line=\"108\" class=\"code-line\"><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/zenn-user-upload\/4cc80889c5fc-20251008.jpg\" alt=\"hard_schedule_03.jpg\" width=\"300\" class=\"md-img\" loading=\"lazy\"\/><\/p>\n<p data-line=\"110\" class=\"code-line\">\u96e3\u6613\u5ea63\u3067\u306f\u6642\u523b\u304c\u300c\u65e9\u3081\u300d\u300c\u5915\u65b9\u300d\u306e\u3088\u3046\u306b\u66d6\u6627\u3060\u3063\u305f\u308a\u3001\u300c13:00\u300d\u3068\u300c\u5348\u5f8c2\u6642\u300d\u304c\u6df7\u5728\u3057\u305f\u308a\u3001\u30ad\u30e3\u30f3\u30bb\u30eb\u3055\u308c\u305f\u4e88\u5b9a\u304c\u3042\u3063\u305f\u308a\u3002\u3053\u308c\u304cLLM\u3092\u82e6\u3057\u3081\u307e\u3059\u3002<\/p>\n<h3 id=\"%E6%AD%A3%E8%A7%A3%E5%80%A4%E3%81%AE%E7%94%A8%E6%84%8F\" data-line=\"112\" class=\"code-line\">\n \u6b63\u89e3\u5024\u306e\u7528\u610f<\/h3>\n<p data-line=\"114\" class=\"code-line\">\u4f8b\u3048\u3070\u3001\u96e3\u6613\u5ea61\u306e\u753b\u50cf\u306b\u5bfe\u3059\u308b\u671f\u5f85\u5024\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u306e\u3088\u3046\u306b\u51fa\u529b\u306e\u6b63\u89e3\u5024\u3092\u3042\u3089\u304b\u3058\u3081\u5b9a\u7fa9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<pre class=\"language-json\"><code class=\"language-json code-line\" data-line=\"115\"><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">\"schedule\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span>\n    <span class=\"token punctuation\">{<\/span>\n      <span class=\"token property\">\"time\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"09:00-10:30\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token property\">\"subject\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"\u6570\u5b66\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token property\">\"location\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"301\u6559\u5ba4\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token property\">\"note\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token null keyword\">null<\/span>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token punctuation\">{<\/span>\n      <span class=\"token property\">\"time\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"10:45-12:15\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token property\">\"subject\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"\u82f1\u8a9e\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token property\">\"location\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"205\u6559\u5ba4\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token property\">\"note\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token null keyword\">null<\/span>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token punctuation\">{<\/span>\n      <span class=\"token property\">\"time\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"13:00-14:30\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token property\">\"subject\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"\u7269\u7406\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token property\">\"location\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"\u5b9f\u9a13\u5ba4A\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token property\">\"note\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token null keyword\">null<\/span>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token punctuation\">{<\/span>\n      <span class=\"token property\">\"time\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"14:45-16:15\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token property\">\"subject\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"\u6b74\u53f2\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token property\">\"location\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"402\u6559\u5ba4\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token property\">\"note\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token null keyword\">null<\/span>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token punctuation\">{<\/span>\n      <span class=\"token property\">\"time\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"16:30-18:00\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token property\">\"subject\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token property\">\"location\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"PC\u5ba41\"<\/span><span class=\"token punctuation\">,<\/span>\n      <span class=\"token property\">\"note\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token null keyword\">null<\/span>\n    <span class=\"token punctuation\">}<\/span>\n  <span class=\"token punctuation\">]<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<h2 id=\"%E5%AE%9F%E8%A3%85\" data-line=\"152\" class=\"code-line\">\n \u5b9f\u88c5<\/h2>\n<h3 id=\"%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E6%A7%8B%E6%88%90\" data-line=\"153\" class=\"code-line\">\n \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210<\/h3>\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"155\">langsmith-dspy-demo\/\n\u251c\u2500\u2500 data\/\n\u2502   \u251c\u2500\u2500 images\/              # \u30c6\u30b9\u30c8\u7528\u753b\u50cf\n\u2502   \u251c\u2500\u2500 test_cases_schedule.json  # \u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u5b9a\u7fa9\n\u2502   \u2514\u2500\u2500 *.csv \/ *.json \/ *.md     # \u5b9f\u884c\u7d50\u679c\uff08\u5f8c\u3067\u81ea\u52d5\u751f\u6210\uff09\n\u251c\u2500\u2500 src\/\n\u2502   \u251c\u2500\u2500 dspy_program.py      # DSPy\u30d7\u30ed\u30b0\u30e9\u30e0\u672c\u4f53\n\u2502   \u251c\u2500\u2500 evaluator.py         # \u8a55\u4fa1\u30b7\u30b9\u30c6\u30e0\n\u2502   \u251c\u2500\u2500 optimizer.py         # \u30d7\u30ed\u30f3\u30d7\u30c8\u6700\u9069\u5316\uff081\u56de\u306e\u307f\uff09\n\u2502   \u251c\u2500\u2500 iterative_optimizer.py  # \u53cd\u5fa9\u6700\u9069\u5316\uff08N\u56de\u30eb\u30fc\u30d7\uff09\n\u2502   \u2514\u2500\u2500 runner.py            # \u30c6\u30b9\u30c8\u5b9f\u884c\n\u251c\u2500\u2500 .env                     # \u74b0\u5883\u5909\u6570\n\u2514\u2500\u2500 requirements.txt\n<\/code><\/pre>\n<\/div>\n<h3 id=\"%E4%B8%BB%E8%A6%81%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%BD%B9%E5%89%B2\" data-line=\"171\" class=\"code-line\">\n \u4e3b\u8981\u30d5\u30a1\u30a4\u30eb\u306e\u5f79\u5272<\/h3>\n<p data-line=\"173\" class=\"code-line\"><strong>1. dspy_program.py &#8211; DSPy\u30d7\u30ed\u30b0\u30e9\u30e0\u672c\u4f53<\/strong><\/p>\n<p data-line=\"175\" class=\"code-line\">DSPy\u306e\u6838\u5fc3\u90e8\u5206\u3067\u3059\u3002Signature\u3067\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u5b9a\u7fa9\u3057\u3001Module\u3067\u51e6\u7406\u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<pre class=\"language-python\"><code class=\"language-python code-line\" data-line=\"177\"><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">ExtractScheduleInfo<\/span><span class=\"token punctuation\">(<\/span>dspy<span class=\"token punctuation\">.<\/span>Signature<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token triple-quoted-string string\">\"\"\"\u753b\u50cf\u304b\u3089\u4e88\u5b9a\u3092\u51fa\u3057\u3066\"\"\"<\/span>\n\n    image <span class=\"token operator\">=<\/span> dspy<span class=\"token punctuation\">.<\/span>InputField<span class=\"token punctuation\">(<\/span>desc<span class=\"token operator\">=<\/span><span class=\"token string\">\"\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u304c\u66f8\u304b\u308c\u305f\u753b\u50cf\"<\/span><span class=\"token punctuation\">)<\/span>\n    schedule_json <span class=\"token operator\">=<\/span> dspy<span class=\"token punctuation\">.<\/span>OutputField<span class=\"token punctuation\">(<\/span>\n        desc<span class=\"token operator\">=<\/span><span class=\"token triple-quoted-string string\">\"\"\"\u753b\u50cf\u304b\u3089\u4e88\u5b9a\u3092\u51fa\u3057\u3066\n\n\u51fa\u529b\u5f62\u5f0f:\n{\n  \"schedule\": [\n    {\"time\": \"\u6642\u523b\", \"subject\": \"\u4e88\u5b9a\u5185\u5bb9\", \"location\": \"\u5834\u6240\", \"note\": \"\u5099\u8003\"}\n  ]\n}\n\n\u203b\u5024\u304c\u4e0d\u660e\u306a\u5834\u5408\u306fnull\u3092\u4f7f\u7528\"\"\"<\/span>\n    <span class=\"token punctuation\">)<\/span>\n\n\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">ScheduleExtractionProgram<\/span><span class=\"token punctuation\">(<\/span>dspy<span class=\"token punctuation\">.<\/span>Module<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">__init__<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token builtin\">super<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>__init__<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n        self<span class=\"token punctuation\">.<\/span>extract <span class=\"token operator\">=<\/span> dspy<span class=\"token punctuation\">.<\/span>ChainOfThought<span class=\"token punctuation\">(<\/span>ExtractScheduleInfo<span class=\"token punctuation\">)<\/span>\n\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">forward<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> image_path<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">-<\/span><span class=\"token operator\">&gt;<\/span> Dict<span class=\"token punctuation\">[<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span> Any<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span>\n        image <span class=\"token operator\">=<\/span> dspy<span class=\"token punctuation\">.<\/span>Image<span class=\"token punctuation\">.<\/span>from_file<span class=\"token punctuation\">(<\/span>image_path<span class=\"token punctuation\">)<\/span>\n        result <span class=\"token operator\">=<\/span> self<span class=\"token punctuation\">.<\/span>extract<span class=\"token punctuation\">(<\/span>image<span class=\"token operator\">=<\/span>image<span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">return<\/span> json<span class=\"token punctuation\">.<\/span>loads<span class=\"token punctuation\">(<\/span>result<span class=\"token punctuation\">.<\/span>schedule_json<span class=\"token punctuation\">)<\/span>\n<\/code><\/pre>\n<\/div>\n<p data-line=\"207\" class=\"code-line\">\u30dd\u30a4\u30f3\u30c8\u306f<code>dspy.ChainOfThought<\/code>\u3092\u4f7f\u3063\u3066\u3044\u308b\u3053\u3068\u3067\u3059\u3002\u3053\u308c\u3067LLM\u304c\u300c\u63a8\u8ad6\u2192\u56de\u7b54\u300d\u306e2\u30b9\u30c6\u30c3\u30d7\u3067\u51e6\u7406\u3059\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p data-line=\"209\" class=\"code-line\"><strong>2. evaluator.py &#8211; \u8a55\u4fa1\u30b7\u30b9\u30c6\u30e0<\/strong><\/p>\n<p data-line=\"211\" class=\"code-line\">4\u3064\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\uff08time\/subject\/location\/note\uff09\u305d\u308c\u305e\u308c\u3092\u8a55\u4fa1\u3057\u3066\u30b9\u30b3\u30a2\u5316\u3057\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<pre class=\"language-python\"><code class=\"language-python code-line\" data-line=\"213\"><span class=\"token keyword\">def<\/span> <span class=\"token function\">evaluate_schedule_item<\/span><span class=\"token punctuation\">(<\/span>predicted<span class=\"token punctuation\">:<\/span> Dict<span class=\"token punctuation\">[<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span> Any<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> expected<span class=\"token punctuation\">:<\/span> Dict<span class=\"token punctuation\">[<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span> Any<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">-<\/span><span class=\"token operator\">&gt;<\/span> Dict<span class=\"token punctuation\">[<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">float<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span>\n    scores <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span>\n\n    \n    scores<span class=\"token punctuation\">[<\/span><span class=\"token string\">\"time\"<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> <span class=\"token number\">1.0<\/span> <span class=\"token keyword\">if<\/span> normalize_time<span class=\"token punctuation\">(<\/span>predicted<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">\"time\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">==<\/span> normalize_time<span class=\"token punctuation\">(<\/span>expected<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">\"time\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token number\">0.0<\/span>\n\n    \n    pred_subject <span class=\"token operator\">=<\/span> normalize_string<span class=\"token punctuation\">(<\/span>predicted<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">\"subject\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>\n    exp_subject <span class=\"token operator\">=<\/span> normalize_string<span class=\"token punctuation\">(<\/span>expected<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">\"subject\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>\n    <span class=\"token keyword\">if<\/span> pred_subject <span class=\"token operator\">==<\/span> exp_subject<span class=\"token punctuation\">:<\/span>\n        scores<span class=\"token punctuation\">[<\/span><span class=\"token string\">\"subject\"<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> <span class=\"token number\">1.0<\/span>\n    <span class=\"token keyword\">elif<\/span> exp_subject <span class=\"token keyword\">in<\/span> pred_subject <span class=\"token keyword\">or<\/span> pred_subject <span class=\"token keyword\">in<\/span> exp_subject<span class=\"token punctuation\">:<\/span>\n        scores<span class=\"token punctuation\">[<\/span><span class=\"token string\">\"subject\"<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> <span class=\"token number\">0.7<\/span>  \n    <span class=\"token keyword\">else<\/span><span class=\"token punctuation\">:<\/span>\n        scores<span class=\"token punctuation\">[<\/span><span class=\"token string\">\"subject\"<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> <span class=\"token number\">0.0<\/span>\n\n    \n\n    <span class=\"token keyword\">return<\/span> scores\n<\/code><\/pre>\n<\/div>\n<p data-line=\"235\" class=\"code-line\">\u4e88\u6e2c\u3055\u308c\u305f\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u9805\u76ee\u3068\u671f\u5f85\u5024\u3092\u6700\u826f\u30de\u30c3\u30c1\u30f3\u30b0\u3057\u3066\u3001\u5168\u4f53\u30b9\u30b3\u30a2\u3092\u7b97\u51fa\u3057\u307e\u3059\u3002<\/p>\n<p data-line=\"237\" class=\"code-line\"><strong>3. optimizer.py &#8211; \u30d7\u30ed\u30f3\u30d7\u30c8\u6700\u9069\u5316<\/strong><\/p>\n<p data-line=\"239\" class=\"code-line\">MIPROv2\u3092\u4f7f\u3063\u3066\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u81ea\u52d5\u6539\u5584\u3057\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<pre class=\"language-python\"><code class=\"language-python code-line\" data-line=\"241\"><span class=\"token keyword\">def<\/span> <span class=\"token function\">optimize_program<\/span><span class=\"token punctuation\">(<\/span>\n    program<span class=\"token punctuation\">:<\/span> ScheduleExtractionProgram<span class=\"token punctuation\">,<\/span>\n    training_data<span class=\"token punctuation\">:<\/span> List<span class=\"token punctuation\">[<\/span>dspy<span class=\"token punctuation\">.<\/span>Example<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>\n    num_candidates<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">int<\/span> <span class=\"token operator\">=<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span>\n<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">-<\/span><span class=\"token operator\">&gt;<\/span> ScheduleExtractionProgram<span class=\"token punctuation\">:<\/span>\n\n    optimizer_lm <span class=\"token operator\">=<\/span> dspy<span class=\"token punctuation\">.<\/span>LM<span class=\"token punctuation\">(<\/span>\n        model<span class=\"token operator\">=<\/span><span class=\"token string\">\"vertex_ai\/gemini-2.0-flash-exp\"<\/span><span class=\"token punctuation\">,<\/span>\n        temperature<span class=\"token operator\">=<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span>\n        rpm<span class=\"token operator\">=<\/span><span class=\"token number\">5<\/span><span class=\"token punctuation\">,<\/span>  \n        cache<span class=\"token operator\">=<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span>  \n    <span class=\"token punctuation\">)<\/span>\n    dspy<span class=\"token punctuation\">.<\/span>configure<span class=\"token punctuation\">(<\/span>lm<span class=\"token operator\">=<\/span>optimizer_lm<span class=\"token punctuation\">)<\/span>\n\n    optimizer <span class=\"token operator\">=<\/span> MIPROv2<span class=\"token punctuation\">(<\/span>\n        metric<span class=\"token operator\">=<\/span>metric<span class=\"token punctuation\">,<\/span>\n        num_candidates<span class=\"token operator\">=<\/span>num_candidates<span class=\"token punctuation\">,<\/span>\n        init_temperature<span class=\"token operator\">=<\/span><span class=\"token number\">2.0<\/span><span class=\"token punctuation\">,<\/span>  \n        max_bootstrapped_demos<span class=\"token operator\">=<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span>  \n        max_labeled_demos<span class=\"token operator\">=<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token punctuation\">)<\/span>\n\n    optimized <span class=\"token operator\">=<\/span> optimizer<span class=\"token punctuation\">.<\/span><span class=\"token builtin\">compile<\/span><span class=\"token punctuation\">(<\/span>\n        program<span class=\"token punctuation\">,<\/span>\n        trainset<span class=\"token operator\">=<\/span>training_data<span class=\"token punctuation\">,<\/span>\n        num_trials<span class=\"token operator\">=<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">,<\/span>\n        fewshot_aware_proposer<span class=\"token operator\">=<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token punctuation\">)<\/span>\n\n    <span class=\"token keyword\">return<\/span> optimized\n<\/code><\/pre>\n<\/div>\n<p data-line=\"274\" class=\"code-line\">\u3053\u3053\u3067\u306e\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n<ul data-line=\"275\" class=\"code-line\">\n<li data-line=\"275\" class=\"code-line\">\n<code>cache=False<\/code>: \u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u7121\u52b9\u5316\u3057\u3066\u3001\u6bce\u56de\u65b0\u3057\u3044\u30d7\u30ed\u30f3\u30d7\u30c8\u5019\u88dc\u3092\u751f\u6210<\/li>\n<li data-line=\"276\" class=\"code-line\">\n<code>max_bootstrapped_demos=0<\/code>: Few-Shot\u3092\u4f7f\u308f\u305a\u3001Instruction Optimization\u306e\u307f\u306e\u52b9\u679c\u3092\u898b\u305f\u3044<\/li>\n<li data-line=\"277\" class=\"code-line\">\n<code>num_trials=10<\/code>: \u5185\u90e8\u306710\u56de\u306e\u8a66\u884c\uff08\u30d9\u30a4\u30ba\u6700\u9069\u5316\uff09<\/li>\n<\/ul>\n<p data-line=\"279\" class=\"code-line\"><strong>4. iterative_optimizer.py &#8211; \u53cd\u5fa9\u6700\u9069\u5316<\/strong><\/p>\n<p data-line=\"281\" class=\"code-line\">\u3053\u308c\u304c\u4eca\u56de\u306e\u809d\u3067\u3059\u3002N\u56de\u306e\u30eb\u30fc\u30d7\u3067\u7d2f\u7a4d\u7684\u306b\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u6539\u5584\u3057\u3066\u3044\u304d\u307e\u3059\uff1a<\/p>\n<div class=\"code-block-container\">\n<pre class=\"language-python\"><code class=\"language-python code-line\" data-line=\"283\"><span class=\"token keyword\">def<\/span> <span class=\"token function\">run_iterative_optimization<\/span><span class=\"token punctuation\">(<\/span>iterations<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">int<\/span> <span class=\"token operator\">=<\/span> <span class=\"token number\">5<\/span><span class=\"token punctuation\">,<\/span> max_demos<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">int<\/span> <span class=\"token operator\">=<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n    program <span class=\"token operator\">=<\/span> ScheduleExtractionProgram<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>  \n\n    <span class=\"token keyword\">for<\/span> i <span class=\"token keyword\">in<\/span> <span class=\"token builtin\">range<\/span><span class=\"token punctuation\">(<\/span>iterations <span class=\"token operator\">+<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n        \n        save_prompt_evolution<span class=\"token punctuation\">(<\/span>program<span class=\"token punctuation\">,<\/span> i<span class=\"token punctuation\">,<\/span> timestamp<span class=\"token operator\">=<\/span>timestamp<span class=\"token punctuation\">)<\/span>\n\n        \n        results <span class=\"token operator\">=<\/span> run_tests<span class=\"token punctuation\">(<\/span>program<span class=\"token punctuation\">,<\/span> test_cases<span class=\"token punctuation\">)<\/span>\n        avg_score <span class=\"token operator\">=<\/span> <span class=\"token builtin\">sum<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">[<\/span><span class=\"token string\">\"score\"<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token keyword\">for<\/span> r <span class=\"token keyword\">in<\/span> results<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">\/<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>results<span class=\"token punctuation\">)<\/span>\n\n        \n        <span class=\"token keyword\">if<\/span> i <span class=\"token operator\"> iterations<span class=\"token punctuation\">:<\/span>\n            fresh_program <span class=\"token operator\">=<\/span> ScheduleExtractionProgram<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n\n            \n            current_instruction <span class=\"token operator\">=<\/span> program<span class=\"token punctuation\">.<\/span>extract<span class=\"token punctuation\">.<\/span>predict<span class=\"token punctuation\">.<\/span>signature<span class=\"token punctuation\">.<\/span>instructions\n            fresh_program<span class=\"token punctuation\">.<\/span>extract<span class=\"token punctuation\">.<\/span>predict<span class=\"token punctuation\">.<\/span>signature<span class=\"token punctuation\">.<\/span>instructions <span class=\"token operator\">=<\/span> current_instruction\n\n            \n            program <span class=\"token operator\">=<\/span> optimize_program<span class=\"token punctuation\">(<\/span>fresh_program<span class=\"token punctuation\">,<\/span> training_data<span class=\"token punctuation\">)<\/span>\n<\/span><\/code><\/pre>\n<\/div>\n<p data-line=\"307\" class=\"code-line\">\u91cd\u8981\u306a\u306e\u306f<strong>\u7d2f\u7a4d\u7684\u306a\u6539\u5584<\/strong>\u306e\u90e8\u5206\u3067\u3059\u3002\u5404\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f3\u3067\u524d\u56de\u306e\u6700\u826f\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u5f15\u304d\u7d99\u3044\u3067\u3001\u3055\u3089\u306b\u6539\u5584\u3092\u91cd\u306d\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<hr data-line=\"309\" class=\"code-line\"\/>\n<h2 id=\"%E5%AE%9F%E8%A1%8C%E7%B5%90%E6%9E%9C%E3%81%A8%E5%AD%A6%E7%BF%92%E6%9B%B2%E7%B7%9A\" data-line=\"311\" class=\"code-line\">\n \u5b9f\u884c\u7d50\u679c\u3068\u5b66\u7fd2\u66f2\u7dda<\/h2>\n<h3 id=\"%E5%AE%9F%E9%9A%9B%E3%81%AB%E5%9B%9E%E3%81%97%E3%81%9F%E7%B5%90%E6%9E%9C\" data-line=\"313\" class=\"code-line\">\n \u5b9f\u969b\u306b\u56de\u3057\u305f\u7d50\u679c<\/h3>\n<p data-line=\"315\" class=\"code-line\">3\u56de\u306e\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3057\u305f\u7d50\u679c\u304c\u4ee5\u4e0b\u3067\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"317\">\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f3 0: 0.7054 (70.54%)\n\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f3 1: 0.5942 (59.42%)\n\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f3 2: 0.7629 (76.29%)\n\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f3 3: 0.7758 (77.58%)\n<\/code><\/pre>\n<\/div>\n<p data-line=\"324\" class=\"code-line\">\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f31\u3067\u4e00\u6642\u7684\u306b\u30b9\u30b3\u30a2\u304c\u4e0b\u304c\u3063\u3066\u3044\u308b\u306e\u304c\u8208\u5473\u6df1\u3044\u3067\u3059\u3002\u3053\u308c\u306f\u5f8c\u3067\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n<p data-line=\"326\" class=\"code-line\">\u96e3\u6613\u5ea6\u5225\u306b\u898b\u308b\u3068\u3001<\/p>\n<div class=\"s_table\"><table data-line=\"328\" class=\"code-line\">\n<thead data-line=\"328\" class=\"code-line\">\n<tr data-line=\"328\" class=\"code-line\">\n<th>\u96e3\u6613\u5ea6<\/th>\n<th>\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f30<\/th>\n<th>\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f31<\/th>\n<th>\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f32<\/th>\n<th>\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f33<\/th>\n<\/tr>\n<\/thead>\n<tbody data-line=\"330\" class=\"code-line\">\n<tr data-line=\"330\" class=\"code-line\">\n<td>1\uff08\u7c21\u5358\uff09<\/td>\n<td>100.0%<\/td>\n<td>100.0%<\/td>\n<td>100.0%<\/td>\n<td>100.0%<\/td>\n<\/tr>\n<tr data-line=\"331\" class=\"code-line\">\n<td>2\uff08\u4e2d\uff09<\/td>\n<td>72.9%<\/td>\n<td>39.6%<\/td>\n<td>85.4%<\/td>\n<td>85.4%<\/td>\n<\/tr>\n<tr data-line=\"332\" class=\"code-line\">\n<td>3\uff08\u96e3\uff09<\/td>\n<td>59.1%<\/td>\n<td>59.1%<\/td>\n<td>62.3%<\/td>\n<td>64.9%<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<p data-line=\"334\" class=\"code-line\">\u7279\u306b\u3001\u96e3\u6613\u5ea62\u304c\u5927\u304d\u304f\u6539\u5584\u3057\u3066\u3044\u308b\u306e\u304c\u898b\u3066\u53d6\u308c\u307e\u3059\uff0872.9%\u219285.4%\u3001<strong>+12.5%\uff01<\/strong>\uff09<\/p>\n<h3 id=\"%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%AE%E9%80%B2%E5%8C%96\" data-line=\"336\" class=\"code-line\">\n \u30d7\u30ed\u30f3\u30d7\u30c8\u306e\u9032\u5316<\/h3>\n<p data-line=\"338\" class=\"code-line\"><strong>\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f30\uff08\u521d\u671f\u30d7\u30ed\u30f3\u30d7\u30c8\uff09:<\/strong><\/p>\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"339\">\u753b\u50cf\u304b\u3089\u4e88\u5b9a\u3092\u51fa\u3057\u3066\n<\/code><\/pre>\n<\/div>\n<p data-line=\"342\" class=\"code-line\">\u2193<\/p>\n<p data-line=\"344\" class=\"code-line\"><strong>\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f33\uff08\u6700\u7d42\u30d7\u30ed\u30f3\u30d7\u30c8\uff09:<\/strong><\/p>\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"345\">\u3042\u306a\u305f\u306f\u3001\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u7ba1\u7406\u306e\u30a8\u30ad\u30b9\u30d1\u30fc\u30c8\u3067\u3042\u308a\u3001\u7279\u306b\u753b\u50cf\u304b\u3089\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u60c5\u5831\u3092\u8aad\u307f\u53d6\u308b\u3053\u3068\u306b\u9577\u3051\u3066\u3044\u308bAI\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8\u3067\u3059\u3002\u4e0e\u3048\u3089\u308c\u305f\u753b\u50cf\u306b\u5199\u3063\u3066\u3044\u308b\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u8868\u3092\u8a73\u7d30\u306b\u5206\u6790\u3057\u3001\u8a18\u8f09\u3055\u308c\u3066\u3044\u308b\u3059\u3079\u3066\u306e\u4e88\u5b9a\u3092\u62bd\u51fa\u3057\u3001\u69cb\u9020\u5316\u3055\u308c\u305fJSON\u5f62\u5f0f\u3067\u51fa\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\nJSON\u306e\u69cb\u9020\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3068\u3057\u307e\u3059\u3002\n\njson\n{\n  \"schedule\": [\n    {\"time\": \"\u6642\u523b\", \"subject\": \"\u4e88\u5b9a\u5185\u5bb9\", \"location\": \"\u5834\u6240\", \"note\": \"\u5099\u8003\"},\n    {\"time\": \"\u6642\u523b\", \"subject\": \"\u4e88\u5b9a\u5185\u5bb9\", \"location\": \"\u5834\u6240\", \"note\": \"\u5099\u8003\"},\n    ...\n  ]\n}\n\n\u4e88\u5b9a\u306e\u62bd\u51fa\u3068JSON\u5f62\u5f0f\u3078\u306e\u5909\u63db\u306b\u304a\u3044\u3066\u306f\u3001\u4ee5\u4e0b\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3092\u53b3\u5b88\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\n* **\u4e0d\u660e\u78ba\u306a\u60c5\u5831\u306e\u51e6\u7406:** \u6642\u523b\u3001\u4e88\u5b9a\u5185\u5bb9\u3001\u5834\u6240\u3001\u5099\u8003\u3068\u3044\u3063\u305f\u60c5\u5831\u304c\u753b\u50cf\u304b\u3089\u5b8c\u5168\u306b\u8aad\u307f\u53d6\u308c\u306a\u3044\u5834\u5408\u306f\u3001\u5bfe\u5fdc\u3059\u308bJSON\u30d5\u30a3\u30fc\u30eb\u30c9\u306b `null` \u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u60c5\u5831\u306e\u89e3\u91c8\u306b\u66d6\u6627\u3055\u304c\u6b8b\u308b\u5834\u5408\u306f\u3001\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u5168\u4f53\u3068\u306e\u6574\u5408\u6027\u3084\u6587\u8108\u3092\u8003\u616e\u3057\u3001\u6700\u3082\u53ef\u80fd\u6027\u306e\u9ad8\u3044\u60c5\u5831\u3092\u63a8\u6e2c\u3057\u3066\u63a1\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n* **\u5168\u4f53\u7684\u306a\u6587\u8108\u306e\u7406\u89e3:** \u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u8868\u306e\u5168\u4f53\u50cf\u3092\u628a\u63e1\u3057\u3001\u500b\u3005\u306e\u4e88\u5b9a\u9593\u306e\u6642\u9593\u7684\u306a\u9023\u7d9a\u6027\u3084\u5185\u5bb9\u306e\u95a2\u9023\u6027\u304b\u3089\u77db\u76fe\u304c\u306a\u3044\u304b\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4f8b\u3048\u3070\u3001\u6642\u9593\u5e2f\u30fb\u65e5\u4ed8\u30fb\u66dc\u65e5\u3068\u3044\u3063\u305f\u60c5\u5831\u304c\u4ed6\u306e\u4e88\u5b9a\u3068\u77db\u76fe\u3057\u3066\u3044\u306a\u3044\u304b\u3001\u60c5\u5831\u306e\u6b20\u843d\u304c\u306a\u3044\u304b\u3092\u6ce8\u610f\u6df1\u304f\u691c\u8a3c\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n* **\u591a\u69d8\u306a\u8a18\u8ff0\u5f62\u5f0f\u3078\u306e\u5bfe\u5fdc:** \u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u8868\u306b\u306f\u624b\u66f8\u304d\u6587\u5b57\u3001\u6d3b\u5b57\u4f53\u3001\u7565\u8a9e\u3001\u8a18\u53f7\u3001\u5c02\u9580\u7528\u8a9e\u306a\u3069\u3001\u3055\u307e\u3056\u307e\u306a\u8a18\u8ff0\u5f62\u5f0f\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u591a\u69d8\u306a\u8868\u73fe\u3092\u6b63\u78ba\u306b\u89e3\u91c8\u3057\u3001\u60c5\u5831\u3092\u62bd\u51fa\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u6642\u9593\u306e\u8868\u73fe\uff08\u4f8b\uff1a\u300c13\u6642\uff5e\u300d\u306f \"13:00\"\uff09\u3084\u5834\u6240\u306e\u7565\u79f0\u306a\u3069\u3001\u4e00\u822c\u7684\u306a\u7565\u8a9e\u3084\u7701\u7565\u8a18\u53f7\u306b\u3082\u5bfe\u5fdc\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n* **JSON\u5f62\u5f0f\u306e\u53b3\u683c\u306a\u9075\u5b88:** \u51fa\u529b\u306fJSON\u5f62\u5f0f\u306e\u307f\u3067\u8a18\u8ff0\u3057\u3066\u304f\u3060\u3055\u3044\u3002JSON\u4ee5\u5916\u306e\u8aac\u660e\u6587\u3001\u524d\u7f6e\u304d\u3001\u5f8c\u66f8\u304d\u3001\u88dc\u8db3\u60c5\u5831\u306a\u3069\u306f\u4e00\u5207\u542b\u3081\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u307e\u305f\u3001markdown\u8a18\u6cd5\uff08```json ... ```\uff09\u306a\u3069\u3082\u4f7f\u7528\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\n* **\u8907\u6570\u5019\u88dc\u304b\u3089\u306e\u9078\u629e:** \u4e88\u5b9a\u306e\u5185\u5bb9\u306b\u95a2\u3057\u3066\u8907\u6570\u306e\u89e3\u91c8\u304c\u53ef\u80fd\u306a\u5834\u5408\u306f\u3001\u6700\u3082\u53ef\u80fd\u6027\u304c\u9ad8\u3044\u3082\u306e\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u9078\u629e\u306e\u6839\u62e0\u3068\u306a\u3063\u305f\u7406\u7531\u306f\u5185\u90e8\u3067\u8a18\u9332\u3057\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u53c2\u7167\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n* **\u5834\u6240\u306e\u7279\u5b9a\u3068\u88dc\u5b8c:** \u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u8868\u306b\u5177\u4f53\u7684\u306a\u5834\u6240\u306e\u8a18\u8ff0\u304c\u306a\u3044\u5834\u5408\u306f\u3001\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u8868\u5185\u306e\u4ed6\u306e\u60c5\u5831\u3001\u7d44\u7e54\u5185\u306e\u5834\u6240\u306b\u95a2\u3059\u308b\u4e00\u822c\u7684\u306a\u77e5\u8b58\u3001\u307e\u305f\u306f\u516c\u958b\u3055\u308c\u3066\u3044\u308b\u60c5\u5831\u6e90\u304b\u3089\u5834\u6240\u3092\u63a8\u6e2c\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u63a8\u6e2c\u3055\u308c\u305f\u5834\u6240\u306f\u3001\u53ef\u80fd\u306a\u9650\u308a\u8a73\u7d30\u306b\u8a18\u8ff0\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n* **\u6839\u62e0\u306e\u8aac\u660e:** \u5404\u4e88\u5b9a\u306e\u62bd\u51fa\u306b\u3064\u3044\u3066\u3001\u305d\u306e\u6839\u62e0\u3068\u306a\u3063\u305f\u753b\u50cf\u306e\u9818\u57df\u3084\u30c6\u30ad\u30b9\u30c8\u3092\u7279\u5b9a\u3057\u3001\u7c21\u5358\u306a\u8aac\u660e\u3092\u52a0\u3048\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u60c5\u5831\u306fJSON\u306b\u306f\u542b\u3081\u305a\u3001\u63a8\u8ad6\u306e\u904e\u7a0b\u3067\u306e\u307f\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\n\u4e0a\u8a18\u306e\u6307\u793a\u306b\u5f93\u3044\u3001\u753b\u50cf\u304b\u3089\u6700\u5927\u9650\u306b\u6b63\u78ba\u304b\u3064\u5b8c\u5168\u306a\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u60c5\u5831\u3092\u62bd\u51fa\u3057\u3001JSON\u5f62\u5f0f\u3067\u69cb\u9020\u5316\u3057\u3066\u63d0\u4f9b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\n<\/code><\/pre>\n<\/div>\n<p data-line=\"372\" class=\"code-line\">\u81a8\u5927\u306a\u30d7\u30ed\u30f3\u30d7\u30c8\u306b\u306a\u3063\u3066\u3044\u3066\u3001\u69d8\u3005\u306a\u30d1\u30bf\u30fc\u30f3\u306b\u5bfe\u5fdc\u3059\u308b\u305f\u3081\u306e\u5b66\u7fd2\u306e\u6210\u679c\u304c\u8868\u308c\u3066\u3044\u308b\u3088\u3046\u306b\u611f\u3058\u3089\u308c\u307e\u3059\u3002<\/p>\n<h3 id=\"%E5%AD%A6%E7%BF%92%E6%9B%B2%E7%B7%9A\" data-line=\"374\" class=\"code-line\">\n \u5b66\u7fd2\u66f2\u7dda<\/h3>\n<p data-line=\"376\" class=\"code-line\"><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/zenn-user-upload\/52379934c192-20251008.png\" alt=\"\u5b66\u7fd2\u66f2\u7dda\" width=\"500\" class=\"md-img\" loading=\"lazy\"\/><\/p>\n<p data-line=\"378\" class=\"code-line\">\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f31\u3067\u8c37\u304c\u3042\u3063\u3066\u3001\u305d\u306e\u5f8c\u6025\u6fc0\u306b\u56de\u5fa9\uff06\u6539\u5584\u3059\u308b\u300cU\u5b57\u30ab\u30fc\u30d6\u300d\u304c\u898b\u3048\u307e\u3059\u3002<\/p>\n<h3 id=\"%E8%A6%B3%E5%AF%9F%E3%81%95%E3%82%8C%E3%81%9F%E5%85%B7%E4%BD%93%E7%9A%84%E3%81%AA%E6%94%B9%E5%96%84%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3\" data-line=\"380\" class=\"code-line\">\n \u89b3\u5bdf\u3055\u308c\u305f\u5177\u4f53\u7684\u306a\u6539\u5584\u30d1\u30bf\u30fc\u30f3<\/h3>\n<h4 id=\"%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B31%3A-json%E5%BD%A2%E5%BC%8F%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8B%E3%82%89%E3%81%AE%E8%87%AA%E5%B7%B1%E4%BF%AE%E5%BE%A9\" data-line=\"382\" class=\"code-line\">\n \u30d1\u30bf\u30fc\u30f31: JSON\u5f62\u5f0f\u30a8\u30e9\u30fc\u304b\u3089\u306e\u81ea\u5df1\u4fee\u5fa9<\/h4>\n<p data-line=\"384\" class=\"code-line\">\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f31\u3067\u8208\u5473\u6df1\u3044\u73fe\u8c61\u304c\u8d77\u304d\u307e\u3057\u305f\u3002\u3042\u308b\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u3067LLM\u304c\u4ee5\u4e0b\u306e\u51fa\u529b\u3092\u8fd4\u3057\u307e\u3057\u305f\u3002<\/p>\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"386\">\u26a0\ufe0f  JSON\u30d1\u30fc\u30b9\u30a8\u30e9\u30fc: Expecting property name enclosed in double quotes\n\u751f\u306e\u51fa\u529b: {'schedule': [{'time': 'AM9:00', ...}]}\n<\/code><\/pre>\n<\/div>\n<p data-line=\"391\" class=\"code-line\">JSON\uff08\u30c0\u30d6\u30eb\u30af\u30a9\u30fc\u30c8\uff09\u3092\u8fd4\u3059\u3079\u304d\u3068\u3053\u308d\u3092\u3001\u9593\u9055\u3048\u3066Python\u8f9e\u66f8\u5f62\u5f0f\uff08\u30b7\u30f3\u30b0\u30eb\u30af\u30a9\u30fc\u30c8\uff09\u3067\u8fd4\u3057\u3066\u3057\u307e\u3044\u30b9\u30b3\u30a2\u304c0\u70b9\u306b\u306a\u3063\u3066\u3057\u307e\u3063\u305f\uff01<\/p>\n<p data-line=\"393\" class=\"code-line\">\u3068\u3053\u308d\u304c\u3001\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f32\u4ee5\u964d\u306e\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u898b\u308b\u3068\u2026<\/p>\n<p data-line=\"395\" class=\"code-line\">\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f32\u306e\u30d7\u30ed\u30f3\u30d7\u30c8\uff08\u629c\u7c8b\uff09:<\/p>\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"396\">*   **JSON\u5f62\u5f0f\u306e\u53b3\u5b88:** \u51fa\u529b\u306fJSON\u5f62\u5f0f\u306e\u307f\u3067\u8a18\u8ff0\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n    \u8aac\u660e\u6587\u3001\u524d\u7f6e\u304d\u3001\u5f8c\u66f8\u304d\u3001\u305d\u306e\u4ed6JSON\u4ee5\u5916\u306e\u30c6\u30ad\u30b9\u30c8\u306f\u4e00\u5207\u4e0d\u8981\u3067\u3059\u3002\n    markdown\u8a18\u6cd5 (```json ... ```) \u306a\u3069\u3082\u4f7f\u7528\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\n<\/code><\/pre>\n<\/div>\n<p data-line=\"402\" class=\"code-line\">\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f33\u306e\u30d7\u30ed\u30f3\u30d7\u30c8\uff08\u629c\u7c8b\uff09:<\/p>\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"403\">*   **JSON\u5f62\u5f0f\u306e\u53b3\u683c\u306a\u9075\u5b88:** \u51fa\u529b\u306f\u3001JSON\u5f62\u5f0f\u306e\u307f\u3067\u8a18\u8ff0\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n    JSON\u4ee5\u5916\u306e\u8aac\u660e\u6587\u3001\u524d\u7f6e\u304d\u3001\u5f8c\u66f8\u304d\u3001\u88dc\u8db3\u60c5\u5831\u306a\u3069\u306f\u4e00\u5207\u542b\u3081\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\n    \u307e\u305f\u3001markdown\u8a18\u6cd5 (```json ... ```) \u306a\u3069\u3082\u4f7f\u7528\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\n<\/code><\/pre>\n<\/div>\n<p data-line=\"409\" class=\"code-line\">\u81ea\u52d5\u7684\u306bJSON\u5f62\u5f0f\u306b\u95a2\u3059\u308b\u6307\u793a\u304c<strong>\u3069\u3093\u3069\u3093\u53b3\u683c\u306b<\/strong>\u306a\u3063\u3066\u3044\u307e\u3059\uff01\u3053\u308c\u304cInstruction Optimization\u306e\u5a01\u529b\u3067\u3059\u3002<strong>\u30d7\u30ed\u30f3\u30d7\u30c8\u304c\u5931\u6557\u304b\u3089\u5b66\u3093\u3067\u81ea\u5df1\u4fee\u5fa9<\/strong>\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<h4 id=\"%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B32%3A-%E6%9B%96%E6%98%A7%E3%81%AA%E6%83%85%E5%A0%B1%E3%81%B8%E3%81%AE%E5%AF%BE%E5%BF%9C%E5%BC%B7%E5%8C%96\" data-line=\"411\" class=\"code-line\">\n \u30d1\u30bf\u30fc\u30f32: \u66d6\u6627\u306a\u60c5\u5831\u3078\u306e\u5bfe\u5fdc\u5f37\u5316<\/h4>\n<p data-line=\"413\" class=\"code-line\">\u521d\u671f\u30d7\u30ed\u30f3\u30d7\u30c8\uff08\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f30\uff09:<\/p>\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"414\">\u753b\u50cf\u304b\u3089\u4e88\u5b9a\u3092\u51fa\u3057\u3066\n<\/code><\/pre>\n<\/div>\n<p data-line=\"418\" class=\"code-line\">\u975e\u5e38\u306b\u30b7\u30f3\u30d7\u30eb\u3067\u3059\u3002\u3053\u308c\u306f\u610f\u56f3\u7684\u306a\u6226\u7565\u3067\u3001\u300c\u5f31\u3044\u521d\u671f\u30d7\u30ed\u30f3\u30d7\u30c8\u300d\u304b\u3089\u30b9\u30bf\u30fc\u30c8\u3059\u308b\u3053\u3068\u3067\u6539\u5584\u306e\u4f59\u5730\u3092\u6b8b\u3057\u307e\u3057\u305f\u3002<\/p>\n<p data-line=\"420\" class=\"code-line\">\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f33\u306e\u30d7\u30ed\u30f3\u30d7\u30c8\uff08\u629c\u7c8b\uff09:<\/p>\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"421\">\u3042\u306a\u305f\u306f\u3001\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u7ba1\u7406\u306e\u30a8\u30ad\u30b9\u30d1\u30fc\u30c8\u3067\u3042\u308a\u3001\n\u7279\u306b\u753b\u50cf\u304b\u3089\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u60c5\u5831\u3092\u8aad\u307f\u53d6\u308b\u3053\u3068\u306b\u9577\u3051\u3066\u3044\u308bAI\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8\u3067\u3059\u3002\n\n\u4e0e\u3048\u3089\u308c\u305f\u753b\u50cf\u306b\u5199\u3063\u3066\u3044\u308b\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u8868\u3092\u8a73\u7d30\u306b\u5206\u6790\u3057\u3001\n\u8a18\u8f09\u3055\u308c\u3066\u3044\u308b\u3059\u3079\u3066\u306e\u4e88\u5b9a\u3092\u62bd\u51fa\u3057\u3001\u69cb\u9020\u5316\u3055\u308c\u305fJSON\u5f62\u5f0f\u3067\u51fa\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\n   **\u4e0d\u660e\u78ba\u306a\u60c5\u5831\u306e\u51e6\u7406:** \u6642\u523b\u3001\u4e88\u5b9a\u5185\u5bb9\u3001\u5834\u6240\u3001\u5099\u8003\u3068\u3044\u3063\u305f\u60c5\u5831\u304c\u753b\u50cf\u304b\u3089\u5b8c\u5168\u306b\n    \u8aad\u307f\u53d6\u308c\u306a\u3044\u5834\u5408\u306f\u3001\u5bfe\u5fdc\u3059\u308bJSON\u30d5\u30a3\u30fc\u30eb\u30c9\u306b `null` \u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\n    \u60c5\u5831\u306e\u89e3\u91c8\u306b\u66d6\u6627\u3055\u304c\u6b8b\u308b\u5834\u5408\u306f\u3001\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u5168\u4f53\u3068\u306e\u6574\u5408\u6027\u3084\u6587\u8108\u3092\u8003\u616e\u3057\u3001\n    \u6700\u3082\u53ef\u80fd\u6027\u306e\u9ad8\u3044\u60c5\u5831\u3092\u63a8\u6e2c\u3057\u3066\u63a1\u7528\u3057\u307e\u3059\u3002\n<\/code><\/pre>\n<\/div>\n<p data-line=\"434\" class=\"code-line\">\u300c\u8a73\u7d30\u306b\u5206\u6790\u300d\u300c\u6587\u8108\u3092\u8003\u616e\u300d\u3068\u3044\u3063\u305f\u6307\u793a\u304c\u81ea\u52d5\u8ffd\u52a0\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u304c\u96e3\u6613\u5ea63\uff08\u66d6\u6627\u306a\u60c5\u5831\u304c\u591a\u3044\uff09\u306e\u30b9\u30b3\u30a2\u6539\u5584\u306b\u52b9\u3044\u3066\u3044\u307e\u3059\u3002<\/p>\n<h2 id=\"%E3%83%8F%E3%83%9E%E3%81%A3%E3%81%9F%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E3%81%A8%E8%A7%A3%E6%B1%BA%E7%AD%96\" data-line=\"436\" class=\"code-line\">\n \u30cf\u30de\u3063\u305f\u30dd\u30a4\u30f3\u30c8\u3068\u89e3\u6c7a\u7b56<\/h2>\n<h3 id=\"%E5%95%8F%E9%A1%8C1%3A-%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E5%88%B6%E5%BE%A1\" data-line=\"438\" class=\"code-line\">\n \u554f\u984c1: \u30ad\u30e3\u30c3\u30b7\u30e5\u5236\u5fa1<\/h3>\n<p data-line=\"440\" class=\"code-line\"><strong>\u554f\u984c<\/strong>: \u5168\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f3\u3067\u307e\u3063\u305f\u304f\u540c\u3058\u30b9\u30b3\u30a2\u304c\u8fd4\u3063\u3066\u304d\u305f\u3002<\/p>\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"442\">iteration,avg_score,difficulty1_avg,difficulty2_avg,difficulty3_avg\n0,0.7033,1.0000,0.7500,0.5732\n1,0.7033,1.0000,0.7500,0.5732\n2,0.7033,1.0000,0.7500,0.5732\n3,0.7033,1.0000,0.7500,0.5732\n<\/code><\/pre>\n<\/div>\n<p data-line=\"450\" class=\"code-line\"><strong>\u539f\u56e0<\/strong>: DSPy\u306e<code>dspy.LM<\/code>\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067<code>cache=True<\/code>\u306b\u306a\u3063\u3066\u304a\u308a\u3001\u540c\u3058\u753b\u50cf\uff0b\u540c\u3058\u30d7\u30ed\u30f3\u30d7\u30c8\u306e\u7d44\u307f\u5408\u308f\u305b\u3060\u3068\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u305f\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u8fd4\u3057\u307e\u3059\u3002\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f3\u9593\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u304c\u5c11\u3057\u3057\u304b\u5909\u308f\u3089\u306a\u3044\u5834\u5408\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u30d2\u30c3\u30c8\u3057\u307e\u304f\u3063\u3066\u540c\u3058\u7d50\u679c\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p data-line=\"452\" class=\"code-line\"><strong>\u89e3\u6c7a\u7b56<\/strong>:<\/p>\n<div class=\"code-block-container\">\n<pre class=\"language-python\"><code class=\"language-python code-line\" data-line=\"453\">lm <span class=\"token operator\">=<\/span> dspy<span class=\"token punctuation\">.<\/span>LM<span class=\"token punctuation\">(<\/span>\n    model<span class=\"token operator\">=<\/span><span class=\"token string\">\"vertex_ai\/gemini-2.0-flash-exp\"<\/span><span class=\"token punctuation\">,<\/span>\n    temperature<span class=\"token operator\">=<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span>\n    rpm<span class=\"token operator\">=<\/span><span class=\"token number\">5<\/span><span class=\"token punctuation\">,<\/span>\n    cache<span class=\"token operator\">=<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span>  \n<span class=\"token punctuation\">)<\/span>\n<\/code><\/pre>\n<\/div>\n<p data-line=\"462\" class=\"code-line\"><code>cache=False<\/code>\u306b\u3057\u305f\u3089\u3001\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f3\u3054\u3068\u306b\u3061\u3083\u3093\u3068\u7570\u306a\u308b\u7d50\u679c\u304c\u8fd4\u3063\u3066\u304f\u308b\u3088\u3046\u306b\u306a\u308a\u3001\u30d7\u30ed\u30f3\u30d7\u30c8\u306e\u30d0\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u304c\u51fa\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u305f\u3060\u3057\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u6570\u304c\u5897\u3048\u3066\u30ec\u30fc\u30c8\u5236\u9650\u306b\u5f15\u3063\u304b\u304b\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff08\u6b21\u306e\u554f\u984c\u3078\uff09\u3002<\/p>\n<h3 id=\"%E5%95%8F%E9%A1%8C2%3A-429%E3%82%A8%E3%83%A9%E3%83%BC%EF%BC%88%E3%83%AC%E3%83%BC%E3%83%88%E5%88%B6%E9%99%90%EF%BC%89\" data-line=\"464\" class=\"code-line\">\n \u554f\u984c2: 429\u30a8\u30e9\u30fc\uff08\u30ec\u30fc\u30c8\u5236\u9650\uff09<\/h3>\n<p data-line=\"466\" class=\"code-line\"><strong>\u554f\u984c<\/strong>: \u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u7121\u52b9\u5316\u3057\u305f\u3089\u3001\u4ee5\u4e0b\u306e\u30a8\u30e9\u30fc\u304c\u983b\u767a\u3057\u305f\u3002<\/p>\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"468\">google.api_core.exceptions.ResourceExhausted: 429 Quota exceeded for\naiplatform.googleapis.com\/generate_content_requests_per_minute with\nbase rate 20.0\/min. Please submit a quota increase request.\n<\/code><\/pre>\n<\/div>\n<p data-line=\"474\" class=\"code-line\"><strong>\u539f\u56e0<\/strong>: \u30ad\u30e3\u30c3\u30b7\u30e5\u306a\u3057\u3060\u3068\u30ea\u30af\u30a8\u30b9\u30c8\u6570\u304c\u8df3\u306d\u4e0a\u304c\u308a\u307e\u3059\u3002MIPROv2\u306f\u5185\u90e8\u306710\u8a66\u884c\u00d73\u5019\u88dc\uff1d30\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u77ed\u6642\u9593\u3067\u9001\u308b\u305f\u3081\u3001rpm=20\u3067\u3082\u8db3\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002<\/p>\n<p data-line=\"476\" class=\"code-line\"><strong>\u89e3\u6c7a\u7b56<\/strong>:<\/p>\n<div class=\"code-block-container\">\n<pre class=\"language-python\"><code class=\"language-python code-line\" data-line=\"477\">lm <span class=\"token operator\">=<\/span> dspy<span class=\"token punctuation\">.<\/span>LM<span class=\"token punctuation\">(<\/span>\n    model<span class=\"token operator\">=<\/span><span class=\"token string\">\"vertex_ai\/gemini-2.0-flash-exp\"<\/span><span class=\"token punctuation\">,<\/span>\n    temperature<span class=\"token operator\">=<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span>\n    rpm<span class=\"token operator\">=<\/span><span class=\"token number\">5<\/span><span class=\"token punctuation\">,<\/span>  \n    cache<span class=\"token operator\">=<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span>\n<span class=\"token punctuation\">)<\/span>\n<\/code><\/pre>\n<\/div>\n<p data-line=\"486\" class=\"code-line\"><code>rpm=5<\/code>\u307e\u3067\u4e0b\u3052\u3066\u5b89\u5168\u30de\u30fc\u30b8\u30f3\u3092\u78ba\u4fdd\u3057\u307e\u3057\u305f\u3002\u975e\u5e38\u306b\u9045\u304f\u306a\u308a\u307e\u3057\u305f\u304c\uff083\u30a4\u30ec\u30c6\u30fc\u30b7\u30e7\u30f3\u306740\u5206\u4ee5\u4e0a\uff09\u3001\u78ba\u5b9f\u306b\u52d5\u304f\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u5b9f\u52d9\u3067\u306f\u30ad\u30e3\u30c3\u30b7\u30e5ON\uff0b\u9ad8\u3044rpm\u304b\u30ad\u30e3\u30c3\u30b7\u30e5OFF\uff0b\u4f4e\u3044rpm\u3092\u30bf\u30b9\u30af\u306b\u5fdc\u3058\u3066\u9078\u3076\u3079\u304d\u3067\u3059\u3002<\/p>\n<h3 id=\"%E5%95%8F%E9%A1%8C3%3A-%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%8C%E6%88%90%E9%95%B7%E3%81%97%E3%81%AA%E3%81%84\" data-line=\"488\" class=\"code-line\">\n \u554f\u984c3: \u30d7\u30ed\u30f3\u30d7\u30c8\u304c\u6210\u9577\u3057\u306a\u3044<\/h3>\n<p data-line=\"490\" class=\"code-line\"><strong>\u554f\u984c<\/strong>: \u6700\u9069\u5316\u3057\u3066\u3082\u521d\u671f\u30d7\u30ed\u30f3\u30d7\u30c8\u304b\u3089\u6210\u9577\u3057\u306a\u3044\u3053\u3068\u304c\u3042\u3063\u305f\u3002<\/p>\n<p data-line=\"492\" class=\"code-line\"><strong>\u539f\u56e0<\/strong>: <code>init_temperature=1.0<\/code>\u3060\u3063\u305f\u304b\u3089\u3002\u7d50\u679c\u30b9\u30b3\u30a2\u304c\u540c\u70b9\u306e\u5834\u5408\u3001\u756a\u53f7\u304c\u524d\u306e\u65b9\u304c\u512a\u5148\u3055\u308c\u308b\u3088\u3046\u3067\u3059\u3002\u751f\u6210\u3055\u308c\u308b\u30d7\u30ed\u30f3\u30d7\u30c8\u304c\u5143\u304b\u3089\u5909\u5316\u304c\u5c11\u306a\u3044\u3068\u30b9\u30b3\u30a2\u304c\u5909\u308f\u308a\u306b\u304f\u304f\u3001\u7d50\u679c version0 = \u521d\u671f\u30d7\u30ed\u30f3\u30d7\u30c8\u304c\u9078\u3070\u308c\u3084\u3059\u304f\u306a\u308a\u307e\u3059\u3002<\/p>\n<p data-line=\"494\" class=\"code-line\"><strong>\u89e3\u6c7a\u7b56<\/strong>:<\/p>\n<div class=\"code-block-container\">\n<pre class=\"language-python\"><code class=\"language-python code-line\" data-line=\"495\">optimizer <span class=\"token operator\">=<\/span> MIPROv2<span class=\"token punctuation\">(<\/span>\n    <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span>\n    init_temperature<span class=\"token operator\">=<\/span><span class=\"token number\">2.0<\/span><span class=\"token punctuation\">,<\/span>  \n<span class=\"token punctuation\">)<\/span>\n<\/code><\/pre>\n<\/div>\n<p data-line=\"502\" class=\"code-line\">\u6e29\u5ea6\u3092\u4e0a\u3052\u305f\u3089\u3001\u591a\u69d8\u306a\u30d7\u30ed\u30f3\u30d7\u30c8\u5019\u88dc\u304c\u751f\u6210\u3055\u308c\u308b\u3053\u3068\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u306e\u6210\u9577\u304c\u898b\u3089\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002MIPROv2\u306e\u4ed5\u69d8\u3092\u8003\u3048\u308b\u3068\u3001\u751f\u6210\u30d7\u30ed\u30f3\u30d7\u30c8\u306e\u632f\u308c\u5e45\u304c\u3042\u3063\u305f\u307b\u3046\u304c\u76f8\u6027\u304c\u3044\u3044\u3067\u3059\u3002\u4eca\u56de\u306f\u30ec\u30fc\u30c8\u5236\u9650\u5bfe\u7b56\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u30d1\u30bf\u30fc\u30f3\u30923\u5019\u88dc\u3057\u304b\u51fa\u305b\u3066\u3044\u307e\u305b\u3093\u304c\u3001\u6e29\u5ea6\u3092\u4e0a\u3052\u308b\u306b\u4f34\u3063\u3066\u5019\u88dc\u3082\u5897\u3084\u3057\u305f\u65b9\u304c\u3044\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<h3 id=\"%E6%8C%AF%E3%82%8A%E8%BF%94%E3%82%8A\" data-line=\"504\" class=\"code-line\">\n \u632f\u308a\u8fd4\u308a<\/h3>\n<p data-line=\"506\" class=\"code-line\">\u4eca\u56de\u306e\u30bf\u30b9\u30af\u306f\u521d\u671f\u30d7\u30ed\u30f3\u30d7\u30c8\u306770%\u53d6\u308c\u3066\u3057\u307e\u3044\u3001\u6539\u5584\u306e\u4f59\u5730\u304c\u5c11\u3057\u7269\u8db3\u308a\u306a\u304b\u3063\u305f\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u3080\u3057\u308d\u3082\u3063\u3068\u8907\u96d1\u306a\u30bf\u30b9\u30af\u306e\u65b9\u304c\u3001\u30d7\u30ed\u30f3\u30d7\u30c8\u9032\u5316\u306e\u5a01\u529b\u3092\u793a\u305b\u305f\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<p data-line=\"508\" class=\"code-line\">\u305f\u3060\u3001\u96e3\u3057\u3044\u306e\u304c\u300c\u8907\u96d1\u6027\u300d\u3068\u300c\u56de\u7b54\u306e\u4e00\u610f\u6027\uff08\u5ba2\u89b3\u7684\u306a\u8a55\u4fa1\u306e\u3057\u3084\u3059\u3055\uff09\u300d\u306e\u4e21\u7acb\u3067\u3059\u3002\u30bf\u30b9\u30af\u3092\u8907\u96d1\u306b\u3059\u308b\u3068\u3001\u3069\u3046\u3057\u3066\u3082\u6b63\u89e3\u304c\u66d6\u6627\u306b\u306a\u3063\u305f\u308a\u3001\u8a55\u4fa1\u30ed\u30b8\u30c3\u30af\u304c\u8907\u96d1\u5316\u3057\u305f\u308a\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070<\/p>\n<ul data-line=\"510\" class=\"code-line\">\n<li data-line=\"510\" class=\"code-line\">\n<strong>\u8981\u7d04\u30bf\u30b9\u30af<\/strong>: \u8907\u96d1\u3060\u3051\u3069\u3001\u4f55\u304c\u300c\u826f\u3044\u8981\u7d04\u300d\u304b\u306e\u57fa\u6e96\u304c\u4e3b\u89b3\u7684<\/li>\n<li data-line=\"511\" class=\"code-line\">\n<strong>\u8907\u6570\u6bb5\u968e\u306e\u63a8\u8ad6<\/strong>: \u8907\u96d1\u3060\u3051\u3069\u3001\u4e2d\u9593\u30b9\u30c6\u30c3\u30d7\u306e\u8a55\u4fa1\u304c\u96e3\u3057\u3044<\/li>\n<li data-line=\"512\" class=\"code-line\">\n<strong>\u30af\u30ea\u30a8\u30a4\u30c6\u30a3\u30d6\u306a\u751f\u6210<\/strong>: \u8907\u96d1\u3060\u3051\u3069\u3001\u6b63\u89e3\u304c\u4e00\u610f\u306b\u5b9a\u307e\u3089\u306a\u3044<\/li>\n<\/ul>\n<p data-line=\"514\" class=\"code-line\">\u3053\u306e\u30b8\u30ec\u30f3\u30de\u306e\u4e2d\u3067\u3001\u4eca\u56de\u306e\u30bf\u30b9\u30af\u306f\u300c\u5b9f\u52d9\u7684\u306a\u8907\u96d1\u3055\u300d\u3068\u300c\u660e\u78ba\u306a\u8a55\u4fa1\u57fa\u6e96\u300d\u306e\u30d0\u30e9\u30f3\u30b9\u304c\u53d6\u308c\u3066\u3044\u305f\u305f\u3081\u9078\u3073\u307e\u3057\u305f\u3002\u3068\u306f\u3044\u3048\u3001\u3082\u3063\u3068\u826f\u3044\u30bf\u30b9\u30af\u8a2d\u8a08\u304c\u3042\u3063\u305f\u304b\u3082\u3057\u308c\u306a\u3044\u306a\u3001\u3068\u601d\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<p data-line=\"516\" class=\"code-line\">\u3042\u3068\u3001\u8a18\u4e8b\u3092\u66f8\u3044\u3066\u304b\u3089\u6c17\u3065\u304d\u307e\u3057\u305f\u304c\u3001\u30d7\u30ed\u30f3\u30d7\u30c8\u6700\u9069\u5316\u90e8\u5206\u306e\u30e2\u30c7\u30eb\u306f\u4e0b\u3052\u308b\u5fc5\u8981\u304c\u306a\u3044\u306e\u30672.5flash\u306b\u3059\u308c\u3070\u3088\u304b\u3063\u305f\u3067\u3059\u3002<\/p>\n<h2 id=\"%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A8%E4%BB%8A%E5%BE%8C%E3%81%AE%E5%B1%95%E6%9C%9B\" data-line=\"518\" class=\"code-line\">\n \u307e\u3068\u3081\u3068\u4eca\u5f8c\u306e\u5c55\u671b<\/h2>\n<h3 id=\"%E3%81%93%E3%81%AE%E6%A4%9C%E8%A8%BC%E3%81%A7%E5%BE%97%E3%82%89%E3%82%8C%E3%81%9F%E3%82%82%E3%81%AE\" data-line=\"520\" class=\"code-line\">\n \u3053\u306e\u691c\u8a3c\u3067\u5f97\u3089\u308c\u305f\u3082\u306e<\/h3>\n<p data-line=\"522\" class=\"code-line\"><strong>1. \u8a55\u4fa1\u00d7\u6539\u5584\u30eb\u30fc\u30d7\u306e\u81ea\u52d5\u5316<\/strong><\/p>\n<p data-line=\"524\" class=\"code-line\">\u624b\u52d5\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u8abf\u6574\u3059\u308b\u6642\u4ee3\u306f\u5f90\u3005\u306b\u7d42\u308f\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u3055\u3048\u7528\u610f\u3059\u308c\u3070\u3001\u3042\u3068\u306f\u52dd\u624b\u306b\u6539\u5584\u3057\u3066\u304f\u308c\u307e\u3059\u3002\u4eca\u56de\u306f3\u30a4\u30c6\u30ec\u30fc\u30b7\u30e7\u30f3\u3067\u3057\u305f\u304c\u3001\u898f\u6a21\u3092\u5927\u304d\u304f\u3059\u308c\u307010\u56de\u3067\u308220\u56de\u3067\u3082\u56de\u305b\u307e\u3059\u3002<\/p>\n<p data-line=\"526\" class=\"code-line\"><strong>2. \u30d7\u30ed\u30f3\u30d7\u30c8\u306e\u54c1\u8cea\u3092\u5b9a\u91cf\u7684\u306b\u7ba1\u7406<\/strong><\/p>\n<p data-line=\"528\" class=\"code-line\">\u300c\u306a\u3093\u3068\u306a\u304f\u3088\u304f\u306a\u3063\u305f\u6c17\u304c\u3059\u308b\u300d\u3067\u306f\u306a\u304f\u3001**70.5%\u219277.6%\uff08+7.0%\uff09**\u306e\u3088\u3046\u306b\u6570\u5b57\u3067\u6539\u5584\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u304c\u3042\u308b\u3068\u30c1\u30fc\u30e0\u3067\u306e\u610f\u601d\u6c7a\u5b9a\u304c\u3057\u3084\u3059\u304f\u306a\u308a\u307e\u3059\u3002<\/p>\n<p data-line=\"530\" class=\"code-line\"><strong>3. \u30c8\u30ec\u30fc\u30b5\u30d3\u30ea\u30c6\u30a3\u306e\u78ba\u4fdd<\/strong><\/p>\n<p data-line=\"532\" class=\"code-line\">LangSmith\u306e\u304a\u304b\u3052\u3067\u300c\u3053\u306e\u30d7\u30ed\u30f3\u30d7\u30c8\u5909\u66f4\u3067\u3069\u306e\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u304c\u3069\u3046\u5909\u308f\u3063\u305f\u304b\u300d\u304c\u5168\u90e8\u8a18\u9332\u3055\u308c\u307e\u3059\u3002\u5f8c\u304b\u3089\u632f\u308a\u8fd4\u3063\u3066\u300c\u306a\u305c\u3053\u306e\u5224\u65ad\u3092\u3057\u305f\u304b\u300d\u3092\u8aac\u660e\u3067\u304d\u308b\u306e\u304c\u5927\u304d\u3044\u3067\u3059\u3002<\/p>\n<p data-line=\"534\" class=\"code-line\"><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/zenn-user-upload\/5369944c6143-20251008.jpg\" alt=\"\u6700\u9069\u5316\u306e\u9014\u4e2d\u7d4c\u904e\" width=\"400\" class=\"md-img\" loading=\"lazy\"\/><br \/><em>\u6700\u9069\u5316\u306e\u9014\u4e2d\u7d4c\u904e\u3092\u898b\u308b\u3060\u3051\u3067\u3082\u9762\u767d\u3044<\/em><\/p>\n<h3 id=\"%E4%BB%8A%E5%BE%8C%E3%81%AE%E6%8B%A1%E5%BC%B5%E5%8F%AF%E8%83%BD%E6%80%A7\" data-line=\"537\" class=\"code-line\">\n \u4eca\u5f8c\u306e\u62e1\u5f35\u53ef\u80fd\u6027<\/h3>\n<p data-line=\"539\" class=\"code-line\"><strong>\u3088\u308a\u8907\u96d1\u306a\u8a55\u4fa1\u6307\u6a19<\/strong><\/p>\n<p data-line=\"541\" class=\"code-line\">\u4eca\u56de\u306f\u9805\u76ee\u306e\u4e00\u81f4\u6570\u30d9\u30fc\u30b9\u3067\u3057\u305f\u304c\u3001\u4ee5\u4e0b\u3082\u8a66\u3057\u3066\u307f\u305f\u3044\u3067\u3059\u3002<\/p>\n<ul data-line=\"543\" class=\"code-line\">\n<li data-line=\"543\" class=\"code-line\">\n<strong>LLM-as-Judge<\/strong>: LLM\u306b\u300c\u3053\u306e\u62bd\u51fa\u7d50\u679c\u306f\u59a5\u5f53\u304b\uff1f\u300d\u3092\u8a55\u4fa1\u3055\u305b\u308b<\/li>\n<li data-line=\"544\" class=\"code-line\">\n<strong>\u610f\u5473\u7684\u985e\u4f3c\u5ea6<\/strong>: \u57cb\u3081\u8fbc\u307f\u30d9\u30af\u30c8\u30eb\u3067\u610f\u5473\u304c\u5408\u3063\u3066\u3044\u308c\u3070OK\u306b\u3059\u308b<\/li>\n<li data-line=\"545\" class=\"code-line\">\n<strong>\u30e6\u30fc\u30b6\u30fc\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af<\/strong>: \u5b9f\u969b\u306e\u30e6\u30fc\u30b6\u30fc\u306e\u300c\u3044\u3044\u306d\u300d\u300c\u3060\u3081\u300d\u3092\u5b66\u7fd2\u30c7\u30fc\u30bf\u306b\u7d44\u307f\u8fbc\u3080<\/li>\n<\/ul>\n<p data-line=\"547\" class=\"code-line\"><strong>CI\/CD\u3078\u306e\u7d44\u307f\u8fbc\u307f<\/strong><\/p>\n<p data-line=\"549\" class=\"code-line\">GitHub Actions\u306a\u3069\u3067\u5b9a\u671f\u5b9f\u884c\u3057\u3066\u3001\u30d7\u30ed\u30f3\u30d7\u30c8\u306e\u54c1\u8cea\u3092\u7d99\u7d9a\u7684\u306b\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3002\u76ee\u6a19\u7cbe\u5ea6\u3092\u4e0a\u56de\u3063\u305f\u3089Slack\u901a\u77e5\u3001\u3068\u3044\u3063\u305f\u3053\u3068\u304c\u3067\u304d\u305d\u3046\u3067\u3059\u3002<\/p>\n<h2 id=\"%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB\" data-line=\"552\" class=\"code-line\">\n \u304a\u308f\u308a\u306b<\/h2>\n<p data-line=\"554\" class=\"code-line\">LLM\u3092\u30b7\u30b9\u30c6\u30e0\u306b\u7d44\u307f\u8fbc\u3080\u5834\u5408\u3001\u30d7\u30ed\u30f3\u30d7\u30c8\u306e\u300c\u8a55\u4fa1\u300d\u3068\u300c\u6539\u5584\u300d\u306e\u4ed5\u7d44\u307f\u306f\u5fc5\u9808\u3067\u3059\u3002\u79c1\u306f\u4ee5\u524d\u4f3c\u305f\u3088\u3046\u306a\u3053\u3068\u3092\u624b\u52d5\u3067\u3084\u3063\u3066\u3044\u307e\u3057\u305f\u304c\u3001\u52b9\u7387\u304c\u6bb5\u9055\u3044\u3067\u611f\u52d5\u3057\u307e\u3057\u305f\u3002<\/p>\n<p data-line=\"556\" class=\"code-line\">DSPy\u3068LangSmith\u3092\u7d44\u307f\u5408\u308f\u305b\u308c\u3070\u3001\u3053\u306e\u9762\u5012\u306a\u30eb\u30fc\u30d7\u3092\u81ea\u52d5\u5316\u3067\u304d\u307e\u3059\u3002\u30d7\u30ed\u30f3\u30d7\u30c8\u304c\u52dd\u624b\u306b\u9032\u5316\u3057\u3066\u3001\u30b9\u30b3\u30a2\u304c\u4e0a\u304c\u3063\u3066\u3044\u304f\u306e\u3092\u898b\u308b\u306e\u306f\u7d50\u69cb\u697d\u3057\u3044\u3067\u3059\u3002<\/p>\n<\/div>\n\n<br \/><a href=\"https:\/\/zenn.dev\/monox_dev\/articles\/7f5b8bb1423cbf\">\u5143\u306e\u8a18\u4e8b\u3092\u78ba\u8a8d\u3059\u308b <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\u306f\u3058\u3081\u306b \u300c\u30b7\u30b9\u30c6\u30e0\u306b\u7d44\u307f\u8fbc\u3080\u30d7\u30ed\u30f3\u30d7\u30c8\u3063\u3066\u3001\u3069\u3046\u3084\u3063\u3066\u4fee\u7e55\u30fb\u7ba1\u7406\u3059\u308c\u3070\u3044\u3044\u3093\u3060\u2026\uff1f\u300d LLM\u95a2\u4fc2\u306e\u30d7\u30ed\u30c0\u30af\u30c8\u3092\u4f5c\u3063\u3066\u3044\u3066\u3001\u3053\u306e\u60a9\u307f\u306b\u3076\u3064\u304b\u3063\u305f\u4eba\u306f\u591a\u3044\u3093\u3058\u3083\u306a\u3044\u3067\u3057\u3087\u3046\u304b\u3002\u79c1\u3082\u305d\u306e\u4e00\u4eba\u3067\u3057\u305f\u3002 \u6700\u521d\u306f\u624b\u52d5\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u3092 [&hellip;]","protected":false},"author":1,"featured_media":22833,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-22832","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hatena-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>DSPy + LangSmith\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u5168\u81ea\u52d5\u3067\u80b2\u3066\u3066\u307f\u305f - \u30dd\u30b1\u30b3\u30f3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zenn.dev\/monox_dev\/articles\/7f5b8bb1423cbf\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DSPy + LangSmith\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u5168\u81ea\u52d5\u3067\u80b2\u3066\u3066\u307f\u305f - \u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"og:description\" content=\"\u306f\u3058\u3081\u306b \u300c\u30b7\u30b9\u30c6\u30e0\u306b\u7d44\u307f\u8fbc\u3080\u30d7\u30ed\u30f3\u30d7\u30c8\u3063\u3066\u3001\u3069\u3046\u3084\u3063\u3066\u4fee\u7e55\u30fb\u7ba1\u7406\u3059\u308c\u3070\u3044\u3044\u3093\u3060\u2026\uff1f\u300d LLM\u95a2\u4fc2\u306e\u30d7\u30ed\u30c0\u30af\u30c8\u3092\u4f5c\u3063\u3066\u3044\u3066\u3001\u3053\u306e\u60a9\u307f\u306b\u3076\u3064\u304b\u3063\u305f\u4eba\u306f\u591a\u3044\u3093\u3058\u3083\u306a\u3044\u3067\u3057\u3087\u3046\u304b\u3002\u79c1\u3082\u305d\u306e\u4e00\u4eba\u3067\u3057\u305f\u3002 \u6700\u521d\u306f\u624b\u52d5\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u3092 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zenn.dev\/monox_dev\/articles\/7f5b8bb1423cbf\" \/>\n<meta property=\"og:site_name\" content=\"\u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-08T16:40:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/1762620017_og-base-w1200-v2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"info@pokecon.jp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"info@pokecon.jp\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"3\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/zenn.dev\\\/monox_dev\\\/articles\\\/7f5b8bb1423cbf#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/22832\\\/\"},\"author\":{\"name\":\"info@pokecon.jp\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"headline\":\"DSPy + LangSmith\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u5168\u81ea\u52d5\u3067\u80b2\u3066\u3066\u307f\u305f\",\"datePublished\":\"2025-11-08T16:40:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/22832\\\/\"},\"wordCount\":110,\"image\":{\"@id\":\"https:\\\/\\\/zenn.dev\\\/monox_dev\\\/articles\\\/7f5b8bb1423cbf#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/1762620017_og-base-w1200-v2.png\",\"articleSection\":[\"\u306f\u3066\u306a\u30d6\u30ed\u30b0\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/22832\\\/\",\"url\":\"https:\\\/\\\/zenn.dev\\\/monox_dev\\\/articles\\\/7f5b8bb1423cbf\",\"name\":\"DSPy + LangSmith\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u5168\u81ea\u52d5\u3067\u80b2\u3066\u3066\u307f\u305f - \u30dd\u30b1\u30b3\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/zenn.dev\\\/monox_dev\\\/articles\\\/7f5b8bb1423cbf#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/zenn.dev\\\/monox_dev\\\/articles\\\/7f5b8bb1423cbf#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/1762620017_og-base-w1200-v2.png\",\"datePublished\":\"2025-11-08T16:40:18+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zenn.dev\\\/monox_dev\\\/articles\\\/7f5b8bb1423cbf#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zenn.dev\\\/monox_dev\\\/articles\\\/7f5b8bb1423cbf\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/zenn.dev\\\/monox_dev\\\/articles\\\/7f5b8bb1423cbf#primaryimage\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/1762620017_og-base-w1200-v2.png\",\"contentUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/1762620017_og-base-w1200-v2.png\",\"width\":1200,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zenn.dev\\\/monox_dev\\\/articles\\\/7f5b8bb1423cbf#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DSPy + LangSmith\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u5168\u81ea\u52d5\u3067\u80b2\u3066\u3066\u307f\u305f\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\",\"name\":\"\u30dd\u30b1\u30b3\u30f3\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\",\"name\":\"info@pokecon.jp\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"caption\":\"info@pokecon.jp\"},\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/author\\\/infopokecon-jp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"DSPy + LangSmith\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u5168\u81ea\u52d5\u3067\u80b2\u3066\u3066\u307f\u305f - \u30dd\u30b1\u30b3\u30f3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zenn.dev\/monox_dev\/articles\/7f5b8bb1423cbf","og_locale":"ja_JP","og_type":"article","og_title":"DSPy + LangSmith\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u5168\u81ea\u52d5\u3067\u80b2\u3066\u3066\u307f\u305f - \u30dd\u30b1\u30b3\u30f3","og_description":"\u306f\u3058\u3081\u306b \u300c\u30b7\u30b9\u30c6\u30e0\u306b\u7d44\u307f\u8fbc\u3080\u30d7\u30ed\u30f3\u30d7\u30c8\u3063\u3066\u3001\u3069\u3046\u3084\u3063\u3066\u4fee\u7e55\u30fb\u7ba1\u7406\u3059\u308c\u3070\u3044\u3044\u3093\u3060\u2026\uff1f\u300d LLM\u95a2\u4fc2\u306e\u30d7\u30ed\u30c0\u30af\u30c8\u3092\u4f5c\u3063\u3066\u3044\u3066\u3001\u3053\u306e\u60a9\u307f\u306b\u3076\u3064\u304b\u3063\u305f\u4eba\u306f\u591a\u3044\u3093\u3058\u3083\u306a\u3044\u3067\u3057\u3087\u3046\u304b\u3002\u79c1\u3082\u305d\u306e\u4e00\u4eba\u3067\u3057\u305f\u3002 \u6700\u521d\u306f\u624b\u52d5\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u3092 [&hellip;]","og_url":"https:\/\/zenn.dev\/monox_dev\/articles\/7f5b8bb1423cbf","og_site_name":"\u30dd\u30b1\u30b3\u30f3","article_published_time":"2025-11-08T16:40:18+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/1762620017_og-base-w1200-v2.png","type":"image\/png"}],"author":"info@pokecon.jp","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"info@pokecon.jp","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"3\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zenn.dev\/monox_dev\/articles\/7f5b8bb1423cbf#article","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/22832\/"},"author":{"name":"info@pokecon.jp","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"headline":"DSPy + LangSmith\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u5168\u81ea\u52d5\u3067\u80b2\u3066\u3066\u307f\u305f","datePublished":"2025-11-08T16:40:18+00:00","mainEntityOfPage":{"@id":"https:\/\/pokecon.jp\/job\/22832\/"},"wordCount":110,"image":{"@id":"https:\/\/zenn.dev\/monox_dev\/articles\/7f5b8bb1423cbf#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/1762620017_og-base-w1200-v2.png","articleSection":["\u306f\u3066\u306a\u30d6\u30ed\u30b0"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/pokecon.jp\/job\/22832\/","url":"https:\/\/zenn.dev\/monox_dev\/articles\/7f5b8bb1423cbf","name":"DSPy + LangSmith\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u5168\u81ea\u52d5\u3067\u80b2\u3066\u3066\u307f\u305f - \u30dd\u30b1\u30b3\u30f3","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/#website"},"primaryImageOfPage":{"@id":"https:\/\/zenn.dev\/monox_dev\/articles\/7f5b8bb1423cbf#primaryimage"},"image":{"@id":"https:\/\/zenn.dev\/monox_dev\/articles\/7f5b8bb1423cbf#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/1762620017_og-base-w1200-v2.png","datePublished":"2025-11-08T16:40:18+00:00","author":{"@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"breadcrumb":{"@id":"https:\/\/zenn.dev\/monox_dev\/articles\/7f5b8bb1423cbf#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zenn.dev\/monox_dev\/articles\/7f5b8bb1423cbf"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/zenn.dev\/monox_dev\/articles\/7f5b8bb1423cbf#primaryimage","url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/1762620017_og-base-w1200-v2.png","contentUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/1762620017_og-base-w1200-v2.png","width":1200,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/zenn.dev\/monox_dev\/articles\/7f5b8bb1423cbf#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/pokecon.jp\/job\/"},{"@type":"ListItem","position":2,"name":"DSPy + LangSmith\u3067\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u5168\u81ea\u52d5\u3067\u80b2\u3066\u3066\u307f\u305f"}]},{"@type":"WebSite","@id":"https:\/\/pokecon.jp\/job\/#website","url":"https:\/\/pokecon.jp\/job\/","name":"\u30dd\u30b1\u30b3\u30f3","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pokecon.jp\/job\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997","name":"info@pokecon.jp","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","caption":"info@pokecon.jp"},"url":"https:\/\/pokecon.jp\/job\/author\/infopokecon-jp\/"}]}},"_links":{"self":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/22832","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/comments?post=22832"}],"version-history":[{"count":1,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/22832\/revisions"}],"predecessor-version":[{"id":22834,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/22832\/revisions\/22834"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media\/22833"}],"wp:attachment":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media?parent=22832"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/categories?post=22832"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/tags?post=22832"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}