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

相关推荐
AlfredZhao5 小时前
如何在Oracle Agent Factory中配置国内厂商的LLM?
deepseek·agent factory·paf
大模型真好玩9 小时前
大模型训练全流程实战指南工具篇(十二)—— 大模型评测方法及典型评测集介绍
人工智能·agent·deepseek
prog_61039 小时前
【笔记】用cursor手搓cursor(六)deepseek v4
人工智能·笔记·agent·deepseek·claude code
jianwuhuang8212 小时前
Kimi怎么导出pdf
人工智能·chatgpt·pdf·deepseek·ai导出鸭
华万通信king13 小时前
DocuSign Webhook事件通知开发实战:合同状态变更实时推送
api·系统对接·docusign
这是谁的博客?13 小时前
[模型解析] DeepSeek: 技术创新与架构解析
ai·架构·大模型·moe·开源模型·deepseek·国产ai
wujian831114 小时前
怎么把Kimi里的表格完整复制到wps内
人工智能·ai·wps·豆包·deepseek·ai导出鸭
DO_Community14 小时前
Token聚合平台 vs 传统云 vs AI原生云,AI推理应用怎么选?
人工智能·agent·token·ai-native·deepseek
YDS8291 天前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
叫我少年1 天前
ASP.NET Core 最小 API 快速参考
.net·api