LangChain v0.3　その9 ~retriever（検索機能）~

# 前回までの振り返り
二つのこと（LLMのファインチューニングとLangChain）が同時進行中。
仕事している場合じゃない。w

ちなみに、Xではよくこのハッシュタグを使ってます。
`#仕事している場合じゃない`

はい、皆さんもどうぞ！
というのはワキに置いておいて本題。

<br>


前回までにチャットbotの基礎となる機能は理解できたと思います。そこで、今回はRAG（Retrieval Augumented Generation）をするために、どの文章を参照しながら回答するべきかという機能、Retrieverについてやっていこうと思います。

https://python.langchain.com/docs/how_to/vectorstore_retriever/

今回はこのページやります
さ、Let's ら Go！（昭和）
<br><br>


# バージョン関係
Python 3.10.8
langchain==0.3.7
python-dotenv
langchain-openai==0.2.5
langgraph>0.2.27
langchain-core
langchain-community==0.3.5

※EmbeddingモデルはAzureOpenAIのtext-embedding-ada-002を使いました

<br><br>


# やることを確認
基本的な方法は以下の手順

- 文章を分割する
理由１：入力が長いとLost in middleのようなことが起こる
理由２：入力トークンには制限があるので分割する
<br>

- 検索するために、分割した文章をEmbeddingモデルを使ってベクトル化する
理由：FAISSやコサイン類似度で計算しやすい。
参考：他にも検索方法はいろいろあるけど・・・BM25とか。
<br>

- 検索ワードをベクトル化して検索する
これが目的
<br>


<br><br>

# 1. embeddingの機能を確認しよう

### Embeddingを試してみる
このシリーズを最初から読んでくれている人は`.env`を用意してくれていると思うので、そこからAPIキーやら何やらを取り出し、embeddingモデルを呼び出します。

Embeddingモデルの用意はこちら
```Python:Embeddingモデルの用意
from dotenv import load_dotenv
load_dotenv('.env')

embeddings = AzureOpenAIEmbeddings(
    model = "text-embedding-ada-002",
    azure_endpoint = os.getenv("END_POINT"),
    api_version = os.getenv("API_VERSION"),
    api_key = os.getenv("API_KEY"),
)
```

<br>

用意ができたら試してみましょう。

