janfish/underwrite-agent

承保条件分析SDK

Installs: 4

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/janfish/underwrite-agent

dev-main 2025-12-30 08:00 UTC

This package is not auto-updated.

Last update: 2025-12-31 00:06:09 UTC


README

一个用于承保条件分析的 PHP SDK,基于 Dify 工作流 API 实现。该 SDK 提供单次和批量分析功能,帮助用户快速评估保险承保条件。

功能特性

  • 单次承保条件分析
  • 批量承保条件分析(异步协程实现)
  • 完整的错误处理机制
  • 可配置的超时设置
  • JSON 格式化结果返回

安装

使用 Composer 安装:

composer require janfish/underwrite-agent

环境要求

  • PHP >= 7.4
  • Guzzle HTTP Client >= 7.0
  • Dify 工作流 API 访问权限

配置

在使用 SDK 之前,您需要:

  1. 部署或访问 Dify 实例
  2. 创建工作流用于承保条件分析
  3. 获取 API 密钥

快速开始

单次分析

<?php

require_once 'vendor/autoload.php';

use Janfish\UnderwriteAgent\UnderwriteAgent;
use Janfish\UnderwriteAgent\Exception\Exception;
use Janfish\UnderwriteAgent\Exception\RuntimeException;

// 初始化SDK
$baseUrl = 'https://your-dify-instance.com'; // 您的Dify实例地址
$apiKey = 'your-api-key'; // 您的API密钥

try {
    $agent = new UnderwriteAgent($baseUrl, $apiKey, ['timeout' => 120]);

    // 设置分析参数
    $params = [
        'company' => '中意',
        'type' => '套单',
        'car' => '燃油 旧车',
        'region' => '只保:川C,E,F,B,H,J,L,Z,X,S,Y,A,G',
        'policy' => '续保,家自车,套单,非过户,含车损车龄10年以内;无车损车龄15年以内; 川F费用20%,交强3%',
        'agentPolicy' => '续保,家自车,套单,非过户,含车损车龄10年以内;无车损车龄15年以内; 川F费用20%,交强3%',
        'VCIAgentRate' => '0.25',
        'TCIAgentRate' => '0.25',
        'NCAgentRate' => '0',
        'TCIRate' => '0.23',
        'VCIRate' => '0.23',
        'NCRate' => '0'
    ];

    // 执行单次分析
    $result = $agent->analyze($params, 'test-user');
    print_r($result);

} catch (Exception $e) {
    echo "业务异常: " . $e->getMessage() . "\n";
} catch (RuntimeException $e) {
    echo "系统异常: " . $e->getMessage() . "\n";
} catch (\Exception $e) {
    echo "未知异常: " . $e->getMessage() . "\n";
}

批量分析

<?php

require_once 'vendor/autoload.php';

use Janfish\UnderwriteAgent\UnderwriteAgent;
use Janfish\UnderwriteAgent\Exception\Exception;
use Janfish\UnderwriteAgent\Exception\RuntimeException;

// 初始化SDK
$baseUrl = 'https://your-dify-instance.com';
$apiKey = 'your-api-key';

try {
    $agent = new UnderwriteAgent($baseUrl, $apiKey, ['timeout' => 120]);

    // 准备批量请求
    $requests = [
        [
            'params' => [
                'company' => '中意',
                'type' => '套单',
                'car' => '燃油 旧车',
                'region' => '只保:川C,E,F,B,H,J,L,Z,X,S,Y,A,G',
                'policy' => '续保,家自车,套单,非过户,含车损车龄10年以内;无车损车龄15年以内; 川F费用20%,交强3%',
                'agentPolicy' => '续保,家自车,套单,非过户,含车损车龄10年以内;无车损车龄15年以内; 川F费用20%,交强3%',
                'VCIAgentRate' => '0.25',
                'TCIAgentRate' => '0.25',
                'NCAgentRate' => '0',
                'TCIRate' => '0.23',
                'VCIRate' => '0.23',
                'NCRate' => '0'
            ],
            'user' => 'batch-user-1'
        ],
        [
            'params' => [
                'company' => '平安',
                'type' => '新车',
                'car' => '新能源 新车',
                'region' => '全国',
                'policy' => '新车,家自车,首保',
                'agentPolicy' => '新车,家自车,首保',
                'VCIAgentRate' => '0.3',
                'TCIAgentRate' => '0.25',
                'NCAgentRate' => '0.05',
                'TCIRate' => '0.23',
                'VCIRate' => '0.23',
                'NCRate' => '0.05'
            ],
            'user' => 'batch-user-2'
        ]
    ];

    // 执行批量分析
    $batchResult = $agent->batchAnalyze($requests);

    foreach ($batchResult as $result) {
        if ($result['success']) {
            echo "请求 " . $result['index'] . " 成功:\n";
            print_r($result['data']);
        } else {
            echo "请求 " . $result['index'] . " 失败: " . $result['error'] . "\n";
        }
    }

} catch (Exception $e) {
    echo "业务异常: " . $e->getMessage() . "\n";
} catch (RuntimeException $e) {
    echo "系统异常: " . $e->getMessage() . "\n";
} catch (\Exception $e) {
    echo "未知异常: " . $e->getMessage() . "\n";
}

