Win10环境使用ChatBox集成Deep Seek解锁更多玩法

Win10环境使用ChatBox集成Deep Seek解锁更多玩法

前言

之前部署了14b的Deep Seek小模型,已经验证了命令行及接口方式的可行性。但是纯命令行或者PostMan方式调用接口显然不是那么友好:

https://lizhiyong.blog.csdn.net/article/details/145505686

纯命令行能实现的也就一个简单的聊天机器人。接口方式开发一个后端应用系统也不是一时半会儿就能完成的事情。。。

但实际上Deep Seek能做的远不止这些【可以实现长对话、文件识别等好玩惊奇的功能】。故笔者要集成更多组件!!!

参照官网:

https://github.com/deepseek-ai/awesome-deepseek-integration/blob/main/README_cn.md

显然Deep Seek可以不限于集成如下组件:

故笔者先集成Chatbox试试。别人可能集成的是Open WebUI

https://www.openwebui.com/

这个需要python或者docker环境。Chatbox有C/S的客户端版本,也有B/S的网页版本:

https://chatboxai.app/zh

笔者选用客户端版本,后续对外暴露服务租给别人使用也方便!!!

OLLAMA配置

参考官方文档:

https://github.com/ollama/ollama/blob/main/docs/faq.md#how-do-i-configure-ollama-server

需要配置的环境变量有:

环境变量 说明
OLLAMA_ORIGINS * 允许所有IP访问
OLLAMA_HOST 0.0.0.0:11434或0.0.0.0 访问的IP+端口,没有改默认端口就可以只配置ip
OLLAMA_MODELS C:\Users%username%.ollama\models mac:~/.ollama/models,Linux:/usr/share/ollama/.ollama/models,Windows:C:\Users%username%.ollama\models 没有改默认模型存放位置的可以不配

配置完成后需要重启电脑来生效:

重启后就可以配置Chatbox!!!

配置Chatbox

参考官网文档:

https://chatboxai.app/zh/help-center/connect-chatbox-remote-ollama-service-guide

客户端和网页版大同小异:

在设置中选择使用自己的API Key或本地模型,然后当然是选择Ollama API

就会非常智能地判断出本地已经部署了2个模型。因为是一个OLLAMA部署的2个模型,后续可以自由切换!!!

还可以配置语言等信息!!!

验证

随便提问一下:

可以看到Chatbox已经自动拉起了OLLAMA的1.5b小模型!!!至此可以不需要命令,直接在界面操作了!!!

使用Deep Seek模型写代码

选择一个搭档:

可以看到这里有很多搭档,笔者选个IT专家试试:

这种情况一定要选择稍微大一点的小模型!!!否则会答非所问。。。模型越大,结果越接近真相!!!

提问

以一个常见的数据集成案例:

java 复制代码
使用Java写代码,把主集群hive表数据同步到另一个租户集群

word count: 24, token count: 33, time: 22:32

可以看出由于显卡的CUDA性能不好,速度很慢!!!

推理

java 复制代码
Thinking
<think>
好的,我现在需要帮用户解决如何用Java编写代码,将主集群的Hive表数据同步到另一个租户集群的问题。之前已经给出了一步步的解决方案,现在用户直接要求写代码。

首先,我得回顾一下之前的对话。上一次,用户询问了整体步骤,我给出了10个大步骤,包括建立连接、导出数据、传输数据等。这次用户更具体,想要Java代码实现这些步骤。

那我应该怎么做呢?首先,我需要明确每个步骤对应的代码部分。比如,如何在Java中使用JDBC连接Hive,这可能涉及到加载驱动和获取数据库连接。然后是执行SQL语句导出数据到本地文件,接着传输这个文件到目标集群的存储位置,最后再导入到目标Hive表中。

我还需要考虑用户可能对代码的具体实现不太熟悉,所以要详细写出每个部分的代码示例。比如,如何处理ResultSet,如何写数据到本地文件,以及如何使用scp上传文件。

另外,用户可能需要自动化脚本,所以我会建议将这些步骤整合到一个Java程序中,并添加日志记录和异常处理机制。这部分很重要,因为可以确保在出现问题时能够及时发现并解决。

还有,权限问题也不能忽视,虽然代码部分可能不直接处理ACL设置,但可以在注释或说明中提到需要手动配置或后续脚本处理。

