websystems/web-prompt-creator-bundle

为 Symfony 开发的 OpenAI 提示创建器

安装: 40

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 0

开放问题: 1

语言:Vue

类型:symfony-bundle

0.0.14 2024-06-19 13:10 UTC

This package is auto-updated.

Last update: 2024-09-05 18:17:32 UTC


README

for Symfony & EasyAdmin

WPC 是 OpenAi(或其他)提示的拖放式构建器。

webpromptcreator

通过 WPC,您可以设计复杂的提示,这些提示可以在最终响应之前发送多个请求

要求

安装

安装 WPC

composer require websystems/web-prompt-creator-bundle

创建服务,该服务将覆盖输入数据 $options 将在输入小部件中使用,并在发送到 AI 之前更新值

namespace App\Service;

use Websystems\WebPromptCreatorBundle\PromptInputOptions\PromptInputOptions;

class PromptInputOptionsService extends PromptInputOptions
{
    public function configureOptions(): array
    {
        $options = [
            'input_content' => '',
            'other_input_data' => '',
        ];

        return $options;
    }
}

配置 EasyAdmin crud 控制器,并添加名为 "Add PromptField" 的服务,并将自定义选项 "input" 与服务选项一起设置

    public function __construct(
        ...
        private PromptInputOptionsService $promptInputOptionsService,
    )
    {
    }
    ...
    public function configureFields(string $pageName): iterable
    {
        return [
            PromptField::new('prompt')
                ->setCustomOption("input", $this->promptInputOptionsService->getInputOptions())->hideOnIndex(),        

在 templates/admin 中创建此字段的覆盖模板,例如。 web_prompt_creator.html.twig 在 {% block _Prompt_prompt_widget %} 提示是实体名称,_prompt 是实体属性名称参数

  • element_hidden - 如果 true 则块将显示 <input type="hidden"... 字段,如果 false 则 <textarea>
  • element_value - 字段值
  • element_id - 字段 id
  • element_name - 字段名称
  • input - 您的服务中的 "input" 数据
{% block _Prompt_prompt_widget %}
    <div {{ vue_component('WebPromptCreator', {
        'element_hidden': true,
        'element_value': form.vars.value, 
        'element_id': form.vars.id, 
        'element_name': form.vars.full_name, 
        'input': form.vars.ea_vars.field.customOptions.get('input'),
        }) 
    }}></div>
{% endblock %}

将表单主题添加到 crud 控制器

    public function configureCrud(Crud $crud): Crud
    {
        return $crud
            ->setFormThemes(['admin/web_prompt_creator.html.twig', '@EasyAdmin/crud/form_theme.html.twig'])
        ;
    }   

通过添加 js 和 css 文件配置资源

    ...
    use Websystems\WebPromptCreatorBundle\Asset\AssetPackage;
    ...
    public function __construct(
        ...
        protected RequestStack $requestStack,
    )
    {
    }
    ...
    public function configureAssets(Assets $assets): Assets
    {
        $assetPackage = new AssetPackage($this->requestStack);

        return $assets
            ->addJsFile($assetPackage->getUrl('437.js'))
            ->addJsFile($assetPackage->getUrl('runtime.js'))
            ->addJsFile($assetPackage->getUrl('builder.js'))
            ->addCssFile($assetPackage->getUrl('437.css'))
            ->addCssFile($assetPackage->getUrl('builder.css'))
        ;
    }   

使用方法

WPC 创建存储在数据库中的 JSON 数据。有一些函数可以处理此 JSON 并处理最终响应。

如果您有一个用于向 AI 发送请求的 API 类,则它必须实现接口

...
use Websystems\WebPromptCreatorBundle\AiInterface;

class OpenAi implements AiInterface
{
    public function supports($type): bool
    {
        return is_a($this, $type, true);
    }   

    public function send(array $messages): ?array
    {
        ...
        
        return [
            'content' => $response['choices'][0]['message']['content'],
            'data' => $response,
        ];        
    }

如果您想在控制器中处理,则必须使用依赖注入来获取服务

    ...
    public function __construct(
        private OpenAi $openAi,
        private WebPromptCreator $webPromptCreator,
        private PromptInputOptionsService $promptInputOptionsService,
    )
    {
    }

并将重要内容添加到 webPromptCreator 实例中 createRequests() - 将发送请求到 ai 并处理所有内容

        $json = $someRepository->find(...)
        $contentToProcess = "Some content to process";

        $this->webPromptCreator->setPromptData(json_decode($json, true));
        $this->webPromptCreator->setAiService($this->openAi);
        $this->promptInputOptionsService->updateOptionByKey('input_content', $contentToProcess);
        ...
        $this->webPromptCreator->setInputData($this->promptInputOptionsService);
        $this->webPromptCreator->createRequests();

读取最终响应

$this->webPromptCreator->getFinalResponse();

通过请求的 UID 读取响应

getResponseOfRequestByUid($uid)

通过请求小部件的 UID 读取响应数据

getResponseDataOfRequestByUid($uid)
getRequestCollection()
getPromptRequestCollectionAsArrayConversation(bool $withAnswers = false)

showDummyCoversation 与 createRequests() 类似,但不会向 AI 发送请求并创建带有模拟数据的 PromptRequestCollection

showDummyCoversation(string $responseText = "This is a dummy response")