欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP調(diào)用DeepSeek API的完整指南

 更新時(shí)間:2025年02月07日 09:04:58   作者:老大白菜  
本文將介紹如何使用 PHP 調(diào)用 DeepSeek API,實(shí)現(xiàn)流式對(duì)話并保存對(duì)話記錄,PHP 版本使用面向?qū)ο蟮姆绞綄?shí)現(xiàn),代碼結(jié)構(gòu)清晰,易于維護(hù),文中通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下

簡(jiǎn)介

本文將介紹如何使用 PHP 調(diào)用 DeepSeek API,實(shí)現(xiàn)流式對(duì)話并保存對(duì)話記錄。PHP 版本使用面向?qū)ο蟮姆绞綄?shí)現(xiàn),代碼結(jié)構(gòu)清晰,易于維護(hù)。

1. 環(huán)境準(zhǔn)備

1.1 系統(tǒng)要求

  • PHP 7.0 或更高版本
  • PHP cURL 擴(kuò)展
  • 文件寫(xiě)入權(quán)限

1.2 項(xiàng)目結(jié)構(gòu)

deepseek-project/
├── main.php          # 主程序
└── conversation.txt  # 對(duì)話記錄文件

2. 完整代碼實(shí)現(xiàn)

<?php

class DeepSeekChat {
    private $url = 'https://api.siliconflow.cn/v1/chat/completions';
    private $apiKey = 'YOUR_API_KEY';  // 替換為你的 API Key
    private $logFile = 'conversation.txt';

    public function __construct() {
        // 確保日志文件存在且可寫(xiě)
        if (!file_exists($this->logFile)) {
            touch($this->logFile);
        }
    }

    private function saveToFile($content, $isQuestion = false) {
        $timestamp = date('Y-m-d H:i:s');
        $text = $isQuestion 
            ? "\n[$timestamp] Question:\n$content\n\n[$timestamp] Answer:\n"
            : $content;
        
        file_put_contents($this->logFile, $text, FILE_APPEND);
    }

    private function processStreamingResponse($handle) {
        $buffer = '';
        while (!feof($handle)) {
            $chunk = fread($handle, 1024);
            $buffer .= $chunk;

            // 處理緩沖區(qū)中的每一行
            while (($pos = strpos($buffer, "\n")) !== false) {
                $line = substr($buffer, 0, $pos);
                $buffer = substr($buffer, $pos + 1);

                if (strlen(trim($line)) > 0) {
                    if (strpos($line, 'data: ') === 0) {
                        $data = substr($line, 6); // 移除 "data: " 前綴
                        if ($data === '[DONE]') {
                            continue;
                        }

                        $json = json_decode($data, true);
                        if ($json && isset($json['choices'][0]['delta']['content'])) {
                            $content = $json['choices'][0]['delta']['content'];
                            echo $content;
                            flush();
                            $this->saveToFile($content);
                        }
                    }
                }
            }
        }
    }

    public function chat() {
        while (true) {
            echo "\n請(qǐng)輸入您的問(wèn)題 (輸入 q 退出): ";
            $question = trim(fgets(STDIN));

            if ($question === 'q') {
                echo "程序已退出\n";
                break;
            }

            // 保存問(wèn)題
            $this->saveToFile($question, true);

            // 準(zhǔn)備請(qǐng)求數(shù)據(jù)
            $data = [
                'model' => 'deepseek-ai/DeepSeek-V3',
                'messages' => [
                    [
                        'role' => 'user',
                        'content' => $question
                    ]
                ],
                'stream' => true,
                'max_tokens' => 2048,
                'temperature' => 0.7,
                'top_p' => 0.7,
                'top_k' => 50,
                'frequency_penalty' => 0.5,
                'n' => 1,
                'response_format' => [
                    'type' => 'text'
                ]
            ];

            // 準(zhǔn)備 cURL 請(qǐng)求
            $ch = curl_init($this->url);
            curl_setopt_array($ch, [
                CURLOPT_POST => true,
                CURLOPT_POSTFIELDS => json_encode($data),
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_HTTPHEADER => [
                    'Content-Type: application/json',
                    'Authorization: Bearer ' . $this->apiKey
                ],
                CURLOPT_WRITEFUNCTION => function($ch, $data) {
                    echo $data;
                    return strlen($data);
                }
            ]);

            try {
                // 發(fā)送請(qǐng)求并處理響應(yīng)
                $handle = curl_exec($ch);
                
                if (curl_errno($ch)) {
                    throw new Exception(curl_error($ch));
                }

                // 添加分隔符
                echo "\n----------------------------------------\n";
                $this->saveToFile("\n----------------------------------------\n");

            } catch (Exception $e) {
                $error_msg = "請(qǐng)求錯(cuò)誤: " . $e->getMessage() . "\n";
                echo $error_msg;
                $this->saveToFile($error_msg);
            } finally {
                curl_close($ch);
            }
        }
    }
}