最后,测试与验证是关键步骤,应该提醒用户在生产环境部署前进行充分的测试,并考虑监控和维护措施。

总的来说,我需要用简单易懂的语言,分点解释每个部分的代码实现,同时结合之前提供的整体步骤,帮助用户顺利完成数据同步的任务。
</think>

看起来头头是道。。。

代码生成

以下是使用 Java 实现将主集群 Hive 表数据同步到另一个租户集群的代码示例。这个代码基于 JDBC 连接 Hive,并完成数据导出和导入。

1. 添加依赖

pom.xml 中添加以下依赖(如果使用 Maven):

xml 复制代码
XML<dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-jdbc</artifactId>
    <version>2.3.7</version>
</dependency>

2. 导出数据到本地文件

java 复制代码
JAVAimport java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class HiveDataSynchronizer {

    public static void main(String[] args) {
        try {
            // 连接到源集群(主集群)
            String sourceHiveJdbcUrl = "jdbc:hive2://source_cluster_ip:10000/default";
            String sourceUsername = "admin";
            String sourcePassword = "password";

            Connection sourceConnection = DriverManager.getConnection(sourceHiveJdbcUrl, sourceUsername, sourcePassword);

            // 连接到目标集群(租户集群)
            String targetHiveJdbcUrl = "jdbc:hive2://target_cluster_ip:10000/default";
            String targetUsername = "admin";
            String targetPassword = "password";

            Connection targetConnection = DriverManager.getConnection(targetHiveJdbcUrl, targetUsername, targetPassword);

            // 导出数据到本地文件
            String exportQuery = "INSERT OVERWRITE LOCAL DIRECTORY '/tmp/exported_data' SELECT * FROM your_table_name;";
            Statement sourceStmt = sourceConnection.createStatement();
            sourceStmt.execute(exportQuery);
            sourceStmt.close();

            System.out.println("Data exported to local directory: /tmp/exported_data");

            // 关闭连接
            sourceConnection.close();
            targetConnection.close();

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    private static void uploadFilesToTargetCluster(String filePath, String remotePath) {
        try {
            // 使用 SCP 或 SFTP 上传文件到目标集群的存储路径
            // 示例:使用 java-nio-sftp 库或其他工具
            System.out.println("Uploading files to target cluster...");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void importDataToTargetHive(String filePath, Connection targetConnection) {
        try {
            String importQuery = "LOAD DATA INPATH '" + filePath + "' INTO TABLE your_target_table_name;";
            Statement targetStmt = targetConnection.createStatement();
            targetStmt.execute(importQuery);
            targetStmt.close();

            System.out.println("Data imported to target Hive table successfully");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}

3. 使用工具上传文件到目标集群

在实际项目中,可以使用 scp 或其他工具将导出的文件传输到目标集群。以下是上传文件到目标集群的代码示例:

java 复制代码
JAVAimport com.jcraft.jsch.Channel;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

public class FileUploader {

    public static void uploadFile(String localFilePath, String remoteFilePath, String host, String username, String password) {
        try {
            JSch jsch = new JSch();
            Session session = jsch.getSession(username, host);
            session.setPassword(password);
            session.setConfig("StrictHostKeyChecking", "no");
            session.connect();

            Channel channel = session.openChannel("sftp");
            channel.connect();

            // 建立 SFTP 通道
            com.jcraft.jsch.ChannelSftp cschannel = (com.jcraft.jsch.ChannelSftp) channel;
            cschannel.put(localFilePath, remoteFilePath);

            System.out.println("File uploaded successfully!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

4. 整合所有步骤到一个主程序

java 复制代码
JAVAimport java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class HiveDataSynchronizer {

    public static void main(String[] args) {
        try {
            // 连接到源集群(主集群)
            String sourceHiveJdbcUrl = "jdbc:hive2://source_cluster_ip:10000/default";
            String sourceUsername = "admin";
            String sourcePassword = "password";

            Connection sourceConnection = DriverManager.getConnection(sourceHiveJdbcUrl, sourceUsername, sourcePassword);

            // 导出数据到本地文件
            String exportQuery = "INSERT OVERWRITE LOCAL DIRECTORY '/tmp/exported_data' SELECT * FROM your_table_name;";
            Statement sourceStmt = sourceConnection.createStatement();
            sourceStmt.execute(exportQuery);
            sourceStmt.close();

            System.out.println("Data exported to local directory: /tmp/exported_data");

            // 上传文件到目标集群
            String filePath = "/tmp/exported_data";
            String remoteFilePath = "/path/to/remote/directory";
            uploadFilesToTargetCluster(filePath, remoteFilePath);

            // 连接到目标集群(租户集群)
            String targetHiveJdbcUrl = "jdbc:hive2://target_cluster_ip:10000/default";
            String targetUsername = "admin";
            String targetPassword = "password";

            Connection targetConnection = DriverManager.getConnection(targetHiveJdbcUrl, targetUsername, targetPassword);

            // 导入数据到目标 Hive 表
            importDataToTargetHive(remoteFilePath, targetConnection);

            System.out.println("Synchronization completed successfully!");

            // 关闭连接
            sourceConnection.close();
            targetConnection.close();

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    private static void uploadFilesToTargetCluster(String filePath, String remotePath) {
        try {
            // 示例:使用 SCP 上传文件到目标集群
            FileUploader.uploadFile(filePath + "/*", remotePath, "target_cluster_ip", "admin", "password");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void importDataToTargetHive(String filePath, Connection targetConnection) {
        try {
            String importQuery = "LOAD DATA INPATH '" + filePath + "' INTO TABLE your_target_table_name;";
            Statement targetStmt = targetConnection.createStatement();
            targetStmt.execute(importQuery);
            targetStmt.close();

            System.out.println("Data imported to target Hive table successfully");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}

说明

  1. 连接到源集群和目标集群:使用 JDBC 连接到 Hive 集群。
  2. 导出数据到本地文件 :使用 INSERT OVERWRITE LOCAL DIRECTORY 将数据导出到本地目录。
  3. 上传文件到目标集群:使用 SFTP 或其他工具将文件上传到目标集群的存储路径。
  4. 导入数据到目标 Hive 表 :使用 LOAD DATA INPATH 将文件导入到目标 Hive 表中。

注意事项

  1. 需要确保目标集群的安全性,避免敏感信息泄露。
  2. 根据实际需求调整上传工具和路径。
  3. 确保 Hive 表结构与源表一致或进行适当的转换。

word count: 927, token count: 1681, tokens used: 2473, model: Ollama (deepseek-r1:14b), time: 22:34

结论

虽然给出的答案并不优雅,但是离线方式使用不知今夕是何年用了古老的依赖包也情有可原,逻辑基本正确。。。总体来看,已经相当于一个大数据学徒工该有的水平了。。。如果显存大一些跑671b可能结果要满意很多。。。

目前来看,本地部署的14b小模型如果部署在内网,对开发人员和运维人员的生产力会有不小的帮助。。。

但是外网开发的场景,显然使用可联网搜索、已特异化训练过的大模型Agent辅助编程要更合适。

转载请注明出处:https://lizhiyong.blog.csdn.net/article/details/145524481

相关推荐
KaneLogger32 分钟前
【翻译】打造 Agent Skills 的最佳实践
agent·ai编程·claude
王小酱38 分钟前
Everything Claude Code 文档
openai·ai编程·aiops
雮尘2 小时前
如何在非 Claude IDE (TARE、 Cursor、Antigravity 等)下使用 Agent Skills
前端·agent·ai编程
刘贺同学2 小时前
Day12-龙虾哥打工日记:OpenClaw 子 Agent 到底看到了什么?
aigc·ai编程
程序员鱼皮4 小时前
离大谱,我竟然在 VS Code 里做了个视频!
github·aigc·ai编程
Kayshen6 小时前
我用纯前端逆向了 Figma 的二进制文件格式,实现了 .fig 文件的完整解析和导入
前端·agent·ai编程
wangruofeng6 小时前
OpenClaw 飞书机器人不回复消息?3 小时踩坑总结
ai编程
恋猫de小郭7 小时前
AI 正在造就你的「认知卸载」,但是时代如此
前端·人工智能·ai编程
草梅友仁8 小时前
墨梅博客 1.7.0 发布与 AI 开发实践 | 2026 年第 9 周草梅周报
开源·github·ai编程