first commit
This commit is contained in:
223
digital_doctor/application/api/controller/Tingyiueassistant.php
Normal file
223
digital_doctor/application/api/controller/Tingyiueassistant.php
Normal file
@@ -0,0 +1,223 @@
|
||||
<?php
|
||||
/*
|
||||
* description:
|
||||
* author:wh
|
||||
* email:
|
||||
* createTime:{2024/11/21} {14:14}
|
||||
*/
|
||||
|
||||
namespace app\api\controller;
|
||||
|
||||
|
||||
use app\common\model\TabConf;
|
||||
use GatewayWorker\Lib\Gateway;
|
||||
use think\Db;
|
||||
use wanghua\general_utility_tools_php\gpt\chat\ChatGPT;
|
||||
use wanghua\general_utility_tools_php\Mmodel;
|
||||
use wanghua\general_utility_tools_php\tool\Tools;
|
||||
|
||||
/**
|
||||
* 听译优医助手
|
||||
* Tingyi Youyi Assistant
|
||||
*
|
||||
* Class Tingyiueassistant
|
||||
* @package app\api\controller
|
||||
*/
|
||||
class Tingyiueassistant extends BaseHttpApi
|
||||
{
|
||||
|
||||
/**
|
||||
* desc:听译助手对话,优医助手
|
||||
*
|
||||
* 参数:
|
||||
* type:助手类型,选择助手类型:如疼痛科指导医师【必须】
|
||||
* question :问题【必须】
|
||||
* phone 患者手机号【必须】
|
||||
* doctor 医生手机号【必须】
|
||||
* sessionid 会话id【必须】 从getSayToken接口获得,每次对话之前生成,用于区分不同会话
|
||||
*
|
||||
* 注意:回答完成之后再保存回答记录
|
||||
*
|
||||
* author:wh
|
||||
*/
|
||||
function chatTy(){
|
||||
header('Content-Type: text/event-stream');
|
||||
header('Cache-Control: no-cache');
|
||||
header('Connection: keep-alive');
|
||||
header('X-Accel-Buffering: no');
|
||||
Tools::log_to_write_txt(['input'=>input()]);
|
||||
|
||||
$type = input('type');//选择助手类型
|
||||
if(empty($type)){
|
||||
//return json(Tools::set_fail('type必须,选择助手类型:如疼痛科指导医师'));
|
||||
return Tools::set_event_stream_fail('type必须,选择助手类型:如疼痛科指导医师');
|
||||
}
|
||||
$phone = input('phone');
|
||||
if(empty($phone)){
|
||||
//return json(Tools::set_fail('phone必须'));
|
||||
return Tools::set_event_stream_fail('phone患者手机号必须');
|
||||
}
|
||||
$doctor = input('doctor');
|
||||
if(empty($doctor)){
|
||||
//return json(Tools::set_fail('doctor必须'));
|
||||
return Tools::set_event_stream_fail('doctor医生手机号必须');
|
||||
}
|
||||
$hdruserbaseinfo_id = input('hdruserbaseinfo_id');
|
||||
if(empty($hdruserbaseinfo_id)){
|
||||
//return json(Tools::set_fail('hdruserbaseinfo_id必须'));
|
||||
return Tools::set_event_stream_fail('hdruserbaseinfo_id患者id必须');
|
||||
}
|
||||
//会话id
|
||||
$sessionid = input('sessionid');
|
||||
if(empty($sessionid)){
|
||||
//return json(Tools::set_fail('sessionid必须'));
|
||||
return Tools::set_event_stream_fail('sessionid会话id必须','从getSayToken接口获得,每次对话之前生成,用于区分不同会话');
|
||||
}
|
||||
|
||||
$reportid = input('reportid');//报告id
|
||||
if(empty($reportid)){
|
||||
//return json(Tools::set_fail('reportid必须'));
|
||||
return Tools::set_event_stream_fail('reportid报告id必须');
|
||||
}
|
||||
|
||||
//查询历史对话记录
|
||||
//$records = Db::table(TabConf::$fa_tingyiueassistantchathis)
|
||||
// ->where('sessionid',$sessionid)
|
||||
// ->where('reportid',$reportid)
|
||||
// ->order('id desc')
|
||||
// ->select();
|
||||
|
||||
//ai那边不需要对话记录
|
||||
$qa_history = '';
|
||||
//foreach ($records as $record) {
|
||||
// $qa_history .= "{" . $record['question'] . ":
|
||||
// " . $record['answer'] . "},\n";
|
||||
//}
|
||||
|
||||
|
||||
$ai_config = config('ai_medical_assistant_config');
|
||||
|
||||
$question = input('question','hi');
|
||||
|
||||
$chatobj = new ChatGPT();
|
||||
$chatobj->url = $ai_config['base_url'];
|
||||
$chatobj->model = '';
|
||||
$chatobj->apiKey = $ai_config['APIKey'];
|
||||
|
||||
|
||||
|
||||
$answer_json_arr = [];
|
||||
|
||||
$medical_record = Db::table(TabConf::$fa_tt_medical_report)
|
||||
->where('phone',$phone)
|
||||
->where('hdruserbaseinfo_id',$hdruserbaseinfo_id)
|
||||
->find();
|
||||
|
||||
$medical_record_report_txt = <<<EOF
|
||||
|
||||
患者姓名:{$medical_record['name']}
|
||||
性别:{$medical_record['gender']}
|
||||
年龄:{$medical_record['age']}
|
||||
教育程度:{$medical_record['edu']}
|
||||
职业及年限:{$medical_record['career_year']}
|
||||
体力要求:{$medical_record['power']}
|
||||
经济满意度:{$medical_record['satisfaction']}
|
||||
过往职业及年限:{$medical_record['old_career_year']}
|
||||
过往职业体力要求:{$medical_record['old_career_power']}
|
||||
社会支持度:{$medical_record['support']}
|
||||
居住情况:{$medical_record['live']}
|
||||
家庭关系:{$medical_record['home']}
|
||||
诊断:{$medical_record['diagnosis']}
|
||||
主诉:{$medical_record['main_complaint']}
|
||||
病史:{$medical_record['medical_history']}
|
||||
家族史:{$medical_record['family_history']}
|
||||
月经婚育史:{$medical_record['menstrual_marital_history']}
|
||||
医嘱:{$medical_record['treatment']}
|
||||
|
||||
EOF;
|
||||
|
||||
$config = [
|
||||
'stream'=>true,
|
||||
'chatId'=>$sessionid,
|
||||
'variables'=>[
|
||||
'agent_selection'=>$type,
|
||||
'medical_record'=>$medical_record_report_txt,
|
||||
]
|
||||
];
|
||||
|
||||
|
||||
//$sub_content_msg = [
|
||||
// ["role" => "user", "content" => $question]
|
||||
//];
|
||||
//$chatobj->setBefore($sub_content_msg);
|
||||
|
||||
$chat_content = <<<EOF
|
||||
$question
|
||||
$qa_history
|
||||
EOF;
|
||||
|
||||
$chatobj->chat($chat_content,$config,$answer_json_arr);
|
||||
|
||||
//保存对话记录
|
||||
$data = [
|
||||
'phone'=>$phone,
|
||||
'question'=>$question,
|
||||
'doctor'=>$doctor,
|
||||
'sessionid'=>$sessionid,
|
||||
'reportid'=>$reportid
|
||||
];
|
||||
$record_id = Db::table(TabConf::$fa_tingyiueassistantchathis)
|
||||
->insertGetId($data);
|
||||
|
||||
Tools::log_to_write_txt(['听译助手对话,优医助手请求gpt:'=>$chatobj->post_msg_body,'患者资料'=>$medical_record_report_txt]);
|
||||
Tools::log_to_write_txt(['听译助手对话,优医助手gpt回复:'=>$answer_json_arr]);
|
||||
|
||||
|
||||
//return json(Tools::set_ok('ok',['record_id'=>$record_id]));
|
||||
return Tools::set_event_stream_ok('ok',['record_id'=>$record_id]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存回答记录
|
||||
*
|
||||
* 参数:
|
||||
* record_id:记录id
|
||||
* answer:回答
|
||||
* phone:患者手机号
|
||||
*
|
||||
* author:wh
|
||||
*/
|
||||
function saveAnswer(){
|
||||
return Mmodel::catchJson(function (){
|
||||
$record_id = input('record_id');
|
||||
$answer = input('answer');
|
||||
$phone = input('phone');//患者手机号
|
||||
|
||||
if(empty($record_id)){
|
||||
return Tools::set_fail('record_id必须');
|
||||
}
|
||||
if(empty($answer)){
|
||||
return Tools::set_fail('answer必须');
|
||||
}
|
||||
if(empty($phone)){
|
||||
return Tools::set_fail('患者手机号必须');
|
||||
}
|
||||
$record = Db::table(TabConf::$fa_tingyiueassistantchathis)
|
||||
->where('id',$record_id)
|
||||
->where('phone',$phone)
|
||||
->find();
|
||||
if(empty($record)){
|
||||
return Tools::set_fail('记录不存在');
|
||||
}
|
||||
|
||||
Db::table(TabConf::$fa_tingyiueassistantchathis)
|
||||
->data([
|
||||
'answer'=>$answer,
|
||||
])
|
||||
->where('id',$record_id)
|
||||
->where('phone',$phone)
|
||||
->update();
|
||||
return Tools::set_ok('ok');
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user