File size: 1,404 Bytes
90f5392
 
 
 
 
0db0051
 
 
 
90f5392
0db0051
 
 
aacc39b
0db0051
 
 
 
 
 
 
 
 
 
aacc39b
0db0051
 
 
aacc39b
0db0051
 
 
 
aacc39b
0db0051
aacc39b
0db0051
 
90f5392
0db0051
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from flask import Flask, request, jsonify
from sentence_transformers import SentenceTransformer, util

app = Flask(__name__)

# 预加载模型(线上部署关键)
model = SentenceTransformer("flax-sentence-embeddings/st-codesearch-distilroberta-base")
code_snippets = [...]  # 你的代码片段
code_embeddings = model.encode(code_snippets, convert_to_tensor=True)

@app.route('/v1/search', methods=['POST'])
def api_handler():
    """生产级API端点"""
    try:
        # 请求验证
        if not request.is_json:
            return jsonify({"error": "Invalid Content-Type"}), 415
            
        data = request.get_json()
        if 'query' not in data:
            return jsonify({"error": "Missing query parameter"}), 400
            
        # 执行语义搜索
        query = data['query']
        query_emb = model.encode(query, convert_to_tensor=True)
        results = util.semantic_search(query_emb, code_embeddings, top_k=1)[0]
        
        # 构建响应
        return jsonify({
            "data": {
                "best_match": code_snippets[results[0]['corpus_id']],
                "similarity": float(results[0]['score'])
            }
        })
        
    except Exception as e:
        app.logger.error(f"API Error: {str(e)}")
        return jsonify({"error": "Internal Server Error"}), 500

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8080)