shuzo-kino.hateblo.jp
の続き
私が今回【読書メモ】実践 生成AIの教科書 - Bye Bye Mooreから学んだ概念にRAG(Retrieval-Augmented Generation:情報検索補強生成)というのがあります。
要するに業務知識を喰わせるという事……らしい。
実際のところ
与えたデータをベクトル化して、類似ケースを検索する仕組み……の様子。
モデルデータ
ollama pull mxbai-embed-large
pythonで使用する準備
promptのところが喰わせるデータ
ollama.embeddings( model='mxbai-embed-large', prompt='Llamas are members of the camelid family', )
先程の説明通り、与えたデータをベクトル化して格納しますが、それ用のDBを用意しないといけません。
import ollama import chromadb documents = [ "Llamas are members of the camelid family meaning they're pretty closely related to vicuñas and camels", "Llamas were first domesticated and used as pack animals 4,000 to 5,000 years ago in the Peruvian highlands", "Llamas can grow as much as 6 feet tall though the average llama between 5 feet 6 inches and 5 feet 9 inches tall", "Llamas weigh between 280 and 450 pounds and can carry 25 to 30 percent of their body weight", "Llamas are vegetarians and have very efficient digestive systems", "Llamas live to be about 20 years old, though some only live for 15 years and others live to be 30 years old", ] client = chromadb.Client() collection = client.create_collection(name="docs") # store each document in a vector embedding database for i, d in enumerate(documents): response = ollama.embeddings(model="mxbai-embed-large", prompt=d) embedding = response["embedding"] collection.add( ids=[str(i)], embeddings=[embedding], documents=[d] )
質問クエリの作成
# an example prompt prompt = "What animals are llamas related to?" # generate an embedding for the prompt and retrieve the most relevant doc response = ollama.embeddings( prompt=prompt, model="mxbai-embed-large" ) results = collection.query( query_embeddings=[response["embedding"]], n_results=1 ) data = results['documents'][0][0]
生成
# generate a response combining the prompt and data we retrieved in step 2 output = ollama.generate( model="llama2", prompt=f"Using this data: {data}. Respond to this prompt: {prompt}" ) print(output['response'])