百度文心一言文心千帆大模型 ERNIE-Bot-turbo调用示例(golang版本)

这篇具有很好参考价值的文章主要介绍了百度文心一言文心千帆大模型 ERNIE-Bot-turbo调用示例(golang版本)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

百度的文心一言推出来也有一段时间了,但是接口部分一直没有公开,需要进行申请

最近,有朋友提供了文心千帆大模型的api权限,拿到了必须的参数,现在就来测试一下

下面是使用golang封装的文心千帆 ERNIE-Bot-turbo模型的调用示例

百度文心一言文心千帆大模型 ERNIE-Bot-turbo调用示例(golang版本),百度,文心一言,golang,dubbo,开发语言

ERNIE-Bot-turbo.go

package lib

import (
    "bufio"
    "bytes"
    "encoding/json"
    "errors"
    "fmt"
    "github.com/tidwall/gjson"
    "io/ioutil"
    "net/http"
    "strings"
)

//百度文心一言ERNIE-Bot-turbo
type ErnieBotTurbo struct {
    AppId       string
    ApiKey      string
    SecretKey   string
    AccessToken string
}

func NewErnieBotTurbo(appId, apiKey, secretKey string) (*ErnieBotTurbo, error) {

    m := &ErnieBotTurbo{
        AppId:     appId,
        ApiKey:    apiKey,
        SecretKey: secretKey,
    }
    var err error
    m.AccessToken, err = m.GenerateAccessToken()
    if err != nil {
        return m, err
    }
    return m, nil
}

//获取access_token
func (this *ErnieBotTurbo) GenerateAccessToken() (string, error) {
    url := fmt.Sprintf("https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s",
        this.ApiKey,
        this.SecretKey)
    // 创建POST请求
    req, err := http.NewRequest("GET", url, nil)
    if err != nil {
        fmt.Println("创建请求失败:", err)
        return "", err
    }
    // 发送请求
    client := http.Client{}
    response, err := client.Do(req)
    if err != nil {
        fmt.Println("发送请求失败:", err)
        return "", err
    }
    defer response.Body.Close()

    // 读取响应
    responseBody, err := ioutil.ReadAll(response.Body)
    if err != nil {
        return "", err
    }
    accessToken := gjson.Get(string(responseBody), "access_token").String()
    if accessToken == "" {
        return "", errors.New("获取access_token失败")
    }
    this.AccessToken = accessToken
    return accessToken, nil
}

//流式请求接口
func (this *ErnieBotTurbo) StreamChat(messages []map[string]string) (*bufio.Reader, error) {
    url := fmt.Sprintf("https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant?access_token=" + this.AccessToken)

    // 构建请求参数
    params := map[string]interface{}{
        "messages": messages,
        "stream":   true,
    }

    // 创建HTTP请求的body
    jsonParams, err := json.Marshal(params)
    requestBody := bytes.NewBuffer(jsonParams)

    // 创建POST请求
    req, err := http.NewRequest("POST", url, requestBody)
    if err != nil {
        fmt.Println("创建请求失败:", err)
        return nil, err
    }
    // 设置请求头
    //req.Header.Set("Access", "text/event-stream")
    // 发送请求
    client := http.Client{}
    response, err := client.Do(req)
    if err != nil {
        fmt.Println("发送请求失败:", err)
        return nil, err
    }

    //defer response.Body.Close()

    // 读取响应
    // 读取响应体数据
    reader := bufio.NewReader(response.Body)
    return reader, nil
}
func (this *ErnieBotTurbo) StreamRecv(reader *bufio.Reader) (string, error) {
waitForData:
    line, err := reader.ReadString('\n')
    if err != nil {
        return "", err
    }
    // 处理每行数据
    line = strings.TrimSpace(line)
    if line == "" {
        goto waitForData
    }

    // 根据冒号分割每行数据的键值对
    parts := strings.SplitN(line, ":", 2)
    if len(parts) != 2 {
        return "", errors.New("数据格式错误")
    }

    key := strings.TrimSpace(parts[0])
    value := strings.TrimSpace(parts[1])

    // 根据键的不同处理不同的字段
    switch key {
    case "data":
        // 设置Event的数据
        return value, nil
        //case "meta":
        //    // 解析JSON格式的元数据
        //    return value, nil
    }
    goto waitForData
    //return "", errors.New("finish")
}

