feat(rag): 新增 Embedder 抽象与离线 FakeEmbedder
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
# tests/test_rag_embeddings.py
|
||||
from genesis.rag.embeddings import FakeEmbedder, get_embedder
|
||||
|
||||
|
||||
def test_fake_embedder_deterministic():
|
||||
e = FakeEmbedder()
|
||||
a = e.embed(["OrderController 创建订单"])[0]
|
||||
b = e.embed(["OrderController 创建订单"])[0]
|
||||
assert a == b
|
||||
|
||||
|
||||
def test_fake_embedder_similar_closer_than_unrelated():
|
||||
e = FakeEmbedder()
|
||||
base = e.embed(["OrderController 处理创建订单请求"])[0]
|
||||
sim = e.embed(["OrderController 保存订单到数据库"])[0]
|
||||
dif = e.embed(["用户登录认证模块"])[0]
|
||||
import math
|
||||
|
||||
def cos(x, y):
|
||||
dot = sum(p * q for p, q in zip(x, y))
|
||||
nx = math.sqrt(sum(p * p for p in x))
|
||||
ny = math.sqrt(sum(q * q for q in y))
|
||||
return dot / (nx * ny or 1.0)
|
||||
|
||||
assert cos(base, sim) > cos(base, dif)
|
||||
|
||||
|
||||
def test_get_embedder_fake_engine_returns_fake():
|
||||
e = get_embedder("fake")
|
||||
assert e.__class__.__name__ == "FakeEmbedder"
|
||||
Reference in New Issue
Block a user