其他信息->【智子纪元-AIGC】技术交流群
目前百度的文心一言,可以算是国内做的比较好的中文大模型产品,博主现在也已经拿到了文心一言的API,写一个API的申请和使用教程,供大家参考。
未申请到API的同学,前往官网申请,或添加小助手寻求帮助。
文心一言的优势:
文心一言是百度开发的国内大型语言模型,相较于ChatGPT,在信息的出境传输方面具有以下优势:
- 数据隐私:由于文心一言是国内开发的模型,它的运行和数据存储主要在国内,这意味着用户的数据在传输过程中不需要跨境传输,减少了一定的信息流出风险。对于一些对数据隐私保护较为敏感的用户或组织,这是一个优势。
- 法律合规性:文心一言在开发过程中遵守国内相关法律法规,符合国内的法律合规要求。这使得文心一言在国内使用更符合当地的法律和政策要求,避免了信息传输可能涉及的跨境数据合规性问题。
- 加速传输速度:由于数据不需要经过国际网络传输,文心一言的响应速度可能会更快,特别是对于国内用户。较低的网络延迟和更高的带宽可提供更快的交互和响应时间,增加用户体验的顺畅性。
值得注意的是,每个模型都有其特定的优势和适用场景。
申请注册教程:
- 首先注册百度账户,成为开发者,在下面的链接申请文心大模型:https://cloud.baidu.com/survey_summit/wenxinworkshop.html
- 申请以后,进入文心千帆大模型操作台:https://ai.baidu.com/wenxinworkshop/app/overview
- 申请到文心大模型后,我们可以看到百度文心一言提供的产品和对应的价格:
选择上述API,选择全部开通
- 开通以后就可以使用这些API了,可以在千帆大模型控制台,管理API。千帆大模型控制台链接,https://console.bce.baidu.com/ai/#/ai/wenxinworkshop/overview/index。
- 控制台的页面如下所示:
- 选择创建应用:
- 创建成功以后,平台会分配相关的凭证,包括AppID、API Key、Secret Key,以上三个信息是您应用实际开发的主要凭证,每个应用之间各不相同,请妥善保管:
- 其他参考链接:
- 文心千帆产品文档:https://cloud.baidu.com/doc/WENXINWORKSHOP/index.html
- API信息:
- AppID:35297004
- API Key:RgAqxxxxxxOoLy
- Sceret Key:zWSdXWx4BNxxxxxxi8YORj
- 文心千帆API调用指南:https://cloud.baidu.com/doc/WENXINWORKSHOP/s/flfmc9do2
- 模型调试平台,在这个平台我们可以调试不同的模型和示例代码:https://console.bce.baidu.com/tools/#/api?product=AI&project=文心千帆大模型平台&parent=鉴权认证机制&api=oauth%2F2.0%2Ftoken&method=post
代码调用API:
创建了应用,有了api后,我们便可以使用代码调用api,来进行下游应用的开发。
创建Access Token:
创建Access Token,根据创建应用所分配到的AppID、API Key及Secret Key,进行Access Token(用户身份验证和授权的凭证)的生成。生成方式的参考链接:https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu
通过python代码的形式获取:
import requests
import json
def main():
# client id = App Key, client_secret = Secret Key
client_id = \'RgAq3HSxxxxlvXOoLy\'
client_secret = \'zWSdXWx4xxxkRWi8YORj\'
url = f\"<https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={client_id}&client_secret={client_secret}>\"
payload = \"\"
headers = {
\'Content-Type\': \'application/json\',
\'Accept\': \'application/json\'
}
response = requests.request(\"POST\", url, headers=headers, data=payload)
print(response.text)
if __name__ == \'__main__\':
main()
- 代码实现调用,下面给出python调用ErnieBot和ErnieBot-turbo的示例代码:
Python调用文心一言模型:
百度用于聊天的总共提供了两个模型,ErnieBot和ErnieBot-turbo。下面分别是调用两个模型的代码。
python调用ErnieBot接口:
import requests
import json
API_KEY = \"RgAq3HSsxxxXOoLy\"
SECRET_KEY = \"zWSdXWx4xxxxxWi8YORj\"
def main():
url = \"<https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=>\" + get_access_token()
payload = json.dumps({
\"messages\": [
{
\"role\": \"user\",
\"content\": \"你好\"
},
{
\"role\": \"assistant\",
\"content\": \"你好!我是一名人工智能语言模型,可以回答各种问题。请问有什么我可以帮助你的吗?\"
},
{
\"role\": \"user\",
\"content\": \"我是小红\"
},
{
\"role\": \"assistant\",
\"content\": \"很高兴认识你,小红。请问有什么我可以帮助你的吗?\"
},
{
\"role\": \"user\",
\"content\": \"我是谁\"
},
{
\"role\": \"assistant\",
\"content\": \"你是小红。请问有什么我可以帮助你的吗?\"
}
]
})
headers = {
\'Content-Type\': \'application/json\'
}
response = requests.request(\"POST\", url, headers=headers, data=payload)
print(response.text)
def get_access_token():
\"\"\"
使用 AK,SK 生成鉴权签名(Access Token)
:return: access_token,或是None(如果错误)
\"\"\"
url = \"<https://aip.baidubce.com/oauth/2.0/token>\"
params = {\"grant_type\": \"client_credentials\", \"client_id\": API_KEY, \"client_secret\": SECRET_KEY}
return str(requests.post(url, params=params).json().get(\"access_token\"))
if __name__ == \'__main__\':
main()
message必须是奇数条。一个用户输入”user”,一个返回“assistant”构成一对。可以支持多轮对话。
python调用ErnieBot-turbo接口:
import requests
import json
API_KEY = \"RgAq3xxxxxvXOoLy\"
SECRET_KEY = \"zWSdXWxxxxxxmkRWi8YORj\"
def main():
url = \"<https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant?access_token=>\" + get_access_token()
payload = json.dumps({
\"messages\": [
{
\"role\": \"user\",
\"content\": \"你好\"
},
{
\"role\": \"assistant\",
\"content\": \"你好!有什么我可以帮助你的吗?\"
},
{
\"role\": \"user\",
\"content\": \"你是谁\"
},
{
\"role\": \"assistant\",
\"content\": \"您好,我是文心一言,英文名是ERNIE Bot。我能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。\"
}
]
})
headers = {
\'Content-Type\': \'application/json\'
}
response = requests.request(\"POST\", url, headers=headers, data=payload)
print(response.text)
def get_access_token():
\"\"\"
使用 AK,SK 生成鉴权签名(Access Token)
:return: access_token,或是None(如果错误)
\"\"\"
url = \"<https://aip.baidubce.com/oauth/2.0/token>\"
params = {\"grant_type\": \"client_credentials\", \"client_id\": API_KEY, \"client_secret\": SECRET_KEY}
return str(requests.post(url, params=params).json().get(\"access_token\"))
if __name__ == \'__main__\':
main()
go调用文心一言模型:
调用ErnieBot接口:
package main
import (
\"encoding/json\"
\"fmt\"
\"io/ioutil\"
\"net/http\"
\"strings\"
)
const API_KEY = \"RgAq3HSxxxxDlvXOoLy\"
const SECRET_KEY = \"zWSdXWxxxxKmkRWi8YORj\"
func main() {
url := \"<https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=>\" + GetAccessToken()
payload := strings.NewReader(``)
client := &http.Client {}
req, err := http.NewRequest(\"POST\", url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add(\"Content-Type\", \"application/json\")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
/**
* 使用 AK,SK 生成鉴权签名(Access Token)
* @return string 鉴权签名信息(Access Token)
*/
func GetAccessToken() string {
url := \"<https://aip.baidubce.com/oauth/2.0/token>\"
postData := fmt.Sprintf(\"grant_type=client_credentials&client_id=%s&client_secret=%s\", API_KEY, SECRET_KEY)
resp, err := http.Post(url, \"application/x-www-form-urlencoded\", strings.NewReader(postData))
if err != nil {
fmt.Println(err)
return \"\"
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
return \"\"
}
accessTokenObj := map[string]string{}
json.Unmarshal([]byte(body), &accessTokenObj)
return accessTokenObj[\"access_token\"]
}
调用ErnieBot-turbo接口:







