文心一言API使用教程(python版)

预置准备部分

注册百度千帆平台账户,并注册api

  1. 文心一言的使用需要注册一个百度账户,可以使用百度网盘的账户进行登录百度智能云-登录 (baidu.com)
  2. 申请以后,进入文心千帆大模型操作百度智能云控制台 (baidu.com)

image-20240401161325004

  1. 选择右侧边栏的应用接入,再点击创建应用就可以申请一个api了

image-20240401161412717

  1. 创建过程中只需要填写当前api的名称以及描述,默认所有服务都是勾选的

  2. 创建成功后会返回到应用接入的界面,记录下此时AppID、API Key、Secret Key

截屏2024-04-01 16.15.05

  • ### 配置api,开通服务接口

​ 1.点击控制台右上角的计费管理开通服务

image-20240401161656873

注意文心一言的api的调用是需要付费的,并且提供多个大模型可以根据自己的选择进行开通,不同服务的差别可以参考API列表API列表 – 千帆大模型平台 | 百度智能云文档 (baidu.com)

python装配库

  • 下载requsets库
  • 下载json库

程序部分

获取Acees Token:

需要通过Acess Token来访问文心一言,注意:access_token默认有效期30天,生产环境注意及时刷新。可参考官方文档获取access_token – 千帆大模型平台 | 百度智能云文档 (baidu.com)

import requests
import json

def main():
    # client id = API Key, client_secret = Secret Key 修改成自己的API Key 和Sercet Key
    client_id="4YqbzGV59w6BU3Hh1GlBsaA1"
    client_secret="3mM6ys4yAG5j******v"
    url = "https://aip.baidubce.com/oauth/2.0/token?grant_type= client_credentials 
 & client_id= 4Y****saA1 & client_secret = 3mM6ys4yAG5j*****PnH0yDHlv "


    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()

#会再终端打印一行文本即acess token

根据终端打印的Acess Token获取数据,记录其中的refresh_tolen(不用抄下来这一步是为了让大家更好的理解接下来的get_acess_token()函数)

image-20240401161912579

实现基本调用

将refresh_token作为参数传入到调用程序中,现在就完成了最基本的使用,此时是默认的问题“你好”,message中的数据必须是奇数条,负责会报错

import requests
import json
#修改成自己的api key和secret key
API_KEY = "Kc8pXsRQ***TbbF"
SECRET_KEY = "bgS856cVXiw5gj****IekgH4b2n"


def main():
    url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant?access_token=" + get_access_token()
#注意message必须是奇数条
    payload = json.dumps({
        "messages": [
            {
                "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()

程序升级部分

此部分需要一定的python基础,如json,requset等相关知识,可以自己在CSDN,博客园,菜鸟驿站和B站找相关教程,当然可以直接看最后的代码就是最终成品

问题:不能自定义问题的

  • 设定一个输入字符串来解决
  • 将message中的”content“ : ”你好“ 换成 s

问题:打印输出的内容存在不需要的部分

{"id":"as-nuhbvmdj8h",
"object":"chat.completion",
"created":1697125231,
"result":"长沙有很多好玩的地方,以下是一些值得推荐的项目:\n\n* 橘子洲:位于长沙市区对面的湘江中,是长沙必游的景点之一。这里有一片人工沙滩可以戏水游玩,还有毛泽东青年雕像、历史浮雕等可以参观。\n* 岳麓山:位于长沙市区的岳麓山风景区是国家5A级旅游景区。这里有悠久的历史文化,拥有碑刻、古建筑、古植物、山水风光等各种景观,是长沙的一大标志性景点。\n* 长沙IFS:这里以商场和写字楼为主,地下一楼有美食城,有丰富的长沙本地小吃。\n* 湖南省博物馆:是湖南省最大的综合性历史博物馆,馆内珍藏着许多珍贵文物,记录了湖南的历史和文化。\n* 天心阁:是长沙市区的标志性建筑之一,有着悠久的历史和文化背景。\n\n此外,长沙还有一些其他值得一游的地方,如黄兴广场、太平街、湖南省植物园等。这些地方都有各自独特的景观和特色,值得一探究竟。\n\n以上信息仅供参考,如有需要,建议您查阅官方资讯。"
,"is_truncated":false,
"need_clear_history":false,
"usage":{"prompt_tokens":8,"completion_tokens":323,"total_tokens":331}}
  • 第一步:返回的response是一个response类型数据,我们可以用.json()将其转换成一个json类型
  • 第二步:观察到json的response是一个字典类型我们可以用[‘result’]来访问元素

  • import requests
    import json
    #修改成自己的api key和secret key
    API_KEY = "4YqbzGV59w******lBsaA1"
    SECRET_KEY = "3mM6ys******xDPnH0yDHlv"
    
    
    def main():
      url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant?access_token=" + get_access_token()
      s=input()
    #注意message必须是奇数条
      payload = json.dumps({
          "messages": [
              {
                  "role": "user",
                  "content": s
              }
          ]
      })
      headers = {
          'Content-Type': 'application/json'
      }
    
      res = requests.request("POST", url, headers=headers, data=payload).json()
      print(res['result'])
    
    
    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()
    

问题:只能输入一次询问

如果没有其它传感器的话传入信号,我们就可以使用一个永真循环来实现

import requests
import json
#修改成自己的api key和secret key
API_KEY = "4YqbzGV59w***GlBsaA1"
SECRET_KEY = "3mM6ys4yAG58***QxDPnH0yDHlv"


def main():
    url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant?access_token=" + get_access_token()
    while(1):
        s=input()
        # 注意message必须是奇数条
        payload = json.dumps({
        "messages": [
            {
                "role": "user",
                "content": s
            }
        ]
        })
        headers = {
            'Content-Type': 'application/json'
        }

        res = requests.request("POST", url, headers=headers, data=payload).json()
        print(res['result'])




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()

最终结果

import requests
import json
#修改成自己的api key和secret key
API_KEY = "4Y***U3Hh1GlBsaA1"
SECRET_KEY = "3mM6ys4yAG5***xDPnH0yDHlv"


def main():
    url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant?access_token=" + get_access_token()
    while(1):
        s=input()
        # 注意message必须是奇数条
        payload = json.dumps({
        "messages": [
            {
                "role": "user",
                "content": s
            }
        ]
        })
        headers = {
            'Content-Type': 'application/json'
        }

        res = requests.request("POST", url, headers=headers, data=payload).json()
        print(res['result'])




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()

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.