```Python:Embeddingを試す
input_text = "今日は晴れてほしい"
vector = embeddings.embed_query(input_text) # 一つの文章を埋め込むときはembed_queryを使う
print(vector)
print(len(vector))

# [-0.004179930314421654, 0.018564656376838684, -0.009974178858101368, -0.011498812586069107, 0.0005901549011468887, 0.006364384200423956, 0.002876304555684328, -0.010191983543336391, -0.026367193087935448, -0.025483161211013794, 0.01387544721364975, 0.0025335822720080614, 0.007597543764859438, -0.022984812036156654, -0.00261686067096889, -0.025572845712304115, 0.02151142805814743, -0.029800821095705032, 0.02399696409702301, -0.027622774243354797, 0.03133826702833176, 0.00535863870754838, -0.014349493198096752, -0.011069608852267265, -0.02532941661775112, -0.01417012419551611, 0.026879675686359406, -0.017526879906654358, 0.025598470121622086, -0.022523578256368637, 0.029544580727815628, 0.0012355617946013808, -0.003875644179061055, 0.005743000190705061, -0.009339982643723488, -0.029903318732976913, -0.017168143764138222, 0.009218268096446991, -0.003936501685529947, -0.014311056584119797, 0.013145159929990768, -0.0202174112200737, 0.023804783821105957, -0.012741580605506897, -0.025380665436387062, 0.0019730553030967712, -0.01891058124601841, -0.00790503341704607, -0.010409788228571415, 0.020435215905308723, 0.017398759722709656, -0.005502774380147457, -0.039486728608608246, -0.038205523043870926, 0.005839090328663588, 0.030185183510184288, -0.016950339078903198, 0.008379078470170498, -0.017885617911815643, -0.0047020213678479195, -0.00012481736484915018, 0.0007266832981258631, -0.003875644179061055, 0.020640207454562187, 0.021947037428617477, -0.0017488443991169333, -0.02012772671878338, -0.00011690992687363178, -0.018513407558202744, 0.00036354182520881295, 0.00504154060035944, 0.0025656125508248806, 0.011543654836714268, -0.02336917445063591, 0.01583568938076496, -0.000800352543592453, -0.009749967604875565, 0.011863955296576023, -0.0026456876657903194, -0.0055219922214746475, 0.022305773571133614, -0.02406102418899536, -0.0020659426227211952, -0.0059095569886267185, 0.0016047089593484998, 0.016527540981769562, -0.008116431534290314, 0.03326007351279259, -0.008994056843221188, -0.024791311472654343, 0.008475169539451599, 0.013824199326336384, 0.01714251935482025, 0.022626075893640518, 0.00976277980953455, 0.004535464569926262, 0.014080439694225788, 0.035053759813308716, 0.0073541151359677315, -0.026649057865142822, -6.225854303920642e-05, -0.008071589283645153, -0.0004976679338142276, 0.01103117223829031, -0.04207476228475571, -0.014708230271935463, 0.01832122728228569, -0.014682605862617493, 0.02964707650244236, -0.028878353536128998, -0.00646047480404377, 0.01777030900120735, -0.0015142238698899746, -0.034925639629364014, -0.01760375313460827, -0.0163866076618433, 0.0026969360187649727, 0.003214222379028797, -0.009954961016774178, -0.010326510295271873, -0.004176727496087551, 0.029365211725234985, 0.014362304471433163, -0.005765421316027641, 0.01071727741509676, -0.0027113493997603655, -0.03925611078739166, -0.010364945977926254, -0.0008760237251408398, 0.009551380760967731, 0.02270294725894928, -0.0006786381127312779, 0.008020341396331787, -0.00040858419379219413, 0.0010089486604556441, 0.009352794848382473, -0.017936866730451584, 0.020473651587963104, -0.028647737577557564, 0.010646810755133629, -0.001977859763428569, 0.033823803067207336, -0.004471404477953911, -0.012408467940986156, -0.013772950507700443, -6.365985609591007e-05, 0.022280149161815643, -0.010550720617175102, 0.02913459576666355, -0.030467048287391663, 0.01837247610092163, -0.01510540395975113, 0.02967270091176033, 0.016835030168294907, 0.023215429857373238, 0.026392817497253418, 0.006194624584168196, 0.03410566970705986, -0.021742044016718864, 0.0017600549617782235, 0.010947894304990768, -0.03144076466560364, 0.02780214324593544, 0.013439837843179703, -0.008744222111999989, 0.033721309155225754, 0.0003829601046163589, 0.008571259677410126, 0.014733854681253433, 0.0016343367751687765, -0.009211861528456211, 0.012094572186470032, -0.03671932592988014, 0.005816669203341007, -0.009724344126880169, 0.02331792563199997, 0.022485142573714256, 0.024278828874230385, -0.004455389454960823, -0.010595562867820263, -0.03723181039094925, 0.009903712198138237, 0.007302866782993078, -0.008526417426764965, 0.013567958027124405, -0.004282426554709673, 0.031210146844387054, 0.010409788228571415, -0.00567894009873271, -0.004669991321861744, 0.019807424396276474, 0.020960509777069092, 0.034310661256313324, -0.010832586325705051, -0.6104684472084045, -0.030082685872912407, 0.00919264368712902, 0.0075142658315598965, 0.02277982048690319, 0.0053618415258824825, -0.0032734780106693506, 0.017232203856110573, -0.02646968886256218, 0.026930922642350197, -0.021895788609981537, 0.014375116676092148, -0.014003567397594452, -0.0011426744749769568, -0.0018353257328271866, -0.012863295152783394, 0.007648792117834091, -0.00980762206017971, -0.010236825793981552, 0.007129904348403215, -0.017309075221419334, 0.00014683806512039155, -0.016796594485640526, -0.014029191806912422, 0.016053495928645134, -0.016642849892377853, -0.004919826053082943, -0.02468881569802761, -0.02452225796878338, 0.026674682274460793, -0.03174825385212898, 0.0367962010204792, 0.011069608852267265, -0.018679965287446976, 0.0652901902794838, -0.014451988972723484, -0.01946149952709675, 0.044534675776958466, 0.02081957645714283, 0.019038701429963112, -0.013157972134649754, -0.006892881356179714, 0.005176066886633635, -0.002139611868187785, 0.00980762206017971, -0.012709550559520721, 0.018513407558202744, -0.02457350678741932, 0.026072515174746513, 0.004823735915124416, 0.016835030168294907, -0.007302866782993078, 0.010537908412516117, -0.011684587225317955, -0.01328609324991703, 0.01587412692606449, 0.04404781758785248, -0.026059703901410103, -0.008955621160566807, 0.00792425125837326, -0.007347709033638239, 0.008167680352926254, -0.011658962815999985, 0.003574561094865203, -0.0037763509899377823, 0.013632018119096756, -0.019192446023225784, -0.011537248268723488, 0.0030188385862857103, 0.013337341137230396, -0.0033407413866370916, 0.003369568381458521, 0.013068288564682007, 0.03087703324854374, 0.012587836012244225, 0.015925373882055283, 0.019397439435124397, -0.011953639797866344, -0.011453970335423946, 0.003699478693306446, 0.00849438738077879, -0.019384628161787987, -0.004593119025230408, -0.0029916130006313324, 0.008974839001893997, -0.006306730210781097, -0.03718056157231331, 0.0012491745874285698, 0.017373135313391685, 0.012690332718193531, 0.0049006082117557526, 0.022254526615142822, 0.03031330369412899, 0.0008431928581558168, 0.012171444483101368, 0.008635319769382477, -0.012427685782313347, -0.011614120565354824, -0.008840312249958515, 0.01637379638850689, 0.00010680042760213837, 0.010749307461082935, 0.008430327288806438, 0.010704465210437775, 0.007040219847112894, 0.002275739796459675, -0.01135788019746542, -0.003612997243180871, 0.0018465362954884768, -0.031901996582746506, 0.0129657918587327, -0.0010529900901019573, -0.017501257359981537, 0.0014389530988410115, 0.036309342831373215, -0.03548936918377876, 0.017795933410525322, 0.012024106457829475, 0.011069608852267265, -0.006210640072822571, 0.016207240521907806, -0.009954961016774178, 0.039537977427244186, -0.013004227541387081, -0.017808744683861732, 0.026264697313308716, -0.011505218222737312, -0.021063005551695824, 0.011550060473382473, 0.008705786429345608, 0.004154306370764971, -0.0015286373673006892, 0.008994056843221188, -0.010569938458502293, 0.030774537473917007, -0.018064986914396286, 0.005259345285594463, -0.013696078211069107, 0.046482108533382416, -0.005704564042389393, -0.02079395204782486, -0.013017039746046066, -0.0016207239823415875, 0.01714251935482025, -0.0006017658160999417, -0.02462475374341011, -0.01966649293899536, -0.009077335707843304, -0.040152955800294876, 0.009026086889207363, 0.011197729036211967, 0.0022373036481440067, -0.009256703779101372, 0.01449042558670044, -0.005448323208838701, 0.00393970450386405, -0.00423438148573041, -0.022305773571133614, -0.005691751837730408, 0.0005208897637203336, 0.011863955296576023, 0.00291153765283525, -0.010505878366529942, 0.005887135863304138, 0.00504154060035944, -0.0220367219299078, -0.025598470121622086, 0.026623433455824852, -0.0028154472820460796, -0.035719987004995346, -0.03021080791950226, -0.0038980653043836355, -0.012293159030377865, 0.00942326057702303, 0.004349689930677414, -0.019743364304304123, -0.010473848320543766, -0.022907940670847893, 0.012165038846433163, -0.017924053594470024, 0.0004904611851088703, -0.026879675686359406, -0.02836587280035019, 0.006860851310193539, -0.009730749763548374, -0.01452886126935482, 0.034976888447999954, 0.037564922124147415, -0.011518030427396297, 0.011748647317290306, -0.007225994486361742, 0.018103422597050667, -0.007700040470808744, 0.010608375072479248, 0.01643785648047924, -0.021050194278359413, -0.006124158389866352, 0.024406949058175087, 0.0077384766191244125, 0.00647969264537096, 0.016886278986930847, 0.0021700405050069094, 0.02219046652317047, -0.007847378961741924, 0.005983226001262665, -0.03784678876399994, 0.010967112146317959, -0.020371155813336372, 0.006707106716930866, 0.008949214592576027, -0.020332718268036842, -0.0428178608417511, -0.013503897935152054, -0.03226073458790779, -0.003268673550337553, 0.03341381996870041, -0.010544314980506897, 0.014977282844483852, -0.007866596803069115, -0.006854445207864046, 0.005108803976327181, 0.013888259418308735, 0.002046724548563361, -0.04353533685207367, -0.01570756919682026, -0.007149122189730406, 0.019230883568525314, 0.03218386322259903, 0.006325948517769575, -0.011005548760294914, -0.028903977945446968, -0.013721702620387077, -0.019897108897566795, 0.019384628161787987, 0.004980683326721191, -0.049582622945308685, 0.002437491901218891, -0.03090265765786171, 0.04171602427959442, 0.022280149161815643, 0.024855371564626694, -0.00034692621557042, 0.006492504850029945, -0.02462475374341011, 0.0024310860317200422, 0.019704928621649742, 0.025726590305566788, 0.008904372341930866, 0.0020018822979182005, 0.01387544721364975, 0.003741117659956217, -0.03605310246348381, -0.00555081944912672, 0.007277242839336395, 0.006604610476642847, -0.04435530677437782, -0.007674416061490774, -0.006031271070241928, 0.010339322499930859, 0.04473966732621193, 0.009717937558889389, 0.04176727309823036, 0.004375314339995384, -0.0066878884099423885, 0.011703805066645145, -0.006611016113311052, 0.014080439694225788, -0.02834024839103222, -0.0163866076618433, -0.0042632087133824825, -0.01391388289630413, -0.017988113686442375, 0.004163915291428566, 0.0032638690900057554, 0.004564291797578335, -0.029442084953188896, 0.00153504335321486, -0.007213182747364044, 0.001287610735744238, 0.020717080682516098, -0.010903052054345608, -0.03474627062678337, -0.011415533721446991, 0.022459518164396286, -0.014605733565986156, -0.01639942079782486, -0.013427025638520718, -0.018769649788737297, -0.023471670225262642, -0.008282988332211971, 0.01570756919682026, 0.027545901015400887, 0.00917342584580183, 0.01008308120071888, 0.007507859729230404, -0.018808085471391678, 0.03861550986766815, -0.016155991703271866, -0.045175276696681976, -0.01420855987817049, 0.022869504988193512, -0.01882089674472809, 0.006591798271983862, -0.04368907958269119, 0.01232518907636404, 0.011876767501235008, -0.005570037290453911, -0.017270639538764954, 0.009602629579603672, 0.01570756919682026, -0.007969093509018421, -0.01650191657245159, -0.011537248268723488, -0.004340081010013819, -0.01203691866248846, -0.007309272885322571, 0.006060098297894001, 0.007783318869769573, 0.031363893300294876, -0.007610355969518423, -0.022485142573714256, 0.0026809207629412413, -0.012427685782313347, 0.01905151456594467, 0.050812579691410065, 0.024291642010211945, 0.017232203856110573, 0.02898085117340088, 0.025534410029649734, 0.01887214556336403, -0.021127065643668175, -0.02137049473822117, 0.0006730328314006329, -0.007552701979875565, 0.02395852841436863, 0.004484216682612896, 0.008186898194253445, -0.021677983924746513, -0.004253599792718887, -7.216785888886079e-05, -0.009359200485050678, 0.0003773548232857138, 0.01130663137882948, 0.0004364103660918772, -0.005118412896990776, 0.009929336607456207, -0.010678841732442379, 0.02962145395576954, 0.007398957386612892, 0.0010025426745414734, -0.0052689542062580585, 0.015092591755092144, 0.03023643046617508, -0.010819774121046066, -0.007885814644396305, 0.028570864349603653, -0.022510766983032227, -0.0037699448876082897, -0.007078655995428562, 0.006809602957218885, -0.00629071518778801, 0.018436536192893982, 0.002644086256623268, -0.015950998291373253, -0.016630036756396294, 0.025124425068497658, 0.009922930970788002, -0.002120393794029951, 0.003558546071872115, 0.00277540972456336, -0.0015558629529550672, 0.012004888616502285, -0.010275261476635933, -0.01900026574730873, 0.02595720812678337, 0.009980584494769573, -0.027469029650092125, -0.006124158389866352, -0.011812707409262657, 0.030415799468755722, -0.02083238959312439, -0.012773610651493073, -0.006534144282341003, 0.015553825534880161, -0.01760375313460827, -0.01714251935482025, -0.000639801612123847, -0.006873663514852524, 0.0002966789761558175, -0.038256771862506866, -0.0050447434186935425, -0.01636098511517048, -0.012568618170917034, -0.007969093509018421, -0.010544314980506897, -0.015630697831511497, -0.02913459576666355, -0.00259443954564631, 0.02895522676408291, 0.01837247610092163, 0.004061419051140547, -0.01964086852967739, -0.008942808955907822, 0.010947894304990768, -0.01768062449991703, -0.022972000762820244, 0.01955118402838707, -0.01773187331855297, -0.02265170030295849, -0.005448323208838701, 0.006149782799184322, -0.0056821429170668125, -0.010300885885953903, 0.016079118475317955, 0.02333073876798153, 0.01482353825122118, 0.013977943919599056, 0.006537347100675106, -0.00880828220397234, -0.02407383732497692, 0.021639548242092133, 0.010140735656023026, -0.01633536070585251, -0.002360619604587555, 0.022216089069843292, -0.009365606121718884, -0.006136970594525337, -0.00882750004529953, 0.010851804167032242, 0.02080676518380642, 0.02083238959312439, -0.005598864518105984, 0.0033791775349527597, -0.0002550398057792336, 0.023868843913078308, -0.00880828220397234, 0.045149654150009155, 0.007616762071847916, 0.014029191806912422, 0.02029428258538246, -0.002230897778645158, 0.002876304555684328, 0.010179171338677406, -0.035130634903907776, 0.021242374554276466, -0.010313698090612888, 0.026187824085354805, -0.019179634749889374, 0.02659780904650688, -0.008590477518737316, -0.004135088063776493, -0.03146638721227646, -0.009878088720142841, 0.03354194015264511, 0.014516049064695835, 0.02522692084312439, -0.009615441784262657, -0.034464407712221146, -0.02270294725894928, -0.0270590428262949, -0.0007018599426373839, 0.03179950267076492, -0.016732534393668175, -0.02916022017598152, -0.029518956318497658, -0.013017039746046066, -0.006546956021338701, -0.012555805966258049, 0.010992736555635929, -0.03141513839364052, -0.0023045670241117477, 0.0020018822979182005, 0.009256703779101372, 0.013965131714940071, 0.002426281338557601, -0.0025463944766670465, -0.03159450739622116, 0.010941488668322563, 0.024945056065917015, -0.0252397321164608, -0.00012802037235815078, -0.025009116157889366, 0.012632678262889385, 0.002166837453842163, 0.02263888716697693, -7.692233339184895e-05, 0.012190663255751133, -0.008090808056294918, -0.0035521399695426226, -0.022497955709695816, -0.0020050853490829468, -0.016194427385926247, -0.027033420279622078, 0.01771906204521656, 0.004067825153470039, 0.0025528003461658955, -0.002439093543216586, -0.008359860628843307, -0.016027871519327164, 0.010204795747995377, -0.011678180657327175, 0.002932357368990779, -0.006713512819260359, -0.031235771253705025, 0.004477810580283403, -0.012126602232456207, -0.0076039498671889305, 0.01760375313460827, 0.033106330782175064, 0.0025063566863536835, 0.0064380536787211895, 0.00408704299479723, 0.02219046652317047, -0.004753269720822573, 0.026098139584064484, -0.0005036736256442964, 0.012888919562101364, -0.026649057865142822, 0.001279603224247694, -0.005320202559232712, 0.012402061372995377, 0.00018307214486412704, 0.010480254888534546, 0.027648398652672768, 0.0296983253210783, 0.004295238759368658, -0.011505218222737312, 0.018808085471391678, -0.006662264466285706, 0.008712192066013813, -0.007463017478585243, -0.013023446314036846, -0.0018705588299781084, -0.021780479699373245, -0.017834369093179703, -0.0009384824661538005, -0.026879675686359406, -0.01651472970843315, 0.022344211116433144, 0.0006994577124714851, -0.005316999740898609, 0.009775592014193535, -0.003044462762773037, -0.02472725138068199, -0.014990095049142838, -0.017283450812101364, 0.009948554448783398, -0.007981905713677406, 0.03928173705935478, 0.04025545343756676, 0.0007895423914305866, -0.021601110696792603, -0.04940325394272804, -0.007360521238297224, 0.004333674907684326, 0.002251717261970043, 0.03525875508785248, 0.003446440678089857, -0.0016047089593484998, 0.010794149711728096, 0.041946642100811005, 0.003737914841622114, -0.013965131714940071, 0.03671932592988014, 0.03279884159564972, -0.012754392810165882, -0.0010257645044475794, 0.021908599883317947, -0.017859993502497673, 0.02910897135734558, -0.00786019116640091, -0.014221372082829475, -0.03223511204123497, -0.014695418067276478, -0.01446480117738247, 0.021037381142377853, -0.011819113977253437, 0.009724344126880169, 0.021844539791345596, -0.0014797914773225784, 0.015912562608718872, -0.02453507110476494, -0.010806961916387081, 0.013798574917018414, -0.004019779618829489, 0.02834024839103222, -0.01711689494550228, 0.005489962175488472, 0.0006834426312707365, 0.01774468459188938, 0.004231178667396307, -0.003641824470832944, -0.013478273525834084, 0.038333646953105927, -0.012075354345142841, -0.010390570387244225, 0.005899947602301836, 0.020448027178645134, 0.010486660525202751, 0.00042920358828268945, 0.015092591755092144, 0.023048872128129005, -0.010851804167032242, -0.0032238312996923923, 0.010806961916387081, -0.000920065154787153, -0.0006450064829550683, -0.023471670225262642, -0.011530842632055283, -0.00423438148573041, -0.0005116811371408403, -0.017245015129446983, -0.009602629579603672, -0.008443139493465424, -0.005518789403140545, 0.017808744683861732, -0.018744025379419327, 0.020653020590543747, 0.01834685169160366, -0.00677757291123271, -0.014938847161829472, 0.03810302913188934, -0.03782116249203682, 0.013670454733073711, -0.007386145181953907, -0.014080439694225788, -0.007501453626900911, 0.003098913934081793, 0.0020515290088951588, -0.022920751944184303, 0.00253198086284101, 0.012152226641774178, -0.009942148812115192, -0.01956399530172348, -0.001205933978781104, -0.004125479143112898, -0.0008816290064714849, 0.0003649431455414742, 0.0007046625833027065, 0.03036455251276493, -0.003174184588715434, -0.014106064103543758, -0.04366345703601837, 0.033055081963539124, 0.0038628322072327137, 0.003606591373682022, -0.003211019327864051, -0.011050391010940075, 0.02527816966176033, -0.005662925075739622, 0.011178511194884777, -0.022523578256368637, -0.017232203856110573, -0.012683927081525326, -0.002360619604587555, 0.014246996492147446, -0.007994716987013817, -0.015681946650147438, 0.003098913934081793, -0.015348832122981548, 0.0017312278505414724, 0.010992736555635929, -0.0031261395197361708, 0.025700965896248817, 0.02972394973039627, 0.03602747619152069, -0.0006353974458761513, 0.0032062148675322533, -0.014439176768064499, -0.02080676518380642, 0.008359860628843307, -0.024957867339253426, -0.039537977427244186, -0.018000926822423935, 0.007546295877546072, 0.019282130524516106, 0.009910118766129017, -0.013734514825046062, -0.018731212243437767, 0.001867355895228684, -0.04158790409564972, 0.0020851606968790293, -0.016553165391087532, 0.019397439435124397, 0.009878088720142841, -0.016911901533603668, -0.006566174328327179, 0.027007795870304108, -0.01455448567867279, 0.008744222111999989, -0.025393476709723473, -0.00633555743843317, -0.007988311350345612, -0.026418441906571388, 0.012459715828299522, -0.0026008456479758024, -0.024342888966202736, -0.027597149834036827, 0.025380665436387062, -0.004852562677115202, 0.005858308635652065, 0.034464407712221146, 0.009455290623009205, 0.018731212243437767, -0.013023446314036846, -0.042049139738082886, -0.015220711939036846, 0.008142055943608284, 0.004785299766808748, -0.02085801213979721, -0.01774468459188938, 0.02012772671878338, 0.0005965609452687204, 0.0017664609476923943, 0.018833709880709648, 0.018769649788737297, 0.010191983543336391, 0.012594242580235004, -0.03231198340654373, -0.013952319510281086, -0.0182059183716774, -0.014298244379460812, 0.0014661786844953895, -0.007123498246073723, 0.010999142192304134, 0.00951294507831335, 0.01884652115404606, -0.021947037428617477, -0.0019073935691267252, 0.009596223011612892, -0.007021002005785704, 0.001386103336699307, 0.00853922963142395, -0.012786422856152058, -0.005374653730541468, -0.010166359134018421, -0.0022437097504734993, -0.0270590428262949, -0.026623433455824852, 0.01226112898439169, -0.020512087270617485, -0.0278790146112442, -0.0012715957127511501, 0.02008928917348385, -0.030159559100866318, 0.0008744221995584667, 0.014349493198096752, -0.03405442088842392, -0.0010858209570869803, -0.0329013355076313, 0.027264036238193512, -0.031312644481658936, 0.012120196595788002, -0.007270836737006903, -0.014951659366488457, -0.018679965287446976, 0.02151142805814743, 0.0008375875768251717, -0.003183793742209673, 0.01774468459188938, 0.31261396408081055, -0.02026865817606449, -0.012658302672207355, 0.03546374663710594, 0.02148580364882946, 0.004333674907684326, 0.027366532012820244, -0.00185934838373214, 0.001548656146042049, 0.018590280786156654, -0.004798111505806446, -0.018641527742147446, -0.012171444483101368, 0.004907013848423958, 0.005906353704631329, -0.021716419607400894, -0.03797490894794464, -0.010191983543336391, -0.03589935600757599, -0.009660283103585243, 0.027981510385870934, 0.005710970144718885, 0.011953639797866344, 0.005445119924843311, 0.003033252200111747, 0.0052977814339101315, 0.001410926692187786, 0.005746203009039164, 0.013593582436442375, 0.010230419225990772, -0.03410566970705986, 7.45075612940127e-06, 0.0021251982543617487, 0.001012952532619238, -0.010685247369110584, -0.03292696177959442, 0.03146638721227646, -0.009967772290110588, 0.023856032639741898, 0.009724344126880169, -0.010640405118465424, -0.005102397873997688, 0.011723022907972336, -0.028212128207087517, 0.014080439694225788, 0.029442084953188896, 0.004615540150552988, -0.0018000926356762648, -0.007463017478585243, 0.004817329812794924, -0.027007795870304108, -0.0024999508168548346, 0.045867130160331726, 0.028084008023142815, 0.006447662599384785, -0.008552041836082935, 0.03979421779513359, -0.002986808540299535, 0.01235081348568201, -0.001358877751044929, 0.015002907253801823, 0.01702721044421196, -0.0037218998186290264, 0.017539693042635918, -0.0010481856297701597, 0.00550597719848156, -0.03169700503349304, -0.002286950359120965, 0.014592921361327171, 0.006425241474062204, 0.029980190098285675, 0.012235505506396294, 0.004964668303728104, -0.010627592913806438, -0.010473848320543766, -0.009186238050460815, 0.02723841182887554, 0.030441423878073692, 0.008929996751248837, 0.005717376247048378, -0.007398957386612892, 0.015015719458460808, 0.02076832763850689, -0.009634659625589848, -0.008590477518737316, -0.03205574303865433, 0.008897966705262661, -0.0011378698982298374, 0.006422038655728102, -0.0034528467804193497, 0.009224673733115196, -0.016104742884635925, 0.008103620260953903, -0.015336020849645138, -0.0014237387804314494, -0.003436831757426262, -0.0113963158801198, 0.021127065643668175, -0.009410448372364044, 0.013113129884004593, 0.006373993586748838, -0.0541180856525898, 0.004971074406057596, 0.02078114077448845, 0.002434288850054145, -0.017924053594470024, 0.007840973325073719, 0.000920065154787153, -0.00423438148573041, -0.02143455483019352, -0.010031833313405514, -0.029211467131972313, 0.021357683464884758, -0.003036455251276493, -0.0033087111078202724, 0.020691456273198128, 0.007001783698797226, -0.001159490318968892, -0.0005060758558101952, 0.000821572495624423, 0.04356095939874649, -0.010288073681294918, -0.01835966296494007, 0.0190258901566267, 0.00426000589504838, 0.0014966072048991919, -0.014644170179963112, -0.0063195424154400826, 0.016732534393668175, -0.042715366929769516, 0.028801482170820236, -9.27872461033985e-05, 0.00878906436264515, -0.005803857464343309, -0.002671311842277646, 0.00883390661329031, 0.019435875117778778, 0.001699197804555297, -0.002621665131300688, 0.009730749763548374, -0.009922930970788002, -0.030543919652700424, -0.015220711939036846, -0.017834369093179703, 0.002624868182465434, -0.011447563767433167, 0.011242571286857128, -0.038846127688884735, -0.0009216666221618652, 0.004019779618829489, -0.022446706891059875, -0.02527816966176033, -0.007661604322493076, -0.01764218881726265, 0.027033420279622078, 0.0021892585791647434, -0.04279223829507828, -0.022549202665686607, 0.009730749763548374, 0.03169700503349304, -0.03203011676669121, -0.003856426104903221, 0.02910897135734558, -0.02974957413971424, -0.022344211116433144, -0.00396212562918663, -0.16143178939819336, 0.009609035216271877, -0.01078774407505989, -0.02335636131465435, 0.008987651206552982, 0.0036834636703133583, -0.007040219847112894, 0.00362260639667511, -0.00584869971498847, -0.029313964769244194, 0.02452225796878338, 0.01329890452325344, -0.02215202897787094, -0.0011426744749769568, -0.01574600674211979, 0.031261395663022995, -0.026879675686359406, 0.007744882721453905, 0.022984812036156654, 0.019768988713622093, 0.024125084280967712, -0.01390107162296772, -0.0006001643487252295, -0.004487419500946999, 0.026649057865142822, 0.01201129425317049, -0.032568223774433136, 0.01570756919682026, -0.001905792043544352, -0.0061593917198479176, -0.02219046652317047, 0.0029739963356405497, 0.04871140420436859, 0.020576147362589836, 0.0008351853466592729, -0.0028042367193847895, 0.0027433796785771847, -0.006604610476642847, -0.016015058383345604, 0.017898429185152054, 0.008007529191672802, 0.00489420210942626, 0.017988113686442375, 0.008692974224686623, -0.0313895158469677, 0.022408271208405495, 0.01960243284702301, 0.006322745233774185, -0.016220051795244217, -0.02900647558271885, 0.022280149161815643, -0.004980683326721191, 0.00948732066899538, 0.009320763871073723, 0.021267998963594437, 0.021139876917004585, -0.003737914841622114, 0.023138556629419327, 0.00915420800447464, 0.002660101279616356, 0.0032270343508571386, -0.03174825385212898, -0.0038820502813905478, -0.00819971039891243, -0.010755714029073715, 0.021831728518009186, -0.011594902724027634, 0.010179171338677406, -0.0028715000953525305, 0.00755910761654377, -0.0059992410242557526, -0.018103422597050667, 0.00565331568941474, -0.0196536798030138, 0.010749307461082935, 0.0028634925838559866, -0.040127333253622055, -0.00267931935377419, 0.0277508944272995, -0.008013935759663582, -0.013119536451995373, 0.038897376507520676, -0.006457271985709667, 0.0008744221995584667, -0.008744222111999989, 0.005307390354573727, 0.026187824085354805, -0.01548976544290781, -0.023497294634580612, -0.010883834213018417, 0.02399696409702301, -0.0296983253210783, -0.0062522790394723415, -0.02345885895192623, -0.010211201384663582, 0.0027497855480760336, 0.005704564042389393, 0.01896183006465435, -0.0013620808022096753, -0.0024695221800357103, -0.012882512994110584, -0.002831462537869811, -0.019115574657917023, 0.009878088720142841, -0.022344211116433144, 0.012760799378156662, 0.0005601266748271883, 0.013074694201350212, 0.03618122264742851, 0.005874323658645153, -0.0011234564008191228, -0.004929434973746538, 0.009064523503184319, 0.0005977620603516698, 0.017309075221419334, 0.00347526790574193, -0.005153645761311054, -0.012152226641774178, 0.029185842722654343, -0.03228635713458061, -0.01955118402838707, -0.029262715950608253, -0.020050853490829468, 0.021921413019299507, -0.005726985167711973, 0.014311056584119797, -0.059704139828681946, 0.01098632998764515, -0.011582090519368649, 0.017283450812101364, 0.0007186757866293192, 0.03285009041428566, 0.02836587280035019, 0.027033420279622078, -0.010999142192304134, -0.006239466834813356, -0.010621187277138233, -0.021806104108691216, -0.019999606534838676, -0.011953639797866344, 0.024945056065917015, -0.02025584690272808, -0.018692776560783386, 0.006050489377230406, -0.007206776645034552, 0.0073797390796244144, -0.017385948449373245, 0.001330050639808178, -0.024189144372940063, -0.029800821095705032, -0.023561354726552963, 0.0003263068210799247, -0.008885154500603676, 0.053964342921972275, 0.014797914773225784, 0.011908797547221184, 0.019115574657917023, -0.006111346650868654, 0.012491745874285698, -0.030620792880654335, -0.010525097139179707, -0.014157311990857124, -0.03349069133400917, -0.0034688618034124374, -0.006937723606824875, -0.039461106061935425, 0.02785339020192623, 0.0007334896945394576, -0.003484876826405525, -0.032568223774433136, -0.01896183006465435, 0.01267111487686634, -0.011043984442949295, 0.005355435889214277, -0.01162693277001381, -0.005076773464679718, -0.022497955709695816, -0.012575024738907814, -0.03169700503349304, -0.0295702051371336, 0.012427685782313347, -0.00881468877196312, 0.007463017478585243, 0.01294016744941473, -0.02017897367477417, 0.007213182747364044, -0.005176066886633635, 0.010922269895672798, -0.014669793657958508, 0.04435530677437782, 0.007360521238297224, 0.024752875789999962, -0.010390570387244225, -0.021242374554276466, -0.005582849495112896, 0.01264549046754837, 0.006828821264207363, 0.039409857243299484, -0.011159293353557587, 0.03397754952311516, -0.011844737455248833, -0.026110952720046043, -0.02453507110476494, -0.03738555312156677, 0.011684587225317955, -0.014708230271935463, -0.011748647317290306, -0.010864616371691227, -0.0008672154508531094, -0.0100766746327281, 0.017321888357400894, 0.018116233870387077, 0.013798574917018414, 0.008846718817949295, 0.014016379602253437, 0.008750628679990768, -0.004125479143112898, -0.003763538785278797, 0.029467709362506866, -0.024445386603474617, 0.010749307461082935, -0.012139414437115192, -0.0033375383354723454, -0.00823814608156681, 0.007206776645034552, 0.0010778134455904365, -0.012229098938405514, -0.04345846548676491, -0.062215302139520645, 0.0051120067946612835, -0.0012107384391129017, -0.012767205014824867, -0.008904372341930866, 0.00277540972456336, 0.004112666938453913, -0.005659721791744232, 0.0032830871641635895, -0.008295800536870956, -0.023189805448055267, 0.028724608942866325, -0.001436550752259791, -0.014106064103543758, -0.025636905804276466, -0.0013644830323755741, 0.04466279596090317, 0.021037381142377853, -0.002559206448495388, 0.008045965805649757, -0.01578444242477417, 0.010678841732442379, 0.0026921313256025314, 0.010659622959792614, -0.010153546929359436, 0.024842560291290283, -0.002913139294832945, 0.019833048805594444, -0.0033919895067811012, -0.009525757282972336, -0.007892221212387085, -0.030800161883234978, 0.013106724247336388, 0.019256506115198135, -0.010429006069898605, -0.038077402859926224, 0.005803857464343309, 0.010525097139179707, 0.003744320711120963, 0.011870361864566803, -0.019833048805594444, -0.023843219503760338, 0.031773876398801804, 0.012844077311456203, -0.019999606534838676, -0.01108242105692625, -0.026905298233032227, 0.01230597123503685, 0.02334355004131794, -0.009551380760967731, 0.01636098511517048, 0.02157548815011978, 0.022882316261529922, -0.0062522790394723415, -0.0044489833526313305, -0.022485142573714256, 0.02028147131204605, -0.004032591823488474, 0.00951294507831335, -0.0196536798030138, 0.044534675776958466, 0.019743364304304123, 0.010486660525202751, 0.0023317926097661257, 0.008327830582857132, 0.008545635268092155, -0.0031149289570748806, -0.0017616564873605967, 0.0038948622532188892, -0.021357683464884758, -0.018013738095760345, 0.02149861492216587, -0.006886475253850222, 0.028084008023142815, 0.01647629216313362, -0.005717376247048378, 0.007014595903456211, -0.007501453626900911, -0.005980023182928562, 0.026623433455824852, 0.0046059307642281055, 0.006088925525546074, -0.0035233129747211933, 0.010672435164451599, 0.014644170179963112, 0.008891561068594456, -0.02588033489882946, -0.030569544062018394, -0.026418441906571388, 0.0315176360309124, -0.031825125217437744, -0.011908797547221184, 0.022907940670847893, 0.016591601073741913, 0.014797914773225784, 0.009954961016774178, 0.0073541151359677315, -0.02263888716697693, 0.024278828874230385, 0.02089644968509674, 0.0011819113278761506, -0.0009953358676284552, -0.01012792345136404, -0.006995377596467733, -0.011678180657327175, 7.962487143231556e-05, -0.031773876398801804, -0.012837671674787998, -0.008058778010308743, 0.0033919895067811012, -2.2258429453358985e-05, 0.013785762712359428, -0.022254526615142822, 0.01956399530172348, -0.009839652106165886, 0.00601845933124423, -0.008641725406050682, -0.03556624427437782, -0.023766348138451576, 0.05065883323550224, 0.01044181827455759, -0.009218268096446991, 0.006152985617518425, -0.014080439694225788, 0.009070929139852524, 0.004625149071216583, -0.012997821904718876, -0.009083741344511509, 0.014541673474013805, 0.012747987173497677, 0.011588497087359428, -0.005425902083516121, -0.0017296263249590993, -0.01643785648047924, 0.006899287458509207, 0.018449347466230392, -0.0026665073819458485, 0.03597622737288475, -0.033823803067207336, 0.019077138975262642, 0.03090265765786171, -0.011915204115211964, 0.026725931093096733, 0.003334335284307599, 0.006841633003205061, 0.01329890452325344, 0.004176727496087551, 0.012190663255751133, -0.004272817634046078, -0.005560428369790316, 0.002802635310217738, -0.0020403184462338686, -0.0202174112200737, -0.038794878870248795, -0.0277508944272995, -0.008206116035580635, 0.018154671415686607, -0.02014053799211979, -0.0003547335509210825, 0.02270294725894928, -0.0025832289829850197, -0.012216286733746529, 0.0018753634067252278, -0.026982171460986137, -0.025124425068497658, 0.006133767776191235, -0.002343003172427416, -0.009237485937774181, -0.016130367293953896, 0.009698719717562199, 0.01587412692606449, 0.009307952597737312, -0.018897769972682, -0.00138770486228168, -0.006764760706573725, -0.0007911439170129597, 0.011614120565354824, -0.004391329362988472, 0.033131953328847885, -0.003856426104903221, 0.0016559570794925094, -0.01832122728228569, 0.0054579321295022964, 0.031184522435069084, -0.015054155141115189, -0.010563532821834087, 0.02140893042087555, -0.0009801216656342149]
# 1536
```
「今日は晴れてほしい」という文章が1536次元のベクトルに変換されたことがわかります。
それにしてもすごい次元だよね。ｗ
人って何時限まで理解できるんだろ？
僕は4次元まで（縦、横、高さ、時間）

