Perl 调用 DeepSeek API 脚本

chat.deepseek.com 提问:请将这个 python 脚本翻译为 perl 语言脚本

参阅:Python 调用 DeepSeek API 完整指南

将 Python 脚本翻译为 Perl 语言脚本时,需要注意两种语言之间的语法差异。以下是将给定的 Python 脚本翻译为 Perl 的版本: test_deepseek_v1.pl

perl 复制代码
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

说明:

  1. 模块导入 :Perl 使用 use 来导入模块,例如 use JSON;use LWP::UserAgent;

  2. 文件操作 :Perl 使用 openclose 来打开和关闭文件。

  3. JSON 处理 :Perl 使用 JSON 模块来处理 JSON 数据。

  4. HTTP 请求 :Perl 使用 LWP::UserAgent 来发送 HTTP 请求。

  5. 异常处理 :Perl 使用 trycatch 来处理异常(需要 Try::Tiny 模块,但在这个例子中简化了异常处理)。

  6. 流式处理:Perl 通过逐行处理响应内容来模拟流式处理。

注意事项:

  • Perl 的 trycatch 语法需要 Try::Tiny 模块,如果没有安装,可以使用 eval 来替代。

  • Perl 的 printflush 操作与 Python 类似,但需要显式调用 flush 来确保数据写入文件。

相关推荐
handsomestWei1 小时前
Docker引擎API接入配置
运维·http·docker·容器·api
AC赳赳老秦4 小时前
OpenClaw数据库高效操作指南:MySQL/PostgreSQL批量处理与数据迁移实战
大数据·数据库·mysql·elasticsearch·postgresql·deepseek·openclaw
weixin_408099674 小时前
【完整教程】天诺脚本如何调用 OCR 文字识别 API?自动识别屏幕文字实战(附代码)
前端·人工智能·后端·ocr·api·天诺脚本·自动识别文字脚本
AC赳赳老秦6 小时前
OpenClaw text-translate技能:多语言批量翻译,解决跨境工作沟通难题
大数据·运维·数据库·人工智能·python·deepseek·openclaw
2501_921649497 小时前
2026个人量化交易免费数据API接入:从选型到实操
经验分享·python·金融·api·个人开发·量化交易
yuhulkjv33511 小时前
ChatGPT Gemini Claude Grok导出的Excel公式失效
人工智能·ai·chatgpt·excel·豆包·deepseek·ai导出鸭
chaofan98013 小时前
2026大模型应用架构选型:如何通过API聚合平台构建企业级AI服务?
人工智能·架构·自动化·api
cTz6FE7gA1 天前
数据结构与算法:大厂面试高频题的深度解析
intellij-idea·perl
ai大模型中转api测评1 天前
告别文字堆砌:Gemini 交互 API 赋能垂直领域,开发者如何重构用户认知?
人工智能·重构·交互·api
chaofan9801 天前
从文字响应到动态沙盒:深度解析 Gemini 交互模拟 API 的技术实现与集成
人工智能·交互·api