API詳情
本文主要介紹如何使用API調(diào)用舊版的百煉RAG檢索增強應(yīng)用。
2024年5月3日阿里云百煉產(chǎn)品全新升級迭代,具體升級內(nèi)容請參見官方預(yù)置應(yīng)用升級調(diào)整公告。此次升級后,舊版的RAG檢索增強應(yīng)用將不再支持新建。如果您的應(yīng)用創(chuàng)建日期在本次升級之前,您可以繼續(xù)參考本文來調(diào)用您的應(yīng)用。
了解如何將您的企業(yè)知識庫遷移至新版知識庫并構(gòu)建RAG應(yīng)用(新),詳見下方遷移方案。
了解如何通過HTTP接口或SDK在您的業(yè)務(wù)代碼中調(diào)用RAG應(yīng)用(新),詳見應(yīng)用調(diào)用。
遷移方案
企業(yè)知識庫目前已停止維護,我們建議您盡快將您的私有知識遷移至新版知識庫(阿里云暫無提供官方的遷移工具或服務(wù))。新版知識庫的功能更加豐富,并支持更多文檔格式。
企業(yè)知識類型 | 遷移方案 |
文檔 | 建議您創(chuàng)建非結(jié)構(gòu)化知識庫來管理文檔類知識。文檔導(dǎo)入方式可選擇本地上傳或從對象存儲OSS導(dǎo)入。 若選擇本地上傳,后續(xù)您需要手動更新知識庫;若選擇從對象存儲OSS導(dǎo)入,后續(xù)您可以通過整合對象存儲OSS、函數(shù)計算FC與百煉的知識庫API,實現(xiàn)知識庫的自動更新。 本地上傳支持通過控制臺和API操作;從對象存儲OSS導(dǎo)入目前僅支持通過控制臺操作。 更多說明,請參見知識庫:步驟一導(dǎo)入數(shù)據(jù)。 |
FAQ | 建議您創(chuàng)建結(jié)構(gòu)化知識庫來管理FAQ類知識。您可以通過本地上傳文檔或基于云數(shù)據(jù)庫RDS構(gòu)建結(jié)構(gòu)化知識庫。 若選擇本地上傳,后續(xù)您需要手動更新知識庫;若選擇基于云數(shù)據(jù)庫RDS構(gòu)建,RDS數(shù)據(jù)表中的數(shù)據(jù)更新將自動同步至知識庫。 目前這兩種方式都只能通過控制臺進行操作。 更多說明,請參見知識庫:步驟一導(dǎo)入數(shù)據(jù)。 |
創(chuàng)建新版知識庫后,您便可以在我的應(yīng)用中將其與您的智能體應(yīng)用或者工作流應(yīng)用關(guān)聯(lián)。更多說明,請參見知識庫:步驟四引用知識庫。
SDK使用
前提條件
已獲取并完成API-KEY配置:您需要獲取API Key并配置API Key到環(huán)境變量。
已安裝SDK:DashScope SDK提供了Python和Java兩個版本,安裝最新版SDK。
已創(chuàng)建RAG檢索增強應(yīng)用(不再支持新建),并上傳企業(yè)知識:上傳企業(yè)知識。
已獲取APP_ID:可在我的應(yīng)用頁面目標應(yīng)用卡片上查看。
調(diào)用示例
from http import HTTPStatus
from dashscope import Application
def rag_call():
response = Application.call(app_id='YOUR_APP_ID',
prompt='API接口說明中, TopP參數(shù)改如何傳遞?',
)
if response.status_code != HTTPStatus.OK:
print('request_id=%s, code=%s, message=%s\n' % (response.request_id, response.status_code, response.message))
else:
print('request_id=%s\n output=%s\n usage=%s\n' % (response.request_id, response.output, response.usage))
if __name__ == '__main__':
rag_call()
import com.alibaba.dashscope.app.*;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import java.util.List;
public class Main{
public static void ragCall()
throws ApiException, NoApiKeyException, InputRequiredException {
RagApplicationParam param = RagApplicationParam.builder()
.appId("YOUR_APP_ID")
.prompt("API接口說明中, TopP參數(shù)改如何傳遞?")
.build();
Application application = new Application();
ApplicationResult result = application.call(param);
System.out.printf("requestId: %s, text: %s, finishReason: %s\n",
result.getRequestId(), result.getOutput().getText(), result.getOutput().getFinishReason());
if (result.getUsage() != null && result.getUsage().getModels() != null) {
for (ApplicationUsage.ModelUsage usage : result.getUsage().getModels()) {
System.out.printf("modelId: %s, inputTokens: %d, outputTokens: %d\n",
usage.getModelId(), usage.getInputTokens(), usage.getOutputTokens());
}
}
}
public static void main(String[] args) {
try {
ragCall();
} catch (ApiException | NoApiKeyException | InputRequiredException e) {
throw new RuntimeException(e);
}
System.exit(0);
}
}
標簽檢索
如果您的企業(yè)知識數(shù)據(jù)量較大,可以采用標簽檢索的方式提高召回的準確率。
首先,需要參考知識標簽對文檔添加知識標簽。
其次,獲取到“標簽ID”,并通過doc_tag_codes參數(shù)傳入對應(yīng)的標簽ID,可以同時傳入多個標簽。
當傳入標簽后,在知識檢索召回的過程中,將只在標簽對應(yīng)的文檔范圍中進行檢索召回,而不是整個知識庫。
from http import HTTPStatus
from dashscope import Application
def rag_call_with_tags():
response = Application.call(app_id='YOUR_APP_ID',
prompt='API接口說明中, TopP參數(shù)改如何傳遞?',
doc_tag_codes=['471d*******3427', '471d*******3428'], # 指定標簽范圍進行檢索
doc_reference_type=Application.DocReferenceType.simple, # 返回結(jié)果中不包含角標
has_thoughts=True # 開啟檢索過程信息返回結(jié)果
)
if response.status_code != HTTPStatus.OK:
print('request_id=%s, code=%s, message=%s\n' % (response.request_id, response.status_code, response.message))
else:
print('request_id=%s\n output=%s\n usage=%s\n' % (response.request_id, response.output, response.usage))
thoughts = response.output.thoughts
if thoughts is not None:
for thought in thoughts:
print('thought=%s' % thought)
if __name__ == '__main__':
rag_call_with_tags()
import com.alibaba.dashscope.app.*;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import java.util.List;
import java.util.Arrays;
public class Main {
public static void ragCallWithTags()
throws ApiException, NoApiKeyException, InputRequiredException {
RagApplicationParam param = RagApplicationParam.builder()
.appId("YOUR_APP_ID")
.prompt("API接口說明中, TopP參數(shù)改如何傳遞?")
// 指定標簽范圍進行檢索
.docTagCodes(Arrays.asList("471d*******3427", "471d*******3428"))
// 返回結(jié)果中不包含角標
.docReferenceType(RagApplicationParam.DocReferenceType.SIMPLE)
// 開啟檢索過程信息返回結(jié)果
.hasThoughts(true)
.build();
Application application = new Application();
ApplicationResult result = application.call(param);
System.out.printf("requestId: %s, text: %s, finishReason: %s\n",
result.getRequestId(), result.getOutput().getText(), result.getOutput().getFinishReason());
List<ApplicationOutput.Thought> thoughts = result.getOutput().getThoughts();
if (thoughts != null && thoughts.size() > 0) {
for (ApplicationOutput.Thought thought : thoughts) {
System.out.printf("thought: %s\n", thought);
}
}
}
public static void main(String[] args) {
try {
ragCallWithTags();
} catch (ApiException | NoApiKeyException | InputRequiredException e) {
System.out.printf("Exception: %s", e.getMessage());
}
System.exit(0);
}
}
多輪會話
云端托管多輪會話
阿里云百煉應(yīng)用提供云端托管多輪對話功能,通過session_id進行多輪會話,阿里云百煉云端將自動托管多輪會話,調(diào)用側(cè)無需自行維護多輪會話。
下面的例子中,第一次調(diào)用后返回session_id,在第二次調(diào)用時,可以傳入第一次返回的session_id,那么第二次調(diào)用模型服務(wù)時,將攜帶第一次調(diào)用的會話信息。
目前session id會話有效期是1個小時,最大歷史會話輪數(shù)為50。
如果同時傳入session id和history時,優(yōu)先使用傳入的history,不再使用托管的多輪會話。
from http import HTTPStatus
from dashscope import Application
def call_with_session():
response = Application.call(app_id='YOUR_APP_ID',
prompt='我想去新疆',
)
if response.status_code != HTTPStatus.OK:
print('request_id=%s, code=%s, message=%s\n' % (response.request_id, response.status_code, response.message))
return
response = Application.call(app_id='your app id',
prompt='那邊有什么旅游景點或者美食?',
session_id=response.output.session_id
)
if response.status_code != HTTPStatus.OK:
print('request_id=%s, code=%s, message=%s\n' % (response.request_id, response.status_code, response.message))
else:
print('request_id=%s, output=%s, usage=%s\n' % (response.request_id, response.output, response.usage))
if __name__ == '__main__':
call_with_session()
import com.alibaba.dashscope.app.*;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void callWithSession()
throws ApiException, NoApiKeyException, InputRequiredException {
ApplicationParam param = ApplicationParam.builder()
.appId("YOUR_APP_ID")
.prompt("我想去新疆")
.build();
Application application = new Application();
ApplicationResult result = application.call(param);
param.setSessionId(result.getOutput().getSessionId());
param.setPrompt("那邊有什么旅游景點或者美食?");
result = application.call(param);
System.out.printf("requestId: %s, text: %s, finishReason: %s\n",
result.getRequestId(), result.getOutput().getText(), result.getOutput().getFinishReason());
}
public static void main(String[] args) {
try {
callWithSession();
} catch (ApiException | NoApiKeyException | InputRequiredException e) {
System.out.printf("Exception: %s", e.getMessage());
}
System.exit(0);
}
}
調(diào)用側(cè)傳入多輪會話
調(diào)用側(cè)自行維護多輪會話時,可以通過history傳入多輪會話信息。
from http import HTTPStatus
from dashscope import Application
def call_with_history():
prompt = '我想去新疆'
response = Application.call(app_id="YOUR_APP_ID",
prompt=prompt,
)
if response.status_code != HTTPStatus.OK:
print('request_id=%s, code=%s, message=%s\n' % (response.request_id, response.status_code, response.message))
return
history = [{'user': prompt, 'bot': response.output.text}]
response = Application.call(app_id="YOUR_APP_ID",
prompt='那邊有什么旅游景點或者美食?',
history=history
)
if response.status_code != HTTPStatus.OK:
print('request_id=%s, code=%s, message=%s\n' % (response.request_id, response.status_code, response.message))
else:
print('request_id=%s, output=%s, usage=%s\n' % (response.request_id, response.output, response.usage))
if __name__ == '__main__':
call_with_history()
import com.alibaba.dashscope.app.*;
import com.alibaba.dashscope.common.History;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void callWithHistory()
throws ApiException, NoApiKeyException, InputRequiredException {
String prompt = "我想去新疆";
ApplicationParam param = ApplicationParam.builder()
.appId(APP_ID)
.prompt("我想去新疆")
.build();
Application application = new Application();
ApplicationResult result = application.call(param);
param.setHistory(Arrays.asList(History.builder()
.user(prompt)
.bot(result.getOutput().getText())
.build()));
param.setPrompt("那邊有什么旅游景點或者美食?");
result = application.call(param);
System.out.printf("requestId: %s, text: %s, finishReason: %s\n",
result.getRequestId(), result.getOutput().getText(), result.getOutput().getFinishReason());
}
public static void main(String[] args) {
try {
callWithHistory();
} catch (ApiException | NoApiKeyException | InputRequiredException e) {
System.out.printf("Exception: %s", e.getMessage());
}
System.exit(0);
}
}
流式輸出
流式輸出需要添加對應(yīng)參數(shù)。其中,Python SDK中需要添加stream=True,Java SDK中需要使用streamCall接口調(diào)用。
from http import HTTPStatus
from dashscope import Application
def call_with_stream():
responses = Application.call(app_id='YOUR_APP_ID',
prompt='如何做炒西紅柿雞蛋?',
stream=True
)
for response in responses:
if response.status_code != HTTPStatus.OK:
print('request_id=%s, code=%s, message=%s\n' % (
response.request_id, response.status_code, response.message))
else:
print('output=%s, usage=%s\n' % (response.output, response.usage))
if __name__ == '__main__':
call_with_stream()
import com.alibaba.dashscope.app.*;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import io.reactivex.Flowable;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void streamCall() throws NoApiKeyException, InputRequiredException {
ApplicationParam param = ApplicationParam.builder()
.appId("YOUR_APP_ID")
.prompt("如何做土豆燉豬腳?")
.build();
Application application = new Application();
Flowable<ApplicationResult> result = application.streamCall(param);
result.blockingForEach(data -> {
System.out.printf("requestId: %s, text: %s, finishReason: %s\n",
data.getRequestId(), data.getOutput().getText(), data.getOutput().getFinishReason());
});
}
public static void main(String[] args) {
try {
streamCall();
} catch (ApiException | NoApiKeyException | InputRequiredException e) {
System.out.printf("Exception: %s", e.getMessage());
}
System.exit(0);
}
}
業(yè)務(wù)空間
上述調(diào)用示例調(diào)用的是默認業(yè)務(wù)空間的應(yīng)用,如果需要調(diào)用其他業(yè)務(wù)空間,需要傳入指定的業(yè)務(wù)空間標識。
請將WORKSPACE替換示例中的YOUR_WORKSPACE,代碼才能正常運行。請參考獲取業(yè)務(wù)空間 ID獲取WORKSPACE。
from http import HTTPStatus
from dashscope import Application
def call_with_workspace():
response = Application.call(app_id='YOUR_APP_ID',
workspace='YOUR_WORKSPACE',
prompt='如何做炒西紅柿雞蛋?',
)
if response.status_code != HTTPStatus.OK:
print('request_id=%s, code=%s, message=%s\n' % (response.request_id, response.status_code, response.message))
else:
print('request_id=%s, text=%s, usage=%s\n' % (response.request_id, response.output.text, response.usage))
if __name__ == '__main__':
call_with_workspace()
import com.alibaba.dashscope.app.*;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
public class Main {
public static void callWithWorkspace() throws NoApiKeyException, InputRequiredException {
ApplicationParam param = ApplicationParam.builder()
.workspace("YOUR_WORKSPACE")
.appId("YOUR_APP_ID")
.prompt("如何做土豆燉豬腳?")
.build();
Application application = new Application();
ApplicationResult result = application.call(param);
System.out.printf("requestId: %s, text: %s, finishReason: %s\n",
result.getRequestId(), result.getOutput().getText(), result.getOutput().getFinishReason());
}
public static void main(String[] args) {
try {
callWithWorkspace();
} catch (ApiException | NoApiKeyException | InputRequiredException e) {
System.out.printf("Exception: %s", e.getMessage());
}
System.exit(0);
}
}
輸入?yún)?shù)
參數(shù) | 類型 | 默認值 | 說明 |
app_id | string | - | 應(yīng)用標識。 |
prompt | string | - | 用戶當前輸入的期望模型執(zhí)行指令,用于指導(dǎo)模型生成回復(fù)。 |
session_id | string | - | 對話歷史會話唯一標識,傳入session_id后,將在云端進行對話歷史記錄,調(diào)用大模型將自動攜帶存儲的對話歷史。請確保session_id不重復(fù),并且session_id和history二選一即可。 |
history(可選) | list[dict] | [] | 用戶與模型的對話歷史,list中的每個元素是形式為{"user":"用戶輸入","bot":"模型輸出"}的一輪對話,多輪對話按時間順序排列。 |
workspace(可選) | string | - | 業(yè)務(wù)空間標識。 |
seed(可選) | int | 1234 | 生成時使用的隨機數(shù)種子,用戶控制模型生成內(nèi)容的隨機性。seed支持無符號64位整數(shù),默認值為1234。在使用seed時,模型將盡可能生成相同或相似的結(jié)果,但目前不保證每次生成的結(jié)果完全相同。 |
top_p(可選) | float | 0.2 | 生成過程中核采樣方法的概率閾值,例如,取值為0.2時,僅保留概率加起來大于等于0.2的最可能token的最小集合作為候選集。取值范圍為(0,1.0),取值越大,生成的隨機性越高;取值越低,生成的確定性越高。 |
top_k(可選) | int | None | 生成時,采樣候選集的大小。例如,取值為50時,僅將單次生成中得分最高的50個token組成隨機采樣的候選集。取值越大,生成的隨機性越高;取值越小,生成的確定性越高。默認不傳遞該參數(shù),取值為None或當top_k大于100時,表示不啟用top_k策略,此時,僅有top_p策略生效。 |
temperature(可選) | float | 1.0 | 用于控制隨機性和多樣性的程度。具體來說,temperature值控制了生成文本時對每個候選詞的概率分布進行平滑的程度。較高的temperature值會降低概率分布的峰值,使得更多的低概率詞被選擇,生成結(jié)果更加多樣化;而較低的temperature值則會增強概率分布的峰值,使得高概率詞更容易被選擇,生成結(jié)果更加確定。 取值范圍: [0, 2),不建議取值為0,無意義。 python version >=1.10.1 java version >= 2.5.1 |
stream(可選) | bool | False | 是否使用流式輸出。當以stream模式輸出結(jié)果時,接口返回結(jié)果為generator,需要通過迭代獲取結(jié)果,默認每次輸出為當前生成的整個序列,最后一次輸出為最終全部生成結(jié)果,可以通過參數(shù)incremental_output為False改變輸出模式為非增量輸出。 |
doc_tag_codes(可選) | list[str] | - | 文檔標簽code列表。傳入文檔標簽code列表后,在檢索召回過程中,會從指定的標簽code關(guān)聯(lián)的文檔中進行檢索召回。 |
doc_reference_type | str | - | 返回文檔檢索后的引用類型,取值為:simple。 傳simple則返回的結(jié)果中不包含角標信息。 |
has_thoughts | bool | False | 是否輸出檢索召回處理過程信息。開啟后,將返回文檔檢索召回和模型推理的過程信息。 |
輸出參數(shù)
返回參數(shù) | 類型 | 說明 | 備注 |
status_code | int | 200(HTTPStatus.OK)表示請求成功,否則表示請求失敗,可以通過code獲取錯誤碼,通過message字段獲取錯誤詳細信息。 說明 Python才有這個字段,Java失敗會拋出異常,異常信息為code,message內(nèi)容。 | |
request_Id | string | 系統(tǒng)生成的標志本次調(diào)用的id。 | |
code | string | 表示請求失敗,表示錯誤碼,成功忽略。 python only | |
message | string | 失敗,表示失敗詳細信息,成功忽略。 python only | |
output | dict | 調(diào)用結(jié)果信息,對于千問模型,包含輸出text。 | |
usage | dict | 計量信息,表示本次請求的計量數(shù)據(jù)。 | |
output.text | string | 模型生成回復(fù)。 | |
output.finish_reason | string | 正在生成時為null,生成結(jié)束時如果由于停止token導(dǎo)致則為stop。 | |
output.session_id | string | 對話歷史會話的唯一標識. | 在多輪會話時,可以使用此標識進行多輪會話保持。 |
usage.models[].model_id | string | 本次應(yīng)用調(diào)用到的模型。 | |
usage.models[].input_tokens | int | 用戶輸入文本轉(zhuǎn)換成Token后的長度。 | |
usage.models[].output_tokens | int | 模型生成回復(fù)轉(zhuǎn)換為Token后的長度。 | |
output.thoughts[].throught | string | 模型的思考結(jié)果。 | |
output.thoughts[].action_type | string | 大模型返回的執(zhí)行步驟類型 api:執(zhí)行API插件,response:返回最終結(jié)果。 | |
output.thoughts[].action_name | string | 執(zhí)行的action名稱,如文檔檢索、API插件。 | |
output.thoughts[].action | string | 執(zhí)行的步驟。 | |
output.thoughts[].action_input_stream | string | 入?yún)⒌牧魇浇Y(jié)果。 | |
output.thoughts[].action_input | string | 插件的輸入?yún)?shù)。 | |
output.thoughts[].response | string | 模型調(diào)用返回的結(jié)果。 | |
output.thoughts[].observation | string | 檢索或插件的返回結(jié)果。 |
HTTP調(diào)用接口
功能描述
應(yīng)用調(diào)用同時支持 HTTP 調(diào)用來完成客戶的響應(yīng),目前提供普通 HTTP 和 HTTP SSE 兩種協(xié)議,您可根據(jù)自己的需求自行選擇。
前提條件
已開通百煉服務(wù): 產(chǎn)品開通。
已創(chuàng)建API-KEY:獲取API Key。
已創(chuàng)建RAG檢索增強應(yīng)用:0代碼構(gòu)建私有知識問答應(yīng)用,并上傳企業(yè)知識:上傳企業(yè)知識。
提交接口調(diào)用
POST https://dashscope.aliyuncs.com/api/v1/apps/{YOUR_APP_ID}/completion
入?yún)⒚枋?/h3>
傳參方式 | 字段 | 類型 | 必選 | 描述 | 示例值 |
Header | Content-Type | String | 是 | 請求類型:application/json | application/json |
Accept | String | 否 | */*,選擇text/event-stream則會開啟 SSE 響應(yīng),默認無設(shè)置 | text/event-stream | |
Authorization | String | 是 | API-Key,例如:Bearer d1**2a | Bearer d1**2a | |
X-DashScope-SSE | String | 否 | 跟Accept: text/event-stream 二選一即可啟用SSE響應(yīng) | enable | |
X-DashScope-WorkSpace | String | 否 | 業(yè)務(wù)空間標識。 | ws_ik******RVYCKzt | |
Body | input.prompt | String | 是 | 用戶當前輸入的期望模型執(zhí)行指令,支持中英文。 | 哪個公園距離我更近 |
input.history | List | 否 | 用戶與模型的對話歷史,list中的每個元素是形式為{"user":"用戶輸入","bot":"模型輸出"}的一輪對話,多輪對話按時間正序排列。 | "history": [ { "user":"今天天氣好嗎?", "bot":"今天天氣不錯,要出去玩玩嘛?" }, { "user":"那你有什么地方推薦?", "bot":"我建議你去公園,春天來了,花朵開了,很美麗。" } ] | |
input.session_id | String | 否 | 對話歷史會話唯一標識, 傳入session_id后,將在云端進行對話歷史進行記錄,調(diào)用大模型將自動攜帶存儲的對話歷史。請確保session_id不重復(fù),并且session_id和history二選一即可。 | ||
input.doc_tag_codes | String | 否 | 文檔標簽code列表。傳入文檔標簽code列表后,在檢索召回過程中,會從指定的標簽code關(guān)聯(lián)的文檔中進行檢索召回。 | ["471d*******3427", "881f*****0c232"] | |
parameters.seed | Integer | 否 | 生成時使用的隨機數(shù)種子,用戶控制模型生成內(nèi)容的隨機性。seed支持無符號64位整數(shù),默認值為1234。在使用seed時,模型將盡可能生成相同或相似的結(jié)果,但目前不保證每次生成的結(jié)果完全相同。 | 65535 | |
parameters.top_p | Float | 否 | 生成時,核采樣方法的概率閾值。例如,取值為0.2時,僅保留累計概率之和大于等于0.2的概率分布中的token,作為隨機采樣的候選集。取值范圍為(0,1.0),取值越大,生成的隨機性越高;取值越低,生成的隨機性越低。默認值為0.2。注意,取值不要大于等于1。 | 0.2 | |
parameters.top_k | Integer | 否 | 生成時,采樣候選集的大小。例如,取值為50時,僅將單次生成中得分最高的50個token組成隨機采樣的候選集。取值越大,生成的隨機性越高;取值越小,生成的確定性越高。注意:如果top_k參數(shù)為空或者top_k的值大于100,表示不啟用top_k策略,此時僅有top_p策略生效,默認是空。 | 50 | |
parameters.temperature | Float | 否 | 用于控制隨機性和多樣性的程度。具體來說,temperature值控制了生成文本時對每個候選詞的概率分布進行平滑的程度。較高的temperature值會降低概率分布的峰值,使得更多的低概率詞被選擇,生成結(jié)果更加多樣化;而較低的temperature值則會增強概率分布的峰值,使得高概率詞更容易被選擇,生成結(jié)果更加確定。 取值范圍:[0, 2),系統(tǒng)默認值為1.0。不建議將值為0,因為這沒有意義。 | 1.0 | |
parameters.has_thoughts | Bool | 否 | 是否輸出檢索召回處理過程信息。開啟后,將返回文檔檢索召回和模型推理的過程信息。 |
出參描述
字段 | 類型 | 描述 | 示例值 |
status_code | int | 200(HTTPStatus.OK)表示請求成功,否則表示請求失敗,可以通過code獲取錯誤碼,通過message字段獲取錯誤詳細信息。 說明 Python才有這個字段,Java失敗會拋出異常,異常信息為code,message內(nèi)容。 | 200 |
request_Id | string | 系統(tǒng)生成的標識本次調(diào)用的id。 | 33dcf25a-******-8b711f15614e |
code | string | 表示請求失敗,表示錯誤碼,成功忽略。 | |
message | string | 失敗,表示失敗詳細信息,成功忽略。 | |
output.text | string | 模型生成回復(fù)。 | |
output.finish_reason | string | 正在生成時為null,生成結(jié)束時如果由于停止token導(dǎo)致則為stop。 | |
output.session_id | string | 對話歷史會話的唯一標識。 | 在多輪會話時,可以使用此標識進行多輪會話保持。 |
usage.models[].model_id | string | 本次應(yīng)用調(diào)用到的模型。 | |
usage.models[].input_tokens | int | 用戶輸入文本轉(zhuǎn)換成Token后的長度。 | |
usage.models[].output_tokens | int | 模型生成回復(fù)轉(zhuǎn)換為Token后的長度。 | |
output.thoughts[].throught | string | 模型的思考結(jié)果。 | |
output.thoughts[].action_type | string | 大模型返回的執(zhí)行步驟類型 api:執(zhí)行API插件,response:返回最終結(jié)果。 | |
output.thoughts[].action_name | string | 執(zhí)行的action名稱,如文檔檢索、API插件。 | |
output.thoughts[].action | string | 執(zhí)行的步驟。 | |
output.thoughts[].action_input_stream | string | 入?yún)⒌牧魇浇Y(jié)果。 | |
output.thoughts[].action_input | string | 插件的輸入?yún)?shù)。 | |
output.thoughts[].response | string | 模型調(diào)用返回的結(jié)果。 | |
output.thoughts[].observation | string | 檢索或插件的返回結(jié)果。 |
請求示例(SSE 關(guān)閉)
以下示例展示通過CURL命令來調(diào)用RAG檢索增強應(yīng)用的腳本(SSE 關(guān)閉)。
需要使用您的API-KEY替換示例中的YOUR_API_KEY,并將APP-ID替換示例中的YOUR_APP_ID,代碼才能正常運行。
curl --location 'https://dashscope.aliyuncs.com/api/v1/apps/{YOUR_APP_ID}/completion' \
--header 'Authorization: Bearer {YOUR_API_KEY}' \
--header 'Content-Type: application/json' \
--data '{
"input": {
"prompt": "如何做土豆燉豬腳?"
},
"parameters": {},
"debug": {}
}' --verbose
響應(yīng)示例(SSE關(guān)閉)
{
"output": {
"finish_reason": "stop",
"session_id": "a08c1b4e******0c4513db9eea4",
"text": "土豆燉豬腳是一道美味可口、營養(yǎng)豐富的家常菜,下面是一種簡單的制作方法:\n\n**材料準備:**\n1. 豬腳(豬蹄)500克\n2. 土豆2-3個\n3. 生姜3-4片\n4. 大蔥1根\n5. 八角2顆\n6. 桂皮一小塊\n7. 香葉2片\n8. 料酒適量\n9. 生抽、老抽各適量\n10. 冰糖適量\n11. 清水適量\n12. 鹽適量\n\n**步驟:**\n1. **豬腳處理**:豬腳剁成小塊,放入開水中焯水,去除血水和雜質(zhì),撈出后用清水沖洗干凈備用。\n \n2. **炒糖色**:鍋中加入少量油,放入冰糖小火慢慢熬化至紅色且有泡沫時,將焯過水的豬腳塊倒入鍋中翻煎,使豬腳表面均勻地裹上糖色。\n\n3. **燉煮**:加入切好的姜片、蔥段以及八角、桂皮、香葉等香料一同翻炒出香味。然后烹入料酒,加入生抽、老抽調(diào)色,再加入足夠的熱水沒過豬腳。\n\n4. **燉煮豬腳**:大火燒沸后撇去浮沫,轉(zhuǎn)中小火慢燉約40分鐘至豬腳軟爛。\n\n5. **加入土豆**:在豬腳燉至七八成熟時,將土豆削皮切塊,加入鍋中,繼續(xù)燉煮約20分鐘,直到土豆熟透且能輕易插入筷子。\n\n6. **調(diào)味**:最后根據(jù)個人口味加鹽調(diào)味,燉煮幾分鐘讓味道充分融合即可。\n\n7. **出鍋**:燉至湯汁濃稠,土豆和豬腳都完全熟透后,撒上蔥花或者香菜點綴,即可關(guān)火出鍋。\n\n以上就是土豆燉豬腳的基本做法,具體燉煮時間可能因豬腳的老嫩程度和個人口感喜好有所不同,可以根據(jù)實際情況調(diào)整。"
},
"usage": {
"models": [
{
"output_tokens": 456,
"model_id": "qwen-max",
"input_tokens": 64
}
]
},
"request_id": "99432adc-8b15-953f-afba-fd0895a68773"
}
請求示例(SSE開啟)
以下示例展示通過CURL命令來調(diào)用RAG檢索增強應(yīng)用的腳本(SSE 開啟)。
需要使用您的API-KEY替換示例中的YOUR_API_KEY,并將APP-ID替換示例中的YOUR_APP_ID,代碼才能正常運行。
curl --location 'https://dashscope.aliyuncs.com/api/v1/apps/{YOUR_APP_ID}/completion' \
--header 'Authorization: Bearer {YOUR_API_KEY}' \
--header 'Content-Type: application/json' \
--header 'X-DashScope-SSE: enable' \
--data '{
"input": {
"prompt": "如何做土豆燉豬腳?"
},
"parameters": {},
"debug": {}
}' --verbose
響應(yīng)示例(SSE開啟)
id:1
event:result
:HTTP_STATUS/200
data:{"output":{"session_id":"2c502d4df28******f00488c10da4","finish_reason":"null","text":"土豆"},"usage":{"models":[{"input_tokens":64,"output_tokens":1,"model_id":"qwen-max"}]},"request_id":"d9abe8f8-5be6-9118-9232-8c27b9ff536c"}
id:2
event:result
:HTTP_STATUS/200
data:{"output":{"session_id":"2c502d4df28******f00488c10da4","finish_reason":"null","text":"土豆燉"},"usage":{"models":[{"input_tokens":64,"output_tokens":2,"model_id":"qwen-max"}]},"request_id":"d9abe8f8-5be6-9118-9232-8c27b9ff536c"}
id:3
event:result
:HTTP_STATUS/200
data:{"output":{"session_id":"2c502d4df28******f00488c10da4","finish_reason":"null","text":"土豆燉豬"},"usage":{"models":[{"input_tokens":64,"output_tokens":3,"model_id":"qwen-max"}]},"request_id":"d9abe8f8-5be6-9118-9232-8c27b9ff536c"}
... ... ... ...
... ... ... ...
id:7
event:result
:HTTP_STATUS/200
data:{"output":{"session_id":"2c502d4df28******f00488c10da4","finish_reason":"null","text":"土豆燉豬腳是一道美味可口、營養(yǎng)豐富的家常菜,下面是一種簡單的制作方法:\n\n**材料準備:**\n1. 豬"},"usage":{"models":[{"input_tokens":64,"output_tokens":32,"model_id":"qwen-max"}]},"request_id":"d9abe8f8-5be6-9118-9232-8c27b9ff536c"}
請求示例(業(yè)務(wù)空間)
以下示例展示通過CURL命令來調(diào)用指定業(yè)務(wù)空間的RAG檢索增強應(yīng)用的腳本。
需要使用您的API-KEY替換示例中的YOUR_API_KEY,并將APP-ID替換示例中的YOUR_APP_ID,然后將WORKSPACE替換示例中的YOUR_WORKSPACE,代碼才能正常運行。
curl --location 'https://dashscope.aliyuncs.com/api/v1/apps/{YOUR_APP_ID}/completion' \
--header 'Authorization: Bearer {YOUR_API_KEY}' \
--header 'Content-Type: application/json' \
--header 'X-DashScope-WorkSpace: {YOUR_WORKSPACE}' \
--data '{
"input": {
"prompt": "如何做土豆燉豬腳?"
},
"parameters": {},
"debug": {}
}' --verbose
響應(yīng)示例(業(yè)務(wù)空間)
{
"output": {
"finish_reason": "stop",
"session_id": "a08c1b4e******0c4513db9eea4",
"text": "土豆燉豬腳是一道美味可口、營養(yǎng)豐富的家常菜,下面是一種簡單的制作方法:\n\n**材料準備:**\n1. 豬腳(豬蹄)500克\n2. 土豆2-3個\n3. 生姜3-4片\n4. 大蔥1根\n5. 八角2顆\n6. 桂皮一小塊\n7. 香葉2片\n8. 料酒適量\n9. 生抽、老抽各適量\n10. 冰糖適量\n11. 清水適量\n12. 鹽適量\n\n**步驟:**\n1. **豬腳處理**:豬腳剁成小塊,放入開水中焯水,去除血水和雜質(zhì),撈出后用清水沖洗干凈備用。\n \n2. **炒糖色**:鍋中加入少量油,放入冰糖小火慢慢熬化至紅色且有泡沫時,將焯過水的豬腳塊倒入鍋中翻煎,使豬腳表面均勻地裹上糖色。\n\n3. **燉煮**:加入切好的姜片、蔥段以及八角、桂皮、香葉等香料一同翻炒出香味。然后烹入料酒,加入生抽、老抽調(diào)色,再加入足夠的熱水沒過豬腳。\n\n4. **燉煮豬腳**:大火燒沸后撇去浮沫,轉(zhuǎn)中小火慢燉約40分鐘至豬腳軟爛。\n\n5. **加入土豆**:在豬腳燉至七八成熟時,將土豆削皮切塊,加入鍋中,繼續(xù)燉煮約20分鐘,直到土豆熟透且能輕易插入筷子。\n\n6. **調(diào)味**:最后根據(jù)個人口味加鹽調(diào)味,燉煮幾分鐘讓味道充分融合即可。\n\n7. **出鍋**:燉至湯汁濃稠,土豆和豬腳都完全熟透后,撒上蔥花或者香菜點綴,即可關(guān)火出鍋。\n\n以上就是土豆燉豬腳的基本做法,具體燉煮時間可能因豬腳的老嫩程度和個人口感喜好有所不同,可以根據(jù)實際情況調(diào)整。"
},
"usage": {
"models": [
{
"output_tokens": 456,
"model_id": "qwen-max",
"input_tokens": 64
}
]
},
"request_id": "99432adc-8b15-953f-afba-fd0895a68773"
}
異常響應(yīng)示例
在訪問請求出錯的情況下,輸出的結(jié)果中會通過 code 和 message 指明錯誤原因。
{"code":"InvalidApiKey","message":"Invalid API-key provided.","request_id":"2637fcf9-32b1-9f4e-b0e9-1724d4aea00e"}
狀態(tài)碼說明
服務(wù)調(diào)用返回的狀態(tài)碼詳情,請參見錯誤碼。