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寫代碼,把主集群hive表數據同步到另一個租戶集群word count: 24, token count: 33, time: 22:32
可以看出由于顯卡的CUDA性能不好,速度很慢!!!
推理
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<dependency><groupId>org.apache.hive</groupId><artifactId>hive-jdbc</artifactId><version>2.3.7</version>
</dependency>
2. 導出數據到本地文件
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
或其他工具將導出的文件傳輸到目標集群。以下是上傳文件到目標集群的代碼示例:
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. 整合所有步驟到一個主程序
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();}}}
說明
- 連接到源集群和目標集群:使用 JDBC 連接到 Hive 集群。
- 導出數據到本地文件:使用
INSERT OVERWRITE LOCAL DIRECTORY
將數據導出到本地目錄。 - 上傳文件到目標集群:使用 SFTP 或其他工具將文件上傳到目標集群的存儲路徑。
- 導入數據到目標 Hive 表:使用
LOAD DATA INPATH
將文件導入到目標 Hive 表中。
注意事項
- 需要確保目標集群的安全性,避免敏感信息泄露。
- 根據實際需求調整上傳工具和路徑。
- 確保 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