blinq/openai

OpenAI API的PHP库包装器。

v1.0.4 2023-09-25 12:43 UTC

This package is auto-updated.

Last update: 2024-09-09 16:12:07 UTC


README

(由ChatGPT编写)

这是一个用于与语言学习模型(LLMs)交互的库,重点在于AI驱动的聊天功能。该库目前支持OpenAI的GPT-3.5-turbo,但也可扩展以支持其他LLMs。

特性

  • 跨API兼容性:该库旨在与不同的语言学习模型一起工作,包括OpenAI的GPT-3.5-turbo。

  • 易于使用:通过简单的配置和直观的API,该库使开发者能够轻松地与复杂的语言学习模型交互。

  • 流支持:该库提供流功能,允许实时与语言学习模型交互。

  • 聊天历史:该库会维护聊天会话的历史记录,可随时检索和分析。

  • 您可以通过扩展ApiClient类并实现所需的方法来添加对其他AI提供商的支持。

  • 错误处理:该库提供强大的错误处理功能,以应对与语言学习模型交互过程中可能遇到的问题。

  • 文档:提供全面的文档,以指导开发者使用该库。

  • 社区支持:可以在GitHub仓库中提出问题和功能请求,活跃的社区欢迎讨论和改进。

  • 许可证:该库是开源的,并使用MIT许可证。

  • 支持未来的AI模型:该库的架构设计可无缝支持任何未来的语言学习模型。

  • 该库代码清晰、结构良好,并包含注释以增强可读性。

入门

首先,您需要在PHP项目中安装该库。

composer require blinq/openai

用法

与OpenAI的GPT-3.5-turbo进行聊天

您需要使用ApiClient配置初始化一个客户端对象。以下示例展示了与OpenAI的GPT-3.5-turbo的聊天会话。

<?php

use Blinq\LLM\Config\ApiConfig;
use Blinq\LLM\Entities\ChatMessage;
use Blinq\LLM\Client;

$config = new ApiConfig('openai', 'your-api-key');
$client = new Client($config);

// Set the system message. This is optional.
$client->setSystemMessage("You are a nice chatbot");

// User message
$client->chat("Hello, how are you?");

// Get the last message
$message = $client->getLastMessage();

echo $message->content; // Prints "I am fine, thank you. How are you?"

// Get the chat history
$history = $client->getHistory();

foreach ($history as $message) {
    echo $message->content;
}

默认情况下,客户端会保存聊天会话的历史记录。您可以使用getHistory()方法检索历史记录。历史记录是一个包含以下属性的ChatMessage对象数组:

  • content:消息的内容
  • role:消息的角色(用户或系统)

您可以使用resetHistory()方法重置聊天历史记录。

或者使用getLastMessageAndClearHistory()方法获取最后一条消息并清除历史记录。

使用流进行聊天

如果使用流选项,以下示例展示了如何添加处理聊天消息流的处理程序。

<?php

use Blinq\LLM\Config\ApiConfig;
use Blinq\LLM\Entities\ChatStream;
use Blinq\LLM\Client;

$config = new ApiConfig('openai', 'your-api-key');
$client = new Client($config);

$client->addStreamHandler(function (ChatStream $stream) {
    // Handle the stream data
    echo $stream->getMessage()?->content; // Prints the partial message content
    
    // The $stream object has a 'done' property to check if the stream is done
    if ($stream->done) {
        // Do something when the stream is done
    }
});

$client->chat("Hello, how are you?", "user", ['stream' => true]);

自定义

ApiClient类是抽象的,可以扩展以创建不同API的定制驱动程序。

当前实现适用于OpenAI,但如果您想使用不同的AI提供商,可以创建一个新的类,它扩展ApiClient并实现所需的方法(如chat()completion()等)。

对于任何问题或额外功能,请随时在GitHub仓库中提交问题。

许可证

本项目采用MIT许可证。有关详细信息,请参阅LICENSE文件。