DISC-MedLLM
DISC-MedLLM是一个专门针对医疗健康对话式场景而设计的医疗领域大模型,由复旦大学数据智能与社会计算实验室 (Fudan-DISC)开发并开源。本文介绍了相关API。
功能介绍
调用本接口,发起一次对话请求。
在线调试
平台提供了 API在线调试平台-示例代码 ,用于帮助开发者调试接口,平台集成快速检索、查看开发文档、查看在线调用的请求内容和返回结果、复制和下载示例代码等功能,简单易用,更多内容请查看API在线调试介绍。
HTTP调用
鉴权说明
本文API,支持2种鉴权方式。不同鉴权方式,调用方式不同,使用Header、Query参数不同,详见本文请求说明。开发者可以选择以下任一种方式进行鉴权。
· 访问凭证access_token鉴权
· 基于安全认证AK/SK进行签名计算鉴权
请求说明
- 基本信息
请求地址: https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/{创建服务时填写的API地址}
请求方式: POST
- API地址说明
创建服务时填写的API地址,相关内容请查看模型服务-在线服务-服务配置。
- Header参数
根据不同鉴权方式,查看对应Header参数。
访问凭证access_token鉴权
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
Content-Type | string | 是 | 固定值application/json |
基于安全认证AK/SK进行签名计算鉴权
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
Content-Type | string | 是 | 固定值application/json |
x-bce-date | string | 否 | 当前时间,遵循ISO8601规范,格式如2016-04-06T08:23:49Z |
Authorization | string | 是 | 用于验证请求合法性的认证信息,更多内容请参考鉴权认证机制,签名工具可参考IAM签名工具 |
- Query参数
只有访问凭证access_token鉴权方式,需使用Query参数。
访问凭证access_token鉴权
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
access_token | string | 是 | 通过API Key和Secret Key获取的access_token,参考Access Token获取 |
- Body参数
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
messages | List(message) | 是 | 聊天上下文信息。说明: (1)messages成员不能为空,1个成员表示单轮对话,多个成员表示多轮对话 (2)最后一个message为当前请求的信息,前面的message为历史对话信息 (3)必须为奇数个成员,成员中message的role必须依次为user、assistant (4)message中的content总长度不能超过4800个字符 |
stream | bool | 否 | 是否以流式接口的形式返回数据,默认false |
temperature | float | 否 | 说明: (1)较高的数值会使输出更加随机,而较低的数值会使其更加集中和确定 (2)范围 (0, 1.0],不能为0 |
top_k | int | 否 | Top-K 采样参数,在每轮token生成时,保留k个概率最高的token作为候选。说明: (1)影响输出文本的多样性,取值越大,生成文本的多样性越强 (2)取值范围:正整数 |
top_p | float | 否 | 说明: (1)影响输出文本的多样性,取值越大,生成文本的多样性越强 (2)取值范围 [0, 1.0] |
penalty_score | float | 否 | 通过对已生成的token增加惩罚,减少重复生成的现象。说明: (1)值越大表示惩罚越大 (2)取值范围:[1.0, 2.0] |
stop | List(String) | 否 | 生成停止标识。当模型生成结果以stop中某个元素结尾时,停止文本生成。说明: (1)每个元素长度不超过20字符。 (2)最多4个元素 |
user_id | string | 否 | 表示最终用户的唯一标识符 |
message说明
名称 | 类型 | 描述 |
---|---|---|
role | string | 当前支持以下: user: 表示用户 assistant: 表示对话助手 |
content | string | 对话内容,不能为空 |
响应说明
名称 | 类型 | 描述 |
---|---|---|
id | string | 本轮对话的id |
object | string | 回包类型。 chat.completion:多轮对话返回 |
created | int | 时间戳 |
sentence_id | int | 表示当前子句的序号。只有在流式接口模式下会返回该字段 |
is_end | bool | 表示当前子句是否是最后一句。只有在流式接口模式下会返回该字段 |
is_truncated | bool | 当前生成的结果是否被截断 |
result | string | 对话返回结果 |
need_clear_history | bool | 表示用户输入是否存在安全,是否关闭当前会话,清理历史会话信息 true:是,表示用户输入存在安全风险,建议关闭当前会话,清理历史会话信息 false:否,表示用户输入无安全风险 |
ban_round | int | 当need_clear_history为true时,此字段会告知第几轮对话有敏感信息,如果是当前问题,ban_round=-1 |
usage | usage | token统计信息 |
usage说明
名称 | 类型 | 描述 |
---|---|---|
prompt_tokens | int | 问题tokens数 |
completion_tokens | int | 回答tokens数 |
total_tokens | int | tokens总数 |
注意 :同步模式和流式模式,响应参数返回不同,详细内容参考示例描述。
- 同步模式下,响应参数为以上字段的完整json包。
- 流式模式下,各字段的响应参数为 data: {响应参数}。
请求示例(单轮)
以访问凭证access_token鉴权方式为例,说明如何调用API,示例如下。
# 步骤一,获取access_token,替换下列示例中的应用API Key与应用Secret Key
curl 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=[应用API Key]&client_secret=[应用Secret Key]'
# 步骤二,调用本文API,使用步骤一获取的access_token,替换下列示例中的“调用接口获取的access_token”;替换示例中的创建服务时填写的API名称
curl -X POST 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/[创建服务时填写的API名称]?access_token=[步骤一调用接口获取的access_token]' -d '{
"messages": [
{"role":"user","content":"你好"}
]
}' | iconv -f utf-8 -t utf-8
import requests
import json
def get_access_token():
"""
使用 API Key,Secret Key 获取access_token,替换下列示例中的应用API Key、应用Secret Key
"""
url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=[应用API Key]&client_secret=[应用Secret Key]"
payload = json.dumps("")
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
return response.json().get("access_token")
def main():
"""
替换下列示例中的创建服务时填写的API名称
"""
url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/[创建服务时填写的API名称]?access_token=" + get_access_token()
payload = json.dumps({
"messages": [
{
"role": "user",
"content": "你好"
}
]
})
headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
if __name__ == '__main__':
main()
响应示例(单轮)
{
"id": "as-vhsdz6iu2i",
"object": "chat.completion",
"created": 1702626862,
"result": "您好,我是医疗助手大模型,很高兴为您服务",
"is_truncated": false,
"need_clear_history": false,
"finish_reason": "normal",
"usage": {
"prompt_tokens": 1,
"completion_tokens": 10,
"total_tokens": 11
}
}
请求示例(多轮)
# 步骤一,获取access_token,替换下列示例中的应用API Key与应用Secret Key
curl 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=[应用API Key]&client_secret=[应用Secret Key]'
# 步骤二,调用本文API,使用步骤一获取的access_token,替换下列示例中的“调用接口获取的access_token”;替换示例中的创建服务时填写的API名称
curl -X POST 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/[创建服务时填写的api名称}]?access_token=[步骤一调用接口获取的access_token]' -d '{
"messages": [
{"role":"user","content":"你好"},
{"role":"assistant","content":"您好,我是医疗助手大模型,很高兴为您服务"},
{"role":"user","content": "最近在旅行,吃饭不规律,晚上也有点熬夜。凌晨突然腹泻,次数频繁,上午量了下体温,发烧38度,请问可能是得了什么病"}
]
}' | iconv -f utf-8 -t utf-8
import requests
import json
def get_access_token():
"""
使用 API Key,Secret Key 获取access_token,替换下列示例中的应用API Key、应用Secret Key
"""
url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=[应用API Key]&client_secret=[应用Secret Key]"
payload = json.dumps("")
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
return response.json().get("access_token")
def main():
"""
替换下列示例中的创建服务时填写的API名称
"""
url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/[创建服务时填写的API名称]?access_token=" + get_access_token()
payload = json.dumps({
"messages": [
{
"role": "user",
"content": "你好"
},
{
"role": "assistant",
"content": "您好,我是医疗助手大模型,很高兴为您服务"
},
{
"role": "user",
"content": "最近在旅行,吃饭不规律,晚上也有点熬夜。凌晨突然腹泻,次数频繁,上午量了下体温,发烧38度,请问可能是得了什么病?"
}
]
})
headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
if __name__ == '__main__':
main()
响应示例(多轮)
HTTP/1.1 200 OK
Date: Mon, 12 Apr 2021 06:27:55 GMT
Content-Type: application/json;charset=utf-8
Statement: AI-generated
{
"id": "as-1tbbc0x5af",
"object": "chat.completion",
"created": 1680166551,
"result": "很抱歉听到您的不适。根据您描述的症状,包括腹泻、发烧和夜间睡眠不足等,可能是因为饮食不规律导致的胃肠功能紊乱引起的急性肠胃炎。此外,还有其他一些可能的原因也导致类似症状,例如食物中毒或肠道感染等。为了更准确地判断病因,我想请您提供更多关于当前症状的详细描述。在此期间,建议您多休息,保持室内空气流通,避免寒冷刺激。另外,您可以尝试以下措施来缓解症状:1.多喝水以补充体液;2.避免油腻和辛辣食物,选择清淡易消化的食物;3.注意个人卫生,勤洗手,避免交叉感染;4.如果发热持续或出现其他严重症状,请及时就医并进行进一步检查以明确病因。",
"is_truncated":false,
"need_clear_history": false,
"usage": {
"prompt_tokens": 45,
"completion_tokens": 256,
"total_tokens": 301
}
}
请求示例(流式)
# 步骤一,获取access_token,替换下列示例中的应用API Key与应用Secret Key
curl 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=[应用API Key]&client_secret=[应用Secret Key]'
# 步骤二,调用本文API,使用步骤一获取的access_token,替换下列示例中的“调用接口获取的access_token”;替换示例中的创建服务时填写的API名称
curl -X POST 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/[创建服务时填写的API名称]?access_token=[步骤一调用接口获取的access_token]' -d '{
"messages": [
{"role":"user", "content": "感冒流鼻涕,一直咳嗽,怎么办"}
],
"stream": true
}'
import requests
import json
def get_access_token():
"""
使用 API Key,Secret Key 获取access_token,替换下列示例中的应用API Key、应用Secret Key
"""
url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=[应用API Key]&client_secret=[应用Secret Key]"
payload = json.dumps("")
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
return response.json().get("access_token")
def main():
"""
替换下列示例中的创建服务时填写的API名称
"""
url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/[创建服务时填写的API名称]?access_token=" + get_access_token()
payload = json.dumps({
"messages": [
{
"role": "user",
"content": "感冒流鼻涕,一直咳嗽,怎么办"
}
],
"stream": True
})
headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload, stream=True)
for line in response.iter_lines():
print(line.decode("UTF-8"))
if __name__ == '__main__':
main()
响应示例(流式)
data: {"id":"as-hv7fej0cct","object":"chat.completion","created":1702628198,"sentence_id":0,"is_end":false,"is_truncated":false,"result":"很抱歉听到您的不适。针对感冒","need_clear_history":false,"finish_reason":"normal","usage":{"prompt_tokens":7,"completion_tokens":0,"total_tokens":7}}
data: {"id":"as-hv7fej0cct","object":"chat.completion","created":1702628199,"sentence_id":1,"is_end":false,"is_truncated":false,"result":"引起的流鼻涕和咳嗽,可以采取以下措施:\n\n1. 保持良好的生活习惯:保持充足的睡眠,避免过度劳累,多喝水,多吃蔬菜水果,避免","need_clear_history":false,"finish_reason":"normal","usage":{"prompt_tokens":7,"completion_tokens":34,"total_tokens":41}}
data: {"id":"as-hv7fej0cct","object":"chat.completion","created":1702628200,"sentence_id":2,"is_end":false,"is_truncated":false,"result":"辛辣、刺激性食物,注意保暖,避免受凉。","need_clear_history":false,"finish_reason":"normal","usage":{"prompt_tokens":7,"completion_tokens":34,"total_tokens":41}}
data: {"id":"as-hv7fej0cct","object":"chat.completion","created":1702628201,"sentence_id":3,"is_end":false,"is_truncated":false,"result":"\n2. 使用抗组胺药物:针对流鼻涕,可以使用抗组胺药物如氯雷他定等,可以缓解流鼻涕的症状。","need_clear_history":false,"finish_reason":"normal","usage":{"prompt_tokens":7,"completion_tokens":34,"total_tokens":41}}
data: {"id":"as-hv7fej0cct","object":"chat.completion","created":1702628202,"sentence_id":4,"is_end":false,"is_truncated":false,"result":"\n3. 使用复方药物:针对感冒的其他症状,也可以采用复方药物进行治疗。","need_clear_history":false,"finish_reason":"normal","usage":{"prompt_tokens":7,"completion_tokens":34,"total_tokens":41}}
data: {"id":"as-hv7fej0cct","object":"chat.completion","created":1702628203,"sentence_id":5,"is_end":false,"is_truncated":false,"result":"\n4. 针对咳嗽的治疗:可以采取一些止咳药物,如右美沙芬等。","need_clear_history":false,"finish_reason":"normal","usage":{"prompt_tokens":7,"completion_tokens":34,"total_tokens":41}}
data: {"id":"as-hv7fej0cct","object":"chat.completion","created":1702628203,"sentence_id":6,"is_end":false,"is_truncated":false,"result":"\n5. 使用抗病毒药物:如果是由于病毒感染引起的感冒,可以使用抗病毒药物如快克等。","need_clear_history":false,"finish_reason":"normal","usage":{"prompt_tokens":7,"completion_tokens":34,"total_tokens":41}}
data: {"id":"as-hv7fej0cct","object":"chat.completion","created":1702628204,"sentence_id":7,"is_end":false,"is_truncated":false,"result":"\n6. 采用中药治疗:针对不同类型的感冒,可以采取不同的中药治疗。","need_clear_history":false,"finish_reason":"normal","usage":{"prompt_tokens":7,"completion_tokens":34,"total_tokens":41}}
data: {"id":"as-hv7fej0cct","object":"chat.completion","created":1702628206,"sentence_id":8,"is_end":false,"is_truncated":false,"result":"例如,对于风寒感冒,可以使用辛温解表的方法,如红糖、生姜一起熬水饮用,祛除体内的湿气;","need_clear_history":false,"finish_reason":"normal","usage":{"prompt_tokens":7,"completion_tokens":34,"total_tokens":41}}
data: {"id":"as-hv7fej0cct","object":"chat.completion","created":1702628207,"sentence_id":9,"is_end":false,"is_truncated":false,"result":"对于风热感冒,可以使用辛凉解表、清热解毒治疗为主的方法,如使用vC银翘片等。","need_clear_history":false,"finish_reason":"normal","usage":{"prompt_tokens":7,"completion_tokens":34,"total_tokens":41}}
data: {"id":"as-hv7fej0cct","object":"chat.completion","created":1702628209,"sentence_id":10,"is_end":false,"is_truncated":false,"result":"\n7. 增强免疫力:平时注意锻炼身体,增强机体的抗病毒能力、免疫力等。","need_clear_history":false,"finish_reason":"normal","usage":{"prompt_tokens":7,"completion_tokens":223,"total_tokens":230}}
data: {"id":"as-hv7fej0cct","object":"chat.completion","created":1702628210,"sentence_id":11,"is_end":false,"is_truncated":false,"result":"\n\n以上措施需要根据个人情况选择合适的方法进行治疗。","need_clear_history":false,"finish_reason":"normal","usage":{"prompt_tokens":7,"completion_tokens":235,"total_tokens":242}}
data: {"id":"as-hv7fej0cct","object":"chat.completion","created":1702628210,"sentence_id":12,"is_end":false,"is_truncated":false,"result":"如果症状持续严重或出现其他症状,建议及时就医。","need_clear_history":false,"finish_reason":"normal","usage":{"prompt_tokens":7,"completion_tokens":235,"total_tokens":242}}
data: {"id":"as-hv7fej0cct","object":"chat.completion","created":1702628210,"sentence_id":13,"is_end":true,"is_truncated":false,"result":"","need_clear_history":false,"finish_reason":"normal","usage":{"prompt_tokens":7,"completion_tokens":248,"total_tokens":255}}
SDK调用
平台支持通过Python SDK、Go SDK、Java SDK 和 Node.js SDK调用本文API,SDK调用说明文档请参考推理服务V1-对话Chat文档。
错误码
如果请求错误,服务器返回的JSON文本包含以下参数。
名称 | 描述 |
---|---|
error_code | 错误码 |
error_msg | 错误描述信息,帮助理解和解决发生的错误 |
例如Access Token失效返回以下内容,需要重新获取新的Access Token再次请求。
{
"error_code": 110,
"error_msg": "Access token invalid or no longer valid"
}
更多相关错误码,请查看错误码说明。