watagassy commited on
Commit
8484b88
·
verified ·
1 Parent(s): 65cf83c

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +78 -0
  2. requirements.txt +3 -0
app.py ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+
3
+ import gradio as gr
4
+ from transformers.utils import logging
5
+
6
+ from langchain_ollama import OllamaEmbeddings
7
+ from langchain_community.vectorstores import Neo4jVector
8
+
9
+ logging.set_verbosity_info()
10
+ logger = logging.get_logger("transformers")
11
+
12
+ # Neo4jへの接続情報
13
+ NEO4J_URL = os.environ['NEO4J_URL']
14
+ NEO4J_USERNAME = os.environ['NEO4J_USERNAME']
15
+ NEO4J_PASSWORD = os.environ['NEO4J_PASSWORD']
16
+ NEO4J_DATABASE = os.environ['NEO4J_DATABASE']
17
+
18
+ EMBEDDINGS = OllamaEmbeddings(
19
+ model="mxbai-embed-large",
20
+ )
21
+
22
+ def hybrid_search(input_text, top_k):
23
+
24
+ # グラフからノード検索用インデックスを取得
25
+ index = Neo4jVector.from_existing_graph(
26
+ embedding=EMBEDDINGS,
27
+ url=NEO4J_URL,
28
+ username=NEO4J_USERNAME,
29
+ password=NEO4J_PASSWORD,
30
+ database=NEO4J_DATABASE,
31
+ node_label="Document", # 検索対象ノード
32
+ text_node_properties=["id", "text"], # 検索対象プロパティ
33
+ embedding_node_property="embedding", # ベクトルデータの保存先プロパティ
34
+ index_name="vector_index", # ベクトル検索用のインデックス名
35
+ keyword_index_name="fulltext_index", # 全文検索用のインデックス名
36
+ search_type="hybrid" # 検索タイプに「ハイブリッド」を設定(デフォルトは「ベクター」)
37
+ )
38
+
39
+ all_answers = []
40
+ # クエリを設定して検索を実行
41
+ query = input_text
42
+ docs_with_score = index.similarity_search_with_score(query, k=top_k)
43
+ for i in docs_with_score:
44
+ doc, score = i
45
+ all_answers.append(doc.metadata["source"])
46
+
47
+ return "\n***\n".join(all_answers)
48
+
49
+
50
+ CSS ="""
51
+ .contain { display: flex; flex-direction: column; }
52
+ .gradio-container { height: 100vh !important; }
53
+ #component-0 { height: 100%; }
54
+ #textbox { flex-grow: 1; overflow: auto; resize: vertical; }
55
+ .secondary {background-color: #6366f1; }
56
+ """
57
+ #with gr.Blocks() as demo:
58
+ with gr.Blocks(theme=gr.themes.Monochrome(radius_size=gr.themes.sizes.radius_sm)) as demo:
59
+ with gr.Row():
60
+ gr.Markdown("# 裁定検索")
61
+ with gr.Row():
62
+ output = gr.TextArea(
63
+ elem_id="検索結果",
64
+ label="検索結果",
65
+ )
66
+ with gr.Row():
67
+ input = gr.Textbox(
68
+ label="質問",
69
+ placeholder="芸魔龍王アメイジンの出た時の効果は、後から出たクリーチャーも影響しますか",
70
+ lines=3,
71
+ )
72
+ with gr.Row():
73
+ submit = gr.Button(value="検索", variant="secondary").style(full_width=True)
74
+ top_k = gr.Slider(1, 10, label="表示数", step=1, value=5, interactive=True)
75
+
76
+ submit_click_event = submit.click(fn=hybrid_search, inputs=[input, top_k], outputs=output)
77
+
78
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ ollama==0.4.2
2
+ langchain-ollama==0.2.1
3
+ langchain-community==0.3.9