AiTranslateController.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Support\Facades\Http;
  5. use Illuminate\Support\Facades\Log;
  6. use App\Models\PaliText;
  7. class AiTranslateController extends Controller
  8. {
  9. /**
  10. * Display a listing of the resource.
  11. *
  12. * @return \Illuminate\Http\Response
  13. */
  14. public function index()
  15. {
  16. }
  17. /**
  18. * Store a newly created resource in storage.
  19. *
  20. * @param \Illuminate\Http\Request $request
  21. * @return \Illuminate\Http\Response
  22. */
  23. public function store(Request $request)
  24. {
  25. //
  26. return $this->fetch(strip_tags($request->get('origin')));
  27. }
  28. private function fetch($origin,$engin='kimi',$prompt_pre='',$prompt_suf='请翻译上述巴利文。'){
  29. $api = config('mint.ai.accounts');
  30. $selected = array_filter($api,function($value) use($engin){
  31. return $value['name']===$engin;
  32. });
  33. if(!is_array($selected) || count($selected)===0){
  34. return $this->error('no engin name',200,200);
  35. }
  36. $url = $selected[0]['api_url'];
  37. $param = [
  38. "model" => $selected[0]['model'],
  39. "messages" => [
  40. ["role" => "system","content" => "你是翻译人工智能助手,bhikkhu 为专有名词,不可翻译成其他语言。"],
  41. ["role" => "user","content" => "{$prompt_pre}{$origin}\n{$prompt_suf}"],
  42. ],
  43. "temperature" => 0.3,
  44. ];
  45. $response = Http::withToken('sk-kwjHIMh3PoWwUwQyKdT3KHvNe8Es19SUiujGrxtH09uDQCui')
  46. ->post($url,$param);
  47. if($response->failed()){
  48. $this->error('http request error'.$response->json('message'));
  49. Log::error('http request error', ['data'=>$response->json()]);
  50. return $this->error($response->json(),200,200);
  51. }else{
  52. return $this->ok($response->json());
  53. }
  54. }
  55. /**
  56. * Display the specified resource.
  57. *
  58. * @param string $id
  59. * @return \Illuminate\Http\Response
  60. */
  61. public function show(Request $request,$id)
  62. {
  63. //
  64. $para = explode('-',$id);
  65. if(count($para) >= 2){
  66. $content = PaliText::where('book',$para[0])
  67. ->where('paragraph',$para[1])
  68. ->value('text');
  69. if(!empty($content)){
  70. return $this->fetch($content,$request->get('engin',config('mint.ai.default')));
  71. }else{
  72. return $this->error('no content',200,200);
  73. }
  74. }else{
  75. return $this->error('参数错误',403,403);
  76. }
  77. }
  78. /**
  79. * Update the specified resource in storage.
  80. *
  81. * @param \Illuminate\Http\Request $request
  82. * @param int $id
  83. * @return \Illuminate\Http\Response
  84. */
  85. public function update(Request $request, $id)
  86. {
  87. //
  88. }
  89. /**
  90. * Remove the specified resource from storage.
  91. *
  92. * @param int $id
  93. * @return \Illuminate\Http\Response
  94. */
  95. public function destroy($id)
  96. {
  97. //
  98. }
  99. }