import gradio as gr import os import numpy as np import faiss from sentence_transformers import SentenceTransformer # 記事フォルダ読み込み articles_dir = "articles" texts, vectors = [], [] model = SentenceTransformer("all-MiniLM-L6-v2") for fname in os.listdir(articles_dir): with open(os.path.join(articles_dir, fname), "r", encoding="utf-8") as f: text = f.read() texts.append(text) vec = model.encode(text) vectors.append(vec) index = faiss.IndexFlatL2(384) index.add(np.array(vectors)) # チャットボット関数 def chat(query): vec = model.encode([query]) _, I = index.search(np.array(vec), k=3) context = "\n---\n".join([texts[i] for i in I[0]]) prompt = f"以下の情報を参考に質問に答えてください。\n\n{context}\n\n質問: {query}\n回答:" return prompt # Gradio UI gr.Interface(fn=chat, inputs="text", outputs="text", title="ブログ記事チャットボット").launch()