<br>

ついでにバッチ処理する方法を見てみましょう。
```Python:Embeddingを試す（バッチ処理）
input_text = [
    '今日は晴れ',
    '明日は晴れ',
    '明後日は雨',
    '昨日は雪',
    '年始は雪',
] # 複数のドキュメント
vector = embeddings.embed_documents(input_text) # 複数のドキュメントの場合はembed_documentsを使う
print(vector)

# [[今日は晴れのベクトル], [明日は晴れのベクトル], [明後日は雨のベクトル], [昨日は雪のベクトル], [年始は雪のベクトル]]
```

ね、できたでしょ。（出力は省略）

<br>

さて、では本格的に文章の分割からベクトル化、検索までをやってみましょう。


<br><br>

# 2. 実際に検索機能を作ってみる

## 2−1. 文章の用意

dummyのテキストを用意しました。
GPTさんに無理言って、ありえない文章を作ってもらいました。読んでみると面白い。笑

<details><summary>dummy1.txt</summary>

```text:dummy1.txt
山田太郎は、世界最大のペンギン養殖場「ペンギンパラダイス」の CEO です。彼は南極の氷山を購入し、そこにペンギンのための超高層ビルを建設しました。このビルは氷で作られており、ペンギンたちはエレベーターで上下に移動します。

鈴木花子は、月面でアボカドを栽培する会社「ルナーボカド」を創業しました。彼女の開発した特殊な肥料により、月のクレーターでアボカドが驚異的な速さで成長し、地球の10倍のサイズになります。

佐藤次郎は、タイムマシンを発明しましたが、それを使って恐竜時代に行き、T-レックスをペットとして現代に連れ帰りました。彼は現在、東京都心でT-レックスの散歩に苦心しています。

田中美咲は、テレパシーを使って株価を予測する能力を持っています。しかし、彼女はその能力を使わず、代わりにテレパシーでネコと会話する職業を選びました。彼女は現在、世界中のネコの悩み相談に応じています。

高橋健太は、重力を無視できる靴を開発しました。彼はその靴を履いて富士山の頂上から歩いて下り、太平洋を横断して歩いてハワイに到着しました。現在は、月への徒歩旅行を計画中です。

渡辺愛子は、雲を食べられる料理法を発明しました。彼女のレストラン「スカイダイナー」では、様々な種類の雲料理が提供されており、特に積乱雲のステーキが人気メニューです。

中村勇太は、植物と会話できる能力を持っています。彼は森の木々と交渉し、CO2を半分しか吸収しないかわりに、動いて街の掃除をするよう説得することに成功しました。現在、東京の街路樹が自ら動いてゴミ拾いをしています。

小林雄二は、夢の中でプログラミングを行い、起きたらそのコードが現実のコンピュータ上に存在している能力を持っています。彼は睡眠中に世界最高のAIを開発しましたが、それが目覚めるとすぐに消えてしまうという問題に悩んでいます。

加藤美樹は、クラゲを飼育して生きた傘を作る会社「ジェリーブレラ」のCEOです。彼女の開発したクラゲ傘は、雨を吸収して成長し、晴れの日には縮小するという画期的な商品です。

木村隆は、恐竜の DNA を使って現代の動物をハイブリッド化する研究を行っています。彼の最新作は、ティラノサウルスとウサギを掛け合わせた「ティラノウサギ」で、現在ペットとして人気急上昇中です。

伊藤さくらは、音楽を視覚化する眼鏡を発明しました。この眼鏡をかけると、音楽が色とりどりの幾何学模様として空中に浮かんで見えます。彼女はこの技術を使って、「視聴覚オーケストラ」というユニークなパフォーマンス集団を結成しました。

斎藤健一は、自身の影と交換できる能力を持っています。彼は影と交代で仕事に行くことで、24時間働き続けることができます。しかし、影の給料をどう処理するかで税務署と揉めているそうです。

岡田真理は、水中で呼吸できる植物の種を開発しました。彼女は東京湾全体を巨大な水中庭園に変える計画を進めており、既に水中チューリップの栽培に成功しています。

山本太一は、重力を操る能力を持っています。彼は週末にお菓子の袋を宙に浮かべ、まるでプラネタリウムのように菓子を回転させながら食べるのが趣味だそうです。

中島弘美は、雲を編んで服を作るファッションデザイナーです。彼女の作る雲のドレスは、着る人の気分によって色や形が変化するという画期的なものです。ただし、晴れの日に消えてしまう欠点があります。

吉田花子は、植物の成長を音楽でコントロールする「メロディガーデン」を発明しました。クラシック音楽を聴かせると高級野菜に、ロックを聴かせると凶暴な食虫植物に成長するそうです。

井上修二は、●×△企業で働いていましたが、社長から突如平社員に転落しました。その理由は、彼が会社の廊下で逆立ちしながら歩くことを提案し、実行したためです。しかし、この奇抜なアイデアが従業員のストレス解消に効果的だと判明し、1週間後に再び社長に復帰しました。

Alexさんは、コーヒーショップでパートタイムジョブを始めてわずか3か月で社長になりました。彼の秘密は、コーヒー豆と話せる特殊能力を持っていたことでした。各豆の個性を活かしたブレンドが評判を呼び、ライバル企業の役員たちを買収するほどの利益を上げたのです。

橋本雄大は、雨粒を操る能力を持っています。彼は雨の日に雨粒を操って空中に文字を書き、天気予報を表示するサービスを始めました。ただし、晴れの日のサービスに課題が残っています。

田村みどりは、夢の中で食べた料理を現実世界に持ち帰ることができます。彼女のレストラン「ドリームダイニング」では、毎晩彼女が見た夢の料理が提供されます。ユニコーンのステーキが人気メニューだそうです。

佐々木健太は、量子力学を応用して、同時に複数の場所に存在できる技術を開発しました。彼は現在、東京、ニューヨーク、パリで同時に講演を行いながら、南極で休暇を楽しんでいます。

岡本さくらは、植物と融合する能力を持っています。彼女は春になると桜の木と一体化し、満開の桜の姿で公園に立っています。冬は常緑樹と融合して過ごすそうです。

中村太郎は、重力を反転させる靴を発明しました。彼はその靴を履いて天井を歩き回り、家具を天井に設置する新しいインテリアデザインを提案しています。

高橋美香は、雲を固形化する技術を開発しました。彼女は雲で作った家具を販売していますが、晴れた日に商品が消えてしまうというクレームに対応するのに苦心しています。

渡辺健一は、動物と人間の言語を相互翻訳できるアプリを開発しました。このアプリの人気No.1機能は、「猫の気まぐれ翻訳」だそうです。

木村愛子は、時間を瓶詰めにする技術を発明しました。彼女の販売する「週末の瓶」は、平日に開けると48時間の週末を楽しめるという画期的な商品です。

斎藤裕太は、影絵を実体化させる能力を持っています。彼の影絵パフォーマンスでは、観客の目の前で影が立体化し、現実世界を歩き回ります。

山本美咲は、海底に巨大な空気ドームを作り、そこで通常の陸上生活ができる「アクアシティ」を建設しました。魚が窓の外を泳ぐ光景を眺めながらのオフィスワークが人気です。

田中博士は、人工的に作った小さな宇宙を瓶の中で育てることに成功しました。彼のラボでは、様々な物理法則を持つミニ宇宙のコレクションが展示されています。

佐藤花子は、夢の中でオンラインショッピングをすると、起きた後に実際に商品が届く能力を持っています。彼女は「ドリームモール」という夢専用のECサイトを運営していますが、在庫管理に頭を悩ませているそうです。

加藤健太は、思考をクラウドにアップロードし、複数の人と共有できる技術を開発しました。この技術により、チームメンバー全員が同じ夢を見ながら会議をするという新しいビジネススタイルが生まれています。

伊藤さとみは、過去の自分と会話する能力を持っています。彼女は過去の自分にアドバイスをすることで、リアルタイムで自身の人生を書き換えていますが、思わぬ副作用に悩まされることもあるそうです。

野口太郎は、植物の気持ちを視覚化するメガネを発明しました。このメガネをかけると、植物の周りにオーラのような感情の色が見えます。彼は現在、植物のメンタルヘルスケア事業を展開しています。

鈴木一郎は、重力を自在に操る能力を持っています。彼は東京タワーを持ち上げて掃除をしたり、スカイツリーを傾けて観光客に斜塔体験を提供したりしています。ただし、うっかり富士山を浮かせてしまい、国際問題になりかけたこともあるそうです。

山田花子は、植物と交渉して好きな形に成長させる能力を持っています。彼女のガーデニング会社「シェイプリーフ」では、顧客の顔を模した観葉植物や、企業ロゴ型の巨大な生垣が人気商品です。

佐藤雄二は、雲を操る能力を持ち、「スカイライティング」という新しい広告媒体を開発しました。しかし、競合他社の広告を消すために晴天にしてしまい、農家から苦情が殺到する問題に直面しています。

田中みどりは、人間の影を実体化させる発明をしました。影だけで働く「シャドウワーカー」を雇用する企業が増えていますが、労働法の適用をめぐって議論が起きています。

高橋健太は、夢の中で習得したスキルを現実世界で使える能力を持っています。彼は毎晩異なる職業の夢を見ることで、医師、弁護士、シェフなど、10以上の資格を取得しました。現在は、夢の中での宇宙飛行士訓練に挑戦中です。

渡辺愛子は、食べ物の味を音楽に変換するフォークを発明しました。彼女のレストラン「メロディ・キッチン」では、シンフォニーのようなフルコースを楽しめます。ただし、カレーを食べると重金属の音楽になってしまう問題が指摘されています。

中村太郎は、言葉を可視化する技術を開発しました。彼の作ったゴーグルをかけると、人々の話す言葉が空中に文字として現れます。これにより、世界中の図書館が「静寂」から「色とりどりの文字が飛び交う空間」に変貌しました。
```
</details>


