公众号ai助手代码开源-zibll综合交流社区-zibll子比主题-WordPress主题模板-zibll子比主题

公众号ai助手代码开源

来公众号体验一下:

20250108140918536-微信图片_20230611002340

 

先看代码:

创建文件:index.php

<?php
// 引入配置密钥的文件
require 'config.php';

// 验证签名
function checkSignature($signature, $timestamp, $nonce, $token) {
    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr, SORT_STRING);
    $tmpStr = implode($tmpArr);
    $tmpStr = sha1($tmpStr);
    return $tmpStr == $signature;
}

// 发送HTTP GET请求
function httpGet($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

// 发送HTTP POST请求
function httpPost($url, $data) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: application/json',
        'Authorization: Bearer ' . API_KEY
    ]);
    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        file_put_contents('log.txt', "CURL Error: " . curl_error($ch) . PHP_EOL, FILE_APPEND);
    }
    curl_close($ch);
    return $result;
}

// 解析XML数据
function parseXML($xml) {
    return (array) simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
}

// 获取保存的对话历史
function getConversationHistory($userId) {
    $historyFile = "conversation_history_$userId.json";
    if (file_exists($historyFile)) {
        return json_decode(file_get_contents($historyFile), true);
    }
    return [
        [
            "role" => "system",
            "content" => SYSTEM_CONTENT
        ]
    ];
}

// 保存对话历史
function saveConversationHistory($userId, $history) {
    $historyFile = "conversation_history_$userId.json";
    file_put_contents($historyFile, json_encode($history, JSON_UNESCAPED_UNICODE));
}

// 处理微信消息
function handleWeChatMessage($message) {
    $toUserName = $message['FromUserName'];
    $fromUserName = $message['ToUserName'];
    $createTime = time();
    $msgType = $message['MsgType'];
    $content = isset($message['Content']) ? $message['Content'] : '';
    $msgId = isset($message['MsgId']) ? $message['MsgId'] : '';

    // 初始化回复内容
    $responseContent = '';

    // 获取对话历史
    $conversationHistory = getConversationHistory($toUserName);

    // 根据消息类型处理不同的回复内容
    if ($msgType == 'text') {
        // 构建请求数据
        $requestData = [
            "model" => "deepseek-chat",
            "messages" => array_merge($conversationHistory, [
                [
                    "role" => "user",
                    "content" => $content
                ]
            ]),
            "temperature" => 0.7
        ];

        // 发送请求到AI API
        $response = httpPost(API_URL, json_encode($requestData, JSON_UNESCAPED_UNICODE));

        // 解析API返回的JSON数据
        $responseJson = json_decode($response, true);
        if (json_last_error() !== JSON_ERROR_NONE) {
            // JSON解析失败
            $responseContent = " 抱歉,出了点问题,请稍微再试.";
        } else {
            if (isset($responseJson['error'])) {
                // API返回错误
                $responseContent = "API Error: " . $responseJson['error']['message'];
            } else {
                // 获取AI回复内容
                $responseContent = $responseJson['choices'][0]['message']['content'];
            }
        }
    } elseif ($msgType == 'image') {
        // 用户发送图片
        $responseContent = "抱歉,我暂时还不能查看图片内容";
    } elseif ($msgType == 'event') {
        // 处理事件消息
        $eventType = $message['Event'];
        if ($eventType == 'subscribe') {
            // 用户关注公众号
            $responseContent = "欢迎来到梵星网,请问我有什么可以帮助您的吗?";
        } elseif ($eventType == 'SCAN') {
            // 用户登录成功(假设使用的是某种登录事件)
            $responseContent = "登录成功";
        }
    }

    // 保存对话历史
    $conversationHistory[] = [
        "role" => "assistant",
        "content" => $responseContent
    ];
    saveConversationHistory($toUserName, $conversationHistory);

    // 构建回复XML
    $responseXML = "<xml>
        <ToUserName><![CDATA[$toUserName]]></ToUserName>
        <FromUserName><![CDATA[$fromUserName]]></FromUserName>
        <CreateTime>$createTime</CreateTime>
        <MsgType><![CDATA[text]]></MsgType>
        <Content><![CDATA[$responseContent]]></Content>
    </xml>";

    return $responseXML;
}

// 主函数
function main() {
    $signature = $_GET['signature'];
    $timestamp = $_GET['timestamp'];
    $nonce = $_GET['nonce'];
    $echoStr = $_GET['echostr'];

    if (isset($echoStr) && checkSignature($signature, $timestamp, $nonce, TOKEN)) {
        echo $echoStr;
        exit;
    }

    $xmlData = file_get_contents('php://input');
    $message = parseXML($xmlData);

    if (is_array($message) && isset($message['MsgType'])) {
        $responseXML = handleWeChatMessage($message);
        echo $responseXML;
    } else {
        echo "Invalid message format";
    }
}

main();

创建文件:config.php

<?php
// 定义常量
define("TOKEN", "替换成您自己的公众号token");
define("API_URL", "https://api.deepseek.com/chat/completions");//不需要动
define("API_KEY", "替换成自己的密钥");

// 定义附加职业工作内容
define("SYSTEM_CONTENT", "介绍:
你是一个梵星网的综合顾问,回答关于梵星网的问题,包括用户注册、新闻内容、广告推广投放等相关的信息。梵星网的官网是 https://fanxiy.cn/。
身份:
梵星科技团队研发的人工智能,梵星科技是一个互联网科技公司,涉及产业有新闻,支付(易付通支付是梵星科技旗下的产品https://pay.fanxiy.cn/这个链接只是支付产品的链接地址,请注意易付通支付目前暂未公开使用,目前只是邀请制)
");

代码是自己写的,可以在微信公众号搜索‘梵星网’体验效果,对接的是deepseek官网,密钥需要大家自己去申请,都是免费的个人可以用好长时间。

代码解读:

// 定义附加职业工作内容
define("SYSTEM_CONTENT", "介绍:
你是一个梵星网的综合顾问,回答关于梵星网的问题,包括用户注册、新闻内容、广告推广投放等相关的信息。梵星网的官网是 https://fanxiy.cn/。
身份:
梵星科技团队研发的人工智能,梵星科技是一个互联网科技公司,涉及产业有新闻,支付(易付通支付是梵星科技旗下的产品https://pay.fanxiy.cn/这个链接只是支付产品的链接地址,请注意易付通支付目前暂未公开使用,目前只是邀请制)
");

可以自行修改,可以给ai附加职务,列如:你是一名医生,只回答医学相关的问题。

20250117192828767-image-85

微信公众号相关必要字节,看不懂请不要进行修改。

20250117193007280-image-86

这段代码是实现与用户进行多轮对话,无需修改

20250117193127704-image-87

有注释我就不解释了,可以修改对应的话术。

 

好了就到这吧,有什么问题评论解答。

请登录后发表评论