# @description: # @author: licanglong # @date: 2025/11/20 14:22 import uuid from typing import List from flask import request, jsonify from qdrant_client.models import VectorParams, Distance, PointStruct from app.blueprints.vector_store import vector_store_bp from app.client.VectorStoreClient import vector_store_client from app.constants.vector_store import VectorStoreCollection from app.models.Result import SysResult from app.models.dto import RiskRuleList, RiskDecisionCaseList, IndustryProfileList, RiskSignalList @vector_store_bp.route('/risk/rule', methods=['PUT']) def put_risk_rule(): data = request.json or {} risk_rules = RiskRuleList(risk_rules=data).risk_rules collection_name = VectorStoreCollection.RULE_EMBED_STORE vector_store_client.create_collection( collection_name=collection_name, vectors_config=VectorParams( size=1792, distance=Distance.COSINE, ), ) points: List[PointStruct] = [] for item in risk_rules: vector = vector_store_client.embedding.encode(item.embedding_text) point_id = str(uuid.uuid4()) item.rule_id = point_id points.append( PointStruct( id=point_id, vector=vector.tolist(), payload=item.dict(), ) ) vector_store_client.client.upsert( collection_name=collection_name, points=points, ) return jsonify(SysResult.success()) @vector_store_bp.route('/risk/case', methods=['PUT']) def put_case_rule(): data = request.json or {} decision_cases = RiskDecisionCaseList(decision_cases=data).decision_cases collection_name = VectorStoreCollection.CASE_EMBED_STORE vector_store_client.create_collection( collection_name=collection_name, vectors_config=VectorParams( size=1792, distance=Distance.COSINE, ), ) points: List[PointStruct] = [] for item in decision_cases: vector = vector_store_client.embedding.encode(item.embedding_text) point_id = str(uuid.uuid4()) item.case_id = point_id points.append( PointStruct( id=point_id, vector=vector.tolist(), payload=item.dict(), ) ) vector_store_client.client.upsert( collection_name=collection_name, points=points, ) return jsonify(SysResult.success()) @vector_store_bp.route('/risk/industry', methods=['PUT']) def put_industry_rule(): data = request.json or {} industry_profiles = IndustryProfileList(industry_profiles=data).industry_profiles collection_name = VectorStoreCollection.MERCHANTS_EMBED_STORE vector_store_client.create_collection( collection_name=collection_name, vectors_config=VectorParams( size=1792, distance=Distance.COSINE, ), ) points: List[PointStruct] = [] for item in industry_profiles: vector = vector_store_client.embedding.encode(item.embedding_text) point_id = str(uuid.uuid4()) item.merchant_industry_id = point_id points.append( PointStruct( id=point_id, vector=vector.tolist(), payload=item.dict(), ) ) vector_store_client.client.upsert( collection_name=collection_name, points=points, ) return jsonify(SysResult.success()) @vector_store_bp.route('/risk/signal', methods=['PUT']) def put_signal_rule(): data = request.json or {} signals = RiskSignalList(signals=data).signals collection_name = VectorStoreCollection.RULE_EMBED_STORE vector_store_client.create_collection( collection_name=collection_name, vectors_config=VectorParams( size=1792, distance=Distance.COSINE, ), ) points: List[PointStruct] = [] for item in signals: vector = vector_store_client.embedding.encode(item.embedding_text) point_id = str(uuid.uuid4()) item.signal_id = point_id points.append( PointStruct( id=point_id, vector=vector.tolist(), payload=item.dict(), ) ) vector_store_client.client.upsert( collection_name=collection_name, points=points, ) return jsonify(SysResult.success()) @vector_store_bp.route('/risk/rule', methods=['GET']) def get_risk_rule(): data = request.json or {} vector = vector_store_client.embedding.encode(data.get('query', "")) query_response = vector_store_client.client.query_points( collection_name=VectorStoreCollection.RULE_EMBED_STORE, query=vector.tolist(), limit=5, score_threshold=0.5 ) rules = [] for point in query_response.points: rules.append({ "id": point.id, "score": point.score, "payload": point.payload, }) return jsonify(SysResult.success(data=rules))