<details><summary>dummy2.txt</summary>

'''text:dummy2.txt
小林美香は、動物と人間の心を入れ替えることができます。彼女は動物園で週に一度、来場者と動物の心を入れ替えるイベントを行っていますが、人間の体で木の上に残されたお客さんの救出に頭を悩ませているそうです。

加藤健一は、音楽を立体物として具現化する能力を持っています。彼のコンサートでは、クラシック音楽が巨大な彫刻となって会場に出現し、フィナーレでは観客がその彫刻を持ち帰ることができます。

伊藤さくらは、人々の寿命を視覚化できる特殊な眼鏡を発明しました。彼女は医療機関と提携していますが、知りたくない情報を目にしてしまう人々へのカウンセリングサービスの需要が急増しています。

木村隆太は、遺伝子操作により、光合成できる人間を作り出すことに成功しました。彼の研究所では、日光浴をするだけで栄養補給ができる人々が暮らしていますが、雨の日の対策が課題となっています。

斎藤美咲は、過去にタイムスリップできますが、その際に現在の自分の年齢と体型が維持されるという特殊な能力を持っています。彼女は自分の幼稚園時代に行って先生として働いていますが、園児たちからは「巨人先生」と呼ばれているそうです。

岡田健太は、人々の夢をキャプチャーして映画化する技術を開発しました。彼の「ドリームシネマ」は大ヒットしていますが、著作権の問題や、あまりにも奇抜な夢のレーティング付けに苦心しています。

山本良子は、思考を料理として具現化できる能力を持っています。彼女のレストラン「マインド・デリシャス」では、シェフの創造性そのものを食べることができます。ただし、たまに悪い考えが混じると料理が不味くなる問題があります。

中島大輔は、自分の分身を作り出せますが、分身の性格が毎回ランダムになってしまいます。彼は分身たちを雇って多角経営を行っていますが、過激派の分身が起こした問題の処理に追われることもあるそうです。

吉田美穂は、植物と会話する能力を持っています。彼女は植物の気持ちを代弁する「グリーンコンシェルジュ」として活躍していますが、サボテンの持つ痛烈な皮肉に悩まされることもあるそうです。

藤田一郎は、空気から物体を作り出す能力を持っています。彼は大気中の分子を再構成して、家具や建物を即座に作り出すことができます。しかし、くしゃみをするたびに周囲のものが空気に戻ってしまうという問題に悩んでいます。

村上智子は、絵画の中に入り込める能力を持っています。彼女は美術館で「ライブアートツアー」を主催し、モナ・リザと一緒に自撮りをしたり、ゴッホの「星月夜」で星空浴を楽しんだりするツアーを行っています。ただし、抽象画に入るとしばらく出てこられなくなる問題があるそうです。

佐々木健太は、時間を素材として扱える能力を持っています。彼は「タイムファクトリー」という工場を経営し、若返りクリームや未来予知メガネなどを製造しています。ただし、従業員の勤務時間管理が非常に複雑になっているそうです。

近藤美咲は、人々の悩みを物理的に小さくする能力を持っています。彼女のカウンセリングオフィスでは、巨大な悩みが玉砂利サイズまで縮小され、クライアントはそれをお守りとして持ち帰ります。しかし、時々悩みが膨張して街中が大パニックになることもあるそうです。

田辺隆太は、重力を反転させる靴を発明しました。彼の会社「アップサイドダウン」では、天井を歩けるアトラクションパークを運営していますが、お客様の落下物対策に頭を悩ませています。

山岸花子は、動物と人間のコミュニケーションを円滑にする「アニマルトーク」アプリを開発しました。このアプリは大ヒットしましたが、飼い主の言葉を理解したペットたちの要求が高度になりすぎて、飼育放棄が増加するという予想外の問題が発生しています。

岡本太郎は、夢の中で描いた絵画を現実世界に持ち込める能力を持っています。彼のギャラリー「ドリームキャンバス」には、物理法則を無視したシュールな作品が展示されていますが、時々絵の中の生き物が抜け出してくるトラブルも起きているそうです。

高木美香は、植物を瞬時に成長させる能力を持っています。彼女は砂漠に数秒で森林を作り出すことができますが、うっかりくしゃみをして東京ドームを巨大な森に変えてしまい、プロ野球の試合が中止になったこともあるそうです。

渡辺健一は、雲を固形化して建築材料として使用する技術を開発しました。彼の会社「スカイビルダー」では、雲で作られた超高層ビルを建設していますが、晴れの日の対策に苦心しているそうです。

中村さゆりは、人々の記憶を料理として再現できる能力を持っています。彼女のレストラン「メモリーダイニング」では、幼少期の思い出や初恋の味を楽しめますが、時々悪い記憶が混ざってしまい、苦い料理になることもあるそうです。

木下雄太は、瞬間移動できるポータルを作り出す能力を持っています。彼は「テレポート交通」という会社を設立し、世界中の主要都市を結ぶ新しい交通網を構築しました。ただし、時差ボケ対策やポータル渋滞の問題に直面しているそうです。

藤原美樹は、人々の感情を色として視覚化できる能力を持っています。彼女は「エモーショナルデザイン」という新しいファッションブランドを立ち上げ、着る人の感情に合わせて色が変わる服を販売しています。ただし、感情の起伏が激しい人が着ると虹色に輝きすぎて周囲の目がくらむという問題があります。

石田隆は、重力を自在に操る能力を持っています。彼は「フローティングファーム」という宙に浮かぶ農場を経営し、空中で野菜や果物を栽培しています。しかし、強風時の農作物の飛散防止に頭を悩ませているそうです。

宮本桃子は、人々の夢をキャプチャーして香水に変換する技術を開発しました。彼女のブランド「ドリームフレグランス」では、冒険や恋愛、成功の香りを楽しめます。ただし、悪夢の香りが予想以上に人気で、品薄状態が続いているそうです。

小野寺健太は、時間を止める能力を持っていますが、その間に彼の髭だけが伸び続けるという奇妙な副作用があります。彼は世界記録更新のために時間を24時間止めたことがありますが、1メートル以上に伸びた髭の処理に困ったそうです。

坂本美咲は、人々の才能を抽出して、飲み物として提供できる能力を持っています。彼女のカフェ「タレントブリュー」では、アインシュタインの知性やピカソの創造性を一杯の飲み物で味わえます。ただし、副作用で一時的に奇抜な髪型になってしまうことがあるそうです。

川島真理は、人々の悩みを食べ物に変換する能力を持っています。彼女の経営する「ワーリーイーツ」では、ストレスがチョコレートに、不安がアイスクリームに変わります。しかし、幸せな人が食べると太るという副作用があるため、ダイエット中の人には不評だそうです。

西田健太郎は、音楽を立体物として具現化できます。彼のコンサート「ソリッドサウンド」では、クラシック音楽が巨大な彫刻となって会場に現れます。ただし、ヘビーメタルのコンサートで生まれた尖った彫刻の処理に困っているそうです。

遠藤さくらは、植物と融合して新しい生命体になれる能力を持っています。彼女は「ヒューマンプラント」として、光合成による環境浄化活動を行っていますが、冬場の寒さ対策に苦心しているそうです。

橋本龍太郎は、潜在意識をプログラミング言語に変換する能力を持っています。彼の会社「ドリームコード」では、寝ている間に天才プログラマーになれるサービスを提供していますが、たまに悪夢がバグを生み出すという問題に直面しています。

菊地美香は、人々の記憶を書籍化できる能力を持っています。彼女の「メモリーライブラリー」では、自分の人生を本として読むことができます。ただし、忘れたはずの恥ずかしい記憶が突然ベストセラーになってしまうこともあるそうです。

野村太一は、感情を料理として具現化できます。彼のレストラン「エモーショナル・ダイニング」では、喜びのパスタや悲しみのスープが人気メニューです。しかし、怒りのステーキがあまりにも辛くて食べられないという苦情も寄せられているそうです。

松田涼子は、夢の中で学習した内容を現実世界でも使えるようになる能力を持っています。彼女は「スリープラーニング・アカデミー」を設立し、寝ながら資格を取得できるコースを提供しています。ただし、悪夢を見ると変な技能を習得してしまう副作用があるそうです。

金子隆太は、思考をホログラムとして投影できる能力を持っています。彼の「マインドシアター」では、観客の頭の中をスクリーンに映し出すユニークな映画館を運営していますが、あまりにもカオスな内容に検閲の問題が発生しているそうです。

浜田美咲は、人々の運勢を視覚化し、カラフルなオーラとして表示できます。彼女の占い館「フォーチュンレインボー」は大人気ですが、不運な人があまりにも暗いオーラを放つため、店内の照明を増設する必要が出てきたそうです。

岸本健太は、動物と人間の知能を交換できる能力を持っています。彼の「アニマルスワップ」では、ペットと飼い主の知能を交換するサービスを提供していますが、人間の体で魚の知能になってしまった客の対応に苦慮しているそうです。

上田花子は、絵画の中の出来事を現実世界に引き出せる能力を持っています。彼女のギャラリー「リビングアート」では、モネの睡蓮の池で泳いだり、ゴッホのひまわりを持ち帰ったりできます。ただし、ピカソの作品から出てきた人物の処遇に困っているそうです。

後藤一郎は、人々の夢を録画し、映画として上映できる技術を開発しました。彼の「ドリームシネマ」は大ヒットしていますが、あまりにもシュールな夢のレーティング付けに頭を悩ませているそうです。

中野さつきは、料理に込められた感情を可視化できる能力を持っています。彼女のレストランレビューサイト「テイストフィール」は料理の味だけでなく、シェフの感情も評価の対象としています。ただし、怒りに満ちた料理を食べて胸やけする人が続出し、医療費が問題になっているそうです。

横山拓也は、植物と交渉して好きな形に成長させられる能力を持っています。彼の「リビングアーキテクチャー」では、木で作られた家具や建物をデザインしていますが、時々植物が反抗して予想外の形に成長してしまうこともあるそうです。

田島美香は、人々の才能を抽出して、他の人に一時的に転送できる能力を持っています。彼女の「タレントシェアリング」サービスは大人気ですが、ロックスターの才能を受け取った主婦が家出してしまうなどのトラブルも発生しているそうです。

森下健太は、重力を自在に操る能力を持っています。彼の「アンチグラビティ・フィットネス」では、空中でのワークアウトが人気ですが、たまに参加者が宙に浮いたまま帰れなくなるというトラブルが起きているそうです。
'''
</details>

