langchain-ollamaがconda対応していない。どうせpipするので全てpipで導入する。
faissを使い、テキストをベクトル化することでテキストデータの距離を検索できるようにする。
data.txtをベクトル化し、faiss_indexという名前でファイル保存する。
from langchain_ollama import OllamaEmbeddings from langchain_community.vectorstores import FAISS from langchain.schema import Document import re output_data_name = "faiss_index" # pip install faiss-cpu # pip install -U langchain-ollama # pip install langchain-community ########################################################### # data.txtを1行ずつ読み込み、1行=1チャンクとして扱う (1チャンク=1ベクトル) documents = [] with open("data.txt", encoding="utf-8") as f: for line in f: line = line.strip() if line: documents.append(Document(page_content=line)) ########################################################### # データを表示 for i, doc in enumerate(documents): print(f"チャンク{i}: {doc.page_content}") ########################################################### # ステップ3: ベクトル化してFAISSに保存 embedding = OllamaEmbeddings(model="nomic-embed-text") # テキスト用埋め込みモデル vectorstore = FAISS.from_documents(documents, embedding) vectorstore.save_local(output_data_name)
from langchain_ollama import OllamaEmbeddings from langchain_community.vectorstores import FAISS from langchain_ollama import OllamaLLM from langchain.chains import RetrievalQA import re usellm = OllamaLLM(model="qwen3:8b") ########################################################### embedding = OllamaEmbeddings(model="nomic-embed-text") # テキスト埋め込み用モデル retriever = FAISS.load_local( "faiss_index" ,embedding # 検索用モデル ,allow_dangerous_deserialization=True ).as_retriever() qa_chain = RetrievalQA.from_chain_type(llm=usellm, retriever=retriever) ########################################################### # 質問する query = "解説文から、関西地方に関係する物語であることがわかる作品を教えてください" answer = qa_chain.invoke(query) raw = answer["result"] response_without_think = re.sub(r"<think>.*?</think>", "", raw, flags=re.DOTALL) print(response_without_think)