依赖服务使用指南
更新时间:2026-05-13
依赖服务使用指南
在高代码编辑器中编写检索逻辑时,你可以使用平台提供的 Python SDK 来调用以下三种依赖服务:
sdk 源码: sdk.tar
| 服务 | 说明 | SDK 入口函数 |
|---|---|---|
| Search(文档检索) | 基于 DSL 查询语法的文档搜索服务,支持全文检索、向量语义检索等 | create_ontology_service() |
| Embedding(向量化) | 将文本转换为向量表示,用于语义检索 | create_embedding_service() |
| Rerank(重排序) | 对候选文档按照与查询的相关性进行重排序,提升检索精度 | create_rerank_service() |
关于服务配置:平台已通过环境变量自动注入依赖服务的 endpoint、apiKey 等连接信息,你无需手动配置,直接调用即可。
1. Search(文档检索)
Search 服务用于根据 DSL 查询语法从数据表中检索文档。底层将 DSL 转换为检索 SQL 语句执行。
1.1 创建服务
Python
1from databuilder_logic_sdk.core import create_ontology_service
2
3# 无需传参,配置由平台自动注入
4service = create_ontology_service()
1.2 执行查询
调用 service.search(dsl=...) 方法,传入 DSL 查询字典。DSL 必须包含 ontology(本体名)和 apiName(表名)两个字段。
Python
1dsl = {
2 "ontology": "my_ontology", # 本体名
3 "apiName": "my_object_type", # 表名
4 "limit": 10, # 返回条数上限
5 "select": [ # 选择返回的字段
6 {"field": "content"},
7 {"field": "title"},
8 ],
9 "where": { # 过滤条件
10 "type": "and",
11 "filter": [
12 {"type": "eq", "field": "status", "value": "active"},
13 ]
14 }
15}
16
17response = service.search(dsl=dsl)
18
19# 响应结构
20print(response.code) # "SUCCESS" 表示成功
21print(response.message) # 响应消息
22print(response.result) # 结果数据字典,通常通过 response.result["data"] 获取数据列表
1.3 DSL 语法参考
select 字段
select 指定返回哪些字段。每个元素是一个字典,包含 field(字段名),可选 orderBy(排序方向)。
Python
1"select": [
2 {"field": "content"},
3 {"field": "__SCORE", "orderBy": "desc"}, # 按相关性分数降序
4]
where 过滤条件
where 支持嵌套的逻辑组合和多种过滤类型:
逻辑组合:
Python
1# and 组合
2{"type": "and", "filter": [ ... ]}
3
4# or 组合
5{"type": "or", "filter": [ ... ]}
过滤类型:
| type | 说明 | 示例 |
|---|---|---|
eq |
等值匹配 | {"type": "eq", "field": "status", "value": "active"} |
in |
多值匹配 | {"type": "in", "field": "id", "value": ["id1", "id2"]} |
match_any |
全文检索(BM25) | {"type": "match_any", "field": "content", "value": "搜索关键词"} |
contains |
向量语义检索(ANN) | {"type": "contains", "field": "embedding", "value": [0.1, 0.2, ...]} |
1.4 完整示例
Python
1from databuilder_logic_sdk.core import create_ontology_service
2
3service = create_ontology_service()
4
5# 全文检索示例
6dsl = {
7 "ontology": "whb_demo01",
8 "apiName": "datasearch0122",
9 "limit": 5,
10 "select": [
11 {"field": "content"},
12 {"field": "chunkId"},
13 {"field": "__SCORE", "orderBy": "desc"},
14 ],
15 "where": {
16 "type": "and",
17 "filter": [
18 {"type": "match_any", "field": "content", "value": "人工智能"},
19 {"type": "eq", "field": "type", "value": "sentence"},
20 ]
21 }
22}
23
24response = service.search(dsl=dsl)
25if response.code == "SUCCESS" and response.result:
26 for row in response.result.get("data", []):
27 print(f"chunkId: {row.get('chunkId')}, content: {row.get('content')}")
1.5 响应模型
| 字段 | 类型 | 说明 |
|---|---|---|
code |
str |
响应码,"SUCCESS" 表示成功 |
message |
str |
响应消息 |
result |
dict |
结果数据,result["data"] 为数据列表 |
2. Embedding(向量化)
Embedding 服务将文本转换为向量(embedding vector),用于语义检索场景。
2.1 创建服务
Python
1from databuilder_logic_sdk.core import create_embedding_service
2
3# 传入模型名称即可,endpoint 和 apiKey 由平台自动注入
4service = create_embedding_service("text-embed_7b_bf16")
支持的模型:
| 模型名称 | 说明 |
|---|---|
text-embed_7b_bf16 |
7B 参数文本嵌入模型 |
2.2 获取向量
调用 service.embed(texts) 方法,传入文本列表,返回对应的向量列表。
Python
1response = service.embed(["你好世界", "人工智能技术"])
2
3for result in response.results:
4 print(f"文本索引: {result.index}")
5 print(f"向量维度: {len(result.embedding)}")
6 print(f"向量前5维: {result.embedding[:5]}")
2.3 完整示例
Python
1from databuilder_logic_sdk.core import create_embedding_service
2
3service = create_embedding_service("bge-large-zh")
4
5# 将查询文本和文档文本一起向量化
6texts = ["什么是机器学习?", "机器学习是人工智能的一个分支", "今天天气不错"]
7response = service.embed(texts)
8
9query_vector = response.results[0].embedding
10doc_vectors = [r.embedding for r in response.results[1:]]
11
12print(f"查询向量维度: {len(query_vector)}")
13print(f"文档向量数量: {len(doc_vectors)}")
2.4 响应模型
EmbeddingResponse:
| 字段 | 类型 | 说明 |
|---|---|---|
results |
list[EmbeddingResult] |
嵌入结果列表 |
EmbeddingResult:
| 字段 | 类型 | 说明 |
|---|---|---|
embedding |
list[float] |
嵌入向量 |
index |
int |
对应输入文本的索引位置 |
3. Rerank(重排序)
Rerank 服务对候选文档按照与查询的语义相关性进行重排序,通常在初次检索后使用以提升结果质量。
3.1 创建服务
Python
1from databuilder_logic_sdk.core import create_rerank_service
2
3# 传入模型名称即可,endpoint 和 apiKey 由平台自动注入
4service = create_rerank_service("bce-reranker-base")
支持的模型:
| 模型名称 | 说明 |
|---|---|
bce-reranker-base |
BCE 基础重排序模型 |
3.2 执行重排序
调用 service.rerank(query, documents, top_k) 方法:
Python
1response = service.rerank(
2 query="北京人工智能发展",
3 documents=[
4 "致力于创建能够执行通常需要人类智能的任务的系统。",
5 "机器学习、自然语言处理、计算机视觉等领域。",
6 "北京天气预报显示明天晴朗。",
7 ],
8 top_k=2 # 返回相关性最高的前2个文档
9)
10
11for result in response.results:
12 print(f"文档: {result.document}")
13 print(f"相关性得分: {result.relevance_score}")
14 print(f"原始索引: {result.index}")
15 print("---")
3.4 完整示例
Python
1from databuilder_logic_sdk.core import create_rerank_service
2
3service = create_rerank_service("bce-reranker-base")
4
5query = "人工智能在医疗领域的应用"
6documents = [
7 "深度学习技术被广泛应用于医学影像诊断。",
8 "自然语言处理可以帮助医生快速检索病历。",
9 "区块链技术在供应链管理中的应用。",
10 "机器人辅助手术系统提高了手术精确度。",
11]
12
13response = service.rerank(query=query, documents=documents, top_k=3)
14
15print(f"查询: {query}")
16print(f"返回 Top {len(response.results)} 结果:")
17for r in response.results:
18 print(f" [{r.index}] 得分={r.relevance_score:.4f} | {r.document}")
3.5 响应模型
RerankResponse:
| 字段 | 类型 | 说明 |
|---|---|---|
results |
list[RerankResult] |
重排序结果列表(按相关性降序排列) |
RerankResult:
| 字段 | 类型 | 说明 |
|---|---|---|
document |
str |
文档内容 |
relevance_score |
float |
相关性分数 |
index |
int |
该文档在原始输入列表中的索引位置 |
4. 组合使用示例
以下示例展示如何将三个服务组合起来实现一个完整的「语义检索 + 重排序」流程:
Python
1from databuilder_logic_sdk.core import (
2 create_embedding_service,
3 create_ontology_service,
4 create_rerank_service,
5)
6
7# 1. 创建服务
8ontology_service = create_ontology_service()
9embedding_service = create_embedding_service("bge-large-zh")
10rerank_service = create_rerank_service("bce-reranker-base")
11
12# 2. 将查询文本向量化
13query = "人工智能在教育领域的应用"
14query_embedding = embedding_service.embed([query]).results[0].embedding
15
16# 3. 使用向量进行语义检索
17dsl = {
18 "ontology": "my_ontology",
19 "apiName": "my_object_type",
20 "limit": 20,
21 "select": [
22 {"field": "content"},
23 {"field": "chunkId"},
24 ],
25 "where": {
26 "type": "and",
27 "filter": [
28 {"type": "contains", "field": "embedding", "value": query_embedding},
29 {"type": "eq", "field": "type", "value": "chunk"},
30 ]
31 }
32}
33
34response = ontology_service.search(dsl=dsl)
35rows = response.result.get("data", [])
36
37# 4. 提取候选文档内容
38candidates = [row.get("content", "") for row in rows]
39chunk_ids = [row.get("chunkId", "") for row in rows]
40
41# 5. 使用 Rerank 对候选文档进行重排序
42if candidates:
43 rerank_response = rerank_service.rerank(
44 query=query,
45 documents=candidates,
46 top_k=5
47 )
48
49 # 6. 输出最终结果
50 sorted_rows = rerank_service.sort(rows, rerank_response.results)
51 for i, row in enumerate(sorted_rows):
52 score = rerank_response.results[i].relevance_score
53 print(f"[{i+1}] 得分={score:.4f} | chunkId={row.get('chunkId')} | {row.get('content', '')[:80]}")
5. 异常处理
SDK 定义了以下异常类型,均继承自 DataBuilderLogicSDKError:
| 异常类 | 说明 |
|---|---|
EnvironmentError |
环境配置解析异常(如环境变量缺失或格式错误) |
AuthenticationError |
认证失败 |
ValidationError |
输入参数校验失败 |
ConnectionError |
服务连接失败 |
RequestError |
请求执行失败 |
Python
1from databuilder_logic_sdk import DataBuilderLogicSDKError, RequestError
2
3try:
4 response = service.embed(["测试文本"])
5except RequestError as e:
6 print(f"请求失败: {e}")
7except DataBuilderLogicSDKError as e:
8 print(f"SDK 异常: {e}")
9except Exception as e:
10 print(f"未知异常: {e}")
6. API 速查表
create_ontology_service()
Python
1create_ontology_service() -> OntologyService
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
search(dsl) |
dsl: dict — 完整的 DSL 查询字典,必须包含 ontology 和 apiName |
OntologyResponse |
执行文档检索查询 |
create_embedding_service(model_name)
Python
1create_embedding_service(model_name: str, dimension: int = 0) -> EmbeddingService
| 参数 | 类型 | 说明 |
|---|---|---|
model_name |
str |
模型名称,如 "bge-large-zh"、"bge-large-en"、"text-embed_7b_bf16" |
dimension |
int |
向量维度,0 表示使用模型默认维度 |
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
embed(texts) |
texts: list[str] — 待向量化的文本列表 |
EmbeddingResponse |
获取文本嵌入向量 |
create_rerank_service(model_name)
Python
1create_rerank_service(model_name: str) -> RerankService
| 参数 | 类型 | 说明 |
|---|---|---|
model_name |
str |
模型名称,如 "bce-reranker-base" |
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
rerank(query, documents, top_k) |
query: str — 查询文本documents: list[str] — 候选文档列表top_k: int — 返回前 K 个结果 |
RerankResponse |
对文档进行相关性重排序 |
sort(original_obj, rerank_result) |
original_obj: list[Any] — 原始对象列表rerank_result: list[RerankResult] — 重排序结果 |
list[Any] |
根据 rerank 结果对原始对象重排序 |
评价此篇文章