//流式请求接口
func (this *ErnieBotTurbo) Embedding(input []string) (string, error) {
    url := fmt.Sprintf("https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/embeddings/embedding-v1?access_token=" + this.AccessToken)

    // 构建请求参数
    params := map[string]interface{}{
        "input": input,
    }

    // 创建HTTP请求的body
    jsonParams, err := json.Marshal(params)
    requestBody := bytes.NewBuffer(jsonParams)

    // 创建POST请求
    req, err := http.NewRequest("POST", url, requestBody)
    if err != nil {
        fmt.Println("创建请求失败:", err)
        return "", err
    }
    // 设置请求头
    //req.Header.Set("Access", "text/event-stream")
    // 发送请求
    client := http.Client{}
    response, err := client.Do(req)
    if err != nil {
        fmt.Println("发送请求失败:", err)
        return "", err
    }

    defer response.Body.Close()

    // 读取响应
    responseBody, err := ioutil.ReadAll(response.Body)
    if err != nil {
        return "", err
    }
    return string(responseBody), nil
}

测试用例,获取access_token是需要进行缓存的,过期时间是二十多天,但是如果使用流式调用聊天接口,接口里获取不到access_token过期的错误码

所以,先每次都调取access_token,目前没看到有频率限制文章来源地址https://www.toymoban.com/news/detail-602960.html

package lib

import (
    "log"
    "testing"
)

//测试获取access_token
func TestErnieBotTurboGenerateAccessToken(t *testing.T) {
    AppID := "35662533"
    APIKey := "Iq1FfkOQIGtMtZqRFxOrvq6T"
    SecretKey := "qbzsoFAUSl8UGt1GkGSDSjENtqsjrOTC"
    m, err := NewErnieBotTurbo(AppID, APIKey, SecretKey)
    log.Println(m.AccessToken, err)
}

//测试流式输出
func TestErnieBotTurboStreamChat(t *testing.T) {
    AppID := "xxxx"
    APIKey := "xxxxxxx"
    SecretKey := "xxxxxxxxxjrOTC"
    m, _ := NewErnieBotTurbo(AppID, APIKey, SecretKey)
    system := "假设你是一个程序员,你是程序员老狼的数字分身,你擅长计算机互联网程序开发,你的微信:llike620,官网:gofly.v1kf.com。你开发了唯一客服系统,你了解唯一客服系统的各种问题,你的回答应该是简洁的、不要超过50字。你只能根据知识信息回答问题。你绝对不能暴露自己是个“人工智能、大模型、AI、机器人、GPT”。如果用户问题里有自己联系方式,请回复“稍等,我们马上联系您”。请检测问题语种,并用该语种回答问题."
    prompt := []map[string]string{{"role": "user", "content": system + "我的问题是:你是谁"}}
    res, _ := m.StreamChat(prompt)
    for {
        str, err := m.StreamRecv(res)
        if err != nil {
            log.Println(err)
            break
        }
        log.Println(str, err)
    }
}

//测试Embedding
func TestErnieBotTurboEmbedding(t *testing.T) {
    AppID := "xxxxxxx"
    APIKey := "xxxxxxxxxxq6T"
    SecretKey := "qxxxxxxxsoFAxxxxxxxxxxxxxxxxxxxC"
    m, _ := NewErnieBotTurbo(AppID, APIKey, SecretKey)
    prompt := []string{"我的问题是:你是谁"}
    res, err := m.Embedding(prompt)
    log.Println(res, err)
}

