{"id":26414,"date":"2025-12-04T11:07:36","date_gmt":"2025-12-04T11:07:36","guid":{"rendered":"https:\/\/pokecon.jp\/job\/?p=26414"},"modified":"2025-12-04T11:07:36","modified_gmt":"2025-12-04T11:07:36","slug":"terraform%e3%81%a7%e3%81%af%e3%81%98%e3%82%81%e3%82%8b-amazon-s3-vectors-%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9frag%e6%a7%8b%e7%af%89%e3%83%8f%e3%83%b3%e3%82%ba%e3%82%aa%e3%83%b3","status":"publish","type":"post","link":"https:\/\/pokecon.jp\/job\/26414\/","title":{"rendered":"Terraform\u3067\u306f\u3058\u3081\u308b Amazon S3 Vectors \u3092\u4f7f\u3063\u305fRAG\u69cb\u7bc9\u30cf\u30f3\u30ba\u30aa\u30f3"},"content":{"rendered":"\n<\/p>\n<div>\n<h2 id=\"%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB\" data-line=\"0\" class=\"code-line\">\n \u306f\u3058\u3081\u306b<\/h2>\n<p data-line=\"1\" class=\"code-line\">AWS re:Invent 2025\u3067Amazon S3 Vectors\u304cGA\u3055\u308c\u307e\u3057\u305f\u3002\u305d\u308c\u306b\u4f34\u3044\u3001Terraform 6.24.0\u304b\u3089S3 Vectors\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u305f\u306e\u3067\u672c\u30d6\u30ed\u30b0\u306fTerraform\u3067RAG\u69cb\u7bc9\u3092\u3057\u3066\u307f\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<br \/>\u307e\u305f\u4eca\u56de\u306fRAG\u306e\u7cbe\u5ea6\u691c\u8a3c\u3001\u304a\u3088\u3073\u8003\u5bdf\u306f\u3057\u307e\u305b\u3093\u3002<\/p>\n<p data-line=\"4\" class=\"code-line\"><span class=\"embed-block zenn-embedded zenn-embedded-card\"><iframe id=\"zenn-embedded__3209918008968\" src=\"https:\/\/embed.zenn.studio\/card#zenn-embedded__3209918008968\" data-content=\"https%3A%2F%2Fgithub.com%2Fhashicorp%2Fterraform-provider-aws%2Freleases%2Ftag%2Fv6.24.0\" frameborder=\"0\" scrolling=\"no\" loading=\"lazy\"><\/iframe><\/span><a target=\"_blank\" href=\"https:\/\/github.com\/hashicorp\/terraform-provider-aws\/releases\/tag\/v6.24.0\" style=\"display:none\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/github.com\/hashicorp\/terraform-provider-aws\/releases\/tag\/v6.24.0<\/a><\/p>\n<h2 id=\"amazon-s3-vectors%E3%81%A8%E3%81%AF\" data-line=\"6\" class=\"code-line\">\n Amazon S3 Vectors\u3068\u306f<\/h2>\n<p data-line=\"7\" class=\"code-line\">Amazon S3 Vectors\u306f\u3001Amazon S3\u306b\u30d9\u30af\u30c8\u30eb\u691c\u7d22\u6a5f\u80fd\u3092\u30cd\u30a4\u30c6\u30a3\u30d6\u306b\u8ffd\u52a0\u3057\u305f\u65b0\u3057\u3044\u30b5\u30fc\u30d3\u30b9\u3067\u3059\u3002S3\u3092\u5358\u306a\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30b9\u30c8\u30ec\u30fc\u30b8\u3068\u3057\u3066\u4f7f\u3046\u3060\u3051\u3067\u306a\u304f\u3001\u30d9\u30af\u30c8\u30eb\u30c7\u30fc\u30bf\u3092\u76f4\u63a5\u683c\u7d0d\u30fb\u691c\u7d22\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n<p data-line=\"9\" class=\"code-line\">\u8a73\u3057\u304f\u306f\u30d7\u30ec\u30d3\u30e5\u30fc\u7248\u306e\u6642\u306b\u57f7\u7b46\u3057\u305f\u4ee5\u4e0b\u306e\u30d6\u30ed\u30b0\u3082\u53c2\u8003\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<br style=\"display:none\"\/><br \/>\n<span class=\"embed-block zenn-embedded zenn-embedded-card\"><iframe id=\"zenn-embedded__20bd18b0e7a7f\" src=\"https:\/\/embed.zenn.studio\/card#zenn-embedded__20bd18b0e7a7f\" data-content=\"https%3A%2F%2Fzenn.dev%2Ffusic%2Farticles%2F14a98be48d9266\" frameborder=\"0\" scrolling=\"no\" loading=\"lazy\"><\/iframe><\/span><a target=\"_blank\" href=\"https:\/\/zenn.dev\/fusic\/articles\/14a98be48d9266\" style=\"display:none\" target=\"_blank\">https:\/\/zenn.dev\/fusic\/articles\/14a98be48d9266<\/a><\/p>\n<h2 id=\"%E3%82%84%E3%82%8B%E3%81%93%E3%81%A8\" data-line=\"12\" class=\"code-line\">\n \u3084\u308b\u3053\u3068<\/h2>\n<p data-line=\"13\" class=\"code-line\">\u30d7\u30ec\u30d3\u30e5\u30fc\u7248\u306e\u6642\u306b\u57f7\u7b46\u3057\u305f\u30d6\u30ed\u30b0\u3067\u884c\u3063\u305f\u30de\u30cd\u30b3\u30f3\u307d\u3061\u307d\u3061\u4f5c\u696d\u3092Terraform\u3067\u5b9f\u88c5\u3057\u307e\u3059\u3002<br \/>S3 Vectors\u30d0\u30b1\u30c3\u30c8\u3068\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u4f5c\u6210\u3092Terraform\u3067\u30e2\u30b8\u30e5\u30fc\u30eb\u5316\u3057\u3001boto3\u306e<code>PutVectors API<\/code>\u3067\u30de\u30fc\u30af\u30c0\u30a6\u30f3\u3092\u30d9\u30af\u30c8\u30eb\u633f\u5165\u3001<code>QueryVectors API<\/code>\u3067\u30af\u30a8\u30ea\u306b\u8fd1\u3044\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u691c\u7d22\u3001\u691c\u7d22\u7d50\u679c\u3092\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3068\u3057\u3066Claude Sonnet 4\u3067\u56de\u7b54\u3092\u751f\u6210\u3055\u305b\u308bRAG\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<p data-line=\"16\" class=\"code-line\">\u30d9\u30af\u30c8\u30eb\u5316\u3059\u308b\u30c6\u30ad\u30b9\u30c8\u306f\u5f0a\u793e\u306e\u30cb\u30e5\u30fc\u30b9\u30da\u30fc\u30b8\u306e1\u3064\u304b\u3089\u30c6\u30ad\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002[<a target=\"_blank\" href=\"https:\/\/fusic.co.jp\/news\/971\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">\u3053\u3061\u3089<\/a>]\n<h2 id=\"%E5%AE%9F%E8%A3%85\" data-line=\"18\" class=\"code-line\">\n \u5b9f\u88c5<\/h2>\n<p data-line=\"19\" class=\"code-line\">\u4eca\u56de\u306f\u30d0\u30fc\u30b8\u30cb\u30a2\u5317\u90e8\u30ea\u30fc\u30b8\u30e7\u30f3\u3067\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002<\/p>\n<h3 id=\"%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E6%A7%8B%E9%80%A0\" data-line=\"20\" class=\"code-line\">\n \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u9020<\/h3>\n<p data-line=\"21\" class=\"code-line\">\u4ee5\u4e0b\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210\u3067\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"22\">root\/\n\u251c\u2500\u2500 .gitignore\n\u251c\u2500\u2500 .env.example               \n\u251c\u2500\u2500 README.md                   \n\u251c\u2500\u2500 pyproject.toml              # Python uv\u7ba1\u7406\n\u2502\n\u251c\u2500\u2500 modules\/                    \n\u2502   \u251c\u2500\u2500 s3-vectors\/             \n\u2502   \u2502   \u251c\u2500\u2500 main.tf             # Vector Bucket\u3001Vector Index\n\u2502   \u2502   \u251c\u2500\u2500 variables.tf        # \u30e2\u30b8\u30e5\u30fc\u30eb\u5909\u6570\n\u2502   \u2502   \u2514\u2500\u2500 outputs.tf          # \u30e2\u30b8\u30e5\u30fc\u30eb\u51fa\u529b\n\u2502   \u2502\n\u2502   \u2514\u2500\u2500 iam\/                    \n\u2502       \u251c\u2500\u2500 main.tf             # IAM\u30ed\u30fc\u30eb\u3001Bedrock\u30dd\u30ea\u30b7\u30fc\u3001S3\u30dd\u30ea\u30b7\u30fc\n\u2502       \u251c\u2500\u2500 variables.tf        # \u30e2\u30b8\u30e5\u30fc\u30eb\u5909\u6570\n\u2502       \u2514\u2500\u2500 outputs.tf          # \u30e2\u30b8\u30e5\u30fc\u30eb\u51fa\u529b\n\u2502\n\u251c\u2500\u2500 envs\/                       \n\u2502   \u2514\u2500\u2500 dev\/                    \n\u2502       \u251c\u2500\u2500 main.tf             # \u30e2\u30b8\u30e5\u30fc\u30eb\u547c\u3073\u51fa\u3057\n\u2502       \u251c\u2500\u2500 variables.tf        # \u74b0\u5883\u5909\u6570\u5b9a\u7fa9\n\u2502       \u251c\u2500\u2500 outputs.tf          # \u74b0\u5883\u51fa\u529b\u5b9a\u7fa9\n\u2502       \u251c\u2500\u2500 providers.tf        # \u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u8a2d\u5b9a\n\u2502       \u2514\u2500\u2500 terraform.tfvars    # \u74b0\u5883\u5909\u6570\u5024\n\u2502\n\u251c\u2500\u2500 scripts\/                    \n\u2502   \u251c\u2500\u2500 put_vectors.py          # PutVectors API - \u30d9\u30af\u30c8\u30eb\u5316\u3057\u305f\u3082\u306e\u3092\u633f\u5165\n\u2502   \u2514\u2500\u2500 query_vectors.py        # RAG\u5b9f\u884c\n\u2502\n\u2514\u2500\u2500 sample-docs\/                # \u30d9\u30af\u30c8\u30eb\u5316\u3059\u308b\u30b5\u30f3\u30d7\u30eb\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\n    \u2514\u2500\u2500 fusic-brand-slogan.md\n<\/code><\/pre>\n<\/div>\n<h3 id=\"1.-terraform%E3%82%B3%E3%83%BC%E3%83%89\" data-line=\"58\" class=\"code-line\">\n 1. Terraform\u30b3\u30fc\u30c9<\/h3>\n<h4 id=\"1.1-s3-vectors%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB\" data-line=\"60\" class=\"code-line\">\n 1.1 S3 Vectors\u30e2\u30b8\u30e5\u30fc\u30eb<\/h4>\n<p data-line=\"61\" class=\"code-line\">S3 Vectors\u306f \u30d9\u30af\u30c8\u30eb\u30d0\u30b1\u30c3\u30c8\u3068\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e2\u3064\u306e\u30ea\u30bd\u30fc\u30b9\u3067\u69cb\u6210\u3055\u308c\u307e\u3059\u3002<\/p>\n<p data-line=\"63\" class=\"code-line\">\u30d9\u30af\u30c8\u30eb\u30d0\u30b1\u30c3\u30c8\u3068\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u4f5c\u6210\u3059\u308b\u30e1\u30a4\u30f3\u30d5\u30a1\u30a4\u30eb<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">modules\/s3-vectors\/main.tf<\/span><\/p>\n<pre class=\"language-hcl\"><code class=\"language-hcl code-line\" data-line=\"64\">\n<span class=\"token keyword\">resource <span class=\"token type variable\">\"aws_s3vectors_vector_bucket\"<\/span><\/span> <span class=\"token string\">\"this\"<\/span> <span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">vector_bucket_name<\/span> <span class=\"token punctuation\">=<\/span> var.vector_bucket_name\n\n  <span class=\"token keyword\">encryption_configuration<\/span> <span class=\"token punctuation\">{<\/span>\n    <span class=\"token property\">sse_type<\/span> <span class=\"token punctuation\">=<\/span> var.sse_type\n  <span class=\"token punctuation\">}<\/span>\n\n  <span class=\"token property\">force_destroy<\/span> <span class=\"token punctuation\">=<\/span> var.force_destroy\n\n  <span class=\"token property\">tags<\/span> <span class=\"token punctuation\">=<\/span> merge(\n    var.tags,\n    <span class=\"token punctuation\">{<\/span>\n      <span class=\"token property\">Name<\/span>        <span class=\"token punctuation\">=<\/span> var.vector_bucket_name\n      <span class=\"token property\">Environment<\/span> <span class=\"token punctuation\">=<\/span> var.environment\n    <span class=\"token punctuation\">}<\/span>\n  )\n<span class=\"token punctuation\">}<\/span>\n\n\n<span class=\"token keyword\">resource <span class=\"token type variable\">\"aws_s3vectors_index\"<\/span><\/span> <span class=\"token string\">\"this\"<\/span> <span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">index_name<\/span>         <span class=\"token punctuation\">=<\/span> var.index_name\n  <span class=\"token property\">vector_bucket_name<\/span> <span class=\"token punctuation\">=<\/span> aws_s3vectors_vector_bucket.this.vector_bucket_name\n\n  <span class=\"token property\">data_type<\/span>       <span class=\"token punctuation\">=<\/span> var.data_type\n  <span class=\"token property\">dimension<\/span>       <span class=\"token punctuation\">=<\/span> var.dimension\n  <span class=\"token property\">distance_metric<\/span> <span class=\"token punctuation\">=<\/span> var.distance_metric\n\n  <span class=\"token property\">tags<\/span> <span class=\"token punctuation\">=<\/span> merge(\n    var.tags,\n    <span class=\"token punctuation\">{<\/span>\n      <span class=\"token property\">Name<\/span>        <span class=\"token punctuation\">=<\/span> var.index_name\n      <span class=\"token property\">Environment<\/span> <span class=\"token punctuation\">=<\/span> var.environment\n    <span class=\"token punctuation\">}<\/span>\n  )\n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<ul data-line=\"103\" class=\"code-line\">\n<li data-line=\"103\" class=\"code-line\">\n<code>aws_s3vectors_vector_bucket<\/code>: \u30d9\u30af\u30c8\u30eb\u30c7\u30fc\u30bf\u3092\u683c\u7d0d\u3059\u308b\u30b3\u30f3\u30c6\u30ca\u3002\u901a\u5e38\u306eS3\u30d0\u30b1\u30c3\u30c8\u3068\u306f\u7570\u306a\u308a\u3001\u30d9\u30af\u30c8\u30eb\u691c\u7d22\u5c02\u7528\u306e\u30b9\u30c8\u30ec\u30fc\u30b8\u3068\u3057\u3066\u6a5f\u80fd\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\n<p data-line=\"106\" class=\"code-line\">\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u5165\u529b\u5909\u6570\u3092\u5b9a\u7fa9<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">modules\/s3-vectors\/variables.tf<\/span><\/p>\n<pre class=\"language-hcl\"><code class=\"language-hcl code-line\" data-line=\"107\"><span class=\"token keyword\">variable<span class=\"token type variable\"> \"vector_bucket_name\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"S3 Vectors\u30d0\u30b1\u30c3\u30c8\u540d\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> string\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"index_name\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u30d9\u30af\u30c8\u30eb\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u540d\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> string\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"environment\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u74b0\u5883\u540d\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> string\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"force_destroy\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u30d0\u30b1\u30c3\u30c8\u524a\u9664\u6642\u306b\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3068\u30d9\u30af\u30c8\u30eb\u3082\u5f37\u5236\u524a\u9664\u3059\u308b\u304b\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> bool\n  <span class=\"token property\">default<\/span>     <span class=\"token punctuation\">=<\/span> <span class=\"token boolean\">false<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"sse_type\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u30b5\u30fc\u30d0\u30fc\u30b5\u30a4\u30c9\u6697\u53f7\u5316\u30bf\u30a4\u30d7 (AES256 or aws:kms)\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> string\n  <span class=\"token property\">default<\/span>     <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"AES256\"<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"data_type\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u30d9\u30af\u30c8\u30eb\u306e\u30c7\u30fc\u30bf\u30bf\u30a4\u30d7\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> string\n  <span class=\"token property\">default<\/span>     <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"float32\"<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"dimension\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u30d9\u30af\u30c8\u30eb\u6b21\u5143\u6570\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> number\n  <span class=\"token property\">default<\/span>     <span class=\"token punctuation\">=<\/span> <span class=\"token number\">1024<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"distance_metric\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u985e\u4f3c\u5ea6\u691c\u7d22\u306e\u8ddd\u96e2\u30e1\u30c8\u30ea\u30c3\u30af (cosine or euclidean)\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> string\n  <span class=\"token property\">default<\/span>     <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"cosine\"<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"tags\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u30ea\u30bd\u30fc\u30b9\u306b\u4ed8\u4e0e\u3059\u308b\u30bf\u30b0\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> map(string)\n  <span class=\"token property\">default<\/span>     <span class=\"token punctuation\">=<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<p data-line=\"160\" class=\"code-line\">\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u51fa\u529b\u5024\u3092\u5b9a\u7fa9<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">modules\/s3-vectors\/outputs.tf<\/span><\/p>\n<pre class=\"language-hcl\"><code class=\"language-hcl code-line\" data-line=\"161\">\n\n<span class=\"token keyword\">output<span class=\"token type variable\"> \"vector_bucket_name\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"S3 Vectors\u30d0\u30b1\u30c3\u30c8\u540d\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> aws_s3vectors_vector_bucket.this.vector_bucket_name\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">output<span class=\"token type variable\"> \"vector_bucket_arn\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"S3 Vectors\u30d0\u30b1\u30c3\u30c8ARN\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> aws_s3vectors_vector_bucket.this.vector_bucket_arn\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">output<span class=\"token type variable\"> \"index_name\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u30d9\u30af\u30c8\u30eb\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u540d\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> aws_s3vectors_index.this.index_name\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">output<span class=\"token type variable\"> \"index_arn\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u30d9\u30af\u30c8\u30eb\u30a4\u30f3\u30c7\u30c3\u30af\u30b9ARN\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> aws_s3vectors_index.this.index_arn\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">output<span class=\"token type variable\"> \"dimension\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u30d9\u30af\u30c8\u30eb\u6b21\u5143\u6570\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> aws_s3vectors_index.this.dimension\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">output<span class=\"token type variable\"> \"distance_metric\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u8ddd\u96e2\u30e1\u30c8\u30ea\u30c3\u30af\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> aws_s3vectors_index.this.distance_metric\n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<hr data-line=\"195\" class=\"code-line\"\/>\n<h4 id=\"1.2-iam%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB\" data-line=\"197\" class=\"code-line\">\n 1.2 IAM\u30e2\u30b8\u30e5\u30fc\u30eb<\/h4>\n<p data-line=\"198\" class=\"code-line\">Bedrock\u30e2\u30c7\u30eb\u547c\u3073\u51fa\u3057\u7528\u306eIAM\u30ed\u30fc\u30eb\u3068\u30dd\u30ea\u30b7\u30fc\u3092\u4f5c\u6210<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">modules\/iam\/main.tf<\/span><\/p>\n<pre class=\"language-hcl\"><code class=\"language-hcl code-line\" data-line=\"199\">\n\n<span class=\"token keyword\">resource <span class=\"token type variable\">\"aws_iam_role\"<\/span><\/span> <span class=\"token string\">\"bedrock_access\"<\/span> <span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">name<\/span> <span class=\"token punctuation\">=<\/span> var.role_name\n\n  <span class=\"token property\">assume_role_policy<\/span> <span class=\"token punctuation\">=<\/span> jsonencode(<span class=\"token punctuation\">{<\/span>\n    <span class=\"token property\">Version<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"2012-10-17\"<\/span>\n    <span class=\"token property\">Statement<\/span> <span class=\"token punctuation\">=<\/span> concat(\n      <span class=\"token punctuation\">[<\/span>\n        <span class=\"token punctuation\">{<\/span>\n          <span class=\"token property\">Effect<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"Allow\"<\/span>\n          <span class=\"token property\">Principal<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token punctuation\">{<\/span>\n            <span class=\"token property\">Service<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"bedrock.amazonaws.com\"<\/span>\n          <span class=\"token punctuation\">}<\/span>\n          <span class=\"token property\">Action<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"sts:AssumeRole\"<\/span>\n        <span class=\"token punctuation\">}<\/span>\n      <span class=\"token punctuation\">]<\/span>,\n      var.allow_account_assume ? <span class=\"token punctuation\">[<\/span>\n        <span class=\"token punctuation\">{<\/span>\n          <span class=\"token property\">Effect<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"Allow\"<\/span>\n          <span class=\"token property\">Principal<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token punctuation\">{<\/span>\n            <span class=\"token property\">AWS<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"arn:aws:iam::<span class=\"token interpolation\"><span class=\"token punctuation\">$<\/span><span class=\"token punctuation\">{<\/span><span class=\"token keyword\">var<\/span><span class=\"token punctuation\">.<\/span><span class=\"token type variable\">account_id<\/span><span class=\"token punctuation\">}<\/span><\/span>:root\"<\/span>\n          <span class=\"token punctuation\">}<\/span>\n          <span class=\"token property\">Action<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"sts:AssumeRole\"<\/span>\n        <span class=\"token punctuation\">}<\/span>\n      <span class=\"token punctuation\">]<\/span> : <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span>\n    )\n  <span class=\"token punctuation\">}<\/span>)\n\n  <span class=\"token property\">tags<\/span> <span class=\"token punctuation\">=<\/span> var.tags\n<span class=\"token punctuation\">}<\/span>\n\n\n<span class=\"token keyword\">resource <span class=\"token type variable\">\"aws_iam_role_policy\"<\/span><\/span> <span class=\"token string\">\"bedrock_invoke\"<\/span> <span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">name<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"bedrock-invoke-policy\"<\/span>\n  <span class=\"token property\">role<\/span> <span class=\"token punctuation\">=<\/span> aws_iam_role.bedrock_access.id\n\n  <span class=\"token property\">policy<\/span> <span class=\"token punctuation\">=<\/span> jsonencode(<span class=\"token punctuation\">{<\/span>\n    <span class=\"token property\">Version<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"2012-10-17\"<\/span>\n    <span class=\"token property\">Statement<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token punctuation\">[<\/span>\n      <span class=\"token punctuation\">{<\/span>\n        <span class=\"token property\">Effect<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"Allow\"<\/span>\n        <span class=\"token property\">Action<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token punctuation\">[<\/span>\n          <span class=\"token string\">\"bedrock:InvokeModel\"<\/span>,\n          <span class=\"token string\">\"bedrock:InvokeModelWithResponseStream\"<\/span>\n        <span class=\"token punctuation\">]<\/span>\n        <span class=\"token property\">Resource<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token punctuation\">[<\/span>\n          for model_id in var.bedrock_model_ids :\n          <span class=\"token string\">\"arn:aws:bedrock:<span class=\"token interpolation\"><span class=\"token punctuation\">$<\/span><span class=\"token punctuation\">{<\/span><span class=\"token keyword\">var<\/span><span class=\"token punctuation\">.<\/span><span class=\"token type variable\">region<\/span><span class=\"token punctuation\">}<\/span><\/span>::foundation-model\/<span class=\"token interpolation\"><span class=\"token punctuation\">$<\/span><span class=\"token punctuation\">{<\/span>model_id<span class=\"token punctuation\">}<\/span><\/span>\"<\/span>\n        <span class=\"token punctuation\">]<\/span>\n      <span class=\"token punctuation\">}<\/span>\n    <span class=\"token punctuation\">]<\/span>\n  <span class=\"token punctuation\">}<\/span>)\n<span class=\"token punctuation\">}<\/span>\n\n\n<span class=\"token keyword\">resource <span class=\"token type variable\">\"aws_iam_role_policy\"<\/span><\/span> <span class=\"token string\">\"s3_access\"<\/span> <span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">count<\/span> <span class=\"token punctuation\">=<\/span> var.enable_s3_access ? <span class=\"token number\">1<\/span> : <span class=\"token number\">0<\/span>\n\n  <span class=\"token property\">name<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"s3-bucket-access-policy\"<\/span>\n  <span class=\"token property\">role<\/span> <span class=\"token punctuation\">=<\/span> aws_iam_role.bedrock_access.id\n\n  <span class=\"token property\">policy<\/span> <span class=\"token punctuation\">=<\/span> jsonencode(<span class=\"token punctuation\">{<\/span>\n    <span class=\"token property\">Version<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"2012-10-17\"<\/span>\n    <span class=\"token property\">Statement<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token punctuation\">[<\/span>\n      <span class=\"token punctuation\">{<\/span>\n        <span class=\"token property\">Effect<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"Allow\"<\/span>\n        <span class=\"token property\">Action<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token punctuation\">[<\/span>\n          <span class=\"token string\">\"s3:PutObject\"<\/span>,\n          <span class=\"token string\">\"s3:GetObject\"<\/span>,\n          <span class=\"token string\">\"s3:DeleteObject\"<\/span>,\n          <span class=\"token string\">\"s3:ListBucket\"<\/span>\n        <span class=\"token punctuation\">]<\/span>\n        <span class=\"token property\">Resource<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token punctuation\">[<\/span>\n          var.s3_bucket_arn,\n          <span class=\"token string\">\"<span class=\"token interpolation\"><span class=\"token punctuation\">$<\/span><span class=\"token punctuation\">{<\/span><span class=\"token keyword\">var<\/span><span class=\"token punctuation\">.<\/span><span class=\"token type variable\">s3_bucket_arn<\/span><span class=\"token punctuation\">}<\/span><\/span>\/*\"<\/span>\n        <span class=\"token punctuation\">]<\/span>\n      <span class=\"token punctuation\">}<\/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<p data-line=\"283\" class=\"code-line\"><strong>\u30dd\u30a4\u30f3\u30c8:<\/strong><\/p>\n<ul data-line=\"284\" class=\"code-line\">\n<li data-line=\"284\" class=\"code-line\">\n<code>bedrock:InvokeModel<\/code>: Bedrock\u30e2\u30c7\u30eb\u3092\u547c\u3073\u51fa\u3059\u305f\u3081\u306e\u6a29\u9650<\/li>\n<li data-line=\"285\" class=\"code-line\">\n<code>allow_account_assume<\/code>: \u30a2\u30ab\u30a6\u30f3\u30c8\u30eb\u30fc\u30c8\u304b\u3089\u306eAssumeRole\u3092\u8a31\u53ef\u3059\u308b\u304b\u3069\u3046\u304b<\/li>\n<\/ul>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">modules\/iam\/variables.tf<\/span><\/p>\n<pre class=\"language-hcl\"><code class=\"language-hcl code-line\" data-line=\"287\"><span class=\"token keyword\">variable<span class=\"token type variable\"> \"role_name\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"IAM\u30ed\u30fc\u30eb\u540d\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> string\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"account_id\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"AWS\u30a2\u30ab\u30a6\u30f3\u30c8ID\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> string\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"region\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"AWS\u30ea\u30fc\u30b8\u30e7\u30f3\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> string\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"allow_account_assume\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u30a2\u30ab\u30a6\u30f3\u30c8\u30eb\u30fc\u30c8\u304b\u3089\u306eAssumeRole\u3092\u8a31\u53ef\u3059\u308b\u304b\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> bool\n  <span class=\"token property\">default<\/span>     <span class=\"token punctuation\">=<\/span> <span class=\"token boolean\">true<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"bedrock_model_ids\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"Bedrock\u30e2\u30c7\u30eb\u306e\u30ea\u30b9\u30c8\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> list(string)\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"s3_bucket_arn\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u30a2\u30af\u30bb\u30b9\u3092\u8a31\u53ef\u3059\u308bS3\u30d0\u30b1\u30c3\u30c8\u306eARN\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> string\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"enable_s3_access\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"S3\u30a2\u30af\u30bb\u30b9\u30dd\u30ea\u30b7\u30fc\u3092\u6709\u52b9\u306b\u3059\u308b\u304b\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> bool\n  <span class=\"token property\">default<\/span>     <span class=\"token punctuation\">=<\/span> <span class=\"token boolean\">true<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"tags\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u30ea\u30bd\u30fc\u30b9\u306b\u4ed8\u4e0e\u3059\u308b\u30bf\u30b0\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> map(string)\n  <span class=\"token property\">default<\/span>     <span class=\"token punctuation\">=<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">modules\/iam\/outputs.tf<\/span><\/p>\n<pre class=\"language-hcl\"><code class=\"language-hcl code-line\" data-line=\"332\"><span class=\"token keyword\">output<span class=\"token type variable\"> \"role_arn\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"IAM\u30ed\u30fc\u30ebARN\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> aws_iam_role.bedrock_access.arn\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">output<span class=\"token type variable\"> \"role_name\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"IAM\u30ed\u30fc\u30eb\u540d\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> aws_iam_role.bedrock_access.name\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">output<span class=\"token type variable\"> \"role_id\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"IAM\u30ed\u30fc\u30ebID\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> aws_iam_role.bedrock_access.id\n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<hr data-line=\"349\" class=\"code-line\"\/>\n<h4 id=\"1.3-%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A\" data-line=\"351\" class=\"code-line\">\n 1.3 \u958b\u767a\u74b0\u5883\u8a2d\u5b9a<\/h4>\n<p data-line=\"353\" class=\"code-line\">\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u547c\u3073\u51fa\u3057\u3066\u5b9f\u969b\u306b\u30ea\u30bd\u30fc\u30b9\u3092\u4f5c\u6210\u3059\u308b\u74b0\u5883\u8a2d\u5b9a<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">envs\/dev\/main.tf<\/span><\/p>\n<pre class=\"language-hcl\"><code class=\"language-hcl code-line\" data-line=\"354\"><span class=\"token keyword\">data <span class=\"token type variable\">\"aws_caller_identity\"<\/span><\/span> <span class=\"token string\">\"current\"<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">locals<\/span> <span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">vector_bucket_name<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"<span class=\"token interpolation\"><span class=\"token punctuation\">$<\/span><span class=\"token punctuation\">{<\/span><span class=\"token keyword\">var<\/span><span class=\"token punctuation\">.<\/span><span class=\"token type variable\">project_name<\/span><span class=\"token punctuation\">}<\/span><\/span>-<span class=\"token interpolation\"><span class=\"token punctuation\">$<\/span><span class=\"token punctuation\">{<\/span><span class=\"token keyword\">var<\/span><span class=\"token punctuation\">.<\/span><span class=\"token type variable\">environment<\/span><span class=\"token punctuation\">}<\/span><\/span>-vectors\"<\/span>\n  <span class=\"token property\">vector_index_name<\/span>  <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"markdown-embeddings\"<\/span>\n  <span class=\"token property\">iam_role_name<\/span>      <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"<span class=\"token interpolation\"><span class=\"token punctuation\">$<\/span><span class=\"token punctuation\">{<\/span><span class=\"token keyword\">var<\/span><span class=\"token punctuation\">.<\/span><span class=\"token type variable\">project_name<\/span><span class=\"token punctuation\">}<\/span><\/span>-<span class=\"token interpolation\"><span class=\"token punctuation\">$<\/span><span class=\"token punctuation\">{<\/span><span class=\"token keyword\">var<\/span><span class=\"token punctuation\">.<\/span><span class=\"token type variable\">environment<\/span><span class=\"token punctuation\">}<\/span><\/span>-bedrock-access\"<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n\n<span class=\"token keyword\">module<span class=\"token type variable\"> \"s3_vectors\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">source<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"..\/..\/modules\/s3-vectors\"<\/span>\n\n  <span class=\"token property\">vector_bucket_name<\/span> <span class=\"token punctuation\">=<\/span> local.vector_bucket_name\n  <span class=\"token property\">index_name<\/span>         <span class=\"token punctuation\">=<\/span> local.vector_index_name\n  <span class=\"token property\">environment<\/span>        <span class=\"token punctuation\">=<\/span> var.environment\n  <span class=\"token property\">force_destroy<\/span>      <span class=\"token punctuation\">=<\/span> <span class=\"token boolean\">true<\/span> \n  <span class=\"token property\">sse_type<\/span>           <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"AES256\"<\/span>\n  <span class=\"token property\">dimension<\/span>          <span class=\"token punctuation\">=<\/span> var.vector_dimension\n  <span class=\"token property\">distance_metric<\/span>    <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"cosine\"<\/span>\n  <span class=\"token property\">tags<\/span>               <span class=\"token punctuation\">=<\/span> var.tags\n<span class=\"token punctuation\">}<\/span>\n\n\n<span class=\"token keyword\">module<span class=\"token type variable\"> \"iam\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">source<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"..\/..\/modules\/iam\"<\/span>\n\n  <span class=\"token property\">role_name<\/span>            <span class=\"token punctuation\">=<\/span> local.iam_role_name\n  <span class=\"token property\">account_id<\/span>           <span class=\"token punctuation\">=<\/span> data.aws_caller_identity.current.account_id\n  <span class=\"token property\">region<\/span>               <span class=\"token punctuation\">=<\/span> var.region\n  <span class=\"token property\">allow_account_assume<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token boolean\">true<\/span>\n  <span class=\"token property\">s3_bucket_arn<\/span>        <span class=\"token punctuation\">=<\/span> module.s3_vectors.vector_bucket_arn\n  <span class=\"token property\">enable_s3_access<\/span>     <span class=\"token punctuation\">=<\/span> <span class=\"token boolean\">true<\/span>\n\n  <span class=\"token property\">bedrock_model_ids<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token punctuation\">[<\/span>\n    var.bedrock_embedding_model_id,\n    var.bedrock_llm_model_id\n  <span class=\"token punctuation\">]<\/span>\n\n  <span class=\"token property\">tags<\/span> <span class=\"token punctuation\">=<\/span> var.tags\n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<ul data-line=\"396\" class=\"code-line\">\n<li data-line=\"396\" class=\"code-line\">\n<code>force_destroy = true<\/code>: dev\u74b0\u5883\u3067\u306f<code>terraform destroy<\/code>\u6642\u306b\u30c7\u30fc\u30bf\u3082\u524a\u9664\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\n<aside class=\"msg alert\"><span class=\"msg-symbol\">!<\/span><\/p>\n<div class=\"msg-content\">\n<p data-line=\"398\" class=\"code-line\">\u672c\u756a\u74b0\u5883\u3084\u30c7\u30fc\u30bf\u3092\u4fdd\u8b77\u3057\u305f\u3044\u5834\u5408\u306f<code>false<\/code>\u306b\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<\/div>\n<\/aside>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">envs\/dev\/variables.tf<\/span><\/p>\n<pre class=\"language-hcl\"><code class=\"language-hcl code-line\" data-line=\"401\"><span class=\"token keyword\">variable<span class=\"token type variable\"> \"project_name\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> string\n  <span class=\"token property\">default<\/span>     <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"s3vectors-rag\"<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"environment\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u74b0\u5883\u540d\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> string\n  <span class=\"token property\">default<\/span>     <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"dev\"<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"region\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"AWS\u30ea\u30fc\u30b8\u30e7\u30f3\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> string\n  <span class=\"token property\">default<\/span>     <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"us-east-1\"<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"vector_dimension\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u30d9\u30af\u30c8\u30eb\u6b21\u5143\u6570\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> number\n  <span class=\"token property\">default<\/span>     <span class=\"token punctuation\">=<\/span> <span class=\"token number\">1024<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"bedrock_embedding_model_id\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"Bedrock\u57cb\u3081\u8fbc\u307f\u30e2\u30c7\u30ebID\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> string\n  <span class=\"token property\">default<\/span>     <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"amazon.titan-embed-text-v2:0\"<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"bedrock_llm_model_id\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"Bedrock LLM\u30e2\u30c7\u30ebID\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> string\n  <span class=\"token property\">default<\/span>     <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"anthropic.claude-sonnet-4-20250514-v1:0\"<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">variable<span class=\"token type variable\"> \"tags\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u5171\u901a\u30bf\u30b0\"<\/span>\n  <span class=\"token property\">type<\/span>        <span class=\"token punctuation\">=<\/span> map(string)\n  <span class=\"token property\">default<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token punctuation\">{<\/span>\n    <span class=\"token property\">ManagedBy<\/span>   <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"Terraform\"<\/span>\n    <span class=\"token property\">Project<\/span>     <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"S3VectorsRAG\"<\/span>\n    <span class=\"token property\">Environment<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"dev\"<\/span>\n  <span class=\"token punctuation\">}<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">envs\/dev\/outputs.tf<\/span><\/p>\n<pre class=\"language-hcl\"><code class=\"language-hcl code-line\" data-line=\"451\"><span class=\"token keyword\">output<span class=\"token type variable\"> \"vector_bucket_name\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"S3 Vectors\u30d0\u30b1\u30c3\u30c8\u540d\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> module.s3_vectors.vector_bucket_name\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">output<span class=\"token type variable\"> \"vector_bucket_arn\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"S3 Vectors\u30d0\u30b1\u30c3\u30c8ARN\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> module.s3_vectors.vector_bucket_arn\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">output<span class=\"token type variable\"> \"vector_index_name\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u30d9\u30af\u30c8\u30eb\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u540d\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> module.s3_vectors.index_name\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">output<span class=\"token type variable\"> \"vector_index_arn\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u30d9\u30af\u30c8\u30eb\u30a4\u30f3\u30c7\u30c3\u30af\u30b9ARN\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> module.s3_vectors.index_arn\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">output<span class=\"token type variable\"> \"vector_dimension\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u30d9\u30af\u30c8\u30eb\u6b21\u5143\u6570\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> module.s3_vectors.dimension\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">output<span class=\"token type variable\"> \"distance_metric\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u8ddd\u96e2\u30e1\u30c8\u30ea\u30c3\u30af\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> module.s3_vectors.distance_metric\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">output<span class=\"token type variable\"> \"bedrock_role_arn\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"Bedrock\u30a2\u30af\u30bb\u30b9\u7528IAM\u30ed\u30fc\u30ebARN\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> module.iam.role_arn\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">output<span class=\"token type variable\"> \"bedrock_role_name\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"Bedrock\u30a2\u30af\u30bb\u30b9\u7528IAM\u30ed\u30fc\u30eb\u540d\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> module.iam.role_name\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">output<span class=\"token type variable\"> \"bedrock_embedding_model_id\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"\u57cb\u3081\u8fbc\u307f\u30e2\u30c7\u30ebID\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> var.bedrock_embedding_model_id\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">output<span class=\"token type variable\"> \"bedrock_llm_model_id\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"LLM\u30e2\u30c7\u30ebID\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> var.bedrock_llm_model_id\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">output<span class=\"token type variable\"> \"aws_account_id\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"AWS\u30a2\u30ab\u30a6\u30f3\u30c8ID\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> data.aws_caller_identity.current.account_id\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">output<span class=\"token type variable\"> \"aws_region\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"AWS\u30ea\u30fc\u30b8\u30e7\u30f3\"<\/span>\n  <span class=\"token property\">value<\/span>       <span class=\"token punctuation\">=<\/span> var.region\n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">envs\/dev\/providers.tf<\/span><\/p>\n<pre class=\"language-hcl\"><code class=\"language-hcl code-line\" data-line=\"513\"><span class=\"token keyword\">terraform<\/span> <span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">required_version<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"&gt;= 1.0\"<\/span>\n\n  <span class=\"token keyword\">required_providers<\/span> <span class=\"token punctuation\">{<\/span>\n    <span class=\"token property\">aws<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token punctuation\">{<\/span>\n      <span class=\"token property\">source<\/span>  <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"hashicorp\/aws\"<\/span>\n      <span class=\"token property\">version<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"~&gt; 6.24\"<\/span>\n    <span class=\"token punctuation\">}<\/span>\n  <span class=\"token punctuation\">}<\/span>\n<span class=\"token punctuation\">}<\/span>\n\n<span class=\"token keyword\">provider<span class=\"token type variable\"> \"aws\" <\/span><\/span><span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">region<\/span> <span class=\"token punctuation\">=<\/span> var.region\n\n  <span class=\"token keyword\">default_tags<\/span> <span class=\"token punctuation\">{<\/span>\n    <span class=\"token property\">tags<\/span> <span class=\"token punctuation\">=<\/span> var.tags\n  <span class=\"token punctuation\">}<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<p data-line=\"534\" class=\"code-line\"><strong>\u30dd\u30a4\u30f3\u30c8:<\/strong><\/p>\n<ul data-line=\"535\" class=\"code-line\">\n<li data-line=\"535\" class=\"code-line\">\n<code>aws provider version ~&gt; 6.24<\/code>: S3 Vectors\u30ea\u30bd\u30fc\u30b9\u306f6.24\u4ee5\u964d\u3067\u5229\u7528\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059<\/li>\n<\/ul>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">envs\/dev\/terraform.tfvars<\/span><\/p>\n<pre class=\"language-hcl\"><code class=\"language-hcl code-line\" data-line=\"537\">\n\n<span class=\"token property\">project_name<\/span>               <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"s3vectors-rag\"<\/span>\n<span class=\"token property\">environment<\/span>                <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"dev\"<\/span>\n<span class=\"token property\">region<\/span>                     <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"us-east-1\"<\/span>\n<span class=\"token property\">vector_dimension<\/span>           <span class=\"token punctuation\">=<\/span> <span class=\"token number\">1024<\/span>\n<span class=\"token property\">bedrock_embedding_model_id<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"amazon.titan-embed-text-v2:0\"<\/span>\n<span class=\"token property\">bedrock_llm_model_id<\/span>       <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"anthropic.claude-sonnet-4-20250514-v1:0\"<\/span>\n\n<span class=\"token property\">tags<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token punctuation\">{<\/span>\n  <span class=\"token property\">ManagedBy<\/span>   <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"Terraform\"<\/span>\n  <span class=\"token property\">Project<\/span>     <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"S3VectorsRAG\"<\/span>\n  <span class=\"token property\">Environment<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"dev\"<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<\/div>\n<hr data-line=\"553\" class=\"code-line\"\/>\n<h4 id=\"1.4-terraform%E3%81%AE%E5%AE%9F%E8%A1%8C\" data-line=\"555\" class=\"code-line\">\n 1.4 Terraform\u306e\u5b9f\u884c<\/h4>\n<div class=\"code-block-container\">\n<pre class=\"language-bash\"><code class=\"language-bash code-line\" data-line=\"557\"><span class=\"token builtin class-name\">cd<\/span> envs\/dev\nterraform init\nterraform plan\nterraform apply\n<\/code><\/pre>\n<\/div>\n<p data-line=\"564\" class=\"code-line\">\u4f5c\u6210\u3055\u308c\u308b\u30ea\u30bd\u30fc\u30b9:<\/p>\n<ul data-line=\"565\" class=\"code-line\">\n<li data-line=\"565\" class=\"code-line\">S3 Vectors\u30d0\u30b1\u30c3\u30c8: <code>s3vectors-rag-dev-vectors<\/code>\n<\/li>\n<li data-line=\"566\" class=\"code-line\">\u30d9\u30af\u30c8\u30eb\u30a4\u30f3\u30c7\u30c3\u30af\u30b9: <code>markdown-embeddings<\/code>\n<\/li>\n<li data-line=\"567\" class=\"code-line\">Bedrock\u30a2\u30af\u30bb\u30b9\u7528IAM\u30ed\u30fc\u30eb<\/li>\n<\/ul>\n<hr data-line=\"569\" class=\"code-line\"\/>\n<h3 id=\"2.-python%E5%91%A8%E3%82%8A\" data-line=\"571\" class=\"code-line\">\n 2. Python\u5468\u308a<\/h3>\n<h4 id=\"2.1-pyproject.toml\" data-line=\"573\" class=\"code-line\">\n 2.1 pyproject.toml<\/h4>\n<p data-line=\"575\" class=\"code-line\">\u4f9d\u5b58\u95a2\u4fc2\u3092\u5b9a\u7fa9<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">pyproject.toml<\/span><\/p>\n<pre class=\"language-toml\"><code class=\"language-toml code-line\" data-line=\"576\"><span class=\"token punctuation\">[<\/span><span class=\"token table class-name\">project<\/span><span class=\"token punctuation\">]<\/span>\n<span class=\"token key property\">name<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"s3-vectors-rag-automation\"<\/span>\n<span class=\"token key property\">version<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"1.0.0\"<\/span>\n<span class=\"token key property\">description<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"Terraform-based S3 Vectors RAG system with automated markdown ingestion and Claude Sonnet 4 integration\"<\/span>\n<span class=\"token key property\">requires-python<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"&gt;=3.11\"<\/span>\n<span class=\"token key property\">dependencies<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token punctuation\">[<\/span>\n    <span class=\"token string\">\"boto3&gt;=1.35.0\"<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token string\">\"python-dotenv&gt;=1.0.0\"<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token string\">\"pydantic&gt;=2.0.0\"<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token string\">\"tenacity&gt;=8.0.0\"<\/span><span class=\"token punctuation\">,<\/span>\n<span class=\"token punctuation\">]<\/span>\n\n<span class=\"token punctuation\">[<\/span><span class=\"token table class-name\">tool.setuptools<\/span><span class=\"token punctuation\">]<\/span>\n<span class=\"token key property\">packages<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token string\">\"scripts\"<\/span><span class=\"token punctuation\">]<\/span>\n<span class=\"token key property\">py-modules<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span>\n\n<span class=\"token punctuation\">[<\/span><span class=\"token table class-name\">project.optional-dependencies<\/span><span class=\"token punctuation\">]<\/span>\n<span class=\"token key property\">dev<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token punctuation\">[<\/span>\n    <span class=\"token string\">\"ruff&gt;=0.1.0\"<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token string\">\"mypy&gt;=1.0.0\"<\/span><span class=\"token punctuation\">,<\/span>\n<span class=\"token punctuation\">]<\/span>\n\n<span class=\"token punctuation\">[<\/span><span class=\"token table class-name\">tool.uv<\/span><span class=\"token punctuation\">]<\/span>\n<span class=\"token key property\">dev-dependencies<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span>\n\n<span class=\"token punctuation\">[<\/span><span class=\"token table class-name\">tool.ruff<\/span><span class=\"token punctuation\">]<\/span>\n<span class=\"token key property\">line-length<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token number\">100<\/span>\n<span class=\"token key property\">target-version<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"py311\"<\/span>\n\n<span class=\"token punctuation\">[<\/span><span class=\"token table class-name\">tool.mypy<\/span><span class=\"token punctuation\">]<\/span>\n<span class=\"token key property\">python_version<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token string\">\"3.11\"<\/span>\n<span class=\"token key property\">warn_return_any<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token boolean\">true<\/span>\n<span class=\"token key property\">warn_unused_configs<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token boolean\">true<\/span>\n<span class=\"token key property\">disallow_untyped_defs<\/span> <span class=\"token punctuation\">=<\/span> <span class=\"token boolean\">false<\/span>\n<\/code><\/pre>\n<\/div>\n<p data-line=\"613\" class=\"code-line\">\u4eee\u60f3\u74b0\u5883\u306e\u30a2\u30af\u30c6\u30a3\u30d9\u30fc\u30c8<\/p>\n<div class=\"code-block-container\">\n<pre class=\"language-bash\"><code class=\"language-bash code-line\" data-line=\"614\">\nuv venv <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token builtin class-name\">source<\/span> .venv\/bin\/activate\nuv <span class=\"token function\">sync<\/span>\n<\/code><\/pre>\n<\/div>\n<hr data-line=\"620\" class=\"code-line\"\/>\n<h4 id=\"2.2-put_vectors.py-%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E6%8C%BF%E5%85%A5\" data-line=\"622\" class=\"code-line\">\n 2.2 put_vectors.py \u30d9\u30af\u30c8\u30eb\u633f\u5165<\/h4>\n<p data-line=\"624\" class=\"code-line\">\u30de\u30fc\u30af\u30c0\u30a6\u30f3\u30d5\u30a1\u30a4\u30eb\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u3001\u30d9\u30af\u30c8\u30eb\u5316\u3057\u3066S3 Vectors\u306b\u633f\u5165\u3059\u308b\u30b9\u30af\u30ea\u30d7\u30c8<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">scripts\/put_vectors.py<\/span><\/p>\n<pre class=\"language-python\"><code class=\"language-python code-line\" data-line=\"625\"><span class=\"token triple-quoted-string string\">\"\"\"\nS3 Vectors - PutVectors\u30b9\u30af\u30ea\u30d7\u30c8\n\n\u30de\u30fc\u30af\u30c0\u30a6\u30f3\u30d5\u30a1\u30a4\u30eb\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u3001Bedrock Titan Text Embeddings V2\u3067\n\u57cb\u3081\u8fbc\u307f\u30d9\u30af\u30c8\u30eb\u3092\u751f\u6210\u3057\u3001PutVectors API\u3067S3 Vectors\u306b\u633f\u5165\u3057\u307e\u3059\u3002\n\n\u53c2\u8003: https:\/\/docs.aws.amazon.com\/AmazonS3\/latest\/userguide\/s3-vectors-PutVectors.html\n\"\"\"<\/span>\n\n<span class=\"token keyword\">import<\/span> sys\n<span class=\"token keyword\">import<\/span> json\n<span class=\"token keyword\">import<\/span> argparse\n<span class=\"token keyword\">import<\/span> logging\n<span class=\"token keyword\">import<\/span> os\n<span class=\"token keyword\">from<\/span> pathlib <span class=\"token keyword\">import<\/span> Path\n<span class=\"token keyword\">from<\/span> typing <span class=\"token keyword\">import<\/span> List<span class=\"token punctuation\">,<\/span> Dict<span class=\"token punctuation\">,<\/span> Any\n<span class=\"token keyword\">from<\/span> datetime <span class=\"token keyword\">import<\/span> datetime\n\n<span class=\"token keyword\">import<\/span> boto3\n<span class=\"token keyword\">from<\/span> dotenv <span class=\"token keyword\">import<\/span> load_dotenv\n<span class=\"token keyword\">from<\/span> pydantic <span class=\"token keyword\">import<\/span> BaseModel<span class=\"token punctuation\">,<\/span> Field<span class=\"token punctuation\">,<\/span> field_validator\n<span class=\"token keyword\">from<\/span> tenacity <span class=\"token keyword\">import<\/span> retry<span class=\"token punctuation\">,<\/span> stop_after_attempt<span class=\"token punctuation\">,<\/span> wait_exponential\n\n\nload_dotenv<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n\n\nlogging<span class=\"token punctuation\">.<\/span>basicConfig<span class=\"token punctuation\">(<\/span>\n    level<span class=\"token operator\">=<\/span>logging<span class=\"token punctuation\">.<\/span>INFO<span class=\"token punctuation\">,<\/span>\n    <span class=\"token builtin\">format<\/span><span class=\"token operator\">=<\/span><span class=\"token string\">\"%(asctime)s - %(levelname)s - %(message)s\"<\/span>\n<span class=\"token punctuation\">)<\/span>\nlogger <span class=\"token operator\">=<\/span> logging<span class=\"token punctuation\">.<\/span>getLogger<span class=\"token punctuation\">(<\/span>__name__<span class=\"token punctuation\">)<\/span>\n\n\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">PutVectorsConfig<\/span><span class=\"token punctuation\">(<\/span>BaseModel<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token triple-quoted-string string\">\"\"\"PutVectors\u51e6\u7406\u7528\u306e\u578b\u5b89\u5168\u306a\u8a2d\u5b9a\u30af\u30e9\u30b9\"\"\"<\/span>\n    source_directory<span class=\"token punctuation\">:<\/span> Path <span class=\"token operator\">=<\/span> Field<span class=\"token punctuation\">(<\/span>description<span class=\"token operator\">=<\/span><span class=\"token string\">\"\u30de\u30fc\u30af\u30c0\u30a6\u30f3\u30d5\u30a1\u30a4\u30eb\u306e\u30bd\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\"<\/span><span class=\"token punctuation\">)<\/span>\n    vector_bucket_name<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span> <span class=\"token operator\">=<\/span> Field<span class=\"token punctuation\">(<\/span>min_length<span class=\"token operator\">=<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> max_length<span class=\"token operator\">=<\/span><span class=\"token number\">63<\/span><span class=\"token punctuation\">)<\/span>\n    index_name<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span> <span class=\"token operator\">=<\/span> Field<span class=\"token punctuation\">(<\/span>min_length<span class=\"token operator\">=<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span>\n    bedrock_region<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span> <span class=\"token operator\">=<\/span> Field<span class=\"token punctuation\">(<\/span>default<span class=\"token operator\">=<\/span><span class=\"token string\">\"us-east-1\"<\/span><span class=\"token punctuation\">)<\/span>\n    embedding_model_id<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span> <span class=\"token operator\">=<\/span> Field<span class=\"token punctuation\">(<\/span>default<span class=\"token operator\">=<\/span><span class=\"token string\">\"amazon.titan-embed-text-v2:0\"<\/span><span class=\"token punctuation\">)<\/span>\n    vector_dimension<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">int<\/span> <span class=\"token operator\">=<\/span> Field<span class=\"token punctuation\">(<\/span>default<span class=\"token operator\">=<\/span><span class=\"token number\">1024<\/span><span class=\"token punctuation\">)<\/span>\n    batch_size<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">int<\/span> <span class=\"token operator\">=<\/span> Field<span class=\"token punctuation\">(<\/span>default<span class=\"token operator\">=<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">,<\/span> ge<span class=\"token operator\">=<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> le<span class=\"token operator\">=<\/span><span class=\"token number\">100<\/span><span class=\"token punctuation\">)<\/span>\n\n    <span class=\"token decorator annotation punctuation\">@field_validator<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">'vector_dimension'<\/span><span class=\"token punctuation\">)<\/span>\n    <span class=\"token decorator annotation punctuation\">@classmethod<\/span>\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">validate_dimension<\/span><span class=\"token punctuation\">(<\/span>cls<span class=\"token punctuation\">,<\/span> v<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">int<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">-<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token builtin\">int<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token keyword\">if<\/span> v <span class=\"token keyword\">not<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token number\">256<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">512<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1024<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span>\n            <span class=\"token keyword\">raise<\/span> ValueError<span class=\"token punctuation\">(<\/span><span class=\"token string\">\"\u30d9\u30af\u30c8\u30eb\u6b21\u5143\u6570\u306f256\u3001512\u3001\u307e\u305f\u306f1024\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\"<\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">return<\/span> v\n\n\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">MarkdownDocument<\/span><span class=\"token punctuation\">(<\/span>BaseModel<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token triple-quoted-string string\">\"\"\"\u30de\u30fc\u30af\u30c0\u30a6\u30f3\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u578b\u5b9a\u7fa9\"\"\"<\/span>\n    file_path<span class=\"token punctuation\">:<\/span> Path\n    content<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span>\n    metadata<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 operator\">=<\/span> Field<span class=\"token punctuation\">(<\/span>default_factory<span class=\"token operator\">=<\/span><span class=\"token builtin\">dict<\/span><span class=\"token punctuation\">)<\/span>\n    file_size<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">int<\/span> <span class=\"token operator\">=<\/span> Field<span class=\"token punctuation\">(<\/span>ge<span class=\"token operator\">=<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span>\n\n\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">EmbeddingResponse<\/span><span class=\"token punctuation\">(<\/span>BaseModel<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token triple-quoted-string string\">\"\"\"Bedrock\u57cb\u3081\u8fbc\u307f\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u578b\u5b9a\u7fa9\"\"\"<\/span>\n    embedding<span class=\"token punctuation\">:<\/span> List<span class=\"token punctuation\">[<\/span><span class=\"token builtin\">float<\/span><span class=\"token punctuation\">]<\/span>\n    input_token_count<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">int<\/span>\n\n\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">MarkdownScanner<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token triple-quoted-string string\">\"\"\"\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304b\u3089\u30de\u30fc\u30af\u30c0\u30a6\u30f3\u30d5\u30a1\u30a4\u30eb\u3092\u30b9\u30ad\u30e3\u30f3\u3059\u308b\u30af\u30e9\u30b9\"\"\"<\/span>\n\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">__init__<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> config<span class=\"token punctuation\">:<\/span> PutVectorsConfig<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n        self<span class=\"token punctuation\">.<\/span>config <span class=\"token operator\">=<\/span> config\n\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">scan_directory<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">-<\/span><span class=\"token operator\">&gt;<\/span> List<span class=\"token punctuation\">[<\/span>MarkdownDocument<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token triple-quoted-string string\">\"\"\"\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u518d\u5e30\u7684\u306b\u30b9\u30ad\u30e3\u30f3\u3057\u3066\u30de\u30fc\u30af\u30c0\u30a6\u30f3\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\"\"\"<\/span>\n        markdown_files<span class=\"token punctuation\">:<\/span> List<span class=\"token punctuation\">[<\/span>MarkdownDocument<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span>\n\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u30b9\u30ad\u30e3\u30f3\u4e2d: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>self<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>source_directory<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n\n        <span class=\"token keyword\">for<\/span> root<span class=\"token punctuation\">,<\/span> _<span class=\"token punctuation\">,<\/span> files <span class=\"token keyword\">in<\/span> <span class=\"token builtin\">sorted<\/span><span class=\"token punctuation\">(<\/span>Path<span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>source_directory<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>walk<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n            <span class=\"token keyword\">for<\/span> <span class=\"token builtin\">file<\/span> <span class=\"token keyword\">in<\/span> <span class=\"token builtin\">sorted<\/span><span class=\"token punctuation\">(<\/span>files<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n                <span class=\"token keyword\">if<\/span> <span class=\"token builtin\">file<\/span><span class=\"token punctuation\">.<\/span>endswith<span class=\"token punctuation\">(<\/span><span class=\"token string\">'.md'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n                    file_path <span class=\"token operator\">=<\/span> root <span class=\"token operator\">\/<\/span> <span class=\"token builtin\">file<\/span>\n                    <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span>\n                        doc <span class=\"token operator\">=<\/span> self<span class=\"token punctuation\">.<\/span>_load_document<span class=\"token punctuation\">(<\/span>file_path<span class=\"token punctuation\">)<\/span>\n                        markdown_files<span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span>doc<span class=\"token punctuation\">)<\/span>\n                        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\u2713 \u691c\u51fa: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>file_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n                    <span class=\"token keyword\">except<\/span> Exception <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span>\n                        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\u2717 \u8aad\u307f\u8fbc\u307f\u30a8\u30e9\u30fc <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>file_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n                        logger<span class=\"token punctuation\">.<\/span>error<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>file_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\u306e\u8aad\u307f\u8fbc\u307f\u306b\u5931\u6557: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\u691c\u51fa\u30d5\u30a1\u30a4\u30eb\u6570: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>markdown_files<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">return<\/span> markdown_files\n\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">_load_document<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> file_path<span class=\"token punctuation\">:<\/span> Path<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">-<\/span><span class=\"token operator\">&gt;<\/span> MarkdownDocument<span class=\"token punctuation\">:<\/span>\n        <span class=\"token triple-quoted-string string\">\"\"\"\u30e1\u30bf\u30c7\u30fc\u30bf\u4ed8\u304d\u3067\u30de\u30fc\u30af\u30c0\u30a6\u30f3\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u8aad\u307f\u8fbc\u3080\"\"\"<\/span>\n        <span class=\"token keyword\">with<\/span> <span class=\"token builtin\">open<\/span><span class=\"token punctuation\">(<\/span>file_path<span class=\"token punctuation\">,<\/span> <span class=\"token string\">'r'<\/span><span class=\"token punctuation\">,<\/span> encoding<span class=\"token operator\">=<\/span><span class=\"token string\">'utf-8'<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">as<\/span> f<span class=\"token punctuation\">:<\/span>\n            content <span class=\"token operator\">=<\/span> f<span class=\"token punctuation\">.<\/span>read<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n\n        <span class=\"token keyword\">return<\/span> MarkdownDocument<span class=\"token punctuation\">(<\/span>\n            file_path<span class=\"token operator\">=<\/span>file_path<span class=\"token punctuation\">,<\/span>\n            content<span class=\"token operator\">=<\/span>content<span class=\"token punctuation\">,<\/span>\n            file_size<span class=\"token operator\">=<\/span>file_path<span class=\"token punctuation\">.<\/span>stat<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>st_size<span class=\"token punctuation\">,<\/span>\n            metadata<span class=\"token operator\">=<\/span><span class=\"token punctuation\">{<\/span>\n                <span class=\"token string\">\"file_name\"<\/span><span class=\"token punctuation\">:<\/span> file_path<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">,<\/span>\n                <span class=\"token string\">\"file_path\"<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>file_path<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>\n            <span class=\"token punctuation\">}<\/span>\n        <span class=\"token punctuation\">)<\/span>\n\n\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">BedrockEmbedder<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token triple-quoted-string string\">\"\"\"Bedrock Titan Text Embeddings V2\u3092\u4f7f\u7528\u3057\u3066\u57cb\u3081\u8fbc\u307f\u30d9\u30af\u30c8\u30eb\u3092\u751f\u6210\u3059\u308b\u30af\u30e9\u30b9\"\"\"<\/span>\n\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">__init__<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> config<span class=\"token punctuation\">:<\/span> PutVectorsConfig<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n        self<span class=\"token punctuation\">.<\/span>config <span class=\"token operator\">=<\/span> config\n        self<span class=\"token punctuation\">.<\/span>bedrock_runtime <span class=\"token operator\">=<\/span> boto3<span class=\"token punctuation\">.<\/span>client<span class=\"token punctuation\">(<\/span>\n            <span class=\"token string\">'bedrock-runtime'<\/span><span class=\"token punctuation\">,<\/span>\n            region_name<span class=\"token operator\">=<\/span>config<span class=\"token punctuation\">.<\/span>bedrock_region\n        <span class=\"token punctuation\">)<\/span>\n\n    <span class=\"token decorator annotation punctuation\">@retry<\/span><span class=\"token punctuation\">(<\/span>\n        stop<span class=\"token operator\">=<\/span>stop_after_attempt<span class=\"token punctuation\">(<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>\n        wait<span class=\"token operator\">=<\/span>wait_exponential<span class=\"token punctuation\">(<\/span>multiplier<span class=\"token operator\">=<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">min<\/span><span class=\"token operator\">=<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">max<\/span><span class=\"token operator\">=<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">)<\/span>\n    <span class=\"token punctuation\">)<\/span>\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">embed_text<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> text<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> EmbeddingResponse<span class=\"token punctuation\">:<\/span>\n        <span class=\"token triple-quoted-string string\">\"\"\"\u30c6\u30ad\u30b9\u30c8\u306e\u57cb\u3081\u8fbc\u307f\u30d9\u30af\u30c8\u30eb\u3092\u751f\u6210\uff08\u30ea\u30c8\u30e9\u30a4\u30ed\u30b8\u30c3\u30af\u4ed8\u304d\uff09\"\"\"<\/span>\n        body <span class=\"token operator\">=<\/span> json<span class=\"token punctuation\">.<\/span>dumps<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span>\n            <span class=\"token string\">\"inputText\"<\/span><span class=\"token punctuation\">:<\/span> text<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">8192<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>  \n            <span class=\"token string\">\"dimensions\"<\/span><span class=\"token punctuation\">:<\/span> self<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>vector_dimension<span class=\"token punctuation\">,<\/span>\n            <span class=\"token string\">\"normalize\"<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean\">True<\/span>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span>\n\n        response <span class=\"token operator\">=<\/span> self<span class=\"token punctuation\">.<\/span>bedrock_runtime<span class=\"token punctuation\">.<\/span>invoke_model<span class=\"token punctuation\">(<\/span>\n            modelId<span class=\"token operator\">=<\/span>self<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>embedding_model_id<span class=\"token punctuation\">,<\/span>\n            body<span class=\"token operator\">=<\/span>body\n        <span class=\"token punctuation\">)<\/span>\n\n        response_body <span class=\"token operator\">=<\/span> json<span class=\"token punctuation\">.<\/span>loads<span class=\"token punctuation\">(<\/span>response<span class=\"token punctuation\">[<\/span><span class=\"token string\">'body'<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>read<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>\n\n        <span class=\"token keyword\">return<\/span> EmbeddingResponse<span class=\"token punctuation\">(<\/span>\n            embedding<span class=\"token operator\">=<\/span>response_body<span class=\"token punctuation\">[<\/span><span class=\"token string\">'embedding'<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>\n            input_token_count<span class=\"token operator\">=<\/span>response_body<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">'inputTextTokenCount'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token punctuation\">)<\/span>\n\n\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">S3VectorsPutter<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token triple-quoted-string string\">\"\"\"PutVectors API\u3092\u4f7f\u7528\u3057\u3066S3 Vectors\u306b\u30d9\u30af\u30c8\u30eb\u3092\u633f\u5165\u3059\u308b\u30af\u30e9\u30b9\"\"\"<\/span>\n\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">__init__<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> config<span class=\"token punctuation\">:<\/span> PutVectorsConfig<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n        self<span class=\"token punctuation\">.<\/span>config <span class=\"token operator\">=<\/span> config\n        self<span class=\"token punctuation\">.<\/span>s3vectors_client <span class=\"token operator\">=<\/span> boto3<span class=\"token punctuation\">.<\/span>client<span class=\"token punctuation\">(<\/span><span class=\"token string\">'s3vectors'<\/span><span class=\"token punctuation\">,<\/span> region_name<span class=\"token operator\">=<\/span>config<span class=\"token punctuation\">.<\/span>bedrock_region<span class=\"token punctuation\">)<\/span>\n\n    <span class=\"token decorator annotation punctuation\">@retry<\/span><span class=\"token punctuation\">(<\/span>\n        stop<span class=\"token operator\">=<\/span>stop_after_attempt<span class=\"token punctuation\">(<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>\n        wait<span class=\"token operator\">=<\/span>wait_exponential<span class=\"token punctuation\">(<\/span>multiplier<span class=\"token operator\">=<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">min<\/span><span class=\"token operator\">=<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">max<\/span><span class=\"token operator\">=<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">)<\/span>\n    <span class=\"token punctuation\">)<\/span>\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">put_vectors<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> vectors_to_put<span class=\"token punctuation\">:<\/span> List<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 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        <span class=\"token triple-quoted-string string\">\"\"\"S3 Vectors PutVectors API\u3092\u4f7f\u7528\u3057\u3066\u30d9\u30af\u30c8\u30eb\u3092\u633f\u5165\"\"\"<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>vectors_to_put<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\u4ef6\u306e\u30d9\u30af\u30c8\u30eb\u3092\u633f\u5165\u4e2d...\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n\n        result <span class=\"token operator\">=<\/span> self<span class=\"token punctuation\">.<\/span>s3vectors_client<span class=\"token punctuation\">.<\/span>put_vectors<span class=\"token punctuation\">(<\/span>\n            vectorBucketName<span class=\"token operator\">=<\/span>self<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>vector_bucket_name<span class=\"token punctuation\">,<\/span>\n            indexName<span class=\"token operator\">=<\/span>self<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>index_name<span class=\"token punctuation\">,<\/span>\n            vectors<span class=\"token operator\">=<\/span>vectors_to_put\n        <span class=\"token punctuation\">)<\/span>\n\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"\u2713 \u30d9\u30af\u30c8\u30eb\u306e\u633f\u5165\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f\"<\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">return<\/span> result\n\n\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">parse_args<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">-<\/span><span class=\"token operator\">&gt;<\/span> PutVectorsConfig<span class=\"token punctuation\">:<\/span>\n    <span class=\"token triple-quoted-string string\">\"\"\"\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u5f15\u6570\u3092\u89e3\u6790\uff08\u74b0\u5883\u5909\u6570\u3092\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3068\u3057\u3066\u4f7f\u7528\uff09\"\"\"<\/span>\n    parser <span class=\"token operator\">=<\/span> argparse<span class=\"token punctuation\">.<\/span>ArgumentParser<span class=\"token punctuation\">(<\/span>\n        description<span class=\"token operator\">=<\/span><span class=\"token string\">\"S3 Vectors PutVectors - \u30de\u30fc\u30af\u30c0\u30a6\u30f3\u30d5\u30a1\u30a4\u30eb\u3092\u30d9\u30af\u30c8\u30eb\u5316\u3057\u3066S3 Vectors\u306b\u633f\u5165\"<\/span>\n    <span class=\"token punctuation\">)<\/span>\n\n    parser<span class=\"token punctuation\">.<\/span>add_argument<span class=\"token punctuation\">(<\/span>\n        <span class=\"token string\">'--source-dir'<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">type<\/span><span class=\"token operator\">=<\/span>Path<span class=\"token punctuation\">,<\/span>\n        required<span class=\"token operator\">=<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">help<\/span><span class=\"token operator\">=<\/span><span class=\"token string\">'\u30de\u30fc\u30af\u30c0\u30a6\u30f3\u30d5\u30a1\u30a4\u30eb\u3092\u542b\u3080\u30bd\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea'<\/span>\n    <span class=\"token punctuation\">)<\/span>\n    parser<span class=\"token punctuation\">.<\/span>add_argument<span class=\"token punctuation\">(<\/span>\n        <span class=\"token string\">'--bucket'<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">type<\/span><span class=\"token operator\">=<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span>\n        default<span class=\"token operator\">=<\/span>os<span class=\"token punctuation\">.<\/span>getenv<span class=\"token punctuation\">(<\/span><span class=\"token string\">'VECTOR_BUCKET_NAME'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">help<\/span><span class=\"token operator\">=<\/span><span class=\"token string\">'S3 Vectors\u30d0\u30b1\u30c3\u30c8\u540d\uff08\u74b0\u5883\u5909\u6570: VECTOR_BUCKET_NAME\uff09'<\/span>\n    <span class=\"token punctuation\">)<\/span>\n    parser<span class=\"token punctuation\">.<\/span>add_argument<span class=\"token punctuation\">(<\/span>\n        <span class=\"token string\">'--index'<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">type<\/span><span class=\"token operator\">=<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span>\n        default<span class=\"token operator\">=<\/span>os<span class=\"token punctuation\">.<\/span>getenv<span class=\"token punctuation\">(<\/span><span class=\"token string\">'VECTOR_INDEX_NAME'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'markdown-embeddings'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">help<\/span><span class=\"token operator\">=<\/span><span class=\"token string\">'\u30d9\u30af\u30c8\u30eb\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u540d\uff08\u74b0\u5883\u5909\u6570: VECTOR_INDEX_NAME\uff09'<\/span>\n    <span class=\"token punctuation\">)<\/span>\n    parser<span class=\"token punctuation\">.<\/span>add_argument<span class=\"token punctuation\">(<\/span>\n        <span class=\"token string\">'--region'<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">type<\/span><span class=\"token operator\">=<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span>\n        default<span class=\"token operator\">=<\/span>os<span class=\"token punctuation\">.<\/span>getenv<span class=\"token punctuation\">(<\/span><span class=\"token string\">'AWS_REGION'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'us-east-1'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">help<\/span><span class=\"token operator\">=<\/span><span class=\"token string\">'AWS\u30ea\u30fc\u30b8\u30e7\u30f3\uff08\u74b0\u5883\u5909\u6570: AWS_REGION\uff09'<\/span>\n    <span class=\"token punctuation\">)<\/span>\n    parser<span class=\"token punctuation\">.<\/span>add_argument<span class=\"token punctuation\">(<\/span>\n        <span class=\"token string\">'--dimension'<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">type<\/span><span class=\"token operator\">=<\/span><span class=\"token builtin\">int<\/span><span class=\"token punctuation\">,<\/span>\n        default<span class=\"token operator\">=<\/span><span class=\"token builtin\">int<\/span><span class=\"token punctuation\">(<\/span>os<span class=\"token punctuation\">.<\/span>getenv<span class=\"token punctuation\">(<\/span><span class=\"token string\">'VECTOR_DIMENSION'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'1024'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>\n        choices<span class=\"token operator\">=<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">256<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">512<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">1024<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">help<\/span><span class=\"token operator\">=<\/span><span class=\"token string\">'\u30d9\u30af\u30c8\u30eb\u6b21\u5143\u6570\uff08\u74b0\u5883\u5909\u6570: VECTOR_DIMENSION\uff09'<\/span>\n    <span class=\"token punctuation\">)<\/span>\n\n    args <span class=\"token operator\">=<\/span> parser<span class=\"token punctuation\">.<\/span>parse_args<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n\n    \n    <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> args<span class=\"token punctuation\">.<\/span>bucket<span class=\"token punctuation\">:<\/span>\n        parser<span class=\"token punctuation\">.<\/span>error<span class=\"token punctuation\">(<\/span><span class=\"token string\">\"--bucket\u5f15\u6570\u307e\u305f\u306f\u74b0\u5883\u5909\u6570VECTOR_BUCKET_NAME\u304c\u5fc5\u8981\u3067\u3059\"<\/span><span class=\"token punctuation\">)<\/span>\n\n    <span class=\"token keyword\">return<\/span> PutVectorsConfig<span class=\"token punctuation\">(<\/span>\n        source_directory<span class=\"token operator\">=<\/span>args<span class=\"token punctuation\">.<\/span>source_dir<span class=\"token punctuation\">,<\/span>\n        vector_bucket_name<span class=\"token operator\">=<\/span>args<span class=\"token punctuation\">.<\/span>bucket<span class=\"token punctuation\">,<\/span>\n        index_name<span class=\"token operator\">=<\/span>args<span class=\"token punctuation\">.<\/span>index<span class=\"token punctuation\">,<\/span>\n        bedrock_region<span class=\"token operator\">=<\/span>args<span class=\"token punctuation\">.<\/span>region<span class=\"token punctuation\">,<\/span>\n        vector_dimension<span class=\"token operator\">=<\/span>args<span class=\"token punctuation\">.<\/span>dimension\n    <span class=\"token punctuation\">)<\/span>\n\n\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token triple-quoted-string string\">\"\"\"\u30e1\u30a4\u30f3PutVectors\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\"\"\"<\/span>\n    <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span>\n        \n        config <span class=\"token operator\">=<\/span> parse_args<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"\\n=== S3 Vectors - PutVectors ===\"<\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\u30bd\u30fc\u30b9: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>config<span class=\"token punctuation\">.<\/span>source_directory<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\u30d0\u30b1\u30c3\u30c8: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>config<span class=\"token punctuation\">.<\/span>vector_bucket_name<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>config<span class=\"token punctuation\">.<\/span>index_name<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\u6b21\u5143\u6570: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>config<span class=\"token punctuation\">.<\/span>vector_dimension<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\\n\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n\n        start_time <span class=\"token operator\">=<\/span> datetime<span class=\"token punctuation\">.<\/span>now<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n\n        \n        scanner <span class=\"token operator\">=<\/span> MarkdownScanner<span class=\"token punctuation\">(<\/span>config<span class=\"token punctuation\">)<\/span>\n        documents <span class=\"token operator\">=<\/span> scanner<span class=\"token punctuation\">.<\/span>scan_directory<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n\n        <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> documents<span class=\"token punctuation\">:<\/span>\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"\u30de\u30fc\u30af\u30c0\u30a6\u30f3\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\u7d42\u4e86\u3057\u307e\u3059\u3002\"<\/span><span class=\"token punctuation\">)<\/span>\n            <span class=\"token keyword\">return<\/span>\n\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\\n\u30b9\u30c6\u30c3\u30d71\u5b8c\u4e86: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>documents<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\u30d5\u30a1\u30a4\u30eb\u3092\u30b9\u30ad\u30e3\u30f3\\n\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n\n        \n        embedder <span class=\"token operator\">=<\/span> BedrockEmbedder<span class=\"token punctuation\">(<\/span>config<span class=\"token punctuation\">)<\/span>\n        vectors_to_put<span class=\"token punctuation\">:<\/span> List<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 punctuation\">[<\/span><span class=\"token punctuation\">]<\/span>\n\n        <span class=\"token keyword\">for<\/span> idx<span class=\"token punctuation\">,<\/span> doc <span class=\"token keyword\">in<\/span> <span class=\"token builtin\">enumerate<\/span><span class=\"token punctuation\">(<\/span>documents<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n            <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\u51e6\u7406\u4e2d <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>idx<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\/<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>documents<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>doc<span class=\"token punctuation\">.<\/span>file_path<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n\n                embedding_response <span class=\"token operator\">=<\/span> embedder<span class=\"token punctuation\">.<\/span>embed_text<span class=\"token punctuation\">(<\/span>doc<span class=\"token punctuation\">.<\/span>content<span class=\"token punctuation\">)<\/span>\n\n                \n                \n                \n                text_preview <span class=\"token operator\">=<\/span> doc<span class=\"token punctuation\">.<\/span>content<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">400<\/span><span class=\"token punctuation\">]<\/span>\n\n                vector_entry <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">{<\/span>\n                    <span class=\"token string\">\"key\"<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string-interpolation\"><span class=\"token string\">f\"doc_<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>idx<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">_<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>doc<span class=\"token punctuation\">.<\/span>file_path<span class=\"token punctuation\">.<\/span>stem<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">,<\/span>\n                    <span class=\"token string\">\"data\"<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token string\">\"float32\"<\/span><span class=\"token punctuation\">:<\/span> embedding_response<span class=\"token punctuation\">.<\/span>embedding<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>\n                    <span class=\"token string\">\"metadata\"<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">{<\/span>\n                        <span class=\"token string\">\"text\"<\/span><span class=\"token punctuation\">:<\/span> text_preview<span class=\"token punctuation\">,<\/span>\n                        <span class=\"token string\">\"file_path\"<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>doc<span class=\"token punctuation\">.<\/span>file_path<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>\n                        <span class=\"token string\">\"file_name\"<\/span><span class=\"token punctuation\">:<\/span> doc<span class=\"token punctuation\">.<\/span>file_path<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">,<\/span>\n                    <span class=\"token punctuation\">}<\/span>\n                <span class=\"token punctuation\">}<\/span>\n                vectors_to_put<span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span>vector_entry<span class=\"token punctuation\">)<\/span>\n\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span>\n                    <span class=\"token string-interpolation\"><span class=\"token string\">f\"\u2713 \u57cb\u3081\u8fbc\u307f\u5b8c\u4e86: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>doc<span class=\"token punctuation\">.<\/span>file_path<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \"<\/span><\/span>\n                    <span class=\"token string-interpolation\"><span class=\"token string\">f\"(<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>embedding_response<span class=\"token punctuation\">.<\/span>input_token_count<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\u30c8\u30fc\u30af\u30f3)\"<\/span><\/span>\n                <span class=\"token punctuation\">)<\/span>\n\n            <span class=\"token keyword\">except<\/span> Exception <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\u2717 \u57cb\u3081\u8fbc\u307f\u30a8\u30e9\u30fc <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>doc<span class=\"token punctuation\">.<\/span>file_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n                logger<span class=\"token punctuation\">.<\/span>error<span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>doc<span class=\"token punctuation\">.<\/span>file_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\u306e\u57cb\u3081\u8fbc\u307f\u306b\u5931\u6557: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\\n\u30b9\u30c6\u30c3\u30d72\u5b8c\u4e86: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>vectors_to_put<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\u4ef6\u306e\u57cb\u3081\u8fbc\u307f\u3092\u751f\u6210\\n\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n\n        \n        putter <span class=\"token operator\">=<\/span> S3VectorsPutter<span class=\"token punctuation\">(<\/span>config<span class=\"token punctuation\">)<\/span>\n        result <span class=\"token operator\">=<\/span> putter<span class=\"token punctuation\">.<\/span>put_vectors<span class=\"token punctuation\">(<\/span>vectors_to_put<span class=\"token punctuation\">)<\/span>\n\n        end_time <span class=\"token operator\">=<\/span> datetime<span class=\"token punctuation\">.<\/span>now<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n        duration <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">(<\/span>end_time <span class=\"token operator\">-<\/span> start_time<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>total_seconds<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\\n\u2713 PutVectors\u5b8c\u4e86!\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\u51e6\u7406\u30d5\u30a1\u30a4\u30eb\u6570: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>documents<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\u633f\u5165\u30d9\u30af\u30c8\u30eb\u6570: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>vectors_to_put<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\u51e6\u7406\u6642\u9593: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>duration<span class=\"token punctuation\">:<\/span><span class=\"token format-spec\">.2f<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\u79d2\\n\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n\n    <span class=\"token keyword\">except<\/span> Exception <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\\n\u2717 PutVectors\u5931\u6557: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\\n\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n        logger<span class=\"token punctuation\">.<\/span>exception<span class=\"token punctuation\">(<\/span><span class=\"token string\">\"PutVectors\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u304c\u5931\u6557\u3057\u307e\u3057\u305f\"<\/span><span class=\"token punctuation\">)<\/span>\n        sys<span class=\"token punctuation\">.<\/span>exit<span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span>\n\n\n<span class=\"token keyword\">if<\/span> __name__ <span class=\"token operator\">==<\/span> <span class=\"token string\">\"__main__\"<\/span><span class=\"token punctuation\">:<\/span>\n    main<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n<\/code><\/pre>\n<\/div>\n<hr data-line=\"931\" class=\"code-line\"\/>\n<h4 id=\"2.3-query_vectors.py-rag\" data-line=\"933\" class=\"code-line\">\n 2.3 query_vectors.py RAG<\/h4>\n<p data-line=\"935\" class=\"code-line\">S3 Vectors\u3067\u30d9\u30af\u30c8\u30eb\u691c\u7d22\u3092\u5b9f\u884c\u3057\u3001Claude Sonnet 4\u3067RAG\u56de\u7b54\u3092\u751f\u6210\u3059\u308b\u30b9\u30af\u30ea\u30d7\u30c8<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">scripts\/query_vectors.py<\/span><\/p>\n<pre class=\"language-python\"><code class=\"language-python code-line\" data-line=\"936\"><span class=\"token triple-quoted-string string\">\"\"\"\nS3 Vectors - QueryVectors\u30b9\u30af\u30ea\u30d7\u30c8\n\nS3 Vectors QueryVectors API\u3092\u4f7f\u7528\u3057\u3066\u30d9\u30af\u30c8\u30eb\u985e\u4f3c\u5ea6\u691c\u7d22\u3092\u5b9f\u884c\u3057\u3001\n\u30aa\u30d7\u30b7\u30e7\u30f3\u3067Claude Sonnet 4\u3092\u4f7f\u7528\u3057\u3066RAG\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u751f\u6210\u3057\u307e\u3059\u3002\n\n\u53c2\u8003: https:\/\/docs.aws.amazon.com\/AmazonS3\/latest\/userguide\/s3-vectors-QueryVectors.html\n\"\"\"<\/span>\n\n<span class=\"token keyword\">import<\/span> sys\n<span class=\"token keyword\">import<\/span> json\n<span class=\"token keyword\">import<\/span> argparse\n<span class=\"token keyword\">import<\/span> logging\n<span class=\"token keyword\">import<\/span> os\n<span class=\"token keyword\">from<\/span> typing <span class=\"token keyword\">import<\/span> List<span class=\"token punctuation\">,<\/span> Dict<span class=\"token punctuation\">,<\/span> Any\n<span class=\"token keyword\">from<\/span> pathlib <span class=\"token keyword\">import<\/span> Path\n\n<span class=\"token keyword\">import<\/span> boto3\n<span class=\"token keyword\">from<\/span> dotenv <span class=\"token keyword\">import<\/span> load_dotenv\n<span class=\"token keyword\">from<\/span> pydantic <span class=\"token keyword\">import<\/span> BaseModel<span class=\"token punctuation\">,<\/span> Field\n<span class=\"token keyword\">from<\/span> tenacity <span class=\"token keyword\">import<\/span> retry<span class=\"token punctuation\">,<\/span> stop_after_attempt<span class=\"token punctuation\">,<\/span> wait_exponential\n\n\nload_dotenv<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n\n\nlogging<span class=\"token punctuation\">.<\/span>basicConfig<span class=\"token punctuation\">(<\/span>level<span class=\"token operator\">=<\/span>logging<span class=\"token punctuation\">.<\/span>INFO<span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">format<\/span><span class=\"token operator\">=<\/span><span class=\"token string\">\"%(asctime)s - %(levelname)s - %(message)s\"<\/span><span class=\"token punctuation\">)<\/span>\nlogger <span class=\"token operator\">=<\/span> logging<span class=\"token punctuation\">.<\/span>getLogger<span class=\"token punctuation\">(<\/span>__name__<span class=\"token punctuation\">)<\/span>\n\n\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">QueryConfig<\/span><span class=\"token punctuation\">(<\/span>BaseModel<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token triple-quoted-string string\">\"\"\"\u30af\u30a8\u30ea\u7528\u306e\u578b\u5b89\u5168\u306a\u8a2d\u5b9a\u30af\u30e9\u30b9\"\"\"<\/span>\n    vector_bucket_name<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span> <span class=\"token operator\">=<\/span> Field<span class=\"token punctuation\">(<\/span>min_length<span class=\"token operator\">=<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> max_length<span class=\"token operator\">=<\/span><span class=\"token number\">63<\/span><span class=\"token punctuation\">)<\/span>\n    index_name<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span> <span class=\"token operator\">=<\/span> Field<span class=\"token punctuation\">(<\/span>min_length<span class=\"token operator\">=<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span>\n    bedrock_region<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span> <span class=\"token operator\">=<\/span> Field<span class=\"token punctuation\">(<\/span>default<span class=\"token operator\">=<\/span><span class=\"token string\">\"us-east-1\"<\/span><span class=\"token punctuation\">)<\/span>\n    embedding_model_id<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span> <span class=\"token operator\">=<\/span> Field<span class=\"token punctuation\">(<\/span>default<span class=\"token operator\">=<\/span><span class=\"token string\">\"amazon.titan-embed-text-v2:0\"<\/span><span class=\"token punctuation\">)<\/span>\n    llm_model_id<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span> <span class=\"token operator\">=<\/span> Field<span class=\"token punctuation\">(<\/span>default<span class=\"token operator\">=<\/span><span class=\"token string\">\"us.anthropic.claude-sonnet-4-20250514-v1:0\"<\/span><span class=\"token punctuation\">)<\/span>\n    vector_dimension<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">int<\/span> <span class=\"token operator\">=<\/span> Field<span class=\"token punctuation\">(<\/span>default<span class=\"token operator\">=<\/span><span class=\"token number\">1024<\/span><span class=\"token punctuation\">)<\/span>\n    top_k<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">int<\/span> <span class=\"token operator\">=<\/span> Field<span class=\"token punctuation\">(<\/span>default<span class=\"token operator\">=<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> ge<span class=\"token operator\">=<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> le<span class=\"token operator\">=<\/span><span class=\"token number\">100<\/span><span class=\"token punctuation\">)<\/span>\n    max_tokens<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">int<\/span> <span class=\"token operator\">=<\/span> Field<span class=\"token punctuation\">(<\/span>default<span class=\"token operator\">=<\/span><span class=\"token number\">2048<\/span><span class=\"token punctuation\">,<\/span> ge<span class=\"token operator\">=<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> le<span class=\"token operator\">=<\/span><span class=\"token number\">4096<\/span><span class=\"token punctuation\">)<\/span>\n    temperature<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">float<\/span> <span class=\"token operator\">=<\/span> Field<span class=\"token punctuation\">(<\/span>default<span class=\"token operator\">=<\/span><span class=\"token number\">0.7<\/span><span class=\"token punctuation\">,<\/span> ge<span class=\"token operator\">=<\/span><span class=\"token number\">0.0<\/span><span class=\"token punctuation\">,<\/span> le<span class=\"token operator\">=<\/span><span class=\"token number\">1.0<\/span><span class=\"token punctuation\">)<\/span>\n\n\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">QueryResult<\/span><span class=\"token punctuation\">(<\/span>BaseModel<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token triple-quoted-string string\">\"\"\"\u30af\u30a8\u30ea\u7d50\u679c\u306e\u578b\u5b9a\u7fa9\"\"\"<\/span>\n    key<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span>\n    distance<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">float<\/span>\n    metadata<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>\n\n\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">RAGResponse<\/span><span class=\"token punctuation\">(<\/span>BaseModel<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token triple-quoted-string string\">\"\"\"RAG\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u578b\u5b9a\u7fa9\"\"\"<\/span>\n    answer<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span>\n    sources<span class=\"token punctuation\">:<\/span> List<span class=\"token punctuation\">[<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">]<\/span>\n    model_id<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span>\n    input_tokens<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">int<\/span>\n    output_tokens<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">int<\/span>\n\n\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">S3VectorsQuery<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token triple-quoted-string string\">\"\"\"S3 Vectors QueryVectors API\u3092\u4f7f\u7528\u3057\u3066\u30d9\u30af\u30c8\u30eb\u985e\u4f3c\u5ea6\u691c\u7d22\u3092\u5b9f\u884c\u3059\u308b\u30af\u30e9\u30b9\"\"\"<\/span>\n\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">__init__<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> config<span class=\"token punctuation\">:<\/span> QueryConfig<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n        self<span class=\"token punctuation\">.<\/span>config <span class=\"token operator\">=<\/span> config\n        self<span class=\"token punctuation\">.<\/span>bedrock_runtime <span class=\"token operator\">=<\/span> boto3<span class=\"token punctuation\">.<\/span>client<span class=\"token punctuation\">(<\/span>\n            <span class=\"token string\">'bedrock-runtime'<\/span><span class=\"token punctuation\">,<\/span>\n            region_name<span class=\"token operator\">=<\/span>config<span class=\"token punctuation\">.<\/span>bedrock_region\n        <span class=\"token punctuation\">)<\/span>\n        self<span class=\"token punctuation\">.<\/span>s3vectors_client <span class=\"token operator\">=<\/span> boto3<span class=\"token punctuation\">.<\/span>client<span class=\"token punctuation\">(<\/span>\n            <span class=\"token string\">'s3vectors'<\/span><span class=\"token punctuation\">,<\/span>\n            region_name<span class=\"token operator\">=<\/span>config<span class=\"token punctuation\">.<\/span>bedrock_region\n        <span class=\"token punctuation\">)<\/span>\n\n    <span class=\"token decorator annotation punctuation\">@retry<\/span><span class=\"token punctuation\">(<\/span>\n        stop<span class=\"token operator\">=<\/span>stop_after_attempt<span class=\"token punctuation\">(<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>\n        wait<span class=\"token operator\">=<\/span>wait_exponential<span class=\"token punctuation\">(<\/span>multiplier<span class=\"token operator\">=<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">min<\/span><span class=\"token operator\">=<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">max<\/span><span class=\"token operator\">=<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">)<\/span>\n    <span class=\"token punctuation\">)<\/span>\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">vectorize_query<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> query_text<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> List<span class=\"token punctuation\">[<\/span><span class=\"token builtin\">float<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token triple-quoted-string string\">\"\"\"Bedrock\u3092\u4f7f\u7528\u3057\u3066\u30af\u30a8\u30ea\u30c6\u30ad\u30b9\u30c8\u3092\u30d9\u30af\u30c8\u30eb\u5316\"\"\"<\/span>\n        body <span class=\"token operator\">=<\/span> json<span class=\"token punctuation\">.<\/span>dumps<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span>\n            <span class=\"token string\">\"inputText\"<\/span><span class=\"token punctuation\">:<\/span> query_text<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">8192<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>\n            <span class=\"token string\">\"dimensions\"<\/span><span class=\"token punctuation\">:<\/span> self<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>vector_dimension<span class=\"token punctuation\">,<\/span>\n            <span class=\"token string\">\"normalize\"<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token boolean\">True<\/span>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span>\n\n        response <span class=\"token operator\">=<\/span> self<span class=\"token punctuation\">.<\/span>bedrock_runtime<span class=\"token punctuation\">.<\/span>invoke_model<span class=\"token punctuation\">(<\/span>\n            modelId<span class=\"token operator\">=<\/span>self<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>embedding_model_id<span class=\"token punctuation\">,<\/span>\n            body<span class=\"token operator\">=<\/span>body\n        <span class=\"token punctuation\">)<\/span>\n\n        response_body <span class=\"token operator\">=<\/span> json<span class=\"token punctuation\">.<\/span>loads<span class=\"token punctuation\">(<\/span>response<span class=\"token punctuation\">[<\/span><span class=\"token string\">'body'<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>read<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">return<\/span> response_body<span class=\"token punctuation\">[<\/span><span class=\"token string\">'embedding'<\/span><span class=\"token punctuation\">]<\/span>\n\n    <span class=\"token decorator annotation punctuation\">@retry<\/span><span class=\"token punctuation\">(<\/span>\n        stop<span class=\"token operator\">=<\/span>stop_after_attempt<span class=\"token punctuation\">(<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>\n        wait<span class=\"token operator\">=<\/span>wait_exponential<span class=\"token punctuation\">(<\/span>multiplier<span class=\"token operator\">=<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">min<\/span><span class=\"token operator\">=<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">max<\/span><span class=\"token operator\">=<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">)<\/span>\n    <span class=\"token punctuation\">)<\/span>\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">query_vectors<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> query_embedding<span class=\"token punctuation\">:<\/span> List<span class=\"token punctuation\">[<\/span><span class=\"token builtin\">float<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">-<\/span><span class=\"token operator\">&gt;<\/span> List<span class=\"token punctuation\">[<\/span>QueryResult<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token triple-quoted-string string\">\"\"\"S3 Vectors QueryVectors API\u3092\u4f7f\u7528\u3057\u3066\u30d9\u30af\u30c8\u30eb\u3092\u691c\u7d22\"\"\"<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"S3 Vectors\u3092\u691c\u7d22\u4e2d...\"<\/span><span class=\"token punctuation\">)<\/span>\n\n        response <span class=\"token operator\">=<\/span> self<span class=\"token punctuation\">.<\/span>s3vectors_client<span class=\"token punctuation\">.<\/span>query_vectors<span class=\"token punctuation\">(<\/span>\n            vectorBucketName<span class=\"token operator\">=<\/span>self<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>vector_bucket_name<span class=\"token punctuation\">,<\/span>\n            indexName<span class=\"token operator\">=<\/span>self<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>index_name<span class=\"token punctuation\">,<\/span>\n            queryVector<span class=\"token operator\">=<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">\"float32\"<\/span><span class=\"token punctuation\">:<\/span> query_embedding<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>\n            topK<span class=\"token operator\">=<\/span>self<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>top_k<span class=\"token punctuation\">,<\/span>\n            returnMetadata<span class=\"token operator\">=<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span>\n            returnDistance<span class=\"token operator\">=<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token punctuation\">)<\/span>\n\n        results <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span>\n        <span class=\"token keyword\">for<\/span> vector <span class=\"token keyword\">in<\/span> response<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">'vectors'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n            results<span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span>QueryResult<span class=\"token punctuation\">(<\/span>\n                key<span class=\"token operator\">=<\/span>vector<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">'key'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'unknown'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>\n                distance<span class=\"token operator\">=<\/span>vector<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">'distance'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>\n                metadata<span class=\"token operator\">=<\/span>vector<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">'metadata'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span>\n            <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span>\n\n        <span class=\"token keyword\">return<\/span> results\n\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">search<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> query_text<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> List<span class=\"token punctuation\">[<\/span>QueryResult<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token triple-quoted-string string\">\"\"\"\u5b8c\u5168\u306a\u691c\u7d22\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3092\u5b9f\u884c\"\"\"<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\u30af\u30a8\u30ea: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>query_text<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n\n        \n        query_embedding <span class=\"token operator\">=<\/span> self<span class=\"token punctuation\">.<\/span>vectorize_query<span class=\"token punctuation\">(<\/span>query_text<span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\u2713 \u30af\u30a8\u30ea\u3092\u30d9\u30af\u30c8\u30eb\u5316: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>query_embedding<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\u6b21\u5143\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n\n        \n        results <span class=\"token operator\">=<\/span> self<span class=\"token punctuation\">.<\/span>query_vectors<span class=\"token punctuation\">(<\/span>query_embedding<span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\u2713 \u691c\u7d22\u5b8c\u4e86: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>results<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\u4ef6\u306e\u7d50\u679c\\n\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n\n        <span class=\"token keyword\">return<\/span> results\n\n\n<span class=\"token keyword\">class<\/span> <span class=\"token class-name\">RAGGenerator<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token triple-quoted-string string\">\"\"\"Claude Sonnet 4\u3092\u4f7f\u7528\u3057\u3066RAG\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u751f\u6210\u3059\u308b\u30af\u30e9\u30b9\"\"\"<\/span>\n\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">__init__<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> config<span class=\"token punctuation\">:<\/span> QueryConfig<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n        self<span class=\"token punctuation\">.<\/span>config <span class=\"token operator\">=<\/span> config\n        self<span class=\"token punctuation\">.<\/span>bedrock_runtime <span class=\"token operator\">=<\/span> boto3<span class=\"token punctuation\">.<\/span>client<span class=\"token punctuation\">(<\/span>\n            <span class=\"token string\">'bedrock-runtime'<\/span><span class=\"token punctuation\">,<\/span>\n            region_name<span class=\"token operator\">=<\/span>config<span class=\"token punctuation\">.<\/span>bedrock_region\n        <span class=\"token punctuation\">)<\/span>\n\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">_read_file_content<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> file_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> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token triple-quoted-string string\">\"\"\"\u6307\u5b9a\u3055\u308c\u305f\u30d1\u30b9\u304b\u3089\u30d5\u30a1\u30a4\u30eb\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u8aad\u307f\u8fbc\u3080\"\"\"<\/span>\n        <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span>\n            path <span class=\"token operator\">=<\/span> Path<span class=\"token punctuation\">(<\/span>file_path<span class=\"token punctuation\">)<\/span>\n            <span class=\"token keyword\">if<\/span> path<span class=\"token punctuation\">.<\/span>exists<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n                content <span class=\"token operator\">=<\/span> path<span class=\"token punctuation\">.<\/span>read_text<span class=\"token punctuation\">(<\/span>encoding<span class=\"token operator\">=<\/span><span class=\"token string\">'utf-8'<\/span><span class=\"token punctuation\">)<\/span>\n                \n                <span class=\"token keyword\">if<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>content<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">4000<\/span><span class=\"token punctuation\">:<\/span>\n                    content <span class=\"token operator\">=<\/span> content<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">4000<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">+<\/span> <span class=\"token string\">\"\\n...(\u5207\u308a\u8a70\u3081)\"<\/span>\n                <span class=\"token keyword\">return<\/span> content\n            <span class=\"token keyword\">else<\/span><span class=\"token punctuation\">:<\/span>\n                <span class=\"token keyword\">return<\/span> <span class=\"token string-interpolation\"><span class=\"token string\">f\"[\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>file_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">]\"<\/span><\/span>\n        <span class=\"token keyword\">except<\/span> Exception <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span>\n            <span class=\"token keyword\">return<\/span> <span class=\"token string-interpolation\"><span class=\"token string\">f\"[\u30d5\u30a1\u30a4\u30eb\u8aad\u307f\u8fbc\u307f\u30a8\u30e9\u30fc: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">]\"<\/span><\/span>\n\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">build_context<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> query<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span> results<span class=\"token punctuation\">:<\/span> List<span class=\"token punctuation\">[<\/span>QueryResult<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">-<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token builtin\">tuple<\/span><span class=\"token punctuation\">[<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token triple-quoted-string string\">\"\"\"\u691c\u7d22\u7d50\u679c\u304b\u3089RAG\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u69cb\u7bc9\"\"\"<\/span>\n        system_prompt <span class=\"token operator\">=<\/span> <span class=\"token triple-quoted-string string\">\"\"\"\u3042\u306a\u305f\u306f\u6280\u8853\u6587\u66f8\u3092\u57fa\u306b\u8cea\u554f\u306b\u7b54\u3048\u308bAI\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8\u3067\u3059\u3002\n\u63d0\u4f9b\u3055\u308c\u305f\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u306b\u57fa\u3065\u3044\u3066\u3001\u6b63\u78ba\u3067\u7c21\u6f54\u306a\u56de\u7b54\u3092\u751f\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u306b\u60c5\u5831\u304c\u306a\u3044\u5834\u5408\u306f\u3001\u305d\u306e\u65e8\u3092\u660e\u78ba\u306b\u4f1d\u3048\u3066\u304f\u3060\u3055\u3044\u3002\"\"\"<\/span>\n\n        \n        context_parts <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span>\n        <span class=\"token keyword\">for<\/span> idx<span class=\"token punctuation\">,<\/span> result <span class=\"token keyword\">in<\/span> <span class=\"token builtin\">enumerate<\/span><span class=\"token punctuation\">(<\/span>results<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n            file_path <span class=\"token operator\">=<\/span> result<span class=\"token punctuation\">.<\/span>metadata<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">'file_path'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">''<\/span><span class=\"token punctuation\">)<\/span>\n\n            \n            <span class=\"token keyword\">if<\/span> file_path<span class=\"token punctuation\">:<\/span>\n                file_content <span class=\"token operator\">=<\/span> self<span class=\"token punctuation\">.<\/span>_read_file_content<span class=\"token punctuation\">(<\/span>file_path<span class=\"token punctuation\">)<\/span>\n            <span class=\"token keyword\">else<\/span><span class=\"token punctuation\">:<\/span>\n                file_content <span class=\"token operator\">=<\/span> result<span class=\"token punctuation\">.<\/span>metadata<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">'text'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'[\u30b3\u30f3\u30c6\u30f3\u30c4\u306a\u3057]'<\/span><span class=\"token punctuation\">)<\/span>\n\n            context_parts<span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span>\n                <span class=\"token string-interpolation\"><span class=\"token string\">f\"[\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8 <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>idx<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">] (\u30bd\u30fc\u30b9: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>file_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">, \u8ddd\u96e2: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>result<span class=\"token punctuation\">.<\/span>distance<span class=\"token punctuation\">:<\/span><span class=\"token format-spec\">.4f<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">)\\n\"<\/span><\/span>\n                <span class=\"token string-interpolation\"><span class=\"token string\">f\"<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>file_content<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span>\n            <span class=\"token punctuation\">)<\/span>\n\n        context_text <span class=\"token operator\">=<\/span> <span class=\"token string\">\"\\n\\n\"<\/span><span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span>context_parts<span class=\"token punctuation\">)<\/span>\n\n        user_prompt <span class=\"token operator\">=<\/span> <span class=\"token string-interpolation\"><span class=\"token string\">f\"\"\"\u4ee5\u4e0b\u306e\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u53c2\u8003\u306b\u3001\u8cea\u554f\u306b\u7b54\u3048\u3066\u304f\u3060\u3055\u3044\u3002\n\n\u3010\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3011\n<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>context_text<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\n\n\u3010\u8cea\u554f\u3011\n<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>query<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\n\n\u3010\u56de\u7b54\u3011\"\"\"<\/span><\/span>\n\n        <span class=\"token keyword\">return<\/span> system_prompt<span class=\"token punctuation\">,<\/span> user_prompt\n\n    <span class=\"token decorator annotation punctuation\">@retry<\/span><span class=\"token punctuation\">(<\/span>\n        stop<span class=\"token operator\">=<\/span>stop_after_attempt<span class=\"token punctuation\">(<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>\n        wait<span class=\"token operator\">=<\/span>wait_exponential<span class=\"token punctuation\">(<\/span>multiplier<span class=\"token operator\">=<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">min<\/span><span class=\"token operator\">=<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">max<\/span><span class=\"token operator\">=<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">)<\/span>\n    <span class=\"token punctuation\">)<\/span>\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">generate_response<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> query<span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span> results<span class=\"token punctuation\">:<\/span> List<span class=\"token punctuation\">[<\/span>QueryResult<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">-<\/span><span class=\"token operator\">&gt;<\/span> RAGResponse<span class=\"token punctuation\">:<\/span>\n        <span class=\"token triple-quoted-string string\">\"\"\"Claude Sonnet 4\u3092\u4f7f\u7528\u3057\u3066\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u751f\u6210\"\"\"<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"Claude Sonnet 4\u3067RAG\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u751f\u6210\u4e2d...\"<\/span><span class=\"token punctuation\">)<\/span>\n\n        system_prompt<span class=\"token punctuation\">,<\/span> user_prompt <span class=\"token operator\">=<\/span> self<span class=\"token punctuation\">.<\/span>build_context<span class=\"token punctuation\">(<\/span>query<span class=\"token punctuation\">,<\/span> results<span class=\"token punctuation\">)<\/span>\n\n        messages <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">[<\/span>\n            <span class=\"token punctuation\">{<\/span>\n                <span class=\"token string\">\"role\"<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token string\">\"user\"<\/span><span class=\"token punctuation\">,<\/span>\n                <span class=\"token string\">\"content\"<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">\"text\"<\/span><span class=\"token punctuation\">:<\/span> user_prompt<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">]<\/span>\n            <span class=\"token punctuation\">}<\/span>\n        <span class=\"token punctuation\">]<\/span>\n\n        response <span class=\"token operator\">=<\/span> self<span class=\"token punctuation\">.<\/span>bedrock_runtime<span class=\"token punctuation\">.<\/span>converse<span class=\"token punctuation\">(<\/span>\n            modelId<span class=\"token operator\">=<\/span>self<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>llm_model_id<span class=\"token punctuation\">,<\/span>\n            messages<span class=\"token operator\">=<\/span>messages<span class=\"token punctuation\">,<\/span>\n            system<span class=\"token operator\">=<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">\"text\"<\/span><span class=\"token punctuation\">:<\/span> system_prompt<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>\n            inferenceConfig<span class=\"token operator\">=<\/span><span class=\"token punctuation\">{<\/span>\n                <span class=\"token string\">\"maxTokens\"<\/span><span class=\"token punctuation\">:<\/span> self<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>max_tokens<span class=\"token punctuation\">,<\/span>\n                <span class=\"token string\">\"temperature\"<\/span><span class=\"token punctuation\">:<\/span> self<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>temperature\n            <span class=\"token punctuation\">}<\/span>\n        <span class=\"token punctuation\">)<\/span>\n\n        answer <span class=\"token operator\">=<\/span> response<span class=\"token punctuation\">[<\/span><span class=\"token string\">'output'<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">'message'<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">'content'<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">'text'<\/span><span class=\"token punctuation\">]<\/span>\n        usage <span class=\"token operator\">=<\/span> response<span class=\"token punctuation\">[<\/span><span class=\"token string\">'usage'<\/span><span class=\"token punctuation\">]<\/span>\n\n        sources <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">[<\/span>\n            result<span class=\"token punctuation\">.<\/span>metadata<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">'file_path'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'Unknown'<\/span><span class=\"token punctuation\">)<\/span>\n            <span class=\"token keyword\">for<\/span> result <span class=\"token keyword\">in<\/span> results\n        <span class=\"token punctuation\">]<\/span>\n\n        <span class=\"token keyword\">return<\/span> RAGResponse<span class=\"token punctuation\">(<\/span>\n            answer<span class=\"token operator\">=<\/span>answer<span class=\"token punctuation\">,<\/span>\n            sources<span class=\"token operator\">=<\/span>sources<span class=\"token punctuation\">,<\/span>\n            model_id<span class=\"token operator\">=<\/span>self<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span>llm_model_id<span class=\"token punctuation\">,<\/span>\n            input_tokens<span class=\"token operator\">=<\/span>usage<span class=\"token punctuation\">[<\/span><span class=\"token string\">'inputTokens'<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>\n            output_tokens<span class=\"token operator\">=<\/span>usage<span class=\"token punctuation\">[<\/span><span class=\"token string\">'outputTokens'<\/span><span class=\"token punctuation\">]<\/span>\n        <span class=\"token punctuation\">)<\/span>\n\n\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">parse_args<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">-<\/span><span class=\"token operator\">&gt;<\/span> <span class=\"token builtin\">tuple<\/span><span class=\"token punctuation\">[<\/span>QueryConfig<span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">bool<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token triple-quoted-string string\">\"\"\"\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u5f15\u6570\u3092\u89e3\u6790\uff08\u74b0\u5883\u5909\u6570\u3092\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3068\u3057\u3066\u4f7f\u7528\uff09\"\"\"<\/span>\n    parser <span class=\"token operator\">=<\/span> argparse<span class=\"token punctuation\">.<\/span>ArgumentParser<span class=\"token punctuation\">(<\/span>\n        description<span class=\"token operator\">=<\/span><span class=\"token string\">\"S3 Vectors QueryVectors - \u30d9\u30af\u30c8\u30eb\u691c\u7d22\u3068RAG\u751f\u6210\"<\/span>\n    <span class=\"token punctuation\">)<\/span>\n\n    parser<span class=\"token punctuation\">.<\/span>add_argument<span class=\"token punctuation\">(<\/span>\n        <span class=\"token string\">'--query'<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">type<\/span><span class=\"token operator\">=<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span>\n        required<span class=\"token operator\">=<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">help<\/span><span class=\"token operator\">=<\/span><span class=\"token string\">'\u691c\u7d22\u30af\u30a8\u30ea\u30c6\u30ad\u30b9\u30c8'<\/span>\n    <span class=\"token punctuation\">)<\/span>\n    parser<span class=\"token punctuation\">.<\/span>add_argument<span class=\"token punctuation\">(<\/span>\n        <span class=\"token string\">'--bucket'<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">type<\/span><span class=\"token operator\">=<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span>\n        default<span class=\"token operator\">=<\/span>os<span class=\"token punctuation\">.<\/span>getenv<span class=\"token punctuation\">(<\/span><span class=\"token string\">'VECTOR_BUCKET_NAME'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">help<\/span><span class=\"token operator\">=<\/span><span class=\"token string\">'S3 Vectors\u30d0\u30b1\u30c3\u30c8\u540d\uff08\u74b0\u5883\u5909\u6570: VECTOR_BUCKET_NAME\uff09'<\/span>\n    <span class=\"token punctuation\">)<\/span>\n    parser<span class=\"token punctuation\">.<\/span>add_argument<span class=\"token punctuation\">(<\/span>\n        <span class=\"token string\">'--index'<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">type<\/span><span class=\"token operator\">=<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span>\n        default<span class=\"token operator\">=<\/span>os<span class=\"token punctuation\">.<\/span>getenv<span class=\"token punctuation\">(<\/span><span class=\"token string\">'VECTOR_INDEX_NAME'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'markdown-embeddings'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">help<\/span><span class=\"token operator\">=<\/span><span class=\"token string\">'\u30d9\u30af\u30c8\u30eb\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u540d\uff08\u74b0\u5883\u5909\u6570: VECTOR_INDEX_NAME\uff09'<\/span>\n    <span class=\"token punctuation\">)<\/span>\n    parser<span class=\"token punctuation\">.<\/span>add_argument<span class=\"token punctuation\">(<\/span>\n        <span class=\"token string\">'--region'<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">type<\/span><span class=\"token operator\">=<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">,<\/span>\n        default<span class=\"token operator\">=<\/span>os<span class=\"token punctuation\">.<\/span>getenv<span class=\"token punctuation\">(<\/span><span class=\"token string\">'AWS_REGION'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'us-east-1'<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">help<\/span><span class=\"token operator\">=<\/span><span class=\"token string\">'AWS\u30ea\u30fc\u30b8\u30e7\u30f3\uff08\u74b0\u5883\u5909\u6570: AWS_REGION\uff09'<\/span>\n    <span class=\"token punctuation\">)<\/span>\n    parser<span class=\"token punctuation\">.<\/span>add_argument<span class=\"token punctuation\">(<\/span>\n        <span class=\"token string\">'--top-k'<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">type<\/span><span class=\"token operator\">=<\/span><span class=\"token builtin\">int<\/span><span class=\"token punctuation\">,<\/span>\n        default<span class=\"token operator\">=<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">help<\/span><span class=\"token operator\">=<\/span><span class=\"token string\">'\u8fd4\u3059\u691c\u7d22\u7d50\u679c\u306e\u6570'<\/span>\n    <span class=\"token punctuation\">)<\/span>\n    parser<span class=\"token punctuation\">.<\/span>add_argument<span class=\"token punctuation\">(<\/span>\n        <span class=\"token string\">'--enable-rag'<\/span><span class=\"token punctuation\">,<\/span>\n        action<span class=\"token operator\">=<\/span><span class=\"token string\">'store_true'<\/span><span class=\"token punctuation\">,<\/span>\n        <span class=\"token builtin\">help<\/span><span class=\"token operator\">=<\/span><span class=\"token string\">'Claude Sonnet 4\u3067RAG\u751f\u6210\u3092\u6709\u52b9\u5316'<\/span>\n    <span class=\"token punctuation\">)<\/span>\n\n    args <span class=\"token operator\">=<\/span> parser<span class=\"token punctuation\">.<\/span>parse_args<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n\n    \n    <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> args<span class=\"token punctuation\">.<\/span>bucket<span class=\"token punctuation\">:<\/span>\n        parser<span class=\"token punctuation\">.<\/span>error<span class=\"token punctuation\">(<\/span><span class=\"token string\">\"--bucket\u5f15\u6570\u307e\u305f\u306f\u74b0\u5883\u5909\u6570VECTOR_BUCKET_NAME\u304c\u5fc5\u8981\u3067\u3059\"<\/span><span class=\"token punctuation\">)<\/span>\n\n    config <span class=\"token operator\">=<\/span> QueryConfig<span class=\"token punctuation\">(<\/span>\n        vector_bucket_name<span class=\"token operator\">=<\/span>args<span class=\"token punctuation\">.<\/span>bucket<span class=\"token punctuation\">,<\/span>\n        index_name<span class=\"token operator\">=<\/span>args<span class=\"token punctuation\">.<\/span>index<span class=\"token punctuation\">,<\/span>\n        bedrock_region<span class=\"token operator\">=<\/span>args<span class=\"token punctuation\">.<\/span>region<span class=\"token punctuation\">,<\/span>\n        top_k<span class=\"token operator\">=<\/span>args<span class=\"token punctuation\">.<\/span>top_k\n    <span class=\"token punctuation\">)<\/span>\n\n    <span class=\"token keyword\">return<\/span> config<span class=\"token punctuation\">,<\/span> args<span class=\"token punctuation\">.<\/span>query<span class=\"token punctuation\">,<\/span> args<span class=\"token punctuation\">.<\/span>enable_rag\n\n\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">display_results<\/span><span class=\"token punctuation\">(<\/span>results<span class=\"token punctuation\">:<\/span> List<span class=\"token punctuation\">[<\/span>QueryResult<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token triple-quoted-string string\">\"\"\"\u691c\u7d22\u7d50\u679c\u3092\u6574\u5f62\u3057\u3066\u8868\u793a\"\"\"<\/span>\n    <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> results<span class=\"token punctuation\">:<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"\u691c\u7d22\u7d50\u679c\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002\"<\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">return<\/span>\n\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"\\n=== \u691c\u7d22\u7d50\u679c ===\\n\"<\/span><span class=\"token punctuation\">)<\/span>\n\n    <span class=\"token keyword\">for<\/span> idx<span class=\"token punctuation\">,<\/span> result <span class=\"token keyword\">in<\/span> <span class=\"token builtin\">enumerate<\/span><span class=\"token punctuation\">(<\/span>results<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n        file_name <span class=\"token operator\">=<\/span> result<span class=\"token punctuation\">.<\/span>metadata<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">'file_name'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'Unknown'<\/span><span class=\"token punctuation\">)<\/span>\n        file_path <span class=\"token operator\">=<\/span> result<span class=\"token punctuation\">.<\/span>metadata<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">'file_path'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">'Unknown'<\/span><span class=\"token punctuation\">)<\/span>\n\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"<\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>idx<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">. <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>file_name<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"   \u30ad\u30fc: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>result<span class=\"token punctuation\">.<\/span>key<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"   \u8ddd\u96e2: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>result<span class=\"token punctuation\">.<\/span>distance<span class=\"token punctuation\">:<\/span><span class=\"token format-spec\">.4f<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"   \u30d1\u30b9: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>file_path<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n\n        \n        text_preview <span class=\"token operator\">=<\/span> result<span class=\"token punctuation\">.<\/span>metadata<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">'text'<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">''<\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">if<\/span> text_preview<span class=\"token punctuation\">:<\/span>\n            preview <span class=\"token operator\">=<\/span> text_preview<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">100<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">+<\/span> <span class=\"token string\">\"...\"<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>text_preview<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">100<\/span> <span class=\"token keyword\">else<\/span> text_preview\n            <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"   \u30d7\u30ec\u30d3\u30e5\u30fc: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>preview<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n\n\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">display_rag_response<\/span><span class=\"token punctuation\">(<\/span>response<span class=\"token punctuation\">:<\/span> RAGResponse<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token triple-quoted-string string\">\"\"\"RAG\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u6574\u5f62\u3057\u3066\u8868\u793a\"\"\"<\/span>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"\\n=== RAG\u30ec\u30b9\u30dd\u30f3\u30b9 ===\\n\"<\/span><span class=\"token punctuation\">)<\/span>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"--- \u751f\u6210\u3055\u308c\u305f\u56de\u7b54 ---\"<\/span><span class=\"token punctuation\">)<\/span>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span>response<span class=\"token punctuation\">.<\/span>answer<span class=\"token punctuation\">)<\/span>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"----------------------\\n\"<\/span><span class=\"token punctuation\">)<\/span>\n\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"\u30bd\u30fc\u30b9:\"<\/span><span class=\"token punctuation\">)<\/span>\n    <span class=\"token keyword\">for<\/span> idx<span class=\"token punctuation\">,<\/span> source <span class=\"token keyword\">in<\/span> <span class=\"token builtin\">enumerate<\/span><span class=\"token punctuation\">(<\/span>response<span class=\"token punctuation\">.<\/span>sources<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"  <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>idx<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">. <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>source<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\\n\u30e2\u30c7\u30eb: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>response<span class=\"token punctuation\">.<\/span>model_id<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\u30c8\u30fc\u30af\u30f3: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>response<span class=\"token punctuation\">.<\/span>input_tokens<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u5165\u529b, <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>response<span class=\"token punctuation\">.<\/span>output_tokens<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\"> \u51fa\u529b\\n\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n\n\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span>\n    <span class=\"token triple-quoted-string string\">\"\"\"\u30e1\u30a4\u30f3\u30af\u30a8\u30ea\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\"\"\"<\/span>\n    <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span>\n        config<span class=\"token punctuation\">,<\/span> query_text<span class=\"token punctuation\">,<\/span> enable_rag <span class=\"token operator\">=<\/span> parse_args<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"\\n=== S3 Vectors - QueryVectors ===\"<\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\u30d0\u30b1\u30c3\u30c8: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>config<span class=\"token punctuation\">.<\/span>vector_bucket_name<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>config<span class=\"token punctuation\">.<\/span>index_name<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"RAG: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span><span class=\"token string\">'\u6709\u52b9'<\/span> <span class=\"token keyword\">if<\/span> enable_rag <span class=\"token keyword\">else<\/span> <span class=\"token string\">'\u7121\u52b9'<\/span><span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\\n\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n\n        \n        searcher <span class=\"token operator\">=<\/span> S3VectorsQuery<span class=\"token punctuation\">(<\/span>config<span class=\"token punctuation\">)<\/span>\n        results <span class=\"token operator\">=<\/span> searcher<span class=\"token punctuation\">.<\/span>search<span class=\"token punctuation\">(<\/span>query_text<span class=\"token punctuation\">)<\/span>\n\n        \n        display_results<span class=\"token punctuation\">(<\/span>results<span class=\"token punctuation\">)<\/span>\n\n        \n        <span class=\"token keyword\">if<\/span> enable_rag <span class=\"token keyword\">and<\/span> results<span class=\"token punctuation\">:<\/span>\n            <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span>\n                generator <span class=\"token operator\">=<\/span> RAGGenerator<span class=\"token punctuation\">(<\/span>config<span class=\"token punctuation\">)<\/span>\n                rag_response <span class=\"token operator\">=<\/span> generator<span class=\"token punctuation\">.<\/span>generate_response<span class=\"token punctuation\">(<\/span>query_text<span class=\"token punctuation\">,<\/span> results<span class=\"token punctuation\">)<\/span>\n                display_rag_response<span class=\"token punctuation\">(<\/span>rag_response<span class=\"token punctuation\">)<\/span>\n            <span class=\"token keyword\">except<\/span> Exception <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\\nRAG\u751f\u6210\u306b\u5931\u6557\u3057\u307e\u3057\u305f: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n                <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"\u691c\u7d22\u7d50\u679c\u306e\u307f\u3092\u8868\u793a\u3057\u307e\u3059\\n\"<\/span><span class=\"token punctuation\">)<\/span>\n                logger<span class=\"token punctuation\">.<\/span>exception<span class=\"token punctuation\">(<\/span><span class=\"token string\">\"RAG\u751f\u6210\u306b\u5931\u6557\u3057\u307e\u3057\u305f\"<\/span><span class=\"token punctuation\">)<\/span>\n\n    <span class=\"token keyword\">except<\/span> Exception <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string-interpolation\"><span class=\"token string\">f\"\\n\u2717 \u30af\u30a8\u30ea\u5931\u6557: <\/span><span class=\"token interpolation\"><span class=\"token punctuation\">{<\/span>e<span class=\"token punctuation\">}<\/span><\/span><span class=\"token string\">\\n\"<\/span><\/span><span class=\"token punctuation\">)<\/span>\n        logger<span class=\"token punctuation\">.<\/span>exception<span class=\"token punctuation\">(<\/span><span class=\"token string\">\"\u30af\u30a8\u30ea\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u304c\u5931\u6557\u3057\u307e\u3057\u305f\"<\/span><span class=\"token punctuation\">)<\/span>\n        sys<span class=\"token punctuation\">.<\/span>exit<span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span>\n\n\n<span class=\"token keyword\">if<\/span> __name__ <span class=\"token operator\">==<\/span> <span class=\"token string\">\"__main__\"<\/span><span class=\"token punctuation\">:<\/span>\n    main<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>\n<\/code><\/pre>\n<\/div>\n<hr data-line=\"1314\" class=\"code-line\"\/>\n<h3 id=\"3.-%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88\" data-line=\"1316\" class=\"code-line\">\n 3. \u30b5\u30f3\u30d7\u30eb\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/h3>\n<p data-line=\"1317\" class=\"code-line\">\u30d9\u30af\u30c8\u30eb\u5316\u3059\u308b\u30b5\u30f3\u30d7\u30eb\u306e\u30de\u30fc\u30af\u30c0\u30a6\u30f3\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002<\/p>\n<div class=\"code-block-container\">\n<p><span class=\"code-block-filename\">sample-docs\/fusic-brand-slogan.md<\/span><\/p>\n<pre class=\"language-markdown\"><code class=\"language-markdown code-line\" data-line=\"1319\"><span class=\"token title important\"><span class=\"token punctuation\">#<\/span> Fusic\u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3<\/span>\n\n<span class=\"token title important\"><span class=\"token punctuation\">##<\/span> \u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\u3092\u5b9a\u3081\u305f\u80cc\u666f\u3068\u76ee\u7684<\/span>\n\n\u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\u3092\u5b9a\u3081\u305f\u80cc\u666f\u306b\u306f\u3001\u5f53\u793e\u304c\u63b2\u3052\u308b\u30df\u30c3\u30b7\u30e7\u30f3\u30fb\u30d3\u30b8\u30e7\u30f3\u306b\u7acb\u3061\u8fd4\u308a\u3001\u300c\u79c1\u305f\u3061\u306f\u4e16\u306e\u4e2d\u306b\u5bfe\u3057\u3066\u4f55\u3092\u6210\u3059\u306e\u304b\u300d\u3068\u3044\u3046\u610f\u601d\u3084\u7d04\u675f\u3092\u3001\u3042\u3089\u305f\u3081\u3066\u5b9a\u7fa9\u3057\u3088\u3046\u3068\u3044\u3046\u60f3\u3044\u304c\u3042\u308a\u307e\u3057\u305f\u3002\u793e\u5185\u30a4\u30f3\u30bf\u30d3\u30e5\u30fc\u3084\u30ef\u30fc\u30af\u30b7\u30e7\u30c3\u30d7\u3092\u91cd\u306d\u3001\u4e01\u5be7\u306b\u5411\u304d\u5408\u3044\u3001\u3053\u3060\u308f\u308a\u629c\u3044\u3066\u3001\u5c11\u3057\u305a\u3064\u8a00\u8449\u3092\u7d21\u304e\u3060\u3057\u3066\u3044\u3063\u305f\u7d50\u679c\u3001\u751f\u307e\u308c\u305f\u306e\u304c\u3053\u306e\u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\u3067\u3059\u3002\n\n<span class=\"token title important\"><span class=\"token punctuation\">###<\/span> \u30df\u30c3\u30b7\u30e7\u30f3<\/span>\n\n\u300cWhy we do\u300d\u81ea\u5206\u305f\u3061\u306e\u5728\u308a\u65b9\n\n<span class=\"token bold\"><span class=\"token punctuation\">**<\/span><span class=\"token content\">\"\u4eba\u306b\u591a\u69d8\u306a\u9053\u3092 \u4e16\u306e\u4e2d\u306b\u722a\u8de1\u3092\"<\/span><span class=\"token punctuation\">**<\/span><\/span>\n\n<span class=\"token title important\"><span class=\"token punctuation\">###<\/span> \u30d3\u30b8\u30e7\u30f3<\/span>\n\n\u300cWhat we do\u300d\u65e5\u3005\u306e\u5fc3\u5f97\n\n<span class=\"token bold\"><span class=\"token punctuation\">**<\/span><span class=\"token content\">\"\u500b\u6027\u3092\u304b\u304d\u96c6\u3081\u3066\u3001\u9a5a\u304d\u306e\u89d2\u5ea6\u304b\u3089\u4e16\u306e\u4e2d\u3092\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3057\u3064\u3065\u3051\u308b\u3002\"<\/span><span class=\"token punctuation\">**<\/span><\/span>\n\n\u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\u3092\u5b9a\u3081\u308b\u76ee\u7684\u306f\u3001\u30b9\u30ed\u30fc\u30ac\u30f3\u3068\u3044\u3046\u5171\u901a\u8a00\u8a9e\u3092\u6301\u3064\u3053\u3068\u306b\u3088\u3063\u3066\u3001\u30e1\u30f3\u30d0\u30fc\u5168\u54e1\u304c\u540c\u3058\u76ee\u7dda\u3067\u4f1a\u8a71\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u3001Fusic\u30d6\u30e9\u30f3\u30c9\u3092\u4e16\u306e\u4e2d\u306b\u9069\u5207\u306a\u5f62\u3067\u5c4a\u3051\u308b\u3053\u3068\u3067\u3059\u3002\n\n<span class=\"token title important\"><span class=\"token punctuation\">##<\/span> \u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\u306b\u8fbc\u3081\u305f\u60f3\u3044\u3068\u610f\u5473<\/span>\n\n<span class=\"token title important\"><span class=\"token punctuation\">###<\/span> \u300cOSEKKAI \u00d7 TECHNOLOGY\u300d<\/span>\n\n\u3053\u306e\u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\u306f\u3001Fusic \u306e\u672c\u8cea\u7684\u306a\u4fa1\u5024\u3092\u8868\u3057\u305f\u3082\u306e\u3067\u3059\u3002\u81ea\u5206\u305f\u3061\u306e\u5728\u308a\u65b9\u3067\u3042\u308b\u300cWhy we do\u300d\u3092\u5b9f\u73fe\u3059\u308b\u305f\u3081\u306b\u3001\u65e5\u3005\u306e\u5fc3\u5f97\u3067\u3042\u308b\u300cWhat we do\u300d\u3092\u5b9f\u884c\u3057\u3001\u305d\u306e\u7d50\u679c\u3068\u3057\u3066\u793e\u4f1a\u306b\u8ca2\u732e\u3057\u3066\u3044\u308b\u4fa1\u5024\u3092\u8868\u73fe\u3057\u3066\u3044\u307e\u3059\u3002\n\n<span class=\"token title important\"><span class=\"token punctuation\">###<\/span> \u300c\u30b3\u30b3\u30ed\u3068\u6280\u8853\u3067\u3001\u3074\u3063\u305f\u308a\u3082\u3001\u3073\u3063\u304f\u308a\u3082\u3002\u300d<\/span>\n\n\u3053\u306e\u30b5\u30d6\u30b3\u30d4\u30fc\u306f\u3001\u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\u3092\u88dc\u5f37\u3059\u308b\u8a00\u8449\u3068\u3057\u3066\u3001\u304a\u5ba2\u3055\u307e\u4e00\u4eba\u3072\u3068\u308a\u3068\u4e01\u5be7\u306b\u5411\u304d\u5408\u3044\u3001\u4f34\u8d70\u3057\u306a\u304c\u3089\u3001\u6c42\u3081\u3089\u308c\u3066\u3044\u308b\u3082\u306e\u4ee5\u4e0a\u306e\u30d7\u30e9\u30b9\u03b1\u3092\u63d0\u4f9b\u3057\u3066\u3044\u304f\u3068\u3044\u3046\u79c1\u305f\u3061\u306e\u59ff\u52e2\u3092\u8868\u3057\u3066\u3044\u307e\u3059\u3002\n\n\u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\u306e\u4fa1\u5024\u89b3\u3084\u76ee\u6307\u3059\u65b9\u5411\u6027\u3092\u307e\u3068\u3081\u305f\u300c\u30d6\u30e9\u30f3\u30c9\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u300d\u3082\u5b9a\u3081\u307e\u3057\u305f\u3002\n<\/code><\/pre>\n<\/div>\n<hr data-line=\"1353\" class=\"code-line\"\/>\n<h3 id=\"4.-%E5%AE%9F%E8%A1%8C\" data-line=\"1355\" class=\"code-line\">\n 4. \u5b9f\u884c<\/h3>\n<h4 id=\"putvectors%EF%BC%88%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E6%8C%BF%E5%85%A5%EF%BC%89\" data-line=\"1357\" class=\"code-line\">\n PutVectors\uff08\u30d9\u30af\u30c8\u30eb\u633f\u5165\uff09<\/h4>\n<div class=\"code-block-container\">\n<pre class=\"language-bash\"><code class=\"language-bash code-line\" data-line=\"1358\">uv run python scripts\/put_vectors.py --source-dir .\/sample-docs\n<\/code><\/pre>\n<\/div>\n<details>\n<summary>\u5b9f\u884c\u7d50\u679c<\/summary>\n<div class=\"details-content\">\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"1363\">\n=== S3 Vectors - PutVectors ===\n\u30bd\u30fc\u30b9: sample-docs\n\u30d0\u30b1\u30c3\u30c8: s3vectors-rag-dev-vectors\n\u30a4\u30f3\u30c7\u30c3\u30af\u30b9: markdown-embeddings\n\u6b21\u5143\u6570: 1024\n\n\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u30b9\u30ad\u30e3\u30f3\u4e2d: sample-docs\n\u2713 \u691c\u51fa: sample-docs\/fusic-brand-slogan.md\n\u691c\u51fa\u30d5\u30a1\u30a4\u30eb\u6570: 1\n\n\u30b9\u30c6\u30c3\u30d71\u5b8c\u4e86: 1\u30d5\u30a1\u30a4\u30eb\u3092\u30b9\u30ad\u30e3\u30f3\n\n2025-12-04 18:41:15,784 - INFO - Found credentials in shared credentials file: ~\/.aws\/credentials\n\u51e6\u7406\u4e2d 1\/1: fusic-brand-slogan.md\n\u2713 \u57cb\u3081\u8fbc\u307f\u5b8c\u4e86: fusic-brand-slogan.md (689\u30c8\u30fc\u30af\u30f3)\n\n\u30b9\u30c6\u30c3\u30d72\u5b8c\u4e86: 1\u4ef6\u306e\u57cb\u3081\u8fbc\u307f\u3092\u751f\u6210\n\n1\u4ef6\u306e\u30d9\u30af\u30c8\u30eb\u3092\u633f\u5165\u4e2d...\n\u2713 \u30d9\u30af\u30c8\u30eb\u306e\u633f\u5165\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f\n\n\u2713 PutVectors\u5b8c\u4e86!\n\u51e6\u7406\u30d5\u30a1\u30a4\u30eb\u6570: 1\n\u633f\u5165\u30d9\u30af\u30c8\u30eb\u6570: 1\n\u51e6\u7406\u6642\u9593: 2.88\u79d2\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/details>\n<h4 id=\"queryvectors%EF%BC%88%E6%A4%9C%E7%B4%A2%E3%81%AE%E3%81%BF%EF%BC%89\" data-line=\"1393\" class=\"code-line\">\n QueryVectors\uff08\u691c\u7d22\u306e\u307f\uff09<\/h4>\n<div class=\"code-block-container\">\n<pre class=\"language-bash\"><code class=\"language-bash code-line\" data-line=\"1394\">uv run python scripts\/query_vectors.py   <span class=\"token parameter variable\">--query<\/span> <span class=\"token string\">\"Fusic\u306e\u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\u306b\u3064\u3044\u3066\u6559\u3048\u3066\"<\/span>\n<\/code><\/pre>\n<\/div>\n<details>\n<summary>\u5b9f\u884c\u7d50\u679c<\/summary>\n<div class=\"details-content\">\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"1398\">\n=== S3 Vectors - QueryVectors ===\n\u30d0\u30b1\u30c3\u30c8: s3vectors-rag-dev-vectors\n\u30a4\u30f3\u30c7\u30c3\u30af\u30b9: markdown-embeddings\nRAG: \u7121\u52b9\n\n2025-12-04 18:45:23,823 - INFO - Found credentials in shared credentials file: ~\/.aws\/credentials\n\u30af\u30a8\u30ea: Fusic\u306e\u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\u306b\u3064\u3044\u3066\u6559\u3048\u3066\n\u2713 \u30af\u30a8\u30ea\u3092\u30d9\u30af\u30c8\u30eb\u5316: 1024\u6b21\u5143\nS3 Vectors\u3092\u691c\u7d22\u4e2d...\n\u2713 \u691c\u7d22\u5b8c\u4e86: 1\u4ef6\u306e\u7d50\u679c\n\n\n=== \u691c\u7d22\u7d50\u679c ===\n\n1. fusic-brand-slogan.md\n   \u30ad\u30fc: doc_1_fusic-brand-slogan\n   \u8ddd\u96e2: 0.3428\n   \u30d1\u30b9: sample-docs\/fusic-brand-slogan.md\n   \u30d7\u30ec\u30d3\u30e5\u30fc: # Fusic\u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\n\n## \u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\u3092\u5b9a\u3081\u305f\u80cc\u666f\u3068\u76ee\u7684\n\n\u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\u3092\u5b9a\u3081\u305f\u80cc\u666f\u306b\u306f\u3001\u5f53\u793e\u304c\u63b2\u3052\u308b\u30df\u30c3\u30b7\u30e7\u30f3\u30fb\u30d3\u30b8\u30e7\u30f3\u306b\u7acb\u3061\u8fd4\u308a\u3001\u300c\u79c1\u305f\u3061\u306f\u4e16\u306e\u4e2d\u306b\u5bfe\u3057\u3066\u4f55\u3092\u6210\u3059\u306e\u304b\u300d...\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/details>\n<h4 id=\"queryvectors-%2B-rag%EF%BC%88%E5%9B%9E%E7%AD%94%E7%94%9F%E6%88%90%EF%BC%89\" data-line=\"1425\" class=\"code-line\">\n QueryVectors + RAG\uff08\u56de\u7b54\u751f\u6210\uff09<\/h4>\n<div class=\"code-block-container\">\n<pre class=\"language-bash\"><code class=\"language-bash code-line\" data-line=\"1426\">uv run python scripts\/query_vectors.py <span class=\"token punctuation\">\\<\/span>\n  <span class=\"token parameter variable\">--query<\/span> <span class=\"token string\">\"Fusic\u306e\u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\u306b\u3064\u3044\u3066\u6559\u3048\u3066\"<\/span> <span class=\"token punctuation\">\\<\/span>\n  --enable-rag\n<\/code><\/pre>\n<\/div>\n<details>\n<summary>\u5b9f\u884c\u7d50\u679c<\/summary>\n<div class=\"details-content\">\n<div class=\"code-block-container\">\n<pre><code class=\"code-line\" data-line=\"1432\">uv run python scripts\/query_vectors.py \\\n  --query \"Fusic\u306e\u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\u306b\u3064\u3044\u3066\u6559\u3048\u3066\" \\\n  --enable-rag\n\n=== S3 Vectors - QueryVectors ===\n\u30d0\u30b1\u30c3\u30c8: s3vectors-rag-dev-vectors\n\u30a4\u30f3\u30c7\u30c3\u30af\u30b9: markdown-embeddings\nRAG: \u6709\u52b9\n\n2025-12-04 18:46:17,163 - INFO - Found credentials in shared credentials file: ~\/.aws\/credentials\n\u30af\u30a8\u30ea: Fusic\u306e\u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\u306b\u3064\u3044\u3066\u6559\u3048\u3066\n\u2713 \u30af\u30a8\u30ea\u3092\u30d9\u30af\u30c8\u30eb\u5316: 1024\u6b21\u5143\nS3 Vectors\u3092\u691c\u7d22\u4e2d...\n\u2713 \u691c\u7d22\u5b8c\u4e86: 1\u4ef6\u306e\u7d50\u679c\n\n\n=== \u691c\u7d22\u7d50\u679c ===\n\n1. fusic-brand-slogan.md\n   \u30ad\u30fc: doc_1_fusic-brand-slogan\n   \u8ddd\u96e2: 0.3428\n   \u30d1\u30b9: sample-docs\/fusic-brand-slogan.md\n   \u30d7\u30ec\u30d3\u30e5\u30fc: # Fusic\u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\n\n## \u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\u3092\u5b9a\u3081\u305f\u80cc\u666f\u3068\u76ee\u7684\n\n\u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\u3092\u5b9a\u3081\u305f\u80cc\u666f\u306b\u306f\u3001\u5f53\u793e\u304c\u63b2\u3052\u308b\u30df\u30c3\u30b7\u30e7\u30f3\u30fb\u30d3\u30b8\u30e7\u30f3\u306b\u7acb\u3061\u8fd4\u308a\u3001\u300c\u79c1\u305f\u3061\u306f\u4e16\u306e\u4e2d\u306b\u5bfe\u3057\u3066\u4f55\u3092\u6210\u3059\u306e\u304b\u300d...\n\nClaude Sonnet 4\u3067RAG\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u751f\u6210\u4e2d...\n\n=== RAG\u30ec\u30b9\u30dd\u30f3\u30b9 ===\n\n--- \u751f\u6210\u3055\u308c\u305f\u56de\u7b54 ---\nFusic\u306e\u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\u306b\u3064\u3044\u3066\u3054\u8aac\u660e\u3057\u307e\u3059\u3002\n\n## \u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\n**\u300cOSEKKAI \u00d7 TECHNOLOGY\u300d**\n\n## \u30b5\u30d6\u30b3\u30d4\u30fc\n**\u300c\u30b3\u30b3\u30ed\u3068\u6280\u8853\u3067\u3001\u3074\u3063\u305f\u308a\u3082\u3001\u3073\u3063\u304f\u308a\u3082\u3002\u300d**\n\n## \u7b56\u5b9a\u306e\u80cc\u666f\u3068\u76ee\u7684\n\u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\u306f\u3001Fusic\u306e\u30df\u30c3\u30b7\u30e7\u30f3\u30fb\u30d3\u30b8\u30e7\u30f3\u306b\u7acb\u3061\u8fd4\u308a\u3001\u300c\u79c1\u305f\u3061\u306f\u4e16\u306e\u4e2d\u306b\u5bfe\u3057\u3066\u4f55\u3092\u6210\u3059\u306e\u304b\u300d\u3068\u3044\u3046\u610f\u601d\u3084\u7d04\u675f\u3092\u660e\u78ba\u306b\u5b9a\u7fa9\u3059\u308b\u305f\u3081\u306b\u7b56\u5b9a\u3055\u308c\u307e\u3057\u305f\u3002\u793e\u5185\u30a4\u30f3\u30bf\u30d3\u30e5\u30fc\u3084\u30ef\u30fc\u30af\u30b7\u30e7\u30c3\u30d7\u3092\u91cd\u306d\u3066\u4e01\u5be7\u306b\u691c\u8a0e\u3057\u305f\u7d50\u679c\u3001\u751f\u307e\u308c\u305f\u3082\u306e\u3067\u3059\u3002\n\n\u76ee\u7684\u306f\u3001\u30b9\u30ed\u30fc\u30ac\u30f3\u3068\u3044\u3046\u5171\u901a\u8a00\u8a9e\u3092\u6301\u3064\u3053\u3068\u3067\u3001\u30e1\u30f3\u30d0\u30fc\u5168\u54e1\u304c\u540c\u3058\u76ee\u7dda\u3067\u4f1a\u8a71\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u3001Fusic\u30d6\u30e9\u30f3\u30c9\u3092\u4e16\u306e\u4e2d\u306b\u9069\u5207\u306a\u5f62\u3067\u5c4a\u3051\u308b\u3053\u3068\u3067\u3059\u3002\n\n## \u8fbc\u3081\u3089\u308c\u305f\u60f3\u3044\n- **\u300cOSEKKAI \u00d7 TECHNOLOGY\u300d**\uff1aFusic\u306e\u672c\u8cea\u7684\u306a\u4fa1\u5024\u3092\u8868\u73fe\u3057\u305f\u3082\u306e\u3067\u3001\u30df\u30c3\u30b7\u30e7\u30f3\uff08Why we do\uff09\u3092\u5b9f\u73fe\u3059\u308b\u305f\u3081\u306b\u30d3\u30b8\u30e7\u30f3\uff08What we do\uff09\u3092\u5b9f\u884c\u3057\u3001\u305d\u306e\u7d50\u679c\u3068\u3057\u3066\u793e\u4f1a\u306b\u8ca2\u732e\u3057\u3066\u3044\u308b\u4fa1\u5024\u3092\u8868\u73fe\u3057\u3066\u3044\u307e\u3059\u3002\n\n- **\u300c\u30b3\u30b3\u30ed\u3068\u6280\u8853\u3067\u3001\u3074\u3063\u305f\u308a\u3082\u3001\u3073\u3063\u304f\u308a\u3082\u3002\u300d**\uff1a\u304a\u5ba2\u3055\u307e\u4e00\u4eba\u3072\u3068\u308a\u3068\u4e01\u5be7\u306b\u5411\u304d\u5408\u3044\u3001\u4f34\u8d70\u3057\u306a\u304c\u3089\u3001\u6c42\u3081\u3089\u308c\u3066\u3044\u308b\u3082\u306e\u4ee5\u4e0a\u306e\u30d7\u30e9\u30b9\u03b1\u3092\u63d0\u4f9b\u3057\u3066\u3044\u304f\u3068\u3044\u3046\u59ff\u52e2\u3092\u8868\u73fe\u3057\u3066\u3044\u307e\u3059\u3002\n\n\u3053\u306e\u30d6\u30e9\u30f3\u30c9\u30b9\u30ed\u30fc\u30ac\u30f3\u306f\u3001Fusic\u306e\u4fa1\u5024\u89b3\u3084\u76ee\u6307\u3059\u65b9\u5411\u6027\u3092\u307e\u3068\u3081\u305f\u300c\u30d6\u30e9\u30f3\u30c9\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u300d\u3068\u3068\u3082\u306b\u5b9a\u3081\u3089\u308c\u3066\u3044\u307e\u3059\u3002\n----------------------\n\n\u30bd\u30fc\u30b9:\n  1. sample-docs\/fusic-brand-slogan.md\n\n\u30e2\u30c7\u30eb: us.anthropic.claude-sonnet-4-20250514-v1:0\n\u30c8\u30fc\u30af\u30f3: 808 \u5165\u529b, 469 \u51fa\u529b\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/details>\n<hr data-line=\"1494\" class=\"code-line\"\/>\n<h3 id=\"5.-%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E5%89%8A%E9%99%A4\" data-line=\"1496\" class=\"code-line\">\n 5. \u30ea\u30bd\u30fc\u30b9\u524a\u9664<\/h3>\n<div class=\"code-block-container\">\n<pre class=\"language-bash\"><code class=\"language-bash code-line\" data-line=\"1498\"><span class=\"token builtin class-name\">cd<\/span> envs\/dev\nterraform destroy\n<\/code><\/pre>\n<\/div>\n<h2 id=\"%E6%9C%80%E5%BE%8C%E3%81%AB\" data-line=\"1505\" class=\"code-line\">\n \u6700\u5f8c\u306b<\/h2>\n<p data-line=\"1506\" class=\"code-line\">\u4eca\u56de\u306fTerraform\u3068Amazon S3 Vectors\u3067RAG\u3092\u3084\u3063\u3066\u307f\u308b\u30b3\u30fc\u30c9\u3092\u89e3\u8aac\u3057\u307e\u3057\u305f\u3002GA\u3055\u308c\u305f\u3053\u3068\u306b\u3088\u308a\u3001Terraform 6.24.0\u304b\u3089\u4f7f\u3048\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n<\/div>\n\n<br \/><a href=\"https:\/\/zenn.dev\/fusic\/articles\/94816aec1e38a9\">\u5143\u306e\u8a18\u4e8b\u3092\u78ba\u8a8d\u3059\u308b <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\u306f\u3058\u3081\u306b AWS re:Invent 2025\u3067Amazon S3 Vectors\u304cGA\u3055\u308c\u307e\u3057\u305f\u3002\u305d\u308c\u306b\u4f34\u3044\u3001Terraform 6.24.0\u304b\u3089S3 Vectors\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u305f\u306e\u3067\u672c\u30d6\u30ed\u30b0\u306fTerraform\u3067R [&hellip;]","protected":false},"author":1,"featured_media":26415,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-26414","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-company-tec"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Terraform\u3067\u306f\u3058\u3081\u308b Amazon S3 Vectors \u3092\u4f7f\u3063\u305fRAG\u69cb\u7bc9\u30cf\u30f3\u30ba\u30aa\u30f3 - \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\/fusic\/articles\/94816aec1e38a9\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Terraform\u3067\u306f\u3058\u3081\u308b Amazon S3 Vectors \u3092\u4f7f\u3063\u305fRAG\u69cb\u7bc9\u30cf\u30f3\u30ba\u30aa\u30f3 - \u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"og:description\" content=\"\u306f\u3058\u3081\u306b AWS re:Invent 2025\u3067Amazon S3 Vectors\u304cGA\u3055\u308c\u307e\u3057\u305f\u3002\u305d\u308c\u306b\u4f34\u3044\u3001Terraform 6.24.0\u304b\u3089S3 Vectors\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u305f\u306e\u3067\u672c\u30d6\u30ed\u30b0\u306fTerraform\u3067R [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zenn.dev\/fusic\/articles\/94816aec1e38a9\" \/>\n<meta property=\"og:site_name\" content=\"\u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-04T11:07:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/12\/1764846455_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=\"17\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/zenn.dev\\\/fusic\\\/articles\\\/94816aec1e38a9#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/26414\\\/\"},\"author\":{\"name\":\"info@pokecon.jp\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"headline\":\"Terraform\u3067\u306f\u3058\u3081\u308b Amazon S3 Vectors \u3092\u4f7f\u3063\u305fRAG\u69cb\u7bc9\u30cf\u30f3\u30ba\u30aa\u30f3\",\"datePublished\":\"2025-12-04T11:07:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/26414\\\/\"},\"wordCount\":160,\"image\":{\"@id\":\"https:\\\/\\\/zenn.dev\\\/fusic\\\/articles\\\/94816aec1e38a9#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/1764846455_og-base-w1200-v2.png\",\"articleSection\":[\"\u4f01\u696d\u30c6\u30c3\u30af\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/26414\\\/\",\"url\":\"https:\\\/\\\/zenn.dev\\\/fusic\\\/articles\\\/94816aec1e38a9\",\"name\":\"Terraform\u3067\u306f\u3058\u3081\u308b Amazon S3 Vectors \u3092\u4f7f\u3063\u305fRAG\u69cb\u7bc9\u30cf\u30f3\u30ba\u30aa\u30f3 - \u30dd\u30b1\u30b3\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/zenn.dev\\\/fusic\\\/articles\\\/94816aec1e38a9#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/zenn.dev\\\/fusic\\\/articles\\\/94816aec1e38a9#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/1764846455_og-base-w1200-v2.png\",\"datePublished\":\"2025-12-04T11:07:36+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zenn.dev\\\/fusic\\\/articles\\\/94816aec1e38a9#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zenn.dev\\\/fusic\\\/articles\\\/94816aec1e38a9\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/zenn.dev\\\/fusic\\\/articles\\\/94816aec1e38a9#primaryimage\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/1764846455_og-base-w1200-v2.png\",\"contentUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/1764846455_og-base-w1200-v2.png\",\"width\":1200,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zenn.dev\\\/fusic\\\/articles\\\/94816aec1e38a9#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Terraform\u3067\u306f\u3058\u3081\u308b Amazon S3 Vectors \u3092\u4f7f\u3063\u305fRAG\u69cb\u7bc9\u30cf\u30f3\u30ba\u30aa\u30f3\"}]},{\"@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":"Terraform\u3067\u306f\u3058\u3081\u308b Amazon S3 Vectors \u3092\u4f7f\u3063\u305fRAG\u69cb\u7bc9\u30cf\u30f3\u30ba\u30aa\u30f3 - \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\/fusic\/articles\/94816aec1e38a9","og_locale":"ja_JP","og_type":"article","og_title":"Terraform\u3067\u306f\u3058\u3081\u308b Amazon S3 Vectors \u3092\u4f7f\u3063\u305fRAG\u69cb\u7bc9\u30cf\u30f3\u30ba\u30aa\u30f3 - \u30dd\u30b1\u30b3\u30f3","og_description":"\u306f\u3058\u3081\u306b AWS re:Invent 2025\u3067Amazon S3 Vectors\u304cGA\u3055\u308c\u307e\u3057\u305f\u3002\u305d\u308c\u306b\u4f34\u3044\u3001Terraform 6.24.0\u304b\u3089S3 Vectors\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u305f\u306e\u3067\u672c\u30d6\u30ed\u30b0\u306fTerraform\u3067R [&hellip;]","og_url":"https:\/\/zenn.dev\/fusic\/articles\/94816aec1e38a9","og_site_name":"\u30dd\u30b1\u30b3\u30f3","article_published_time":"2025-12-04T11:07:36+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/12\/1764846455_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":"17\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zenn.dev\/fusic\/articles\/94816aec1e38a9#article","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/26414\/"},"author":{"name":"info@pokecon.jp","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"headline":"Terraform\u3067\u306f\u3058\u3081\u308b Amazon S3 Vectors \u3092\u4f7f\u3063\u305fRAG\u69cb\u7bc9\u30cf\u30f3\u30ba\u30aa\u30f3","datePublished":"2025-12-04T11:07:36+00:00","mainEntityOfPage":{"@id":"https:\/\/pokecon.jp\/job\/26414\/"},"wordCount":160,"image":{"@id":"https:\/\/zenn.dev\/fusic\/articles\/94816aec1e38a9#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/12\/1764846455_og-base-w1200-v2.png","articleSection":["\u4f01\u696d\u30c6\u30c3\u30af"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/pokecon.jp\/job\/26414\/","url":"https:\/\/zenn.dev\/fusic\/articles\/94816aec1e38a9","name":"Terraform\u3067\u306f\u3058\u3081\u308b Amazon S3 Vectors \u3092\u4f7f\u3063\u305fRAG\u69cb\u7bc9\u30cf\u30f3\u30ba\u30aa\u30f3 - \u30dd\u30b1\u30b3\u30f3","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/#website"},"primaryImageOfPage":{"@id":"https:\/\/zenn.dev\/fusic\/articles\/94816aec1e38a9#primaryimage"},"image":{"@id":"https:\/\/zenn.dev\/fusic\/articles\/94816aec1e38a9#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/12\/1764846455_og-base-w1200-v2.png","datePublished":"2025-12-04T11:07:36+00:00","author":{"@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"breadcrumb":{"@id":"https:\/\/zenn.dev\/fusic\/articles\/94816aec1e38a9#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zenn.dev\/fusic\/articles\/94816aec1e38a9"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/zenn.dev\/fusic\/articles\/94816aec1e38a9#primaryimage","url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/12\/1764846455_og-base-w1200-v2.png","contentUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/12\/1764846455_og-base-w1200-v2.png","width":1200,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/zenn.dev\/fusic\/articles\/94816aec1e38a9#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/pokecon.jp\/job\/"},{"@type":"ListItem","position":2,"name":"Terraform\u3067\u306f\u3058\u3081\u308b Amazon S3 Vectors \u3092\u4f7f\u3063\u305fRAG\u69cb\u7bc9\u30cf\u30f3\u30ba\u30aa\u30f3"}]},{"@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\/26414","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=26414"}],"version-history":[{"count":1,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/26414\/revisions"}],"predecessor-version":[{"id":26416,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/26414\/revisions\/26416"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media\/26415"}],"wp:attachment":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media?parent=26414"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/categories?post=26414"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/tags?post=26414"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}