综合分析

<?php

require_once 'vendor/autoload.php';

use Janfish\UnderwriteAgent\UnderwriteAgent;
use Janfish\UnderwriteAgent\Exception\Exception;
use Janfish\UnderwriteAgent\Exception\RuntimeException;

// 初始化SDK
$baseUrl = 'https://your-dify-instance.com';
$apiKey = 'your-api-key';

try {
    $agent = new UnderwriteAgent($baseUrl, $apiKey, ['timeout' => 120]);

    // 准备批量请求
    $requests = [
        [
            'params' => [
                'company' => '中意',
                'type' => '套单',
                'car' => '燃油 旧车',
                'region' => '只保:川C,E,F,B,H,J,L,Z,X,S,Y,A,G',
                'policy' => '续保,家自车,套单,非过户,含车损车龄10年以内;无车损车龄15年以内; 川F费用20%,交强3%',
                'agentPolicy' => '续保,家自车,套单,非过户,含车损车龄10年以内;无车损车龄15年以内; 川F费用20%,交强3%',
                'VCIAgentRate' => '0.25',
                'TCIAgentRate' => '0.25',
                'NCAgentRate' => '0',
                'TCIRate' => '0.23',
                'VCIRate' => '0.23',
                'NCRate' => '0'
            ],
            'user' => 'batch-user-1'
        ],
        [
            'params' => [
                'company' => '平安',
                'type' => '新车',
                'car' => '新能源 新车',
                'region' => '全国',
                'policy' => '新车,家自车,首保',
                'agentPolicy' => '新车,家自车,首保',
                'VCIAgentRate' => '0.3',
                'TCIAgentRate' => '0.25',
                'NCAgentRate' => '0.05',
                'TCIRate' => '0.23',
                'VCIRate' => '0.23',
                'NCRate' => '0.05'
            ],
            'user' => 'batch-user-2'
        ]
    ];

    // 执行综合分析
    $compositeResult = $agent->compositeAnalyze($requests);
    print_r($compositeResult);

} catch (Exception $e) {
    echo "业务异常: " . $e->getMessage() . "\n";
} catch (RuntimeException $e) {
    echo "系统异常: " . $e->getMessage() . "\n";
} catch (\Exception $e) {
    echo "未知异常: " . $e->getMessage() . "\n";
}

API 方法

analyze(array $params, string $user = 'default'): array

执行单次承保条件分析

  • $params: 分析参数数组,包含以下字段:
    • company: 保险公司名称
    • type: 保单类型
    • car: 车辆类型
    • region: 承保区域
    • policy: 保单政策
    • agentPolicy: 代理人政策
    • VCIAgentRate: 车损险代理费率
    • TCIAgentRate: 三者险代理费率
    • NCAgentRate: 无法找到代理费率
    • TCIRate: 三者险费率
    • VCIRate: 车损险费率
    • NCRate: 无法找到费率
  • $user: 用户标识(可选,默认为'default')

返回值:解析后的业务数据(JSON 格式化后的内容)

batchAnalyze(array $requests, int $concurrency = 5): array

执行批量承保条件分析clear

并发请求分析多个承保信息

  • $requests: 请求数组,每个元素包含paramsuser字段
  • $concurrency: 并发数限制,默认为5

返回值:包含每个请求结果的数组,每个元素包含:

  • index: 请求索引
  • success: 是否成功
  • error: 错误信息(失败时)
  • data: 解析后的业务数据(成功时)

compositeAnalyze(array $requests): array

执行综合承保条件分析

区别于batchAnalyze,综合承保条件分析是将多组承保条件交给大模型一次分析完成,前者则是多次请求大模型实现,综合承保条件分析执行速度更快

  • $requests: 请求数组,每个元素包含paramsuser字段

返回值:解析后的业务数据(JSON 格式化后的内容)

配置选项

SDK 支持以下配置选项:

  • timeout: 请求超时时间(秒),默认 120 秒
$agent = new UnderwriteAgent($baseUrl, $apiKey, [
    'timeout' => 180  // 设置为180秒超时
]);

返回值格式

SDK 方法返回 API 响应中outputs.output字段 JSON 格式化后的数据。具体格式取决于您的 Dify 工作流配置。

错误处理

SDK 提供两种异常类型:

  • Janfish\UnderwriteAgent\Exception\Exception: 业务异常
  • Janfish\UnderwriteAgent\Exception\RuntimeException: 系统异常

开发与测试

项目包含以下演示文件:

  • demo/index.php: 主要演示文件