// 運(yùn)行程序
$chatbot = new DeepSeekChat();
$chatbot->chat();

3. 代碼詳解

3.1 類結(jié)構(gòu)

  • DeepSeekChat: 主類,封裝所有功能
  • __construct: 構(gòu)造函數(shù),初始化日志文件
  • saveToFile: 保存對(duì)話記錄
  • processStreamingResponse: 處理流式響應(yīng)
  • chat: 主對(duì)話循環(huán)

3.2 關(guān)鍵功能

文件操作

private function saveToFile($content, $isQuestion = false) {
    $timestamp = date('Y-m-d H:i:s');
    $text = $isQuestion 
        ? "\n[$timestamp] Question:\n$content\n\n[$timestamp] Answer:\n"
        : $content;
    
    file_put_contents($this->logFile, $text, FILE_APPEND);
}

cURL 配置

curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => json_encode($data),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Authorization: Bearer ' . $this->apiKey
    ]
]);

3.3 參數(shù)說(shuō)明

  • model: 使用的模型名稱
  • stream: 啟用流式輸出
  • max_tokens: 最大輸出長(zhǎng)度 (2048)
  • temperature: 控制隨機(jī)性 (0.7)
  • top_ptop_k: 采樣參數(shù)
  • frequency_penalty: 重復(fù)懲罰系數(shù)

4. 錯(cuò)誤處理

代碼包含完整的錯(cuò)誤處理機(jī)制:

  • cURL 錯(cuò)誤檢查
  • JSON 解析錯(cuò)誤處理
  • 文件操作錯(cuò)誤處理
  • 異常捕獲和日志記錄

5. 使用方法

5.1 修改配置

在代碼中替換 YOUR_API_KEY 為你的實(shí)際 API Key。

5.2 運(yùn)行程序

php main.php

5.3 交互方式

  • 輸入問(wèn)題進(jìn)行對(duì)話
  • 輸入 ‘q’ 退出程序
  • 查看 conversation.txt 獲取對(duì)話記錄

6. 性能優(yōu)化建議

  1. 內(nèi)存管理

    • 使用適當(dāng)?shù)木彌_區(qū)大小
    • 及時(shí)清理變量
    • 避免大量數(shù)據(jù)積累
  2. 文件操作

    • 使用文件鎖防止并發(fā)寫(xiě)入
    • 定期清理日志文件
    • 考慮使用數(shù)據(jù)庫(kù)存儲(chǔ)
  3. 網(wǎng)絡(luò)請(qǐng)求

    • 設(shè)置合理的超時(shí)時(shí)間
    • 使用持久連接
    • 處理網(wǎng)絡(luò)異常

總結(jié)

PHP 版本的 DeepSeek API 實(shí)現(xiàn)采用面向?qū)ο蠓绞?,代碼結(jié)構(gòu)清晰,易于維護(hù)和擴(kuò)展。通過(guò) cURL 實(shí)現(xiàn)流式處理,提供了良好的交互體驗(yàn)。

到此這篇關(guān)于PHP調(diào)用DeepSeek API的完整指南的文章就介紹到這了,更多相關(guān)PHP調(diào)用DeepSeek API內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論