普通はありえないことを作って！って作れないよな。w
GPTさん、優しいなぁ。
<br><br>


## 2-2. 文章の読み込み
上で用意した文書を`text_files`フォルダに保存しておきます。

```Python:テキストの読み込み
import glob

text_files = glob.glob('./text_files/*.txt')

text_docs = ''
for text_file in text_files:
    with open(text_file, 'r', encoding='utf-8')as f:
        text_docs += f.read()
print(text_docs)

# 山田太郎は、世界最大のペンギン養殖場「ペンギンパラダイス」の・・・
# 鈴木花子は、月面でアボカドを栽培する会社「ルナーボカド」を創業しました・・・
# 佐藤次郎は、タイムマシンを発明しましたが、それを使って恐竜時代に行き、・・・
```
ま、読み込むだけなのでシンプルに行きましょう。
一つの変数にながーい文章を入れちゃいます。

<br><br>


## 2-3. 文章のスプリット
で、なが～い文章は全部モデルに入れられたとしてもロストインミドル問題が心配ですし、入力可能なトークン数の問題でモデルに入力できないかもしれない。そこで、ある一定のサイズの文章に区切ります。


### splitterの準備

```Pyrhon:splitterの準備
text_splitter = CharacterTextSplitter(
    chunk_size=300, 
    chunk_overlap=20
    )
```
ここでは分割するサイズを300文字（チャンクサイズ）に、そして単に区切ると文章のつながりがなくなってしまうので、分割する際に前後の文字のオーバーラップする量を20文字に指定したsplitterを用意してみました。
この辺りの設定がRAGの精度に非常に影響するらしい。


