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??梢詤⒖紙鼍爸行牡拇a模板,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:句子節點,代表對于“?!钡那蟹?/p>
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信息會被替換為富文本形式 (注意: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小時的運行維護,并以在線工單和電話報障等方式提供技術支持,具備完善的故障監控、自動告警、快速定位等一系列故障應急響應機制?;诎⒗镌频腁ccessKeyId和AccessKeySecret安全加密對,從訪問接口上進行權限控制和隔離,保證用戶級別的數據隔離,用戶數據安全有保障。數據冗余備份,保證數據不會丟失。\\n\\n彈性伸縮\\n具備彈性擴容能力,用戶可根據需要自行擴展或縮減所使用的資源。\\n\\n豐富的外圍功能\\n支持熱搜、底紋、下拉提示、統計報表等一系列搜索外圍功能,方便用戶展示及分析。\\n\\n開箱即用\\n無需運維部署集群,快速一站式接入搜索服務\\n\\n高性能檢索版\\n高吞吐\\n單表支持萬級別的寫入TPS,秒級更新。\\n\\n安全、穩定\\n提供7×24小時的運行維護,并以在線工單和電話報障等方式提供技術支持,具備完善的故障監控、自動告警、快速定位等一系列故障應急響應機制?;诎⒗镌频腁ccessKeyId和AccessKeySecret安全加密對,從訪問接口上進行權限控制和隔離,保證用戶級別的數據隔離,用戶數據安全有保障。數據冗余備份,保證數據不會丟失。\\n\\n彈性伸縮\\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小時的運行維護,并以在線工單和電話報障等方式提供技術支持,具備完善的故障監控、自動告警、快速定位等一系列故障應急響應機制?;诎⒗镌频腁ccessKeyId和AccessKeySecret安全加密對,從訪問接口上進行權限控制和隔離,保證用戶級別的數據隔離,用戶 數據安全有保障。數據冗余備份,保證數據不會丟失。\\n\\n彈性伸縮\\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小時的運行維護,并以在線工單和電話報障等方式提供技術支持,具備完善的故障監控、自動告警、快速定位等一系列故障應急響應機制?;诎⒗镌频腁ccessKeyId和AccessKeySecret安全加密對,從訪問接口上進行權限控制和隔離,保證 用戶級別的數據隔離,用戶數據安全有保障。數據冗余備份,保證數據不會丟失。\\n\\n彈性伸縮\\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搜索開放平臺狀態碼說明。