百度千帆模型创建agent(BCA案例汽车故障检查助手)(一)

百度千帆模型实操体验

数据集上传及清洗功能

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

过滤

在这里插入图片描述

去重

去隐私

在这里插入图片描述

创建知识库

创建汽车维修知识库

在这里插入图片描述
在这里插入图片描述

创建agent应用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

走API查询

在这里插入图片描述

走知识库路由查询

在这里插入图片描述

批量评测代码示例

一、分步获取 APP_ID、APPBUILDER_TOKEN

步骤 1:登录千帆 AppBuilder 平台

打开官网:https://console.bce.baidu.com/ai_apaas/appbuilder,使用百度账号登录,进入控制台。

步骤 2:获取 APP_ID(智能体应用 ID)
  1. 左侧菜单栏选择个人空间 → 应用
  2. 在列表里找到你已经发布完成的智能体应用;
  3. 表格中「应用 ID」一栏的长串字符串,就是APP_ID,直接复制。

注意:智能体必须完成发布,草稿状态无法获取有效 ID。

步骤 3:获取 APPBUILDER_TOKEN(调用密钥)
  1. 左侧菜单栏找到我的密钥(API 密钥);
  2. 点击新增密钥,在弹窗勾选上一步对应的智能体应用;
  3. 填写备注,确认创建,立刻复制生成的密钥字符串

在这里插入图片描述

获取应用ak,sk

在这里插入图片描述

创建应用
应用是调用服务的主体,创建应用是调用接口服务的必须步骤。您可以划定该应用有权限调用的接口范围,以此实现权限管理。后续也可以查看每个应用上产生的接口调用量。

下面将以OCR为例,为您介绍如何创建应用。其他产品的创建方式与此相同。

方式一:在概览页上快速创建应用
进入文字识别控制台,点击使用指引模块的快速接入服务按钮。

image.png

在这里插入图片描述

在这里插入图片描述

准备测试代码实现自动测试结果及打分

# appbuilder智能体应用批量测试脚本
# pip install pandas requests openpyxl
import datetime
import pandas as pd
import requests
import json
import os

# appbuilder平台已发布的应用ID
APP_ID = "50039XXXX6-4203-b8d3-bc58922ff835"
# appbuilder平台密钥管理中的密钥token
APPBUILDER_TOKEN = "bXXXXXXXXXXXXXXa6"


API_KEY = "WXXXXXW"
SECRET_KEY = "HAXXXXXXXXXtbx"

#LLM_URL = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro"
LLM_URL = "https://qianfan.baidubce.com/v2/chat/completions"
 

CHECK_PROMPT = "你是一个判卷老师,请针对下面问题的回答给出你的判卷结果:正确、部分正确,错误。直接输出判卷结果,不用做任何解释。\n\n[问题]\n${question}\n\n[参考答案]\n${rightAnswer}\n\n[学生回答]\n${resultAnswer}\n\n[输出格式] 判卷结果:<结果>"

TOOL_NAME = "QiCheGuZhangChaXunZhuShouLeiSiZiZhuanLiChaXunZh"