<br>



### 文章のスプリット
「チャンク化」と言われます。splitterを作るところでも引数に`chunk_size`ってありますね。では、さっき読み込んだ文章を分割してみましょう。


```Python:文章のスプリット（チャンク化）
splits_texts = text_splitter.split_text(text_docs)
print(splits_texts)

# ['山田太郎は、世界最大のペンギン養殖場「ペンギンパラダイス」の・・・',
#  '田中美咲は、テレパシーを使って株価を予測する能力を持っています。・・・\n\n渡辺愛子は、雲を食べられる料理法を発明しました。彼女のレストラン・・・',
#  '中村勇太は、植物と会話できる能力を持っています。彼は森の木々と交渉し、・・・\n\n小林雄二は、夢の中でプログラミングを行い、起きたらそのコードが現実のコンピュータ上に存在している・・・',
# ・・・
# '田島美香は、人々の才能を抽出して、・・・\n\n森下健太は、重力を自在に操る能力を持って・・・']
```

文章が分割できました。
それにしても怪しい感じの文章が並ぶ・・・笑

<br>
<br>

## 2−4. vecotor_storeを用意する
- そもそもここでいう`ベクトル（vector）`って？
言語モデルのは最終的にトークン番号を出力します。そのトークン番号をトークナイザに渡して日本語や英語などに変換します。そして、このトークン番号を出力する一つ手前のベクトルがいろんな意味を持つベクトルになるそうな。そう、王様-男性+女性=王女になるような、あのベクトル。
検索したい文章を全てベクトル化しておくと、コサイン類似度やFAISSなどで素早く検索可能ってこと。検索で抽出された文章を使いながら質問文をモデルに入力すると、検索結果を使いながら回答ができます。
なので、vectorってのは文章を多次元のベクトルで表現すること。英語でEmbedding、日本語では「埋め込み」というそうですぅ。（説明が雑ですみません）


