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 来确保数据写入文件。

相关推荐
用户2680013791910 小时前
淘宝评论API获取JSON数据全流程指南
api
文 丰17 小时前
【openEuler 24.03 LTS SP2】真实实验部署ollama0.11.6+deepseekR1:1.5b+open-webUI
centos·deepseek
RestCloud1 天前
数据集成平台怎么选?从ETL到CDC再到iPaaS的全景对比
api
RestCloud1 天前
企业为什么需要一款 ETL 集成平台?五大痛点解析
api
蓝倾2 天前
利用API接口合规获取淘宝店铺所有商品实战案例(2025年最新版)
api·fastapi
Ai尚研修-贾莲2 天前
全链路自主构建智慧科研写作系统——融合LLM语义理解、多智能体任务协同与n8n自动化工作流构建
人工智能·agent·智能体·deepseek·n8n·智慧科研写作·llm语义理解
小豆包api2 天前
小豆包AI API × Nano Banana:3D手办 + AI视频生成,「动起来」的神级玩法!
前端·api
RestCloud2 天前
iPaaS 如何帮助 CIO 减少 50% 的集成成本?
api
RestCloud2 天前
零代码集成真的靠谱吗?ETL平台的背后技术揭秘
api
AI大模型2 天前
基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
docker·llm·deepseek