Spaces:
Runtime error
Runtime error
import gradio as gr | |
import chromadb | |
from typing import List, Dict | |
# ChromaDB 配置 | |
client = chromadb.PersistentClient(path="chroma_data") | |
# 加载集合 | |
embed_collection = client.get_collection(name="embed_data") | |
answer_collection = client.get_collection(name="answer_data") | |
def search_embed_and_answer(label: str): | |
def search_top_answers(target_embedding: List[float], top_n: int = 10) -> List[Dict]: | |
"""使用ChromaDB进行相似度搜索""" | |
print("正在执行相似度搜索...") | |
results = answer_collection.query( | |
query_embeddings=[target_embedding], | |
n_results=top_n, | |
include=["metadatas", "documents", "distances"] | |
) | |
# 处理结果 | |
answers = [] | |
for meta, doc, dist in zip( | |
results['metadatas'][0], | |
results['documents'][0], | |
results['distances'][0] | |
): | |
answers.append({ | |
"formal_name": meta['formal_name'], | |
"formal_statement": meta['formal_statement'], | |
"informal_name": meta['informal_name'], | |
"informal_statement": doc, | |
"similarity": 1 - dist | |
}) | |
print("相似度搜索完成!") | |
return answers | |
"""主搜索函数""" | |
print("开始处理搜索请求...") | |
# 在 embed 集合中查找目标条目 | |
print("正在查询目标定理的元数据...") | |
results = embed_collection.query( | |
query_texts=[label], | |
n_results=1, | |
include=["metadatas", "embeddings"] | |
) | |
if not results['ids'][0]: | |
print(f"未找到 label 为 {label} 的定理。") | |
return f"未找到 label 为 {label} 的定理。", "" | |
# 提取目标条目 | |
print("正在提取目标定理的特征...") | |
target_metadata = results['metadatas'][0][0] | |
target_embedding = results['embeddings'][0][0] | |
# 执行搜索 | |
print("正在执行相似度搜索...") | |
top_answers = search_top_answers(target_embedding) | |
# 格式化结果 | |
print("正在格式化搜索结果...") | |
latex_output = f"目标定理的 tag: {target_metadata['tag']}\nLaTeX 渲染结果: {target_metadata['latex']}" | |
answer_output = "最吻合的前十个定理:\n" | |
for i, ans in enumerate(top_answers, 1): | |
answer_output += ( | |
f"{i}. Formal Name: {ans['formal_name']}\n" | |
f" Formal Statement: {ans['formal_statement']}\n" | |
f" Informal Name: {ans['informal_name']}\n" | |
f" Informal Statement: {ans['informal_statement']}\n" | |
f" 相似度: {ans['similarity']:.4f}\n\n" | |
) | |
print("搜索请求处理完成!") | |
return latex_output, answer_output | |
print("初始化 Gradio 界面...") | |
with gr.Blocks(theme=gr.themes.Soft(), title="Mathlib4 Search") as demo: | |
gr.Markdown("""<center><font size=8> ReasLab Smart Search</font></center>""") | |
with gr.Tab("Theorem Search"): | |
label_input = gr.Textbox( | |
placeholder="Example: quadratic_formula", | |
label="Label", | |
info="Enter a theorem label from embed.json" | |
) | |
search_button = gr.Button("Search") | |
latex_output = gr.Textbox(label="LaTeX and Tag", interactive=False) | |
answer_output = gr.Textbox(label="Top Matching Theorems", interactive=False) | |
search_button.click( | |
fn=search_embed_and_answer, | |
inputs=label_input, | |
outputs=[latex_output, answer_output] | |
) | |
print("启动 Gradio 服务...") | |
try: | |
demo.launch(server_name="0.0.0.0", server_port=9071, share=False,debug=True) | |
print("Gradio 服务已启动!") | |
except Exception as e: | |
print(f"启动 Gradio 服务失败: {e}") |