<br><br>


# 3. vector_storeを作る
ベクトル化する方法がわかったので、分割した文章それぞれのベクトルを作り、検索できるようにしていきます。

```Python:ライブラリのインポート
from langchain_community.vectorstores import FAISS
```
<br>

```Python:vector_storeの作成
vector_store = FAISS.from_texts(
    texts=splits_texts, # 分割したsplits_textsを渡す
    embedding=embeddings # 定義したembeddingsモデルを渡す
)
```
これで、ベクターストアができました。


<br>
<br>


# 4. 検索する
検索機能を起こすには、retrieverとしてvector_storeを使う方法がこれです。

```Python:vecotr_storeのretriver機能を設定
retriever = vector_store.as_retriever()
```
これだけ

では、検索してみましょう。
```Python:検索
retrieved_docs = retriever.invoke('量子力学')
print(retrieved_docs)

# [Document(metadata={}, page_content='橋本雄大は、雨粒を操る能力を持っています。・・・'),
#  Document(metadata={}, page_content='木村愛子は、時間を瓶詰めにする技術を発明しました。・・・'),
#  Document(metadata={}, page_content='藤田一郎は、空気から物体を作り出す能力を持っています。・・・'),
#  Document(metadata={}, page_content='斎藤健一は、自身の影と交換できる能力を持っています。・・・')]
```
わかりにくい例かも・・・💦

