大气环保网站模板百度应用平台
一、准备工作
注册与登录:
登录百度智能云千帆控制台,注册并登录您的账号。
创建千帆应用:
根据实际需求创建千帆应用。创建成功后,获取AppID、API Key、Secret Key等信息。如果已有千帆应用,可以直接查看已有应用的API Key、Secret Key等信息。
API授权:
应用创建成功后,千帆平台默认为应用开通所有API调用权限,无需额外申请授权。但请注意,针对付费服务,如果用户在使用过程中终止了付费,则无法调用对应的API。如需重新开通,请在千帆大模型平台-在线服务页面点击开通付费。
二、获取接口访问凭证access_token
调用获取access_token接口:
使用API Key和Secret Key调用获取access_token接口,获取access_token。这个token是调用API接口的身份验证凭证,需要妥善保管。access_token默认有效期为30天,生产环境请注意及时刷新。
三、调用API接口
构造请求:
根据API文档构造请求,包括设置请求参数、请求头等。其中,prompt是与大模型对话的入口,其质量直接决定了大模型的输出质量。因此,需要编写高质量的prompt。
发送请求:
将构造好的请求发送到API服务器。这通常是通过HTTP请求完成的。
java 调用的代码如下:
package com.mg.mgchat.service;//import org.apache.http.HttpResponse;
//import org.apache.http.client.methods.HttpPost;
//import org.apache.http.entity.StringEntity;
//import org.apache.http.impl.client.CloseableHttpClient;
//import org.apache.http.impl.client.HttpClients;
//import org.apache.http.util.EntityUtils;import okhttp3.*;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.stereotype.Service;import java.io.IOException;@Service
public class ErnieSpeedService {public static final String API_KEY = "****"; //修改为自己的public static final String SECRET_KEY = "***;static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build();static final String orgDescStr="湖北长江电影集团是一家致力于电影产业的企业,涵盖了电影的制作、发行和放映等多个环节。关于湖北长江电影集团放映公益电影的情况,这是一个值得赞赏的举措。在社会责任感的驱使下,许多电影公司都会参与公益电影的放映,旨在为广大观众提供有益的文化内容,同时促进社会发展。湖北长江电影集团可能会定期或不定期地参与放映公益电影,这可能包括安全教育、文化传承、环境保护等主题的电影。这些公益电影的放映可能是在电影院、社区、学校或其他公共场所进行,以最大限度地覆盖更多的观众。要了解湖北长江电影集团具体的公益电影放映情况,建议访问其官方网站或关注其社交媒体账号,以获取最新的信息。同时,也可以关注当地的新闻资讯,以了解更多的放映详情。";public JSONObject askQuestion(String question) throws Exception {MediaType mediaType = MediaType.parse("application/json");JSONObject r = new JSONObject();//declare json object arrayJSONArray jsonArray = new JSONArray();JSONObject jsonObject1 = new JSONObject();jsonObject1.put("role", "user");jsonObject1.put("content", "湖北长江电影集团放映公益电影");jsonArray.put(jsonObject1);JSONObject jsonObject2 = new JSONObject();jsonObject2.put("role", "assistant");jsonObject2.put("content", orgDescStr);jsonArray.put(jsonObject2);r.put("orgDesc", orgDescStr);JSONObject jsonObject3 = new JSONObject();jsonObject3.put("role", "user");jsonObject3.put("content", "电影:" + question);jsonArray.put(jsonObject3);JSONObject jsonObject_q = new JSONObject();jsonObject_q.put("messages", jsonArray);int i = 0;while (i <= 2) {i++;String json_question = jsonObject_q.toString();RequestBody body = RequestBody.create(mediaType, json_question);Request request = new Request.Builder().url("https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-speed-128k?access_token=" + getAccessToken()).method("POST", body).addHeader("Content-Type", "application/json").build();Response response = HTTP_CLIENT.newCall(request).execute();String s = response.body().string();JSONObject jsonObject_r1 = new JSONObject(s);String s1 = jsonObject_r1.getString("result");if (i == 1) {r.put("filmDesc", s1); // film desc save to r json objectJSONObject jsonObject4 = new JSONObject();jsonObject4.put("role", "assistant");jsonObject4.put("content", s1); // film descjsonArray.put(jsonObject4); // add to json array ,to prepare for next queryJSONObject jsonObject5 = new JSONObject(); // prepare for next query ,user queryjsonObject5.put("role", "user");jsonObject5.put("content", "电影:" + question + "的主要演员有哪些,他们的演技怎么样,都演过什么电影");jsonArray.put(jsonObject5);} else if (i == 2) {r.put("performerDesc", s1); // film desc save to r json object}}return r;}/*** 从用户的AK,SK生成鉴权签名(Access Token)** @return 鉴权签名(Access Token)* @throws IOException IO异常*/static String getAccessToken() throws IOException {MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");RequestBody body = RequestBody.create(mediaType, "grant_type=client_credentials&client_id=" + API_KEY+ "&client_secret=" + SECRET_KEY);Request request = new Request.Builder().url("https://aip.baidubce.com/oauth/2.0/token").method("POST", body).addHeader("Content-Type", "application/x-www-form-urlencoded").build();Response response = HTTP_CLIENT.newCall(request).execute();return new JSONObject(response.body().string()).getString("access_token");}}
测试代码:
package com.mg.mgchat.service;import okhttp3.*;
import org.json.JSONObject;import java.io.*;/*** 需要添加依赖* <!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->* <dependency>* <groupId>com.squareup.okhttp3</groupId>* <artifactId>okhttp</artifactId>* <version>4.12.0</version>* </dependency>*/class Sample {public static final String API_KEY = "***";public static final String SECRET_KEY = "***";static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build();public static void main(String []args) throws IOException{MediaType mediaType = MediaType.parse("application/json");// {// "role": "assistant",// "content": "这是一个测试信息。请问有什么我可以帮助您的吗?"// }, it is string parameter//String s={"messages":[{"role":"user","content":"test"}]}String json = "{\"messages\":[{\"role\":\"user\",\"content\":\"辽沈战役类似的电影有哪些\"},{\"role\":\"assistant\",\"content\":\"与辽沈战役相关的电影有很多,以下是一些类似的电影:\\n\\n1. 《大决战》:这是一部非常知名的战争电影,描述了辽沈战役的全过程,再现了中国共产党的英勇奋斗和伟大胜利。\\n2. 《辽沈战役之鹰击长空》:这部电影描绘了空军在辽沈战役中的重要作用,展现了空军的英勇无畏和战争中的艰苦历程。\\n3. 《风雨辽沈》:这部电影展现了辽沈战役期间的复杂局势和人物关系,描绘了一幅生动的历史画卷。\\n4. 《决战辽沈》:这部电影聚焦于辽沈战役的重要战役和事件,再现了战争中的关键时刻和英勇事迹。\\n5. 《中国蓝军大决战》:这部电影以辽沈战役为背景,展现了人民解放军的战斗精神和英勇无畏。\\n\\n除了以上电影,还有一些其他战争题材的电影,如《建党伟业》、《辛亥革命》等,虽然不直接描述辽沈战役,但也涉及到相关的历史事件和人物。\\n\\n以上内容仅供参考,如需更多关于辽沈战役的电影信息,可以在各大影视网站或App上查询。\"},{\"role\":\"user\",\"content\":\"推荐一部电影\"}]}";RequestBody body = RequestBody.create(mediaType, json);//RequestBody body = RequestBody.create(mediaType, "{\"messages\":[{\"role\":\"user\",\"content\":\"辽沈战役类似的电影有哪些\"}\\,{\"role\":\"assistant\",\"content\":\"与辽沈战役相关的电影有很多,以下是一些类似的电影:\\n\\n1. 《大决战》:这是一部非常知名的战争电影,描述了辽沈战役的全过程,再现了中国共产党的英勇奋斗和伟大胜利。\\n2. 《辽沈战役之鹰击长空》:这部电影描绘了空军在辽沈战役中的重要作用,展现了空军的英勇无畏和战争中的艰苦历程。\\n3. 《风雨辽沈》:这部电影展现了辽沈战役期间的复杂局势和人物关系,描绘了一幅生动的历史画卷。\\n4. 《决战辽沈》:这部电影聚焦于辽沈战役的重要战役和事件,再现了战争中的关键时刻和英勇事迹。\\n5. 《中国蓝军大决战》:这部电影以辽沈战役为背景,展现了人民解放军的战斗精神和英勇无畏。\\n\\n除了以上电影,还有一些其他战争题材的电影,如《建党伟业》、《辛亥革命》等,虽然不直接描述辽沈战役,但也涉及到相关的历史事件和人物。\\n\\n以上内容仅供参考,如需更多关于辽沈战役的电影信息,可以在各大影视网站或App上查询。\"}\\,{\"role\":\"user\",\"content\":\"推荐一部电影\"}]}");Request request = new Request.Builder().url("https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-speed-128k?access_token=" + getAccessToken()).method("POST", body).addHeader("Content-Type", "application/json").build();Response response = HTTP_CLIENT.newCall(request).execute();System.out.println(response.body().string());}/*** 从用户的AK,SK生成鉴权签名(Access Token)** @return 鉴权签名(Access Token)* @throws IOException IO异常*/static String getAccessToken() throws IOException {MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");RequestBody body = RequestBody.create(mediaType, "grant_type=client_credentials&client_id=" + API_KEY+ "&client_secret=" + SECRET_KEY);Request request = new Request.Builder().url("https://aip.baidubce.com/oauth/2.0/token").method("POST", body).addHeader("Content-Type", "application/x-www-form-urlencoded").build();Response response = HTTP_CLIENT.newCall(request).execute();return new JSONObject(response.body().string()).getString("access_token");}}
ernie-speed-128k
在URL中指的是使用的具体模型名称或标识符。ERNIE(Enhanced Representation through kNowledge IntEgration)是百度开发的一系列预训练语言模型,它们经过训练能够理解自然语言文本,并根据上下文生成回答。speed-128k
可能表示这个模型在某种性能指标(如推理速度)上的优化,或者是模型的某个特定版本。
用python 写一个调用:
先测试一下
官网还有示例代码 可以直接copy
这里我们写一个通过ai 执行sql的py 小程序:
完整代码如下:
import tkinter as tk
from tkinter import messagebox
import requests
import pymysql
import json
import re
# 百度文言一心大模型API的配置
API_KEY = '****' #更换为自己的
SECRET_KEY = '***'
TOKEN_URL = f'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={API_KEY}&client_secret={SECRET_KEY}'# MySQL数据库的配置
DB_HOST = 'localhost'
DB_USER = 'root'
DB_PASSWORD = '1'
DB_NAME = 'xx'def get_access_token():"""获取百度API的访问令牌"""response = requests.get(TOKEN_URL)return response.json().get('access_token')
# 提取SQL语句 只能是ddl
def extract_sql(response_text):"""从API响应中提取SQL语句"""# 使用正则表达式匹配SQL代码块match = re.search(r'```sql\n([\s\S]*?)\n```', response_text, re.DOTALL)if match:return match.group(1).strip()else:raise ValueError("无法从响应中提取SQL语句")def generate_sql(prompt, access_token):"""调用百度文言一心大模型API生成SQL语句"""url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-speed-128k?access_token=" + get_access_token()payload = json.dumps({"messages": [{"role": "user","content": prompt}]}, ensure_ascii=False)headers = {'Content-Type': 'application/json'}response = requests.request("POST", url, headers=headers, data=payload.encode("utf-8"))response_text = response.textprint(response.text)# headers = {# 'Content-Type': 'application/json',# 'Authorization': f'Bearer {access_token}'# }# data = {# "messages": [# {# "role": "user",# "content": prompt# }# ]# }# response = requests.post(url, headers=headers, json=data)if response.status_code == 200:try:#把response_text 转换为json对象response_json = json.loads(response_text)#get result from response_jsonif "error_code" in response_json:raise Exception(f"API请求失败: {response_json['error_code']}, {response_json['error_msg']}")if "result" not in response_json:raise Exception("API响应中缺少'result'字段")result_text=response_json["result"];sql = extract_sql(result_text)return sqlexcept ValueError as e:raise Exception(f"无法解析API响应: {e}")else:raise Exception(f"API请求失败: {response.status_code}, {response.text}")def execute_sql(sql):"""执行SQL语句"""connection = pymysql.connect(host=DB_HOST, user=DB_USER, password=DB_PASSWORD, database=DB_NAME)try:with connection.cursor() as cursor:cursor.execute(sql)result = cursor.fetchall()connection.commit()return resultfinally:connection.close()def on_submit():"""用户提交操作要求时的回调函数"""# 获取用户输入prompt = entry.get()if not prompt:messagebox.showwarning("输入错误", "请输入对数据库操作的要求!")returntry:# 获取访问令牌access_token = get_access_token()# 调用API生成SQL语句sql = generate_sql(prompt, access_token)sql_text.delete(1.0, tk.END) # 清空之前的SQL语句sql_text.insert(tk.END, sql) # 显示生成的SQL语句# 询问用户是否执行confirm = messagebox.askyesno("确认执行", f"生成的SQL语句为:\n{sql}\n\n是否执行?")if confirm:result = execute_sql(sql)result_text.delete(1.0, tk.END) # 清空之前的结果result_text.insert(tk.END, "执行成功,结果为:\n")for row in result:result_text.insert(tk.END, f"{row}\n")except Exception as e:messagebox.showerror("错误", f"发生错误: {e}")# 创建主窗口
root = tk.Tk()
root.title("数据库操作助手")# 用户输入框
tk.Label(root, text="请输入对数据库操作的要求:").pack(pady=5)
entry = tk.Entry(root, width=50)
entry.pack(pady=5)# 提交按钮
submit_button = tk.Button(root, text="提交", command=on_submit)
submit_button.pack(pady=10)# 显示生成的SQL语句
tk.Label(root, text="生成的SQL语句:").pack(pady=5)
sql_text = tk.Text(root, height=5, width=50)
sql_text.pack(pady=5)# 显示执行结果
tk.Label(root, text="执行结果:").pack(pady=5)
result_text = tk.Text(root, height=10, width=50)
result_text.pack(pady=5)# 运行主循环
root.mainloop()
界面:
执行结果是创建了表: