[{"data":1,"prerenderedAt":437},["ShallowReactive",2],{"tag-Bedrock-1":3},{"items":4,"tagArticleCount":350,"categoryesArticleCount":421,"parPage":436,"PageCount":380,"currentPage":380,"selectedCategory":-1,"selectedTag":15},[5],{"_path":6,"_dir":7,"_draft":8,"_partial":8,"_locale":9,"title":10,"description":9,"category":11,"tags":13,"sumb":17,"sumb_alt":18,"sumb_fit":19,"createdAt":20,"updatedAt":20,"excerpt":21,"body":54,"_type":344,"_id":345,"_source":346,"_file":347,"_stem":348,"_extension":349},"\u002Fpost\u002F2024-12-08","post",false,"","ギャルがニュースをまとめてメールしてくれるやつを作った",[12],"開発・技術",[14,15,16],"AWS","Bedrock","AI","2024-12-08\u002Fpose_galpeace_schoolgirl.png","no image image","outside","2024-12-07 23:30",{"type":22,"children":23},"root",[24,32,44,49],{"type":25,"tag":26,"props":27,"children":29},"element","h2",{"id":28},"intro",[30],{"type":31,"value":28},"text",{"type":25,"tag":33,"props":34,"children":35},"p",{},[36,38,42],{"type":31,"value":37},"amazon nova 実装記念で何か作りたくなってしまった。",{"type":25,"tag":39,"props":40,"children":41},"br",{},[],{"type":31,"value":43},"\n超安いらしい。",{"type":25,"tag":33,"props":45,"children":46},{},[47],{"type":31,"value":48},"めちゃくちゃ安いなら使い方に気を使わなくても気軽に使えるので今後のために触ってみたい感じもある。",{"type":25,"tag":33,"props":50,"children":51},{},[52],{"type":31,"value":53},"ということで簡単に何か作ってみることにする",{"type":22,"children":55,"toc":328},[56,60,68,72,76,81,96,101,106,113,123,130,140,150,156,161,176,181,187,197,207,212,217,223,237,247,257,262,267,272,282,288,293,298,313,318],{"type":25,"tag":26,"props":57,"children":58},{"id":28},[59],{"type":31,"value":28},{"type":25,"tag":33,"props":61,"children":62},{},[63,64,67],{"type":31,"value":37},{"type":25,"tag":39,"props":65,"children":66},{},[],{"type":31,"value":43},{"type":25,"tag":33,"props":69,"children":70},{},[71],{"type":31,"value":48},{"type":25,"tag":33,"props":73,"children":74},{},[75],{"type":31,"value":53},{"type":25,"tag":26,"props":77,"children":79},{"id":78},"作るモノのテーマ",[80],{"type":31,"value":78},{"type":25,"tag":33,"props":82,"children":83},{},[84,86,89,91,94],{"type":31,"value":85},"普段、ニュース記事を収集するためにRSSリーダーを愛用しているが、概要だけ読むとしても読むのが結構大変。",{"type":25,"tag":39,"props":87,"children":88},{},[],{"type":31,"value":90},"\nしかも、X等に夢中になってしまえばアプリを開くのを忘れてしまい、読み忘れてしまう。",{"type":25,"tag":39,"props":92,"children":93},{},[],{"type":31,"value":95},"\n（実際にRSSリーダーアプリを開いたら記事のところに３日前とか書いてあることがしばしば。。。）",{"type":25,"tag":33,"props":97,"children":98},{},[99],{"type":31,"value":100},"ということで、記事をAIに要約してメールで送ってもらおう！！",{"type":25,"tag":26,"props":102,"children":104},{"id":103},"今回作る仕組みの構想",[105],{"type":31,"value":103},{"type":25,"tag":107,"props":108,"children":112},"article-image",{"preset":109,"src":110,"alt":111},"article_image","2024-12-08\u002Farchitect.png","architect.png",[],{"type":25,"tag":33,"props":114,"children":115},{},[116,118,121],{"type":31,"value":117},"今回はこんな感じ。",{"type":25,"tag":39,"props":119,"children":120},{},[],{"type":31,"value":122},"\n色々工夫する余地はあると思うが、今回はシンプルに作って使うことを目標として組む。",{"type":25,"tag":124,"props":125,"children":127},"h3",{"id":126},"lambdaについて",[128],{"type":31,"value":129},"Lambdaについて",{"type":25,"tag":33,"props":131,"children":132},{},[133,135,138],{"type":31,"value":134},"シンプルに処理はすべてLambdaに任せる。",{"type":25,"tag":39,"props":136,"children":137},{},[],{"type":31,"value":139},"\nPythonでサクッと作る。",{"type":25,"tag":33,"props":141,"children":142},{},[143,145,148],{"type":31,"value":144},"１日３回は情報が欲しいのでEventBridgeで定期実行させる。",{"type":25,"tag":39,"props":146,"children":147},{},[],{"type":31,"value":149},"\n諸般の事情からメールはLambdaから送ることができないので、SESを介して送る。",{"type":25,"tag":124,"props":151,"children":153},{"id":152},"dynamodbについて",[154],{"type":31,"value":155},"DynamoDBについて",{"type":25,"tag":33,"props":157,"children":158},{},[159],{"type":31,"value":160},"テーブルを２つ用意する。",{"type":25,"tag":162,"props":163,"children":164},"ul",{},[165,171],{"type":25,"tag":166,"props":167,"children":168},"li",{},[169],{"type":31,"value":170},"RSSのURLを格納するためのテーブル",{"type":25,"tag":166,"props":172,"children":173},{},[174],{"type":31,"value":175},"過去に取得した記事を格納するためのテーブル",{"type":25,"tag":33,"props":177,"children":178},{},[179],{"type":31,"value":180},"どちらもシンプルに必要な項目だけ作った。",{"type":25,"tag":124,"props":182,"children":184},{"id":183},"bedrockについて",[185],{"type":31,"value":186},"Bedrockについて",{"type":25,"tag":33,"props":188,"children":189},{},[190,192,195],{"type":31,"value":191},"今回のかなめ。",{"type":25,"tag":39,"props":193,"children":194},{},[],{"type":31,"value":196},"\n実装されたばかりの最新モデルということで現在はバージニア北部リージョンにしかないっぽい。たぶん。",{"type":25,"tag":33,"props":198,"children":199},{},[200,202,205],{"type":31,"value":201},"センシティブな情報は扱わないので、適当にboto3でネット経由でアクセスする。",{"type":25,"tag":39,"props":203,"children":204},{},[],{"type":31,"value":206},"\nboto3経由だと関数とかもあって簡単。",{"type":25,"tag":33,"props":208,"children":209},{},[210],{"type":31,"value":211},"とりあえず、簡単に要約してもらうだけなので、ロール付けとキャラ付けの簡単なSystemPromptsを指定して、RSSから取得した記事の概要(description)をPromptsとして渡して要約してもらう。",{"type":25,"tag":33,"props":213,"children":214},{},[215],{"type":31,"value":216},"SystemPromptsは取り急ぎだったのでCopilotに書いてもらった。",{"type":25,"tag":124,"props":218,"children":220},{"id":219},"amazon-novaについて",[221],{"type":31,"value":222},"Amazon Novaについて",{"type":25,"tag":33,"props":224,"children":225},{},[226,228,235],{"type":31,"value":227},"今回はテキストしか扱わないので一番安い",{"type":25,"tag":229,"props":230,"children":232},"code",{"className":231},[],[233],{"type":31,"value":234},"Amazon Nova Micro",{"type":31,"value":236},"にした。",{"type":25,"tag":33,"props":238,"children":239},{},[240,242,245],{"type":31,"value":241},"肝心のモデルの性能だが、結構いい感じ。",{"type":25,"tag":39,"props":243,"children":244},{},[],{"type":31,"value":246},"\n日本語性能は体感でCopilotとかGeminiくらいの性能はありそう。",{"type":25,"tag":33,"props":248,"children":249},{},[250,252,255],{"type":31,"value":251},"メールの整形まで任せてみたけど、レイアウトが入力内容次第で結構ブレるので今回はコードで整形することにしようと思う。",{"type":25,"tag":39,"props":253,"children":254},{},[],{"type":31,"value":256},"\nPromptsを工夫すれば整形も任せられそうな感じはあるけど、あんまそこに力入れても仕方ないので。。。",{"type":25,"tag":26,"props":258,"children":260},{"id":259},"出来上がったもの",[261],{"type":31,"value":259},{"type":25,"tag":33,"props":263,"children":264},{},[265],{"type":31,"value":266},"１日３回チェックして記事の追加があれば、ギャルがメールを送ってくれる。",{"type":25,"tag":107,"props":268,"children":271},{"preset":109,"src":269,"alt":270},"2024-12-08\u002Fmail_demo.png","mail_demo.png",[],{"type":25,"tag":33,"props":273,"children":274},{},[275,277,280],{"type":31,"value":276},"結局、テキスト量は結構あるが口語なので幾分読みやすい気がする。",{"type":25,"tag":39,"props":278,"children":279},{},[],{"type":31,"value":281},"\nしばらくはこれで運用してみよう。",{"type":25,"tag":26,"props":283,"children":285},{"id":284},"結局コストは",[286],{"type":31,"value":287},"結局コストは？",{"type":25,"tag":33,"props":289,"children":290},{},[291],{"type":31,"value":292},"こんな感じ。",{"type":25,"tag":107,"props":294,"children":297},{"preset":109,"src":295,"alt":296},"2024-12-08\u002Fbilling.png","billing.png",[],{"type":25,"tag":33,"props":299,"children":300},{},[301,303,306,308,311],{"type":31,"value":302},"inputトークンが1Ktokenあたり$0.000035",{"type":25,"tag":39,"props":304,"children":305},{},[],{"type":31,"value":307},"\noutputトークンが1Ktokenあたり$0.00014",{"type":25,"tag":39,"props":309,"children":310},{},[],{"type":31,"value":312},"\n他との比較はしてないが、この価格ならコストを全然気にしないで使ってもよさそう。",{"type":25,"tag":26,"props":314,"children":316},{"id":315},"まとめ",[317],{"type":31,"value":315},{"type":25,"tag":33,"props":319,"children":320},{},[321,323,326],{"type":31,"value":322},"思ったより安かったのと思ったより使えそうなモデルだったので、何かに活用したいって気になってきた。",{"type":25,"tag":39,"props":324,"children":325},{},[],{"type":31,"value":327},"\n今後何かあったらまた使ってみよう。",{"title":9,"searchDepth":329,"depth":329,"links":330},4,[331,333,334,341,342,343],{"id":28,"depth":332,"text":28},2,{"id":78,"depth":332,"text":78},{"id":103,"depth":332,"text":103,"children":335},[336,338,339,340],{"id":126,"depth":337,"text":129},3,{"id":152,"depth":337,"text":155},{"id":183,"depth":337,"text":186},{"id":219,"depth":337,"text":222},{"id":259,"depth":332,"text":259},{"id":284,"depth":332,"text":287},{"id":315,"depth":332,"text":315},"markdown","content:post:2024-12-08.md","content","post\u002F2024-12-08.md","post\u002F2024-12-08","md",[351,353,356,358,360,362,364,366,368,370,372,374,376,378,381,383,385,387,389,391,393,395,397,399,401,403,405,407,409,411,413,415,416,417,419],{"tag":16,"count":352},7,{"tag":354,"count":355},"AI初心者講座",6,{"tag":357,"count":337},"エディタ",{"tag":359,"count":337},"旧ブログ",{"tag":361,"count":337},"Nuxt",{"tag":363,"count":332},"WordPress",{"tag":365,"count":332},"CMS",{"tag":367,"count":332},"Sony",{"tag":369,"count":332},"グルメ",{"tag":371,"count":332},"TWS",{"tag":373,"count":332},"Ape",{"tag":375,"count":332},"iPad",{"tag":377,"count":332},"買ってよかったもの",{"tag":379,"count":380},"PC",1,{"tag":382,"count":380},"Windows",{"tag":384,"count":380},"Radeon",{"tag":386,"count":380},"Android",{"tag":388,"count":380},"Xperia",{"tag":390,"count":380},"スマホ",{"tag":392,"count":380},"Audio-Technica",{"tag":394,"count":380},"YAMAHA",{"tag":396,"count":380},"radius",{"tag":398,"count":380},"Noble Audio",{"tag":400,"count":380},"FALCON2",{"tag":402,"count":380},"レシピ",{"tag":404,"count":380},"ソーラー",{"tag":406,"count":380},"妄想シリーズ",{"tag":408,"count":380},"3Dプリンター",{"tag":410,"count":380},"ルーター",{"tag":412,"count":380},"OpenWrt",{"tag":414,"count":380},"Proxmox",{"tag":14,"count":380},{"tag":15,"count":380},{"tag":418,"count":380},"Python",{"tag":420,"count":380},"VSCode",[422,424,426,428,430,432,434],{"category":12,"count":423},12,{"category":425,"count":355},"ものづくり・DIY",{"category":427,"count":355},"勉強",{"category":429,"count":329},"ガジェット・オーディオ",{"category":431,"count":329},"ライフスタイル・雑記",{"category":433,"count":332},"クルマ・バイク",{"category":435,"count":380},"インフラ・NW",5,1787215223079]