一、项目目标
随着现代技术的快速发展,大型神经网络模型已经成为解决各种实际问题的强大工具。这些 大模型不仅能够处理海量数据,还具备强大的自动化和智能能力,使它们在自然语言处理、 计算机视觉、语音识别等领域中广受欢迎。同时,许多知名的科技公司和研究机构也提供了 大模型API,使开发者能够轻松访问和应用这些模型。
本项目的目标是让你初步了解大模型应用开发。你将综合运用所学的前端技术和后端技术如 数据库操作,文件操作,正则表达式,重定向等PHP知识,并利用大型神经网络模型的强大 能力来构建一个PHP应用程序。
二、实验内容
创建一个智能客服web应用,功能如下(不一定要实现所有功能,可根据自己能力进行一定改进或简化)
节点一ui布局开发
①用户选择咨询方式
②用户查看其历史咨询内容
③用户管理界面
节点二、用户管理
节点三、权限管理
节点四、日志管理
节点五、智能客服咨询方式包括单轮问答,多轮对话,信息选择
节点六、web程序可视化管理功能
三、实验结果
3.1 模块一,登录和注册
密码只能由数字和字母组成,用了正则表达式
3.2 模块二,用户选择咨询方式或服务界面
3.3 模块三,单轮问答
不会联系上一个问题给出答案
3.4 模块四,多轮问答
会联系上一个问题给出答案
3.5 模块五,用户查看其历史咨询内容
只能查看自己所登录账号的历史记录
3.6 模块六,用户管理界面,权限管理
管理员的用户管理界面,可修改所有人的权限,密码,可删除用户
普通用户的用户管理界面,只能修改自己的密码
3.7 模块七,意见反馈(创新功能)
管理员的意见反馈界面,查看所有普通用户发出过的意见反馈
普通用户的意见反馈界面,可提交自己对该系统的意见反馈
四、总结与心得:
4.1 联系上下文多轮问答模块的实现总结与心得:
在“智能客服问答(联系上下文)”界面输入想要问的问题后点击提交,多轮问答的处理文件(web_demo_m.php)用一个变量$question接收所输入问题,从 WebSocket 服务器接收数据后得出问题的答案,同时将这个问答插入到数据库的历史问答表(hView)中,将答案用cookie传递给“智能客服问答(联系上下文)”界面显示在上方文本框中并重定向回这个问答界面。
当问出下一个问题后,会查询数据库,select本id用户在历史问答表(hView)中的问答记录倒序后的第一个问答记录,会结合这个问答记录(也就是上一个问题的问答记录)给出本问题的答案,从而实现联系上下文多轮问答的功能。
4.2 用户管理,用户权限模块的实现总结与心得:
每个用户设置了权限存在数据库中,1表示为管理员,0表示为普通用户。管理员一般为内部人员,在用户管理界面可以修改所有用户的权限,密码,可以删除用户,从而管理员可以权限管理。普通用户为管理员之外的使用该系统的人,在用户管理界面只可以修改自己的密码。修改的新密码只能由数字和字母组成,用了正则表达式。具体实现方法为对数据库的增删改查。
4.3 数据库设计心得:
一个设计了三个表:
用户表(user)包括主键id,用户名(userN),密码(passW),权限(permission),
用于登录和注册,权限1表示为管理员,0表示为普通用户。
历史记录表(hView)存储了所有用户的历史问答,外键id引用user表中的id字段,区分不同用户的历史问答。还包括主键viewId,问题(question),答案(answer)。
意见反馈表(feedback)包括主键和意见反馈(feedback)用于普通用户插入意见反馈,管理员查看意见反馈。
五、关键代码
5.1联系上下文多轮问答模块部分代码
$question = $_POST['question']; // 获取用户输入的问题
$data = $this->getBody($Appid, $question); //问题(传入)
$client->send($data);
// 从 WebSocket 服务器接收数据
$answer = "";
while (true) {
$response = $client->receive();
$resp = json_decode($response, true);
$code = $resp["header"]["code"];
echo "从服务器接收到的数据: " . $response;
if (0 == $code) {
$status = $resp["header"]["status"];
if ($status != 2) {
$content = $resp['payload']['choices']['text'][0]['content'];
$answer .= $content;
} else {
$content = $resp['payload']['choices']['text'][0]['content'];
$answer .= $content;
$total_tokens = $resp['payload']['usage']['text']['total_tokens'];
print("\n本次消耗token用量:\n");
print($total_tokens);
break;
}
} else {
echo "服务返回报错" . $response;
break;
}
}
print("\n返回结果为:\n");
print($answer); //结果(传出)
setcookie("answerM", $answer, time() + 3600); //将$answer存储在名为"answer"的Cookie中
// 连接到SQLite数据库
$database = new SQLite3('iC.db');
$id = $_COOKIE["id_iM"]; //获取iCM.php传来的$id
// 历史记录插入数据
$insert_data = "INSERT INTO hView (question, answer, id) VALUES ('$question', '$answer', '$id');";
$database->exec($insert_data);
// 检查是否成功插入数据
if ($database->lastErrorCode() != 0) {
die('插入数据失败');
} else {
echo '成功插入数据';
header("Location: iCM.php"); //跳转问答界面
exit();
}
// 连接到SQLite数据库
$database = new SQLite3('iC.db');
$id = $_COOKIE["id_iM"]; //获取iCM.php传来的$id
// 通过主键viewId 倒序,查询该用户id数据库最后一条数据
$query_data = "SELECT * FROM hView where id = '$id' ORDER BY viewId desc limit 0,1";
$result = $database->query($query_data);
$row = $result->fetchArray();
$header = array(
"app_id" => $appid,
"uid" => "12345"
);
$parameter = array(
"chat" => array(
"domain" => "general",
"temperature" => 0.5,
"max_tokens" => 1024
)
);
$payload = array(
"message" => array(
"text" => array(
// 需要联系上下文时,要按照下面的方式上传历史对话
array("role" => "user", "content" => (string)$row['question']),
array("role" => "assistant", "content" => (string)$row['answer']),
// ...省略的历史对话
array("role" => "user", "content" => $question)
)
)
);
5.2用户管理模块修改密码的代码
<?php
// 获取用户输入的上传汽车信息
$id = $_COOKIE["id"];
$passW = $_POST['password'];
// 连接到SQLite数据库
$database = new SQLite3('iC.db');
if (preg_match('/^[a-zA-Z0-9]+$/', $passW)){//正则表达式密码只能由数字和字母组成
// 更新数据
$update_data = "UPDATE user SET passW = '$passW'WHERE id = '$id'";
$database->exec($update_data);
// 检查是否成功插入数据
if ($database->lastErrorCode() != 0) {
die('修改数据失败');
} else {
echo "<script>alert('修改密码成功')</script>"; //消息框
}
}else{
echo "修改失败,密码只能由数字和字母组成";
}
?>
5.3意见反馈模块根据不同权限用户显示不同界面的代码
<body>
<?php
$username = $_GET['userN'];
// 连接到SQLite数据库
$database = new SQLite3('iC.db');
// 查询本用户的权限,显示不同界面
$query_data = "SELECT permission FROM user where userN = '$username' ";
$result = $database->query($query_data);
$row = $result->fetchArray();
if ((string)$row['permission'] == 0) { //普通用户,提交意见
?>
<h1>意见反馈</h1>
<p>您的意见对我们非常重要</p>
<form method="POST" action="feedbackS.php">
<div id="sendVal" style="text-align: center;">
<input type=" text" id="feedback" name="feedback">
</div>
<div id="sendVal" style="text-align: center;">
<button type=" submit" id="btn">提交</button>
</div>
</form>
<p><a href="choose.php">返回选择服务界面</a> </p>
<?php } else { //管理员用户,查看意见
// 查询数据
$query_data = "SELECT * FROM uFeedback"; //查询所有意见
$result = $database->query($query_data); ?>
<table border="1">
<h1>查看意见反馈</h1>
<?php while ($row = $result->fetchArray()) { ?>
<tr>
<td><?php echo $row['feedback'] ?></td>
</tr>
<?php } ?>
</table>
<p><a href="choose.php">返回选择服务界面</a> </p>
<?php } ?>
</body>