到了这里,关于百度文心一言文心千帆大模型 ERNIE-Bot-turbo调用示例(golang版本)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 学习笔记|百度文心千帆大模型平台测试及页面交互简易代码

    目前百度文心一言的内测资格申请相当拉胯,提交申请快3个月,无任何音讯。不知道要等到什么时候。 百度适时开放了百度文心千帆大模型平台,目前可以提交申请测试,貌似通过的很快,已取得测试申请资格,可以用起来。 申请测试网址 获得测试资格后的页面是这样的:

    2024年02月15日
    浏览(40)
  • 百度文心千帆大模型平台:企业级大模型服务的新航标

    随着人工智能和大数据的快速发展,大模型平台正越来越受到各大企业和个人开发者的青睐。本文将以百度最新推出的文心千帆大模型平台为例,深入分析其在国家战略布局,经济发展趋势,市场变化动向和技术研发周期等方面的影响和应用。同时,也将深入探讨其当前所面

    2024年02月15日
    浏览(40)
  • 如何申请文心一言&文心千帆大模型API调用资格、获取access_token,并使用SpringBoot接入文心一言API

    前段时间,百度文心一言文心千帆大模型开放了API调用的测试,接下来,教大家申请测试资格并接入文心千帆大模型的API。 右上角点击注册,内容如实填写并完成实名认证。  注册与认证详细内容不再赘述。 进入文心一言文心千帆大模型介绍页,点击申请体验 会进入填写问

    2024年02月15日
    浏览(38)
  • 百度“文心一言”大模型(ERNIE)发布了,对标ChatGPT

    大家好,我是微学AI,今天给大家介绍一下基于大语言模型的背景下,国内外的发展现状,以及百度的“文心一言”大模型。 一、自然语言处理模型的发展 自然语言处理(NLP)大模型的发展可以追溯到早期的简单的规则模型,再到后的机器学习,近十年崛起的神经网络和深度学

    2024年01月17日
    浏览(41)
  • 大模型的实践应用6-百度文心一言的基础模型ERNIE的详细介绍,与BERT模型的比较说明

    大家好,我是微学AI,今天给大家讲一下大模型的实践应用6-百度文心一言的基础模型ERNIE的详细介绍,与BERT模型的比较说明。在大规模语料库上预先训练的BERT等神经语言表示模型可以很好地从纯文本中捕获丰富的语义模式,并通过微调的方式一致地提高各种NLP任务的性能。

    2024年02月05日
    浏览(43)
  • 文心千帆大模型平台,一站式企业级大模型平台

    随着人工智能技术的不断发展,尤其是深度学习技术的广泛应用,大模型训练已成为当下研究的热点之一,随着计算能力的不断提升和数据规模的不断增加,大模型展现出了惊人的能力,能够处理更加复杂和庞大的任务。从计算机视觉到自然语言处理,从语音识别到推荐系统

    2024年02月16日
    浏览(40)
  • 百度智能云千帆大模型平台 2.0 产品技术解析

    本文整理自 2023 年 9 月 5 日百度云智大会 - 智能计算大模型技术分论坛,百度智能云 AI 大数据平台总经理忻舟的主题演讲《百度智能云千帆大模型平台 2.0 产品技术解析》。 这是关于技术主题的论坛,我首先问大家三个开发者的小问题。 第一个问题:蒸汽机的发明者是谁?

    2024年02月07日
    浏览(48)
  • 百度智能云“千帆大模型平台”升级:大模型最多,Prompt模板最全

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 前言 一、千帆大模型平台 二、体验分享 2.1服务申请 2.2Prompt模板 2.3Prompt模板的使用

    2024年02月14日
    浏览(39)
  • 百度智能云千帆大模型平台黑客马拉松报名开启!

    创造是生成式 AI 的核心。无论是智能导购带来的线上购物体验升级,还是主图生成带来的素材生产效率提升,又或是游戏场景的快速设置、智能 NPC 的全新交互、数字广告的精准推荐和个性化定制,亦或者是为学生提供更符合真实的口语练习环境,生成式 AI 这一人工智能的范

    2024年02月06日
    浏览(48)
  • 百度智能云“千帆大模型平台”最新升级:接入Llama 2等33个模型!

    今年3月,百度智能云推出“千帆大模型平台”。作为全球首个一站式的企业级大模型平台,千帆不但提供包括文心一言在内的大模型服务及第三方大模型服务,还提供大模型开发和应用的整套工具链,能够帮助企业解决大模型开发和应用过程中的所有问题。 本次千帆大模型

    2024年02月14日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包