Perl调用DeepSeekAPI脚本
- 游戏开发
- 2025-09-18 21:21:01

向 chat.deepseek 提问:请将这个 python 脚本翻译为 perl 语言脚本
参阅:Python 调用 DeepSeek API 完整指南
将 Python 脚本翻译为 Perl 语言脚本时,需要注意两种语言之间的语法差异。以下是将给定的 Python 脚本翻译为 Perl 的版本: test_deepseek_v1.pl
use strict; use warnings; use utf8; use JSON; use LWP::UserAgent; use HTTP::Request::Common; use POSIX qw(strftime); use Encode qw(encode decode); # 保存对话内容到文件 sub save_to_file { my ($file, $content, $is_question) = @_; my $timestamp = strftime("%Y-%m-%d %H:%M:%S", localtime); if ($is_question) { print $file "\n[$timestamp] Question:\n$content\n\n[$timestamp] Answer:\n"; } else { print $file $content; } } # 主函数 sub main { # 配置 my $url = " api.siliconflow /v1/chat/completions"; my $headers = { "Content-Type" => "application/json", "Authorization" => "Bearer YOUR_API_KEY" # 替换为你的 API Key }; # 打开文件用于保存对话 open(my $file, '>>:encoding(UTF-8)', "conversation.txt") or die "无法打开文件: $!"; while (1) { # 获取用户输入 print "\n请输入您的问题 (输入 q 退出): "; my $question = <STDIN>; chomp($question); $question =~ s/^\s+|\s+$//g; if (lc($question) eq 'q') { print "程序已退出\n"; last; } # 保存问题 save_to_file($file, $question, 1); # 准备请求数据 my $data = { "model" => "deepseek-ai/DeepSeek-V3", "messages" => [ { "role" => "user", "content" => $question } ], "stream" => JSON::true, "max_tokens" => 2048, "temperature" => 0.7, "top_p" => 0.7, "top_k" => 50, "frequency_penalty" => 0.5, "n" => 1, "response_format" => { "type" => "text" } }; my $ua = LWP::UserAgent->new; my $request = POST($url, $headers, Content => encode_json($data)); try { # 发送流式请求 my $response = $ua->request($request); if ($response->is_success) { # 处理流式响应 my @lines = split /\n/, $response->decoded_content; foreach my $line (@lines) { if ($line) { if ($line =~ /^data: /) { if ($line eq 'data: [DONE]') { next; } my $json_str = substr($line, 6); # 去掉 'data: ' 前缀 my $content = decode_json($json_str); if ($content->{choices}[0]{delta}{content}) { my $chunk = $content->{choices}[0]{delta}{content}; print $chunk; print $file $chunk; $file->flush(); } } } } # 添加分隔符 print "\n----------------------------------------\n"; print $file "\n----------------------------------------\n"; $file->flush(); } else { die "请求失败: " . $response->status_line; } } catch { my $error_msg = "请求错误: $_\n"; print $error_msg; print $file $error_msg; $file->flush(); } } close($file); } # 执行主函数 main();运行 cmd chcp 65001 perl test_deepseek_v1.pl
说明:模块导入:Perl 使用 use 来导入模块,例如 use JSON; 和 use LWP::UserAgent;。
文件操作:Perl 使用 open 和 close 来打开和关闭文件。
JSON 处理:Perl 使用 JSON 模块来处理 JSON 数据。
HTTP 请求:Perl 使用 LWP::UserAgent 来发送 HTTP 请求。
异常处理:Perl 使用 try 和 catch 来处理异常(需要 Try::Tiny 模块,但在这个例子中简化了异常处理)。
流式处理:Perl 通过逐行处理响应内容来模拟流式处理。
注意事项:Perl 的 try 和 catch 语法需要 Try::Tiny 模块,如果没有安装,可以使用 eval 来替代。
Perl 的 print 和 flush 操作与 Python 类似,但需要显式调用 flush 来确保数据写入文件。
Perl调用DeepSeekAPI脚本由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Perl调用DeepSeekAPI脚本”