<br>
<br>


# おまけ. vector_storeのローカル保存とローカル呼び出し
簡単に言うとローカル保存とローカル保存されたvector_storeを呼び出す方法です。
```Python:ベクターストアのローカル保存
local_vectorstore_path = './vector_store/'
vector_store.save_local(local_vectorstore_path)
```

```Python:ローカル保存したベクターストアの読み込み
local_vectorstore = FAISS.load_local(
    folder_path=local_vectorstore_path,
    embeddings=embeddings, # 定義したembeddingsモデルを渡す
    index_name='index',
    allow_dangerous_deserialization=True
)
```



```Python:検索機能の有効化？
local_retriever = local_vectorstore.as_retriever()

```



```Python:検索結果の出力
print(local_retriever.invoke('味と音楽'))

# [Document(metadata={}, page_content='渡辺愛子は、食べ物の味を音楽に変換するフォークを・・・'),
#  Document(metadata={}, page_content='川島真理は、人々の悩みを食べ物に変換する・・・'),
#  Document(metadata={}, page_content='中島弘美は、雲を編んで服を作るファッションデ・・・'),
#  Document(metadata={}, page_content='菊地美香は、人々の記憶を書籍化できる能力を・・・')]
```

使い方はローカル保存しない時と同じですね。
これで、類似文章を簡単に検索することができます。

<br><br>



# おわりに
これでretriever（検索）ができるようになりました。
RAG（retrieval augumented generation）なので、ここまでが`retrieval`ですね。
次はaugumented generationしなければいけません。

隠す必要もないので、少し書いておくと
RAGは今回やった検索した文章と、ユーザー（LLMの出力もOK）の入力をうまい具合にモデルに渡して出力させればモデルの中にない情報まで回答が可能になります。

ということで、今回はここまで。
なんか、まじ眠いんすけど。💤