0

0

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

DDD

DDD

发布时间:2025-01-09 09:15:55

|

701人浏览过

|

来源于dev.to

转载

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

{
    "bot_response": "error: chatbot error: unexpected api response structure: {\n    \"error\": {\n        \"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.\",\n        \"type\": \"tokens\",\n        \"param\": null,\n        \"code\": \"rate_limit_exceeded\"\n    }\n}\n"
}

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

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

来福FM
来福FM

来福 - 你的私人AI电台

下载
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 = <<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数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

411

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

532

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

309

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

74

2025.09.10

ChatGPT注册
ChatGPT注册

ChatGPT注册方法:1、访问OpenAI的官方网站,进入注册页面;2、完成注册后收到一份邮件,打开后点击验证账号;3、选择一个适合您需求的订阅计划;4、获得访问ChatGPT的权限即可。

529

2023.09.12

国内免费ChatGPT大全
国内免费ChatGPT大全

ChatGPT是一种基于深度学习技术的自然语言处理模型,由OpenAI开发。它是GPT的一个变体,专门设计用于生成上下文相关的文本回复。ChatGPT被训练成一个聊天机器人,可以与用户进行对话交互。更多关于ChatGPT的文章详情请查看本专题,希望对大家能有所帮助。

573

2023.10.25

手机安装chatgpt的方法
手机安装chatgpt的方法

手机安装chatgpt的方法:1、在ChatGTP官网或手机商店上下载ChatGTP软件;2、打开后在设置界面中,选择语言为中文;3、在对局界面中,选择人机对局并设置中文相谱;4、开始后在聊天窗口中输入指令,即可与软件进行交互。想了解更多chatgpt的相关内容,可以阅读本专题下面的文章。

2792

2024.03.05

chatgpt国内可不可以使用
chatgpt国内可不可以使用

chatgpt在国内可以使用,但不能注册,港澳也不行,用户想要注册的话,可以使用国外的手机号进行注册,注意注册过程中要将网络环境切换成国外ip。想了解更多chatgpt的相关内容,可以阅读本专题下面的文章。

1001

2024.03.05

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

12

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号