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 使用 open 和 close 来打开和关闭文件。

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

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

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

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

注意事项:

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

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

相关推荐
用户956256254292 小时前
15 分钟社媒简报 Agent:我只用了搜索和模型两步
python·api
逐梦苍穹4 小时前
DeepInfer 推理框架源码精讲:逐行读 DeepSeek 开源的推理引擎(2 小时 20 分视频+文字版)
人工智能·开源·ai编程·deepseek·claudecode·deepinfer·deepseekinfer
java_logo19 小时前
Docker 部署 DeepSeek Harness(moelin):轻松搭建带登录的本地 AI Agent 平台
运维·docker·容器·ai agent·deepseek·harness·轩辕镜像
AI_Gump1 天前
Harness篇|DeepSeek Harness 上手机:五条安卓移植路线与 App 内 Linux 拆解
android·linux·人工智能·智能手机·deepseek
2601_967987371 天前
Sqlite参考手册
数据库·python·sqlite·api·教程
飞哥数智坊2 天前
打造自己的 Personal Agent,从抄大肥鱼作业开始
人工智能·deepseek
东风微鸣2 天前
把 DeepSeek Harness 装进 K8s
kubernetes·deepseek·harness
Tokenfree2 天前
一次死循环烧掉 340 块:LLM 网关的限流与熔断该怎么做
llm·api
我才是银古3 天前
把视频生产做成一条可验证的流水线
视频·视频制作·deepseek·dsh·dsh插件
_砖家3 天前
DeepSeek Harness 原来还是我们熟悉的 Webpack 和中间件模型
agent·ai编程·deepseek