def main():
    """
    读取excel获取测试问题列表
    读取excel获取测试问题列表
    逐行调用智能体API获取答案
    结果保存至新excel中
    """
    current_path = os.getcwd()
    url = LLM_URL + "?access_token=" + get_access_token()
    now = datetime.datetime.now()
    formatted_now = now.strftime("%Y%m%d%H%M%S")
    # 读取Excel文件
    df = pd.read_excel(current_path + '/agent-test-demo.xlsx',dtype=str)
    rownum = df.shape[0]
    for i in range(0, rownum):
        question = df.iloc[i, 1]
        print(question + "\n")
        # 第一步,创建`会话`
        conversation_id = create_chat()
        # 第二步,根据用户提出问题,调用应用进行对话
        # 调应用API
        # answer = chat(conversation_id, question)
        # 调用直接组件API
        answer = chat_with_tool(conversation_id, question, TOOL_NAME)
        print(answer + "\n")
        df.iloc[i, 4] = answer
        # 第三步,与参考答案对比 大模型判断回复是否正确
        # 第三步,与参考答案对比 大模型判断回复是否正确
        # 第三步,与参考答案对比 大模型判断回复是否正确
        # prompt = CHECK_PROMPT.replace("${question}", question).replace("${rightAnswer}", df.iloc[i, 2]).replace("${resultAnswer}", answer)
        # resp_text = get_base(prompt, url)
        # print("打分接口返回内容:", resp_text)
        # try:
        #     result = json.loads(resp_text)
        #     # 接口鉴权报错
        #     if "error_code" in result:
        #         df.iloc[i, 5] = f"鉴权异常:{result['error_msg']}"
        #     else:
        #         # 正常文心4.0pro取值
        #         df.iloc[i, 5] = result["result"]["content"].replace("判卷结果:", "").replace("判卷结果:", "")
        # except json.JSONDecodeError:
        #     df.iloc[i, 5] = "返回内容不是JSON"
        # except KeyError:
        #     df.iloc[i, 5] = "缺少返回字段"
        # except Exception as e:
        #     df.iloc[i, 5] = f"打分出错:{str(e)}"


def chat_with_tool(conversation_id, query, toolname):
    """
    应用会话接口,输入用户问题,返回应用对话结果
    :param conversation_id: 会话ID
    :return:
    """
    url = "https://qianfan.baidubce.com/v2/app/conversation/runs"
    payload = json.dumps({
        "app_id": APP_ID,
        "conversation_id": conversation_id,
        "query": query,
        "stream": False,
        "tool_choice": {
            "type": "function",
            "function": {
                "name": toolname,
                "input": {
                }
            }
        }
    })
    headers = {
        'Content-Type': 'application/json',
        'X-Appbuilder-Authorization': 'Bearer ' + APPBUILDER_TOKEN
    }
    response = requests.request("POST", url, headers=headers, data=payload)
    #print(response.text)
    result = json.loads(response.text)
    answer = result["answer"]
    utf8_bytes = answer.encode('utf-8')
    chinese_str = utf8_bytes.decode('utf-8')
    return chinese_str

def chat(conversation_id, query):
    """
    应用会话接口,输入用户问题,返回应用对话结果
    :param conversation_id: 会话ID
    :return:
    """
    url = "https://qianfan.baidubce.com/v2/app/conversation/runs"
    payload = json.dumps({
        "app_id": APP_ID,
        "conversation_id": conversation_id,
        "query": query,
        "stream": False
    })
    headers = {
        'Content-Type': 'application/json',
        'X-Appbuilder-Authorization': 'Bearer ' + APPBUILDER_TOKEN
    }

    response = requests.request("POST", url, headers=headers, data=payload)
    print(response.text)
    result = json.loads(response.text)
    answer = result["answer"]
    utf8_bytes = answer.encode('utf-8')
    chinese_str = utf8_bytes.decode('utf-8')
    return chinese_str

def create_chat():
    """
    用于新增对话,对话的有效期为7天
    每次调用该接口,会新增一个对话,并返回对话的ID,后续的对话请求都需要带上该ID
    :return:
    """
    url = "https://qianfan.baidubce.com/v2/app/conversation"
    payload = json.dumps({
        "app_id": APP_ID
    })
    headers = {
        'Content-Type': 'application/json',
        'X-Appbuilder-Authorization': 'Bearer ' + APPBUILDER_TOKEN
    }

    response = requests.request("POST", url, headers=headers, data=payload)
    result = json.loads(response.text)
    return result["conversation_id"]

def get_base(qa, url):
    payload = json.dumps({
        "messages": [{"role": "user", "content": "" + str(qa) + ""}]
    })
    headers = {
        'Content-Type': 'application/json'
    }

    response = requests.request("POST", url, headers=headers, data=payload)
    return 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()

由于打分接口鉴权失败,暂不使用此功能,输出结果如下:

在这里插入图片描述

输出文档如下

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值