MoonshotAI SDK KIMI api 扩展安装

MoonshotAI SDK

MoonshotAI Logo

Latest Stable Version Total Downloads License

简介

MoonshotAI SDK 是一个功能全面的 PHP 客户端库,专为与 MoonshotAI API 进行无缝集成而设计。该 SDK 封装了与 MoonshotAI 服务通信的复杂性,提供了简洁而强大的接口,让您能够轻松地在 PHP 项目中集成 AI 能力。

特性一览

  • 🤖 文本对话 - 支持单轮和多轮对话,自动维护会话上下文
  • 👁️ 图像理解 - 单图和多图分析,支持本地图片和Base64编码
  • 🔧 工具调用 - 强大的函数调用功能,支持自定义工具定义和执行
  • 🌐 网络搜索 - 内置网络搜索能力,无需实现搜索逻辑
  • 📄 文件处理 - 文件上传、管理和内容分析
  • 🧠 高级功能 - 支持流式输出、上下文缓存、Token计算等
  • 💼 账户管理 - 查询余额、支持多API密钥管理
  • 🛡️ 健壮性 - 完善的错误处理、自动重试机制和日志记录

安装

composer require puge2016/moonshotai-sdk

快速开始

基础用法

<?php
require 'vendor/autoload.php';

use Puge2016\MoonshotAiSdk\MoonshotAI;

// 创建实例并设置API密钥
$moonshot = new MoonshotAI('my-session', 'moonshot-v1-8k');
$moonshot->setApiKey('your-api-key');

// 设置日志处理器(可选)
$moonshot->setLogHandler(function($message, $level) {
    // 自定义日志处理逻辑
    $levelNames = ['DEBUG', 'INFO', 'WARN', 'ERROR', 'FATAL'];
    $levelName = $levelNames[$level] ?? 'UNKNOWN';
    error_log("[{$levelName}] " . (is_array($message) ? json_encode($message) : $message));
});

// 发送一条消息并获取响应
$response = $moonshot->moonshot('你好,请介绍一下自己');
echo $response;

多轮对话

// 创建带会话标识的实例
$moonshot = new MoonshotAI('conversation-123', 'moonshot-v1-8k');
$moonshot->setApiKey('your-api-key');

// 第一轮对话
$response1 = $moonshot->moonshot('你好,请简单介绍一下墨子');
echo "AI: " . $response1 . "\n\n";

// 第二轮对话(自动保持上下文)
$response2 = $moonshot->moonshot('他的哪些思想对现代社会有借鉴意义?');
echo "AI: " . $response2 . "\n\n";

// 如需清除对话历史
// $moonshot->clearHistory();

核心功能

1. 图像理解 (Vision)

// 初始化时指定适合的Vision模型
$moonshot = new MoonshotAI('vision-task', 'moonshot-v1-8k');
$moonshot->setApiKey('your-api-key');
$moonshot->setLogHandler(function($message, $level) {
    // 日志处理逻辑
});

// 方法一:单张图片分析
$response = $moonshot->analyzeImage('/path/to/image.jpg', '描述这张图片中的内容');
echo $response;

// 方法二:多张图片分析(更接近实际测试用例)
$images = [
    '/path/to/first/image.jpg',
    '/path/to/second/image.jpg'
];
$response = $moonshot->analyzeImage($images, '请分析这些图片的内容');
echo $response;

// 方法三:使用base64编码的图片
$imageBase64 = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABA...';
$response = $moonshot->analyzeImage($imageBase64, '这张图片中有什么?');
echo $response;

2. 工具调用 (Function Calling)

// 初始化
$moonshot = new MoonshotAI('tools-session', 'moonshot-v1-8k');
$moonshot->setApiKey('your-api-key');

// 定义工具
$tools = [
    [
        "type" => "function",
        "function" => [
            "name" => "getWeather",
            "description" => "获取指定城市的天气信息",
            "parameters" => [
                "type" => "object",
                "properties" => [
                    "location" => [
                        "type" => "string",
                        "description" => "城市名称"
                    ],
                    "unit" => [
                        "type" => "string",
                        "enum" => ["celsius", "fahrenheit"],
                        "description" => "温度单位,默认为摄氏度"
                    ]
                ],
                "required" => ["location"]
            ]
        ]
    ]
];

// 自动工具调用流程(推荐)
$toolExecutor = function($name, $arguments) {
    if ($name === 'getWeather') {
        $location = $arguments['location'] ?? '北京';
        return json_encode([
            'location' => $location,
            'temperature' => '23°C',
            'condition' => '晴朗',
            'humidity' => '45%',
            'updated_at' => date('Y-m-d H:i:s')
        ]);
    }
    return "未知工具";
};

$response = $moonshot->executeToolCall("今天上海天气怎么样?", $tools, $toolExecutor);
echo $response['content'];

3. 文件处理与分析

// 上传文件
$fileInfo = $moonshot->uploadFile('/path/to/document.pdf');
echo "文件ID: " . $fileInfo['id'] . "\n";

// 提取文件内容
$content = $moonshot->retrieveFileContent($fileInfo['id']);
echo "文件内容: " . $content . "\n";

// 基于文件内容的问答(File QA)
$response = $moonshot->fileQA('/path/to/document.pdf', '这份文档的主要内容是什么?');
echo "AI回答: " . $response;

// 删除文件
$moonshot->deleteFile($fileInfo['id']);

4. 网络搜索 (Web Search)

