找回密码
 立即注册
查看: 524|回复: 1

百度文心一言API申请和python/Go使用教程

[复制链接]

2

主题

0

回帖

25

积分

新手上路

积分
25
发表于 2023-7-25 17:46:30 | 显示全部楼层 |阅读模式

其他信息->【智子纪元-AIGC】技术交流群
目前百度的文心一言,可以算是国内做的斗劲好的中文大模型产物,博主此刻也已经拿到了文心一言的API,写一个API的申请和使用教程,供大师参考。
未申请到API的同学,前往官网申请,或添加小助手寻求辅佐。
文心一言的优势:
文心一言是百度开发的国内大型语言模型,相较于ChatGPT,在信息的出境传输方面具有以下优势:

  • 数据隐私:由于文心一言是国内开发的模型,它的运行和数据存储主要在国内,这意味着用户的数据在传输过程中不需要跨境传输,减少了必然的信息流出风险。对于一些对数据隐私庇护较为敏感的用户或组织,这是一个优势。
  • 法令合规性:文心一言在开发过程中遵守国内相关法令法规,符合国内的法令合规要求。这使得文心一言在国内使用更符合当地的法令和政策要求,避免了信息传输可能涉及的跨境数据合规性问题。
  • 加速传输速度:由于数据不需要颠末国际网络传输,文心一言的响应速度可能会更快,出格是对于国内用户。较低的网络延迟和更高的带宽可提供更快的交互和响应时间,增加用户体验的顺畅性。
值得注意的是,每个模型都有其特定的优势和适用场景。
申请注册教程:



选择上述API,选择全部开通





  • 选择创建应用:



  • 创建成功以后,平台会分配相关的凭证,包罗AppID、API Key、Secret Key,以上三个信息是您应用实际开发的主要凭证,每个应用之间各不不异,请妥善保管:




代码调用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 = {
        &#39;Content-Type&#39;: &#39;application/json&#39;,
        &#39;Accept&#39;: &#39;application/json&#39;
    }
   
    response = requests.request(”POST”, url, headers=headers, data=payload)
   
    print(response.text)
   

if __name__ == &#39;__main__&#39;:
    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 = {
        &#39;Content-Type&#39;: &#39;application/json&#39;
    }
   
    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__ == &#39;__main__&#39;:
    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 = {
        &#39;Content-Type&#39;: &#39;application/json&#39;
    }
   
    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__ == &#39;__main__&#39;:
    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接口:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

0

主题

2

回帖

11

积分

新手上路

积分
11
发表于 2023-7-25 17:47:20 | 显示全部楼层
没有流式调用有啥用?[思考]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|T9AI - 深度人工智能平台 ( 沪ICP备2023010006号 )

GMT+8, 2024-11-24 19:58 , Processed in 0.064486 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表