AI搜尋開放平台支援通過API的方式調用文檔切片服務,您可以將服務整合到您的業務處理鏈路中,來提升檢索或處理效率。
服務名稱 | 服務ID | 服務描述 | API調用QPS限制(含主帳號與RAM子帳號) |
文檔切片服務-001 | ops-document-split-001 | 提供通用的文本切片策略,可基於文檔段落格式、文本語義、指定規則,對html, markdown, txt格式的結構化資料進行拆分,同時支援富文本形式提取代碼,圖片,表格。 | 2 說明 如需擴充QPS,請通過工單聯絡支援人員協助。 |
在基於檢索的產生(Retrieval-Augmented Generation,簡稱RAG)中,通常的做法是將待檢索的文本處理成向量,並儲存在向量資料庫中,方便後續檢索。切片服務將長文檔分成較小的片段,可以很好地匹配文本向量化模型對每段文本長度的要求,從而達到將超長文檔向量化的目的。
基礎使用方法
切片API輸入是一條純文字的字串以及附加配置,輸出是切成片段的文本(和可能的富文本)。一共返回4個list:chunks,nodes,rich_texts,sentences。只需要將chunks list,以及rich_texts list中type!=image的content欄位內容提取出來,即可作為文檔切片結果進行下一步embedding。可以參考情境中心的代碼模板,python代碼如下:
# 提取切片結果,注意這裡只用了["chunks"]和除了圖片外的["rich_texts"]
doc_list = []
for chunk in document_split_result.body.result.chunks:
doc_list.append({"id": chunk.meta.get("id"), "content": chunk.content})
for rich_text in document_split_result.body.result.rich_texts:
if rich_text.meta.get("type") != "image":
doc_list.append({"id": rich_text.meta.get("id"), "content": rich_text.content})進階使用方法
文檔切片服務可將複雜的文檔內容按照指定Token數量進行切分,最終形成一個由多節點群組成的樹形結構。樹形結構可以用於RAG的retrieval階段,補全召回切片的上下文資訊,實現更高的回答準確率。
文檔切片服務的邏輯是儘可能地將文本按照最宏觀的結構去切分,如果此時每個切片的長度不能滿足要求,那麼則會遞迴地繼續切分每個切片,直到所有的切片長度都符合要求。遞迴切分的過程形成了一棵切片樹,其中每個葉子節點對應了一個真正的切片結果,即最終節點。
在後續的向量召回切片的過程中,您可以使用切片樹的資訊做上下文補全。例如,可以在模型Token數限制範圍內將召回切片的同一級其他切片一同補齊,提高資訊的完整度。
例如,給出一段文本
首次開通AI搜尋開放平台服務成功後,系統會自動建立出一個預設的工作空間:Default。
點擊建立空間。輸入自訂的工作空間名稱,點擊確認即可。點擊建立新的API-KEY後,系統會建立產生API-KEY,此處客戶可以點擊複製按鈕將API-KEY的內容複寫儲存。以下是一個可能的切片樹:
root (6b15)
|
+-- paragraph_node (557b)
|
+-- newline_node (ef4d)[首次開通AI搜尋開放平台...Default。]
|
+-- newline_node (c618)
|
+-- sentence_node (98ce)[點擊建立空間...點擊確認即可。]
|
+-- sentence_node (922a)[點擊建立新的API-KEY後...複製按鈕將API-KEY的內容複寫儲存。]在指定切片最大長度的前提下,完整的切片樹包含最終節點(有切片內容的節點)及中間節點(不包含任何內容,僅為邏輯節點)兩種類型。整棵樹會以所有節點列表的形式被返回(nodes),同時最終節點還會在一個列表中單獨返回(chunks)。以下是可能出現的一些節點種類:
root:根節點
paragraph_node:段落節點,代表對於"\n\n"分隔字元的切分,用於標識段落位置(樣本中無\n\n,因此只有一個這樣的中間節點)
newline_node:換行節點,代表對於"\n"分隔字元的切分(樣本中newline_node (ef4d)節點滿足切片長度要求,則為最終節點;newline_node (c618)節點需進一步切分,則為中間節點)
sentence_node:句子節點,代表對於“。”的切分
subsentence_node:子句節點,代表對於“,”的切分(樣本未出現)
對於以markdown和html格式輸入的內容,切片服務還會將一些富文本(rich_texts)單獨輸出。例如html中的<img>,<table>,<code> tags. 這些富文本在切片原文中的位置將會被替換成[image_0],<table>table_0</table>, <code>code_0</code>,與此同時每個富文字區塊都會在rich_texts欄位被返回。這樣的設計方便單獨召回富文字區塊,也可以在需要時放回原文中。每個富文字區塊都歸屬於唯一切片的最終節點chunk。
此外,為了提升短query的召回率,客戶可以選擇配置strategy.need_sentence=true。此時會將原文按句子做切分並單獨返回sentences列表,可以作為一路獨立召回。為了方便擴充sentence,每個sentence塊都歸屬於唯一的切片的最終節點chunk。(注意這個sentences列表和上面的sentence_node沒有關係)
上文加粗的chunks,nodes,rich_texts,sentences就是API返回的全部欄位了,您可以在下面的參數描述中找到詳細用法。為了切片的簡潔性,輸出的每個切片使用的是簡化版的html文法。
前提條件
擷取身份鑒權資訊
通過API調用AI搜尋開放平台服務時,需要對調用者身份進行鑒權,如何擷取鑒權資訊請參見擷取API-KEY。
擷取服務調用地址
支援通過公網和VPC兩種方式調用服務,詳情請參見擷取服務接入地址。
請求說明
公用說明
請求body最大不能超過8MB。
請求方式
POST
URL
{host}/v3/openapi/workspaces/{workspace_name}/document-split/{service_id} host:調用服務的地址,支援通過公網和VPC兩種方式調用API服務,可參見擷取服務接入地址。
workspace_name:工作空間名稱,例如default。
service_id: 系統內建服務id,例如ops-document-split-001。
請求參數
Header參數
API-KEY認證
參數 | 類型 | 必填 | 描述 | 樣本值 |
Content-Type | String | 是 | 請求類型:application/json | application/json |
Authorization | String | 是 | API-Key | Bearer OS-d1**2a |
Body參數
參數 | 類型 | 必填 | 描述 | 樣本值 |
document.content | String | 是 | 需要切片的純文字內容,根據JSON標準,string欄位如果包含以下字元需要轉義:"\\、\"、\/、\b、\f、\n、\r、\t"。常用JSON庫產生的JSON 串都無需手動轉義。 | "標題\n第一行\n第二行" |
document.content_encoding | String | 否 | content編碼類別型
| utf8 |
document.content_type | String | 否 | content格式
| html |
strategy.type | String | 否 | 段落切片策略
| default |
strategy.max_chunk_size | Int | 否 | 切片的最大長度,預設300。 | 300 |
strategy.compute_type | String | 否 | 長度計算方式
| token |
strategy.need_sentence | Boolean | 否 | 是否同時返回sentence層級切片,用於最佳化短query查詢
| false |
補充說明:
strategy.need_sentence參數:sentence層級切片是一種獨立於段落切片的策略,簡單來說就是將每一句話都作為獨立的切片返回。開啟sentence層級切片策略後,短切片及長切片可以同時召回,作為相互補充提升整體召回率。
返回參數
參數 | 類型 | 描述 | 樣本值 |
request_id | String | 系統對一次API調用賦予的唯一標識。 | B4AB89C8-B135-****-A6F8-2BAB801A2CE4 |
latency | Float/Int | 請求耗時,單位ms。 | 10 |
usage | Object | 本次調用產生的計量資訊。 | "usage": { "token_count": 3072 } |
usage.token_count | Int | Token數量。 | 3072 |
result.chunks | List(Chunk) | 切片結果清單(最終節點),包含切片內容及切片標識資訊。 | [{ "content" : "xxx", "meta":{'parent_id':x, 'id': x, 'type': 'text'} }] |
result.chunks[].content | String | 切片結果中的切片內容。 | "xxx" |
result.chunks[].meta | Map | 切片結果中的切片標識資訊,以下欄位都是string類型
| { 'parent_id': '3b94a18555c44b67b193c6ab4f****', 'id': 'c9edcb38fdf34add90d62f6bf5c6****, 'type': 'text' 'token': 10, } |
result.rich_texts | List(RichText) | 富文本輸出形式,當document.content_type為markdown、html時,切片內容中的image, code, table資訊會被替換為富文本形式。例如,輸入content中的""圖片URL會被替換為預留位置"[img_69646]",對應rich_texts中id=img_69646-0的富文本切片(注意id的命名尾碼) 說明 document.content_type為text時不支援該形式。 | [{ "content" : "xxx", "meta":{'belonged_chunk_id':x, 'id': x, 'type': 'table'} }] |
result.rich_texts[].content | String | 富文本輸出形式中的切片內容。image的content是URL,所以不會被切分,可能超過max_chunk_size。table會被切分為表頭+每一行內容的形式。code和本文的切分方法一致。 | "<table><tr>\n<th>動作</th>\n<th>說明</th>\n</tr><tr>\n<td>隱藏組件</td>\n<td>隱藏組件,不需要參數。</td>\n</tr></table>" |
result.rich_texts[].meta | Map | 富文本輸出形式中的切片標識資訊,欄位都為string類型
| { 'type': 'table', 'belonged_chunk_id': 'f0254cb7a5144a1fb3e5e024a3****b', 'id': 'table_2-1' 'token': 10 } |
result.nodes | List(Node) | 切片樹節點列表。 | [{'parent_id':x, 'id': x, 'type': 'text'}] |
result.nodes[] | Map | 切片樹節點資訊,欄位都為string類型
| { 'id': 'f0254cb7a5144a1fb3e5e024a3****b', 'type': 'paragraph_node', 'parent_id': 'f0254cb7a5144a1fb3e5e024a3****b' } |
result.sentences(可選) | List(sentence) | request中strategy.need_sentence=true時,返回每個分區中分句的列表。 | [{ "content" : "xxx", "meta":{'belonged_chunk_id':x, 'id': x, 'type': 'sentence'} }] |
result.sentences[].content(可選) | String | 句子內容 | "123" |
result.sentences[].meta(可選) | Map | 句子資訊:
| { 'id': 'f0254cb7a5144a1fb3e5e024a3****b1-1', 'type': 'sentence', 'belonged_chunk_id': 'f0254cb7a5144a1fb3e5e024a3****b', 'token': 10 } |
Curl請求樣本
curl -XPOST -H"Content-Type: application/json"
"http://***-hangzhou.opensearch.aliyuncs.com/v3/openapi/workspaces/default/document-split/ops-document-split-001"
-H "Authorization: Bearer 您的API-KEY"
-d "{
\"document\":{
\"content\":\"產品優勢\\n行業演算法版\\n智能\\n內建豐富的定製化演算法模型,並結合不同行業搜尋特點,推出行業召回、排序演算法,保障更優搜尋效果。\\n\\n靈活、可定製\\n開發人員可基於自身業務特性與資料,定製相應的演算法模型、應用結構、資料處理、查詢分析、排序等配置,滿足個人化搜尋需求,提升搜尋結果點擊率,實現業務快速迭代,極大縮短需求上線的周期。\\n\\n安全、穩定\\n提供7×24小時的運行維護,並以線上工單和電話報障等方式提供支援人員,具備完善的故障監控、自動警示、快速定位等一系列故障應急響應機制。基於阿里雲的AccessKeyId和AccessKeySecret安全加密對,從提供者上進行許可權控制和隔離,保證使用者層級的資料隔離,使用者資料安全有保障。資料冗餘備份,保證資料不會丟失。\\n\\nAuto Scaling\\n具備彈性擴容能力,使用者可根據需要自行擴充或縮減所使用的資源。\\n\\n豐富的外圍功能\\n支援熱搜、底紋、下拉提示、統計報表等一系列搜尋外圍功能,方便使用者展示及分析。\\n\\n開箱即用\\n無需營運部署叢集,快速一站式接入搜尋服務\\n\\n高效能檢索版\\n高吞吐\\n單表支援萬層級的寫入TPS,秒級更新。\\n\\n安全、穩定\\n提供7×24小時的運行維護,並以線上工單和電話報障等方式提供支援人員,具備完善的故障監控、自動警示、快速定位等一系列故障應急響應機制。基於阿里雲的AccessKeyId和AccessKeySecret安全加密對,從提供者上進行許可權控制和隔離,保證使用者層級的資料隔離,使用者資料安全有保障。資料冗餘備份,保證資料不會丟失。\\n\\nAuto Scaling\\n具備彈性擴容能力,使用者可根據需要自行擴充或縮減所使用的資源。\\n\\n開箱即用\\n無需營運部署叢集,快速一站式接入搜尋服務\\n\\n向量檢索版\\n穩定\\n底層採用C++實現,經過十多年的發展,支撐了多個核心業務,非常穩定,非常適用於對穩定性要求較高的核心搜尋情境。\\n\\n高效\\n分布式搜尋引擎,可以高效的支援海量資料的檢索,同時也支援資料的即時更新(秒級生效),非常適用於對查詢耗時敏感、時效性要求高的搜尋情境。\\n\\n低成本\\n支援多種索引壓縮策略,同時支援多值索引載入測試,能夠以較低的成本滿足使用者的查詢需求。\\n\\n向量演算法\\n支援各種非結構化資料(如語音、圖片、視頻,語言文字、行為等)向量檢索。\\n\\nSQL查詢\\n支援SQL查詢文法,支援多表線上join,提供豐富的內建UDF函數和UDF函數定製機制,以滿足不同使用者的檢索需求。在營運系統中我們已經整合SQL studio,方便使用者進行SQL開發與測試。\\n\\n召回引擎版\\n穩定\\n底層採用C++實現,經過十多年的發展,支撐了多個核心業務,非常穩定,非常適用於對穩定性要求較高的核心搜尋情境。\\n\\n高效\\n問天引擎是一個分布式搜尋引擎,可以高效的支援海量資料的檢索,同時也支援資料的即時更新(秒級生效),非常適用於對查詢耗時敏感、時效性要求高的搜尋情境。\\n\\n低成本\\n問天引擎支援多種索引壓縮策略,同時支援多值索引載入測試,能夠以較低的成本滿足使用者的查詢需求。\\n\\n功能豐富\\n問天引擎支援多種分析器類型、多種索引類型、強大的查詢文法,能夠很好的滿足使用者的檢索需求。同時我們還提供外掛程式機制,方便使用者定製自己的業務處理邏輯。\\n\\nSQL查詢\\n問天引擎支援SQL查詢文法,支援多表線上join,提供豐富的內建UDF函數和UDF函數定製機制,以滿足不同使用者的檢索需求。在營運系統中我們即將整合SQL studio,方便使用者進行SQL開發與測試。\",
\"content_encoding\":\"utf8\",\"content_type\":\"text\"
},
\"strategy\":{
\"type\":\"default\",
\"max_chunk_size\":300,
\"compute_type\":\"token\",
\"need_sentence\":false
}
}"響應樣本
正常響應樣本
{
"request_id": "47EA146B-****-448C-A1D5-50B89D7EA434",
"latency": 161,
"usage": {
"token_count": 800
},
"result": {
"chunks": [
{
"content": "產品優勢\\n行業演算法版\\n智能\\n內建豐富的定製化演算法模型,並結合不同行業搜尋特點,推出行業召回、排序演算法,保障 更優搜尋效果。\\n\\n靈活、可定製\\n開發人員可基於自身業務特性與資料,定製相應的演算法模型、應用結構、資料處理、查詢分析、排序等配置,滿足個人化搜尋需求,提升搜尋結果點擊率,實現業務快速迭代,極大縮短需求上線的周期。\\n\\n安全、穩定\\n提供7×24小時的運行維護,並以線上工單和電話報障等方式提供支援人員,具備完善的故障監控、自動警示、快速定位等一系列故障應急響應機制。基於阿里雲的AccessKeyId和AccessKeySecret安全加密對,從提供者上進行許可權控制和隔離,保證使用者層級的資料隔離,使用者 資料安全有保障。資料冗餘備份,保證資料不會丟失。\\n\\nAuto Scaling\\n具備彈性擴容能力,使用者可根據需要自行擴充或縮減所使用的資源。\\n\\n豐富的外圍功能\\n支援熱搜、底紋、下拉提示、統計報表等一系列搜尋外圍功能,方便使用者展示及分析。\\n\\n開箱即 用\\n無需營運部署叢集,快速一站式接入搜尋服務\\n\\n高效能檢索版\\n高吞吐\\n單表支援萬層級的寫入TPS,秒級更新",
"meta": {
"parent_id": "dee776dda3ff4b078bccf989a6bd****",
"id": "27eea7c6b2874cb7a5bf6c71afbf****",
"type": "text"
}
},
{
"content": "。\\n\\n安全、穩定\\n提供7×24小時的運行維護,並以線上工單和電話報障等方式提供支援人員,具備完善的故障監控、自動警示、快速定位等一系列故障應急響應機制。基於阿里雲的AccessKeyId和AccessKeySecret安全加密對,從提供者上進行許可權控制和隔離,保證 使用者層級的資料隔離,使用者資料安全有保障。資料冗餘備份,保證資料不會丟失。\\n\\nAuto Scaling\\n具備彈性擴容能力,使用者可根據需要自行擴充或縮減所使用的資源。\\n\\n開箱即用\\n無需營運部署叢集,快速一站式接入搜尋服務\\n\\n向量檢索版\\n穩定\\n底層 採用c++實現,經過十多年的發展,支撐了多個核心業務,非常穩定,非常適用於對穩定性要求較高的核心搜尋情境。\\n\\n高效\\n分布式搜尋引擎,可以高效的支援海量資料的檢索,同時也支援資料的即時更新(秒級生效),非常適用於對查詢耗時敏感、時效性要求 高的搜尋情境。\\n\\n低成本\\n支援多種索引壓縮策略,同時支援多值索引載入測試,能夠以較低的成本滿足使用者的查詢需求。\\n\\n向量演算法\\n支援各種非結構化資料(如語音、圖片、視頻,語言文字、行為等)向量檢索。\\n\\nSQL查詢\\n支援SQL查詢文法,支援多表線上join,提供豐富的內建UDF函數和UDF函數定製機制,以滿足不同使用者的檢索需求",
"meta": {
"parent_id": "dee776dda3ff4b078bccf989a6bd****",
"id": "bf9fcfb47fcf410aa05216e268df****",
"type": "text"
}
},
{
"content": "。在營運系統中我們已經整合SQL studio,方便使用者進行SQL開發與測試。\\n\\n召回引擎版\\n穩定\\n底層採用C++實現,經過十多年的發展,支撐了多個核心業務,非常穩定,非常適用於對穩定性要求較高的核心搜尋情境。\\n\\n高效\\n問天引擎是一個分布式搜尋引擎,可以高效的支援海量資料的檢索,同時也支援資料的即時更新(秒級生效),非常適用於對查詢耗時敏感、時效性要求高的搜尋情境。\\n\\n低成本\\n問天引擎支援多種索引壓縮策略,同時支援多值索引載入測試,能夠以較低的成本滿足使用者的查詢需求。\\n\\n功能豐富\\n問天引擎支援多種分析器類 型、多種索引類型、強大的查詢文法,能夠很好的滿足使用者的檢索需求。同時我們還提供外掛程式機制,方便使用者定製自己的業務處理邏輯。\\n\\nSQL查詢\\n問天引擎支援SQL查詢文法,支援多表線上join,提供豐富的內建UDF函數和UDF函數定製機制,以滿足不同使用者的檢索需求。在營運系統中我們即將整合SQL studio,方便使用者進行SQL開發與測試。",
"meta": {
"parent_id": "dee776dda3ff4b078bccf989a6bd****",
"id": "26ab0e4f7665487bb0a82c5a226a****",
"type": "text"
}
}
],
"nodes": [
{
"id": "dee776dda3ff4b078bccf989a6bd****",
"type": "root",
"parent_id": "dee776dda3ff4b078bccf989a6bd****"
},
{
"id": "27eea7c6b2874cb7a5bf6c71afbf****",
"type": "sentence",
"parent_id": "dee776dda3ff4b078bccf989a6bd****"
},
{
"id": "bf9fcfb47fcf410aa05216e268df****",
"type": "sentence",
"parent_id": "dee776dda3ff4b078bccf989a6bd****"
},
{
"id": "26ab0e4f7665487bb0a82c5a226a****",
"type": "sentence",
"parent_id": "dee776dda3ff4b078bccf989a6bd****"
}
],
"rich_texts": []
}
}異常響應樣本
在訪問請求出錯的情況下,輸出的結果中會通過code和message指明出錯原因。
{
"request_id": "817964CD-1B84-4AE1-9B63-4FB99734****",
"latency": 0,
"code": "InvalidParameter",
"message": "JSON parse error: Invalid UTF-8 start byte 0xbc; nested exception is com.fasterxml.jackson.core.JsonParseException: Invalid UTF-8 start byte 0xbc\n at line: 2, column: 19]"
}狀態代碼說明
請參見AI搜尋開放平台狀態代碼說明。