// 初始化 - 指定会话标识和合适的模型
$moonshot = new MoonshotAI('search-session', 'moonshot-v1-8k');
$moonshot->setApiKey('your-api-key');

// 可选:设置日志处理器
$moonshot->setLogHandler(function($message, $level) {
    // 日志处理逻辑
});

// 执行网络搜索并获取结果
try {
    // 简单搜索示例 - 直接搜索日期和天气信息
    $result = $moonshot->webSearch('请搜索今天是几月几号和北京天气,并告诉我。');

    // 输出AI回答
    echo "AI回答:\n" . $result['content'] . "\n\n";

    // 显示Token使用情况和性能数据
    echo "搜索消耗Token: " . $result['search_tokens'] . "\n";
    echo "总计消耗Token: " . ($result['usage']['total_tokens'] ?? '未知') . "\n";
    echo "请求耗时: " . $result['duration'] . "秒\n";

    // 使用自定义选项的更复杂搜索
    $options = [
        'model' => 'moonshot-v1-128k',  // 使用大容量模型处理更复杂的搜索结果
        'temperature' => 0.3,           // 控制回答的创造性
    ];

    $result = $moonshot->webSearch('请对比分析中国和美国的AI政策', $options);
    echo $result['content'];
} catch (\Exception $e) {
    echo "搜索错误: " . $e->getMessage();
}

5. 流式输出

// 流式输出回调
$chunkCallback = function($chunk) {
    echo $chunk;
    ob_flush();
    flush();
};

// 完成回调
$completeCallback = function($allContent, $usage) {
    echo "\n\n完成!总共使用了 {$usage['total_tokens']} 个 tokens";
};

// 执行流式聊天
$moonshot->streamChat(
    '请给我讲一个关于人工智能的故事', 
    $chunkCallback, 
    $completeCallback
);

高级功能

自定义日志和缓存

// 设置日志处理器
$moonshot->setLogHandler(function($message, $level) {
    $levelNames = ['DEBUG', 'INFO', 'WARN', 'ERROR', 'FATAL'];
    $levelName = $levelNames[$level] ?? 'UNKNOWN';

    $logMessage = date('Y-m-d H:i:s') . " [{$levelName}] " . 
                 (is_array($message) ? json_encode($message) : $message);

    file_put_contents('moonshot_sdk.log', $logMessage . PHP_EOL, FILE_APPEND);
});

// 设置缓存处理器
$moonshot->setCacheHandler(function($action, $key, $value = null, $ttl = 300) {
    static $cache = [];

    if ($action === 'get') {
        return $cache[$key] ?? null;
    } elseif ($action === 'set') {
        $cache[$key] = $value;
        return true;
    }
    return false;
});

会话导入/导出

// 导出当前会话状态
$sessionData = $moonshot->exportSession();
file_put_contents('session_backup.json', json_encode($sessionData));

// 导入会话状态
$savedSession = json_decode(file_contents('session_backup.json'), true);
$newMoonshot = new MoonshotAI();
$newMoonshot->setApiKey('your-api-key')
           ->importSession($savedSession);

系统消息设置

// 设置自定义系统消息
$moonshot->setSystemMessage('你是一个专注于医疗健康领域的AI助手,请用专业但通俗易懂的语言回答用户的健康相关问题。');

// 获取当前系统消息
$systemMessages = $moonshot->getSystemMessages();

自动重试配置

// 设置最大重试5次,初始延迟2秒,最大延迟60秒
$moonshot->setRetryConfig(5, 2, 60);

// 禁用自动重试
$moonshot->setRetryConfig(0);

错误处理

SDK 提供了统一的错误处理机制,通过 MoonshotException 类可以轻松处理各种异常情况:

use Puge2016\MoonshotAiSdk\MoonshotAI;
use Puge2016\MoonshotAiSdk\Exceptions\MoonshotException;

try {
    $moonshot = new MoonshotAI('error-handling-demo');
    $moonshot->setApiKey('your-api-key');

    $response = $moonshot->moonshot('分析当前全球经济形势');
    echo $response;

} catch (MoonshotException $e) {
    echo "错误类型: " . $e->getErrorType() . "\n";
    echo "错误代码: " . $e->getCode() . "\n";
    echo "错误信息: " . $e->getMessage() . "\n";

    // 根据错误类型执行不同操作
    if ($e->isAuthError()) {
        echo "认证错误:请检查API密钥是否正确\n";
    } elseif ($e->isRateLimitError()) {
        echo "请求频率限制:等待一段时间后重试\n";
        sleep(5);
        // 重试逻辑...
    } elseif ($e->isContentFilterError()) {
        echo "内容安全过滤:请修改您的提问内容\n";
    }

} catch (\Exception $e) {
    echo "其他错误: " . $e->getMessage() . "\n";
}

示例项目

查看 examples 目录获取更多使用示例:

  • basic_chat.php - 基础对话使用示例
  • vision_demo.php - 图像理解示例
  • tool_calling.php - 工具调用示例
  • web_search.php - 网络搜索示例
  • file_operations.php - 文件操作示例
  • error_handling.php - 错误处理示例
  • streaming.php - 流式输出示例

版本记录

查看 CHANGELOG.md 了解版本更新详情。

贡献指南

欢迎提交 Pull Requests 和 Issues 帮助改进此SDK。请确保您的代码符合现有的代码风格并通过所有测试。

许可证

MIT License - 查看 LICENSE 文件了解更多详情。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 1

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!