企业网站建设系统百度在线客服人工服务
向 chat.deepseek.com 提问:请将这个 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 = "https://api.siliconflow.cn/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
来确保数据写入文件。