您的位置 首页 知识分享

如何优化大型 JSON 文件以与 ChatGPT API 一起使用?

我正在尝试使用 chatgpt 作为我的 magento 2 网站的聊天机器人,并且我想将产品数据传递给它。为…

我正在尝试使用 chatgpt 作为我的 magento 2 网站的聊天机器人,并且我想将产品数据传递给它。为此,我收集了所有产品并将它们存储在一个 json 文件中,然后读取该文件以将数据嵌入到系统角色的 systemrolecontent 中。然而,我面临的问题是 json 文件相当大。

{     "bot_response": "error: chatbot error: unexpected api response structure: {     "error": {         "message": "request too large for gpt-4o on tokens per min (tpm): limit 30000, requested 501140. the input or output tokens must be reduced in order to run successfully. visit https://platform.openai.com/account/rate-limits to learn more.",         "type": "tokens",         "param": null,         "code": "rate_limit_exceeded"     } } " } 
登录后复制

我注意到需要在 api 配置中添加一个功能,该功能允许您运行查询来根据名称或描述中与用户消息中的关键字匹配的关键字来选择产品。挑战在于用户最初可能不知道产品的名称;他们来到聊天机器人是为了发现他们。我该如何解决这个问题?

这是我现在正在使用的代码:

<?php  namespace MetaCaresChatbotModel;  use MagentoFrameworkAppObjectManager;  class ChatBot {     private $authorization;     private $endpoint;     private $conversationHistory = [];     private $productsFile;     private $fetchingDateFile;     private $didFetchProducts = false;      public function __construct()     {         $this->authorization = 'sk-proj-';         $this->endpoint = 'https://api.openai.com/v1/chat/completions';          $this->productsFile = __DIR__ . '/products.json';         $this->fetchingDateFile = __DIR__ . '/fetching_date.json';          $currentTime = time();         $timeDifferenceSeconds = 24 * 3600;          if (!file_exists($this->fetchingDateFile)) {             file_put_contents($this->fetchingDateFile, json_encode(['last_fetch_time' => 0]));         }          $fetchingData = json_decode(file_get_contents($this->fetchingDateFile), true);         $lastFetchTime = $fetchingData['last_fetch_time'] ?? 0;          if ($currentTime - $lastFetchTime > $timeDifferenceSeconds) {             $products = $this->fetchProductsUsingModel();             $productsJson = json_encode($products);             file_put_contents($this->productsFile, $productsJson);             $fetchingData['last_fetch_time'] = $currentTime;             file_put_contents($this->fetchingDateFile, json_encode($fetchingData));             $this->didFetchProducts = true;         }          $jsonSampleData = file_get_contents($this->productsFile);          $systemRoleContent = <<<EOT Nom:     Meta Cares Bot Description     BOT Meta Cares répond aux questions sur les produits du site et fournit des conseils santé fiables.     Tu aides les clients de Meta Cares à faire des choix éclairés tout en offrant un accompagnement personnalisé, sécurisé et adapté à leurs besoins.  catalogue Meta Cares {$jsonSampleData}  Liste des Sites Référencés : - PubMed : [https://pubmed.ncbi.nlm.nih.gov/](https://pubmed.ncbi.nlm.nih.gov/) - ScienceDirect : [https://www.sciencedirect.com/](https://www.sciencedirect.com/) --- - Génération d’images DALL·E : Désactivée  EOT;          $this->conversationHistory[] = [             'role' => 'system',             'content' => $systemRoleContent         ];          if (session_status() == PHP_SESSION_NONE) {             session_start();         }         if (isset($_SESSION['chat_history'])) {             $this->conversationHistory = $_SESSION['chat_history'];         }     }      public function fetchProductsUsingModel(): array     {         return $products;     }      private function getCategoryNames(array $categoryIds): array     {         return $categoryNames;     }      public function sendMessage(string $message): array     {         try {             $this->conversationHistory[] = [                 'role' => 'user',                 'content' => $message             ];              $data = [                 'model' => 'gpt-4o',                 'messages' => array_map(function ($msg) {                     return [                         'role' => $msg['role'] === 'bot' ? 'assistant' : $msg['role'],                         'content' => $msg['content']                     ];                 }, $this->conversationHistory)             ];              $response = $this->makeApiRequest($data);             $arrResult = json_decode($response, true);              if (json_last_error() !== JSON_ERROR_NONE) {                 throw new Exception('Invalid API response format');             }              if (!isset($arrResult['choices']) || !isset($arrResult['choices'][0]['message']['content'])) {                 throw new Exception('Unexpected API response structure: ' . $response);             }              $assistantResponse = $arrResult['choices'][0]['message']['content'];             $this->conversationHistory[] = [                 'role' => 'bot',                 'content' => $assistantResponse             ];              $_SESSION['chat_history'] = $this->conversationHistory;             return [                 "conversationHistory" => $_SESSION['chat_history'],                 'didFetchProducts' => $this->didFetchProducts,                 'response' => $assistantResponse,             ];         } catch (Exception $e) {             throw new Exception('ChatBot Error: ' . $e->getMessage());         }     }      private function makeApiRequest(array $data): string     {         $ch = curl_init();         curl_setopt_array($ch, [             CURLOPT_URL => $this->endpoint,             CURLOPT_POST => true,             CURLOPT_POSTFIELDS => json_encode($data),             CURLOPT_HTTPHEADER => [                 'Content-Type: application/json',                 'Authorization: Bearer ' . $this->authorization,             ],             CURLOPT_RETURNTRANSFER => true,             CURLOPT_SSL_VERIFYPEER => false,             CURLOPT_SSL_VERIFYHOST => 0         ]);          $response = curl_exec($ch);          if (curl_errno($ch)) {             $error = curl_error($ch);             curl_close($ch);             throw new Exception('API request failed: ' . $error);         }          curl_close($ch);         return $response;     } }  
登录后复制

以上就是如何优化大型 JSON 文件以与 ChatGPT API 一起使用?的详细内容,更多请关注php中文网其它相关文章!

本文来自网络,不代表甲倪知识立场,转载请注明出处:http://www.spjiani.cn/wp/7802.html

作者: nijia

发表评论

您的电子邮箱地址不会被公开。

联系我们

联系我们

0898-88881688

在线咨询: QQ交谈

邮箱: email@wangzhan.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部