通过创建service实现dify的api功能
程序代码中__construct是舒适化,调用了自定义的configservice实现了读取缓存内容。
putwcard实现了dify中对某个知识库的某一个文档进行了段落的添加。
<?php
namespace App\Services;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use App\Services\ConfigService;
class DifyService
{
public function __construct()
{
// 获取缓存中的配置数据
$ConfigService = new ConfigService(); //自己定义的config服务
$configs = $ConfigService->getCachedConfig(); //获取缓存配置数据
// Dify API基本信息
define('DIFY_API_KEY', $configs["AI_api_key"]); //dify的api_key
define('DIFY_ENDPOINT', $configs["AI_api"]); // dify的地址例如 "https://api.dify.ai"
}
/*新增分段
参数说明:
input_text:输入文本
answer_text:答案文本
keywords_list:关键词列表(数组)
dataset_id:知识库ID
document_id:文档ID
*/
public function segments_add($input_text, $answer_text, $keywords_list, $dataset_id, $document_id)
{
$headers = [
'Content-Type: application/json',
'Authorization: Bearer ' . DIFY_API_KEY,
]; //dify标准头
// 构造数组,此内容根据dify实际api需要传递相应数据。
$data = [
'segments' => [
[
'content' => $input_text,
'answer' => $answer_text,
'keywords' => $keywords_list
]
]
];
// 将数组转换为JSON字符串
$data = json_encode($data, JSON_UNESCAPED_UNICODE);
// 初始化cURL会话
$ch = curl_init();
// dump($data);
//dump(DIFY_ENDPOINT . '/datasets/' . DIFY_dataset_id . '/documents/' . DIFY_document_id . '/segments');
// 设置cURL选项
//第三个参数请根据dify实际需要修改。
curl_setopt(
$ch,
CURLOPT_URL,
DIFY_ENDPOINT . '/datasets/' . $dataset_id . '/documents/' . $document_id . '/segments'
);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// 执行cURL会话
$response = curl_exec($ch);
// 关闭cURL会话
curl_close($ch);
//dump($response);
// 解码并处理响应
/*
if ($response !== false) {
$responseData = json_decode($response, true);
if (json_last_error() === JSON_ERROR_NONE) {
dump("知识库查询结果:", $responseData['answer'] ?? "无结果");
} else {
dump("JSON解码错误:", json_last_error_msg());
}
} else {
dump("cURL错误:", curl_error($ch));
}
*/
}
}