在 AI 大模型普及的当下,Anthropic 推出的 Claude 以其优秀的上下文理解能力和安全性备受开发者青睐,但商用级别的 Claude API 调用存在一定成本,对于个人开发者、小型项目或仅用于学习测试的场景来说,高成本往往成为门槛。本文将带领大家基于 PHP 语言,实现一个零成本 / 极低成本的轻量级 Claude 风格对话交互系统 ------ 无需调用付费 API,仅通过本地逻辑模拟核心对话能力,同时兼顾代码的可扩展性和安全性,适合新手学习和小型场景快速落地。
本文核心目标:
- 用 PHP 实现基础的对话交互流程(用户输入→意图识别→智能回复);
- 详细解析代码逻辑,标注关键注释;
- 给出低成本扩展方向,适配更多使用场景;
- 强调 PHP 开发中的安全规范,符合企业级开发要求。
环境准备(零成本)
无需复杂环境配置,仅需满足以下基础条件:
- PHP 7.4+(兼容 PHP 8.x,主流服务器均支持);
- 本地服务器(XAMPP/WAMP,免费开源);
- 浏览器(Chrome/Edge/Firefox,用于测试交互)。
核心代码实现(带详细注释)
以下是完整的 PHP 代码,整合了前端交互、后端逻辑、安全过滤和会话管理,所有核心逻辑均添加详细注释,便于理解和扩展:
php
运行
<?php
/**
* 轻量级Claude风格对话交互系统(低成本版)
* 核心功能:接收用户输入→安全过滤→意图识别→生成模拟回复→会话存储
* 设计理念:零API调用成本、零额外存储依赖、极简部署,适合学习/小型场景
* 开发规范:符合PHP安全开发标准,防范XSS等常见攻击
*/
// 1. 初始化Session,实现会话上下文存储(PHP内置功能,零成本)
// Session用于保存用户与模拟Claude的对话记录,模拟上下文记忆能力
session_start();
// 2. 定义安全过滤函数(核心安全措施,防范XSS攻击)
/**
* 过滤用户输入,消除XSS攻击风险
* @param string $input 用户原始输入的未过滤内容
* @return string 经过多重过滤的安全输入内容
* @note 所有用户输入必须经过此函数过滤后再使用
*/
function filterInput($input) {
// 第一步:移除所有HTML/PHP标签,防止<script>等恶意脚本注入
$cleanInput = strip_tags($input);
// 第二步:转义特殊字符(&/<>/'"等),即使残留标签也无法执行
$cleanInput = htmlspecialchars($cleanInput, ENT_QUOTES, 'UTF-8');
// 第三步:去除首尾空格,优化输入体验和匹配精度
$cleanInput = trim($cleanInput);
// 第四步:过滤空输入(仅保留有效内容)
return empty($cleanInput) ? '' : $cleanInput;
}
// 3. 核心函数:模拟Claude生成智能回复
/**
* 根据用户输入的意图,生成Claude风格的自然语言回复
* @param string $userInput 经过过滤的用户输入内容
* @return string 模拟Claude的回复文本
* @note 本函数通过正则匹配实现意图识别,替代真实API调用(零成本核心)
*/
function generateClaudeReply($userInput) {
// 默认回复:未识别意图时返回,保证交互友好性
$defaultReply = "你好!我是轻量级模拟Claude,目前还在学习中~你可以尝试问我:\n1. 什么是PHP?\n2. 如何学习编程?\n3. 介绍一下AI大模型?";
// 转换为小写,避免大小写敏感导致意图匹配失败(如"PHP"和"php"视为同一意图)
$userInputLower = strtolower($userInput);
// 意图匹配规则库(模拟Claude的上下文理解能力)
// 格式:正则表达式(匹配意图)=> 对应回复内容
$intentRules = [
// 意图1:询问PHP相关问题
'/php|超文本预处理器|php开发/' => "PHP(Hypertext Preprocessor)是开源的服务器端脚本语言,核心优势是低成本、易部署、兼容所有主流Web服务器。它可直接嵌入HTML,支持MySQL/SQLite等免费数据库,是中小型网站的首选技术~",
// 意图2:询问编程学习方法
'/编程学习|怎么学编程|入门编程|编程技巧/' => "学习编程的核心是"实战驱动":先选一门入门语言(PHP/Python)掌握基础语法,再做小项目(如留言板、简易计算器),最后通过免费开源资源(MDN/菜鸟教程)进阶。全程无需付费,零成本也能学好~",
// 意图3:询问AI大模型/Claude
'/ai大模型|claude|人工智能模型|大模型/' => "AI大模型是基于海量数据训练的深度学习模型,Claude主打长上下文处理和安全性。本模拟版无需调用付费API,通过本地规则匹配即可实现基础交互,适合个人学习使用~",
// 意图4:问候类场景
'/你好|哈喽|hi|hello|早上好|下午好/' => "你好呀 😊!我是低成本版模拟Claude,很高兴能为你解答问题~",
// 意图5:致谢类场景
'/谢谢|感谢|多谢|辛苦了/' => "不客气~能帮到你我很开心,如果你有其他想了解的,随时都可以问我哦!"
];
// 遍历规则库,匹配用户意图并返回对应回复
foreach ($intentRules as $pattern => $reply) {
if (preg_match($pattern, $userInputLower)) {
return $reply;
}
}
// 无匹配意图时返回默认回复
return $defaultReply;
}
// 4. 处理用户对话请求(核心交互流程)
// 从Session读取历史对话记录(首次访问时初始化为空数组)
$conversation = isset($_SESSION['conversation']) ? $_SESSION['conversation'] : [];
$userInput = ''; // 存储过滤后的用户输入
$claudeReply = ''; // 存储模拟Claude的回复
// 判断是否为POST提交(用户点击"发送"按钮触发)
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['user_input'])) {
// 过滤用户输入,确保安全
$userInput = filterInput($_POST['user_input']);
// 仅处理非空输入,避免无效交互
if (!empty($userInput)) {
// 生成模拟Claude回复
$claudeReply = generateClaudeReply($userInput);
// 将本次对话添加到历史记录(模拟上下文记忆)
$conversation[] = [
'role' => 'user', // 角色标识:用户
'content' => $userInput // 过滤后的用户输入
];
$conversation[] = [
'role' => 'claude', // 角色标识:模拟Claude
'content' => $claudeReply // 生成的回复内容
];
// 限制会话记录数量(仅保留最近10条),避免Session过大影响性能
$_SESSION['conversation'] = array_slice($conversation, -10);
} else {
// 空输入时给出提示
$claudeReply = "😯 我没收到你的输入哦!请告诉我你想了解什么~";
}
}
// 5. 构建前端页面(HTML+PHP混合渲染)
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>低成本模拟Claude - PHP版</title>
<style>
/* 极简样式,零成本美化(无需前端框架) */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: "Microsoft YaHei", sans-serif;
}
.container {
max-width: 800px;
margin: 20px auto;
padding: 20px;
border: 1px solid #eee;
border-radius: 8px;
background: #f9f9f9;
}
.conversation {
height: 400px;
overflow-y: auto;
padding: 15px;
background: #fff;
border-radius: 6px;
margin-bottom: 20px;
border: 1px solid #ddd;
}
.message {
margin: 12px 0;
padding: 10px 15px;
border-radius: 8px;
max-width: 80%;
line-height: 1.5;
}
.user-message {
background: #e3f2fd;
margin-left: auto;
border-bottom-right-radius: 0;
}
.claude-message {
background: #f5f5f5;
margin-right: auto;
border-bottom-left-radius: 0;
}
.input-area {
display: flex;
gap: 10px;
align-items: center;
}
#user_input {
flex: 1;
padding: 12px;
border: 1px solid #ddd;
border-radius: 6px;
font-size: 14px;
outline: none;
}
#user_input:focus {
border-color: #2196f3;
}
button {
padding: 12px 24px;
background: #2196f3;
color: #fff;
border: none;
border-radius: 6px;
cursor: pointer;
font-size: 14px;
}
button:hover {
background: #1976d2;
}
.tips {
margin-top: 12px;
font-size: 12px;
color: #666;
line-height: 1.4;
}
strong {
margin-right: 8px;
}
</style>
</head>
<body>
<div class="container">
<h2 style="margin-bottom: 15px; color: #333;">低成本模拟Claude对话系统(PHP版)</h2>
<!-- 对话记录展示区域 -->
<div class="conversation" id="conversation">
<?php
// 遍历历史对话,渲染到页面
foreach ($conversation as $msg) {
// 区分用户/模拟Claude的消息样式
$roleClass = $msg['role'] === 'user' ? 'user-message' : 'claude-message';
$roleName = $msg['role'] === 'user' ? '你' : '模拟Claude';
// 将换行符转换为<br>,保证页面排版美观
$content = nl2br($msg['content']);
// 输出单条消息
echo "<div class='message {$roleClass}'><strong>{$roleName}:</strong>{$content}</div>";
}
?>
</div>
<!-- 用户输入表单 -->
<form method="POST" class="input-area">
<input type="text" name="user_input" id="user_input"
placeholder="请输入你想提问的内容(如:什么是PHP?)..."
value="<?php echo $userInput; ?>">
<button type="submit">发送</button>
</form>
<div class="tips">💡 提示:本系统为零成本模拟版,无真实Claude API调用,仅用于PHP交互开发学习;所有输入均经过安全过滤,可放心使用~</div>
</div>
<script>
// 简易JS:页面加载后自动滚动到对话底部(提升用户体验)
window.onload = function() {
const conversationBox = document.getElementById('conversation');
conversationBox.scrollTop = conversationBox.scrollHeight;
}
</script>
</body>
</html>
核心代码深度解析
1. Session 会话管理(零成本上下文存储)
php
运行
session_start();
$conversation = isset($_SESSION['conversation']) ? $_SESSION['conversation'] : [];
Session 是 PHP 内置的会话机制,无需额外部署 Redis、MySQL 等存储服务,零成本实现对话记录的临时持久化。本文中通过 Session 保存最近 10 条对话,模拟 Claude 的上下文记忆能力,且限制记录数量避免 Session 文件过大,兼顾性能和体验。
2. 安全过滤函数(企业级安全规范)
php
运行
function filterInput($input) {
$cleanInput = strip_tags($input);
$cleanInput = htmlspecialchars($cleanInput, ENT_QUOTES, 'UTF-8');
$cleanInput = trim($cleanInput);
return empty($cleanInput) ? '' : $cleanInput;
}
这是 PHP 开发中防范 XSS 攻击的核心逻辑,也是 CSDN 社区强调的安全开发标准:
strip_tags():彻底移除 HTML/PHP 标签,杜绝<script>、<iframe>等恶意脚本注入;htmlspecialchars():转义特殊字符(如&→&、<→<),即使标签未被完全过滤,也无法执行恶意代码;- 空值过滤:避免空字符串进入业务逻辑,减少无效交互。
3. 意图匹配与回复生成(零成本智能核心)
php
运行
function generateClaudeReply($userInput) {
$userInputLower = strtolower($userInput);
foreach ($intentRules as $pattern => $reply) {
if (preg_match($pattern, $userInputLower)) {
return $reply;
}
}
return $defaultReply;
}
通过正则表达式匹配用户意图,替代真实 Claude 的 API 调用,实现零成本的 "智能回复":
- 大小写归一化:避免
PHP和php被识别为不同意图,提升匹配准确率; - 规则化回复:将常见问题的回复预设为规则,满足基础交互需求;
- 兜底回复:保证无匹配意图时系统仍能给出友好反馈,避免交互中断。
4. 前端交互优化(零成本体验提升)
页面采用原生 HTML/CSS/JS 实现,无需引入 Vue、React 等前端框架,零成本完成交互优化:
- 响应式布局:适配 PC 和移动端,无需额外开发多端版本;
- 自动滚动:发送消息后自动滚动到对话底部,符合用户使用习惯;
- 样式美化:通过极简 CSS 实现对话气泡效果,提升视觉体验。
低成本扩展方向(贴近真实 Claude)
本文实现的基础版可通过以下零成本 / 低成本方式扩展,提升实用性:
1. 接入免费 AI API(极低成本)
若需要更智能的回复,可接入免费 AI API(如豆包免费额度、讯飞星火免费版),替换generateClaudeReply函数:
php
运行
function generateClaudeReply($userInput) {
// 示例:调用免费AI API(需替换为真实API地址和密钥)
$apiUrl = "https://api.free-ai.com/v1/chat/completions";
$postData = json_encode([
"model" => "free-claude",
"messages" => [["role" => "user", "content" => $userInput]]
]);
// 配置请求头
$options = [
"http" => [
"method" => "POST",
"header" => "Content-Type: application/json\r\n",
"content" => $postData,
"timeout" => 10 // 超时时间,避免请求阻塞
]
];
// 发送请求并解析响应
$context = stream_context_create($options);
$response = @file_get_contents($apiUrl, false, $context);
if (!$response) return "网络异常,暂时无法回复~";
$result = json_decode($response, true);
return $result['choices'][0]['message']['content'] ?? "暂无有效回复";
}
免费 API 虽有调用次数限制,但足以满足个人学习 / 小型场景使用,成本几乎为零。
2. SQLite 持久化存储(低成本)
Session 仅在会话有效期内保存数据,若需持久化对话记录,可接入 SQLite(文件级数据库,零部署成本):
php
运行
// 初始化SQLite数据库(仅需一个文件)
$db = new PDO('sqlite:conversation.db');
$db->exec("CREATE TABLE IF NOT EXISTS messages (
id INTEGER PRIMARY KEY AUTOINCREMENT,
role TEXT NOT NULL,
content TEXT NOT NULL,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
)");
// 插入对话记录(替代Session存储)
if (!empty($userInput)) {
// 插入用户消息
$stmt = $db->prepare("INSERT INTO messages (role, content) VALUES (:role, :content)");
$stmt->execute([':role' => 'user', ':content' => $userInput]);
// 插入模拟Claude消息
$stmt->execute([':role' => 'claude', ':content' => $claudeReply]);
}
// 读取历史对话
$stmt = $db->query("SELECT role, content FROM messages ORDER BY create_time DESC LIMIT 10");
$conversation = $stmt->fetchAll(PDO::FETCH_ASSOC);
$conversation = array_reverse($conversation); // 恢复正序
SQLite 无需安装数据库服务,仅需一个文件即可实现数据持久化,适合低成本部署。
开发注意事项(符合 CSDN 规范)
-
安全合规:
- 所有用户输入必须经过过滤,防范 XSS、SQL 注入等攻击;
- 避免硬编码敏感信息(如 API 密钥),可通过
getenv()读取环境变量; - 限制 Session 大小和 SQLite 查询条数,避免性能问题。
-
兼容性:
- 选择 PHP 7.4 + 作为最低版本,兼容主流服务器环境(XAMPP、宝塔面板);
- 前端样式使用原生 CSS,避免依赖第三方框架导致的兼容性问题。
-
体验优化:
- 增加输入防抖(避免重复提交)、加载提示(API 调用时);
- 支持回车发送消息,提升交互便捷性。
总结
本文基于 PHP 实现的轻量级模拟 Claude 对话系统,核心优势是零成本 / 极低成本 :无需付费 API、无需复杂部署、无需高端服务器,仅需基础 PHP 环境即可运行。通过详细的代码注释和解析,不仅能帮助新手理解 PHP 交互开发的核心逻辑,还能掌握安全开发、会话管理、意图匹配等关键技能。https://baike.baidu.com/planet/issue?issueId=19332985
https://baike.baidu.com/planet/issue?issueId=19332875
https://baike.baidu.com/planet/issue?issueId=19332746
https://baike.baidu.com/planet/issue?issueId=19332635
https://baike.baidu.com/planet/issue?issueId=19332535
https://baike.baidu.com/planet/issue?issueId=19332434
https://baike.baidu.com/planet/issue?issueId=19332328
https://baike.baidu.com/planet/issue?issueId=19332209
https://baike.baidu.com/planet/issue?issueId=19332085
https://baike.baidu.com/planet/issue?issueId=19331973
对于个人开发者,可基于本文代码扩展功能(如接入免费 API、持久化存储),快速落地小型 AI 对话项目;对于企业开发者,本文的安全规范、低成本架构思路也可应用于实际项目中,降低开发和运维成本。
AI 大模型的核心价值是提升效率,低成本模拟版虽无法替代真实 Claude,但却是学习 AI 交互开发的绝佳切入点 ------ 用最少的成本,掌握最核心的开发逻辑,这也是本文的核心目标。