Openai 异步客户端接入国产大模型 Kimi

Moonshot

介绍

Kimi Chat 是由月之暗面科技有限公司(Moonshot AI)开发的一款人工智能助手,支持长达20万字的上下文处理能力,并且能够记住之前的对话内容,提供更加准确和有条理的回答。Kimi Chat 的特点在于其强大的长文本处理能力,这使得它能够在多轮对话中保持对上下文的理解和记忆,减少了信息丢失和误解,提高了对话的连贯性和准确性。

Moonshot AI 是一家专注于通用人工智能领域的公司,其愿景是寻求将能源转化为智能的最优解,通过产品与用户共创智能,实现普惠AI。Moonshot AI 的核心团队曾参与开发Transformer XL、RoPE等关键算法,并且在大模型领域有着深厚的技术积累。公司的名字来源于英国摇滚乐队Pink Floyd的专辑《Dark Side of the Moon》,象征着对未知的探索和创新。

kimi 是他们家智能助手的名字,真正的大模型是叫 Moonshot。这一点我们从 API 的 model 参数中也能发现。因此后面谈到大模型时,就统一称呼为 Moonshot

Moonshot 这个名字可能取自 “登月计划”,可见他们的雄心壮志。公司取名 “月之暗面”,更是增添了几分神秘色彩。

官方地址:https://www.moonshot.cn

API 设计

Moonshot 还有一点让魔法哥很有好感——它的 API 语法完全兼容 OpenAI。这意味着海量基于 GPT 的开源项目和商业项目都有极大可能在 Moonshot 上跑起来。

对于开发者来说,这也是一项巨大的优势。现有基于 GPT 的老项目都可以无缝接入 Moonshot,基于 Moonshot 的新项目也可以随时更换引擎。不管是迁移来还是迁移走都毫无压力!

开放平台

开放地址:https://platform.moonshot.cn/docs/docs

平台还为每个新用户赠送了 15.00 元 元的 API 调用额度。对于开发测试来说,足够用一阵子了。

创建 API Key

Openai 异步客户端接入国产大模型 Kimi

创建的Key记得保存,后面要用!!!

Openai 异步客户端接入国产大模型 Kimi

webman/openai

简介

传统php-fpm架构调用openai等大模型接口时只能做到阻塞调用,由于大模型接口返回速度很慢,一个php-fpm进程一分钟只能调用几次,几个人一刷系统就会明显的卡顿甚至不可用状态,所以php-fpm不适合做大模型调用,而webman这类的常驻内存类型的框架非常适合大模型应用的开发。

webman/openai 是一个异步非阻塞的openai客户端,配合webman可以做到同一时刻支持上万并发调用,使用简单,返回如丝般的顺滑,无卡顿。

开源地址:https://github.com/webman-php/openai

安装

composer require webman/openai

安装该插件之前记得先安装webman框架。

使用

Chat流式返回

新建一个控制器ChatController

<?php
namespace app\\\\controller;

use support\\\\Request;
use support\\\\Response;
use Webman\\\\Openai\\\\Chat;
use Workerman\\\\Protocols\\\\Http\\\\Chunk;

