AiCommandController.php 2.7 KB
<?php

namespace App\Http\Controllers\Bside\Ai;

use App\Enums\Common\Code;
use App\Helper\Common;
use App\Helper\Translate;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Controllers\Bside\:写入日志;
use App\Models\Ai\AiLog;

class AiCommandController extends BaseController
{
    //获取文本内容
    public $chat_url = 'v2/openai_chat';
    /**
     * @name :ai生成
     * @author :liyuhang
     * @method
     */
    public function ai_http_post(){
        $this->request->validate([
            'keywords'=>['required'],
            'key'=>['required']
        ],[
            'keywords.required' => '关键字不能为空',
            'key.required' => '场景不能为空',
        ]);
        #TODO 通过key获取到ai指令对象
        $data = Common::send_openai_msg($this->chat_url,$this->param);
        $param = [
            'key'=>$this->param['key'],
            'keywords'=>$this->param['keywords'],
            'remark'=>json_encode($data)
        ];
        $this->set_ai_log($param);
        $this->response('success',Code::SUCCESS,$data);
    }

    /**
     * @name :写入日志
     * @author :liyuhang
     * @method
     */
    public function set_ai_log($data){
        //写入日志
        $param = [
            'key'=> $this->param['key'],
            'keywords'=>$this->param['keywords'],
            'remark' =>$data['remark'],
            'operator_id'=>$this->uid
        ];
        $aiLog = new AiLog();
        return $aiLog->add($param);
    }

    /**
     * 处理指令中的参数
     * 语种
     * @param $prompt
     * @param $model_config
     * @param $message
     * @return string|string[]
     */
    public static function promptParamDeal($prompt, $model_config, $message)
    {
        if (FALSE === strpos($prompt, '{lang}')) {
            return $prompt;
        }
        // 没有设置或者没有获取到正确的语种信息 则通过接口获取回复语种
        if (empty($model_config['lang']) || empty(Translate::$tls_list[$model_config['lang']])) {
            $string = is_array($message) ? end($message) : $message;
            $result = Translate::translateSl($string)->json();
            if (FALSE == empty($result['texts']['sl']) && FALSE == empty(Translate::$tls_list[$result['texts']['sl']])) {
                $lang = 'use ' . Translate::$tls_list[$result['texts']['sl']]['lang_en'];
            } else {
                $lang = '';
            }

        } else {
            $lang = Translate::$tls_list[$model_config['lang']]['lang_en'];
            $lang = 'use ' . $lang;
        }
        // 指令中有需要替换语种的地方
        $prompt = str_replace('{lang}', $lang, $prompt);
        return $prompt;
    }
}