百度千帆模型实操体验
数据集上传及清洗功能




过滤

去重

去隐私

创建知识库
创建汽车维修知识库


创建agent应用



走API查询

走知识库路由查询

批量评测代码示例
一、分步获取 APP_ID、APPBUILDER_TOKEN
步骤 1:登录千帆 AppBuilder 平台
打开官网:https://console.bce.baidu.com/ai_apaas/appbuilder,使用百度账号登录,进入控制台。
步骤 2:获取 APP_ID(智能体应用 ID)
- 左侧菜单栏选择个人空间 → 应用;
- 在列表里找到你已经发布完成的智能体应用;
- 表格中「应用 ID」一栏的长串字符串,就是
APP_ID,直接复制。
注意:智能体必须完成发布,草稿状态无法获取有效 ID。
步骤 3:获取 APPBUILDER_TOKEN(调用密钥)
- 左侧菜单栏找到我的密钥(API 密钥);
- 点击新增密钥,在弹窗勾选上一步对应的智能体应用;
- 填写备注,确认创建,立刻复制生成的密钥字符串;

获取应用ak,sk

创建应用
应用是调用服务的主体,创建应用是调用接口服务的必须步骤。您可以划定该应用有权限调用的接口范围,以此实现权限管理。后续也可以查看每个应用上产生的接口调用量。
下面将以OCR为例,为您介绍如何创建应用。其他产品的创建方式与此相同。
方式一:在概览页上快速创建应用
进入文字识别控制台,点击使用指引模块的快速接入服务按钮。



准备测试代码实现自动测试结果及打分
# 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()
由于打分接口鉴权失败,暂不使用此功能,输出结果如下:

输出文档如下

&spm=1001.2101.3001.5002&articleId=163513633&d=1&t=3&u=a2adeb6afa464b5fa5d7ca5858b9434b)
425

被折叠的 条评论
为什么被折叠?