class ChatController
{
    /**
     * @desc completions
     * @param Request $request
     * @return Response
     * @author Tinywan(ShaoBo Wan)
     */
    public function completions(Request $request): Response
    {
        $connection = $request->connection;
        $chat = new Chat([\\\'apikey\\\' => \\\'sk-xxxxxxxxxxxxxxxxxxxxxxx\\\', \\\'api\\\' => \\\'https://api.moonshot.cn\\\']);
        $chat->completions(
            [
                \\\'model\\\' => \\\'moonshot-v1-8k\\\',
                \\\'stream\\\' => true,
                \\\'messages\\\' => [[\\\'role\\\' => \\\'user\\\', \\\'content\\\' => \\\'Tinywan 你好!\\\']],
            ], [
            \\\'stream\\\' => function($data) use ($connection) {
                // 当openai接口返回数据时转发给浏览器
                $connection->send(new Chunk(json_encode($data, JSON_UNESCAPED_UNICODE) . \\\"\\\\n\\\"));
            },
            \\\'complete\\\' => function($result, $response) use ($connection) {
                // 响应结束时检查是否有错误
                if (isset($result[\\\'error\\\'])) {
                    $connection->send(new Chunk(json_encode($result, JSON_UNESCAPED_UNICODE) . \\\"\\\\n\\\"));
                }
                // 返回空的chunk代表响应结束
                $connection->send(new Chunk(\\\'\\\'));
            },
        ]);
        // 先返回一个http头,后面数据异步返回
        return response()->withHeaders([
            \\\"Transfer-Encoding\\\" => \\\"chunked\\\",
        ]);
    }
}

请求参数

  • apikey : Moonshot开放平台申请到的Key
  • api : Moonshot公开的服务地址 https://api.moonshot.cn
  • model : 模型填写moonshot-v1-8k

以上确认没问题,启动webman

php start.php start

浏览器访问http://127.0.0.1:8117/chat/completions

{\\\"id\\\":\\\"chatcmpl-cdd0f9f085d14ab79e43264bb3d056bb\\\",\\\"object\\\":\\\"chat.completion.chunk\\\",\\\"created\\\":5219720,\\\"model\\\":\\\"moonshot-v1-8k\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"delta\\\":{\\\"role\\\":\\\"assistant\\\",\\\"content\\\":\\\"\\\"},\\\"finish_reason\\\":null}]} 
{\\\"id\\\":\\\"chatcmpl-cdd0f9f085d14ab79e43264bb3d056bb\\\",\\\"object\\\":\\\"chat.completion.chunk\\\",\\\"created\\\":5219720,\\\"model\\\":\\\"moonshot-v1-8k\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"delta\\\":{\\\"content\\\":\\\"你好\\\"},\\\"finish_reason\\\":null}]} 

{\\\"id\\\":\\\"chatcmpl-cdd0f9f085d14ab79e43264bb3d056bb\\\",\\\"object\\\":\\\"chat.completion.chunk\\\",\\\"created\\\":5219720,\\\"model\\\":\\\"moonshot-v1-8k\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"delta\\\":{\\\"content\\\":\\\"!\\\"},\\\"finish_reason\\\":null}]} 

{\\\"id\\\":\\\"chatcmpl-cdd0f9f085d14ab79e43264bb3d056bb\\\",\\\"object\\\":\\\"chat.completion.chunk\\\",\\\"created\\\":5219720,\\\"model\\\":\\\"moonshot-v1-8k\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"delta\\\":{\\\"content\\\":\\\"很高兴\\\"},\\\"finish_reason\\\":null}]} 

{\\\"id\\\":\\\"chatcmpl-cdd0f9f085d14ab79e43264bb3d056bb\\\",\\\"object\\\":\\\"chat.completion.chunk\\\",\\\"created\\\":5219720,\\\"model\\\":\\\"moonshot-v1-8k\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"delta\\\":{\\\"content\\\":\\\"见到\\\"},\\\"finish_reason\\\":null}]} 

{\\\"id\\\":\\\"chatcmpl-cdd0f9f085d14ab79e43264bb3d056bb\\\",\\\"object\\\":\\\"chat.completion.chunk\\\",\\\"created\\\":5219720,\\\"model\\\":\\\"moonshot-v1-8k\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"delta\\\":{\\\"content\\\":\\\"你\\\"},\\\"finish_reason\\\":null}]} 

{\\\"id\\\":\\\"chatcmpl-cdd0f9f085d14ab79e43264bb3d056bb\\\",\\\"object\\\":\\\"chat.completion.chunk\\\",\\\"created\\\":5219720,\\\"model\\\":\\\"moonshot-v1-8k\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"delta\\\":{\\\"content\\\":\\\"。\\\"},\\\"finish_reason\\\":null}]} 

{\\\"id\\\":\\\"chatcmpl-cdd0f9f085d14ab79e43264bb3d056bb\\\",\\\"object\\\":\\\"chat.completion.chunk\\\",\\\"created\\\":5219720,\\\"model\\\":\\\"moonshot-v1-8k\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"delta\\\":{\\\"content\\\":\\\"有什么\\\"},\\\"finish_reason\\\":null}]} 

{\\\"id\\\":\\\"chatcmpl-cdd0f9f085d14ab79e43264bb3d056bb\\\",\\\"object\\\":\\\"chat.completion.chunk\\\",\\\"created\\\":5219720,\\\"model\\\":\\\"moonshot-v1-8k\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"delta\\\":{\\\"content\\\":\\\"我\\\"},\\\"finish_reason\\\":null}]} 

{\\\"id\\\":\\\"chatcmpl-cdd0f9f085d14ab79e43264bb3d056bb\\\",\\\"object\\\":\\\"chat.completion.chunk\\\",\\\"created\\\":5219720,\\\"model\\\":\\\"moonshot-v1-8k\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"delta\\\":{\\\"content\\\":\\\"可以帮助\\\"},\\\"finish_reason\\\":null}]} 

{\\\"id\\\":\\\"chatcmpl-cdd0f9f085d14ab79e43264bb3d056bb\\\",\\\"object\\\":\\\"chat.completion.chunk\\\",\\\"created\\\":5219720,\\\"model\\\":\\\"moonshot-v1-8k\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"delta\\\":{\\\"content\\\":\\\"你的\\\"},\\\"finish_reason\\\":null}]} 

{\\\"id\\\":\\\"chatcmpl-cdd0f9f085d14ab79e43264bb3d056bb\\\",\\\"object\\\":\\\"chat.completion.chunk\\\",\\\"created\\\":5219720,\\\"model\\\":\\\"moonshot-v1-8k\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"delta\\\":{\\\"content\\\":\\\"吗\\\"},\\\"finish_reason\\\":null}]} 

{\\\"id\\\":\\\"chatcmpl-cdd0f9f085d14ab79e43264bb3d056bb\\\",\\\"object\\\":\\\"chat.completion.chunk\\\",\\\"created\\\":5219720,\\\"model\\\":\\\"moonshot-v1-8k\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"delta\\\":{\\\"content\\\":\\\"?\\\"},\\\"finish_reason\\\":null}]} 

{\\\"id\\\":\\\"chatcmpl-cdd0f9f085d14ab79e43264bb3d056bb\\\",\\\"object\\\":\\\"chat.completion.chunk\\\",\\\"created\\\":5219720,\\\"model\\\":\\\"moonshot-v1-8k\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"delta\\\":[],\\\"finish_reason\\\":\\\"stop\\\",\\\"usage\\\":{\\\"prompt_tokens\\\":8,\\\"completion_tokens\\\":12,\\\"total_tokens\\\":20}}]}

截图

Openai 异步客户端接入国产大模型 Kimi

Chat非流式返回

<?php
declare(strict_types=1);

namespace app\\\\controller;

use support\\\\Request;
use support\\\\Response;
use Webman\\\\Openai\\\\Chat;
use Workerman\\\\Protocols\\\\Http\\\\Chunk;

class ChatController
{
    /**
     * @desc completions
     * @param Request $request
     * @return Response
     * @author Tinywan(ShaoBo Wan)
     */
    public function completions(Request $request): Response
    {
        $connection = $request->connection;
        $chat = new Chat([\\\'apikey\\\' => \\\'sk-xxxxxxxxxxxxxxxxxxxxxxx\\\', \\\'api\\\' => \\\'https://api.moonshot.cn\\\']);
        $chat->completions(
            [
                \\\'model\\\' => \\\'moonshot-v1-8k\\\',
                \\\'messages\\\' => [[\\\'role\\\' => \\\'user\\\', \\\'content\\\' => \\\'你好呀!\\\']],
            ], [
            \\\'complete\\\' => function($result, $response) use ($connection) {
                $connection->send(new Chunk(json_encode($result, JSON_UNESCAPED_UNICODE) . \\\"\\\\n\\\"));
                $connection->send(new Chunk(\\\'\\\'));
            },
        ]);
        return response()->withHeaders([
            \\\"Transfer-Encoding\\\" => \\\"chunked\\\",
        ]);
    }
}

浏览器访问http://127.0.0.1:8117/chat/completions

{
    \\\"id\\\": \\\"chatcmpl-778d76fcd9264e73b6ced8f7ffd75f3a\\\",
    \\\"object\\\": \\\"chat.completion\\\",
    \\\"created\\\": 2078947,
    \\\"model\\\": \\\"moonshot-v1-8k\\\",
    \\\"choices\\\": [
        {
            \\\"index\\\": 0,
            \\\"message\\\": {
                \\\"role\\\": \\\"assistant\\\",
                \\\"content\\\": \\\"你好!很高兴和你交流。有什么问题我可以帮你解答吗?\\\"
            },
            \\\"finish_reason\\\": \\\"stop\\\"
        }
    ],
    \\\"usage\\\": {
        \\\"prompt_tokens\\\": 6,
        \\\"completion_tokens\\\": 14,
        \\\"total_tokens\\\": 20
    }
}

截图

原创文章,作者:网络技术联盟站,如若转载,请注明出处:https://www.sudun.com/ask/49886.html

(0)
网络技术联盟站's avatar网络技术联盟站
上一篇 2024年5月14日 下午11:45
下一篇 2024年5月14日 下午11:47

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注