DeepSwiftSeek 开源软件 |用于 DeepSeek LLM 模型的 Swift 客户端 |轻量级和高效的 DeepSeek 核心功能通信

news2025/6/7 4:39:50

​一、软件介绍

文末提供程序和源码下载

      DeepSeek Swift SDK 是一个轻量级且高效的基于 Swift 的客户端,用于与 DeepSeek API 进行交互。它支持聊天消息完成、流式处理、错误处理以及使用高级参数配置 DeepSeekLLM。

二、Features 特征

  • Supports chat completion requests
    支持聊天完成请求
  • Supports fill in the middle completion requests
    支持填充中间完成请求
  • Handles error responses with detailed error descriptions and recovery suggestions.
    使用详细的错误描述和恢复建议处理错误响应。
  • streaming responses both for chat completion and as well fill in the middle responses
    用于聊天完成的流式处理响应,以及填充中间响应
  • Built-in support for different models and advanced parameters
    内置对不同模型和高级参数的支持
  • User balance fetchin and available LLM models fetching
    用户余额获取和可用LLM模型获取
  • Uses Swift concurrency (async/await) for network calls
    使用 Swift 并发 (async/await) 进行网络调用

三、Installation 安装

To integrate DeepSwiftSeek into your project, you can use Swift Package Manager (SPM):
要集成到 DeepSwiftSeek 您的项目中,您可以使用 Swift Package Manager (SPM):

let package = Package(
    dependencies: [
        .package(url: "https://github.com/tornikegomareli/DeepSwiftSeek.git", exact: "0.0.2")
    ]
)

Or add it via Xcode:
或通过 Xcode 添加它:

  1. Open your project in Xcode.
    在 Xcode 中打开您的项目。
  2. Navigate to File > Swift Packages > Add Package Dependency.
    导航到 File > Swift Packages > Add Package Dependency。
  3. Enter the repository URL.
    输入存储库 URL。
  4. Choose the latest version and click Next.
    选择最新版本,然后单击 Next(下一步)。

Usage 用法

1. Initialize the Client 1. 初始化客户端

import DeepSwiftSeek

let configuration = Configuration(apiKey: "YOUR_API_KEY")
let deepSeekClient = DeepSeekClient(configuration: configuration)

2. Sending a Chat Completion Request
2. 发送聊天完成请求

Task {
    do {
        let response = try await deepSeekClient.chatCompletions(
            messages: {
                ChatMessageRequest(role: .user, content: "Tell me a joke.", name: "User")
            },
            model: .deepSeekChat,
            parameters: .creative
        )
        print(response.choices.first?.message.content ?? "No response")
    } catch {
        print("Error: \(error.localizedDescription)")
    }
}

3. Streaming Chat Completions
3. 流式聊天完成

Task {
    do {
        let stream = try await deepSeekClient.chatCompletionStream(
            messages: {
                ChatMessageRequest(role: .user, content: "Write a poem.", name: "User")
            },
            model: .deepSeekChat,
            parameters: .streaming
        )
        for try await chunk in stream {
            print(chunk) // Prints streamed responses
        }
    } catch {
        print("Streaming error: \(error.localizedDescription)")
    }
}

4. Streaming FIM Completion
4. 流式 FIM 完成

Task {
    do {
        let stream = try await deepSeekClient.fimCompletionStream(
            messages: {
                [
                    ChatMessageRequest(
                      role: .user,
                      content: "function greet() {\n  /* FIM_START */\n  /* FIM_END */\n  return 'Hello world';\n}",
                      name: "User"
                    )
                ]
            },
            model: .deepSeekReasoner,
            parameters: .streaming
        )
        
        for try await chunk in stream {
            // Each chunk is a streamed part of the fill-in-the-middle response.
            print("FIM Stream Chunk:\n\(chunk)")
        }
    } catch {
        print("FIM Streaming Error: \(error.localizedDescription)")
    }
}

5. Sending FIM Completion Request
5. 发送 FIM 完成请求

Task {
    do {
        let response = try await deepSeekClient.fimCompletions(
            messages: {
                [
                    ChatMessageRequest(
                      role: .user,
                      content: "function greet() {\n  // FIM_START\n  // FIM_END\n  return 'Hello world';\n}",
                      name: "User"
                    )
                ]
            },
            model: .deepSeekReasoner,
            parameters: .creative
        )
        if let content = response.choices.first?.message.content {
            print("FIM Completion:\n\(content)")
        }
    } catch {
        print("FIM Error: \(error.localizedDescription)")
    }
}

6. Getting List of Models
6. 获取模型列表

Task {
    do {
        let response = try await deepSeekClient.listModels()
    } catch {
        print("ListModels Error: \(error.localizedDescription)")
    }
}

7. Getting Balance of the user
7. 获取用户的余额

Task {
    do {
        let response = try await deepSeekClient.fetchUserBalance()
    } catch {
        print("UserBalance Error: \(error.localizedDescription)")
    }
}

8. Handling Errors 8. 处理错误

The SDK provides detailed error handling:
SDK 提供了详细的错误处理:

catch let error as DeepSeekError {
    print("DeepSeek API Error: \(error.localizedDescription)")
    print("Recovery Suggestion: \(error.recoverySuggestion ?? "None")")
} catch {
    print("Unexpected error: \(error)")
}

四、Models 模型

DeepSeek SDK supports multiple models:
DeepSeek SDK 支持多种模型:

public enum DeepSeekModel: String {
    case deepSeekChat = "deepseek-chat"
    case deepSeekReasoner = "deepseek-reasoner"
}

Available Parameters 可用参数

You can configure chat completion parameters:
您可以配置聊天完成参数:

let parameters = ChatParameters(
    frequencyPenalty: 0.5,
    maxTokens: 512,
    presencePenalty: 0.5,
    temperature: 0.7,
    topP: 0.9
)

Predefined Parameter Sets
预定义参数集

Mode 模式Temperature 温度Max Tokens 最大令牌数Top P 前 P
Creative 创造性0.920480.9
Focused 集中0.320480.3
Streaming 流0.740960.9
Code Generation 代码生成0.220480.95
Concise 简明0.52560.5

Creating Custom Predefined Parameters
创建自定义预定义参数

If you need specific configurations, you can define your own parameter presets:
如果您需要特定配置,您可以定义自己的参数预设:

extension ChatParameters {
    static let myCustomPreset = ChatParameters(
        frequencyPenalty: 0.4,
        maxTokens: 1024,
        presencePenalty: 0.6,
        temperature: 0.8,
        topP: 0.85
    )
}

Then use it in your requests:
然后在您的请求中使用它:

let parameters = ChatParameters.myCustomPreset

This approach allows you to maintain reusable configurations tailored to different needs.
此方法允许您维护针对不同需求量身定制的可重用配置。

Error Handling 错误处理

DeepSeek SDK has built-in error handling for various API failures:
DeepSeek SDK 内置了针对各种 API 故障的错误处理功能:

Error Type 错误类型Description 描述
invalidFormatInvalid request body format.
请求正文格式无效。
authenticationFailedIncorrect API key. API 密钥不正确。
insufficientBalanceNo balance remaining. 没有余额。
rateLimitReachedToo many requests sent.
发送的请求过多。
serverOverloadedHigh traffic on server.
服务器上的高流量。
encodingErrorFailed to encode request body.
无法对请求正文进行编码。

TODOs 都

  •  Improve documentation with more examples
    通过更多示例改进文档
  •  SwiftUI full demo based on chat, history and reasoning
    基于聊天、历史记录和推理的 SwiftUI 完整演示
  •  Reasoning model + OpenAI SDK
    推理模型 + OpenAI SDK

五、软件下载

迅雷云盘

本文信息来源于GitHub作者地址:GitHub - tornikegomareli/DeepSwiftSeek: DeepSwiftSeek 🚀 | Swift Client for DeepSeek LLM Models | Lightweight and efficient communication to the core functionality of DeepSeek

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2402468.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flask-Login使用示例

项目结构 首先创建以下文件结构: flask_login_use/ ├── app.py ├── models.py ├── requirements.txt └── templates/├── base.html├── index.html├── login.html├── register.html└── profile.html1. requirements.txt Flask2.3.3 Fl…

web第九次课后作业--SpringBoot基于mybatis实现对数据库的操作

前言 在前面我们学习MySQL数据库时,都是利用图形化客户端工具(如:idea、datagrip),来操作数据库的。 在客户端工具中,编写增删改查的SQL语句,发给MySQL数据库管理系统,由数据库管理系统执行SQL语句并返回执…

wordpress免费主题网站

这是一款WordPress主题,由jianzhanpress开发,可以免费下载。专为中小微企业设计,提供专业的网站建设、网站运营维护、网站托管和网站优化等服务。主题设计简约、现代,适合多种行业需求。 主要特点: 多样化展示&#…

Go中的协程并发和并发panic处理

1 协程基础 1.1 协程定义(Goroutine) 概念:Go 语言特有的轻量级线程,由 Go 运行时(runtime)管理,相比系统线程(Thread),创建和销毁成本极低,占用…

Qt Creator工具编译器配置

1、打开Qt Creator,工具-->选项 2、选择"编译器",Manual配置编译器。 初始化填入“C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\cl.exe”,选择64位amd64。 ABI根据msvc版本进行选择msvc2015. 3、新建项目…

Spring框架学习day7--SpringWeb学习(概念与搭建配置)

SpringWeb1.SpringWeb特点2.SpringWeb运行流程3.SpringWeb组件4.搭建项目结构图:4.1导入jar包4.2在Web.xml配置**4.2.1配置统一拦截分发器 DispatcherServlet**4.2.2开启SpringWeb注解(spring.xml) 5.处理类的搭建6.SpringWeb请求流程(自己理…

打造高效多模态RAG系统:原理与评测方法详解

引言 随着信息检索与生成式AI的深度融合,检索增强生成(RAG, Retrieval-Augmented Generation) 已成为AI领域的重要技术方向。传统RAG系统主要依赖文本数据,但真实世界中的信息往往包含图像、表格等多模态内容。多模态RAG&#xf…

【C#】Quartz.NET怎么动态调用方法,并且根据指定时间周期执行,动态配置类何方法以及Cron表达式,有请DeepSeek

🌹欢迎来到《小5讲堂》🌹 🌹这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。🌹 🌹温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!&#…

02 Deep learning神经网络的编程基础 逻辑回归--吴恩达

逻辑回归 逻辑回归是一种用于解决二分类任务(如预测是否是猫咪等)的统计学习方法。尽管名称中包含“回归”,但其本质是通过线性回归的变体输出概率值,并使用Sigmoid函数将线性结果映射到[0,1]区间。 以猫咪预测为例 假设单个样…

MySQL的并发事务问题及事务隔离级别

一、并发事务问题 1). 赃读:一个事务读到另外一个事务还没有提交的数据。 比如 B 读取到了 A 未提交的数据。 2). 不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。 事务 A 两次读取同一条记录&…

ProfiNet 分布式 IO 在某污水处理厂的应用

随着城市化进程的加速,污水处理厂的规模和复杂性不断增加,对自动化控制系统的要求也越来越高。PROfinet 分布式 IO 作为一种先进的工业通信技术,以其高速、可靠、灵活的特性,为污水处理厂的自动化升级提供了有力支持。本文将结合某…

vue2 , el-select 多选树结构,可重名

人家antd都支持,elementplus 也支持,vue2的没有,很烦。 网上其实可以搜到各种的,不过大部分不支持重名,在删除的时候可能会删错,比如树结构1F的1楼啊,2F的1楼啊这种同时勾选的情况。。 可以全…

Excel处理控件Aspose.Cells教程:使用 C# 从 Excel 进行邮件合并

邮件合并功能让您能够轻松批量创建个性化文档,例如信函、电子邮件、发票或证书。您可以从模板入手,并使用电子表格中的数据进行填充。Excel 文件中的每一行都会生成一个新文档,并在正确的位置包含正确的详细信息。这是一种自动化重复性任务&a…

EXCEL通过DAX Studio获取端口号连接PowerBI

EXCEL通过DAX Studio获取端口号连接PowerBI 昨天我分享了EXCEL链接模板是通过获取端口号和数据库来连接PowerBI模型的,链接:浅析EXCEL自动连接PowerBI的模板,而DAX Studio可以获取处于打开状态的PowerBI的端口号。 以一个案例分享如何EXCEL…

C# 委托UI控件更新例子,何时需要使用委托

1. 例子1 private void UdpRxCallBackFunc(UdpDataStruct info) {// 1. 前置检查防止无效调用if (textBoxOutput2.IsDisposed || !textBoxOutput2.IsHandleCreated)return;// 2. 使用正确的委托类型Invoke(new Action(() >{// 3. 双重检查确保安全if (textBoxOutput2.IsDis…

大模型数据流处理实战:Vue+NDJSON的Markdown安全渲染架构

在Vue中使用HTTP流接收大模型NDJSON数据并安全渲染 在构建现代Web应用时,处理大模型返回的流式数据并安全地渲染到页面是一个常见需求。本文将介绍如何在Vue应用中通过普通HTTP流接收NDJSON格式的大模型响应,使用marked、highlight.js和DOMPurify等库进…

python项目如何创建docker环境

这里写自定义目录标题 python项目创建docker环境docker配置国内镜像源构建一个Docker 镜像验证镜像合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPant…

PyTorch--池化层(4)

池化层(Pooling Layer) 用于降低特征图的空间维度,减少计算量和参数数量,同时保留最重要的特征信息。 池化作用:比如1080p视频——720p 池化层的步长默认是卷积核的大小 ceil 允许有出界部分;floor 不允许…

2025年大模型平台落地实践研究报告|附75页PDF文件下载

本报告旨在为各行业企业在建设落地大模型平台的过程中,提供有效的参考和指引,助力大模型更高效更有价值地规模化落地。本报告系统性梳理了大模型平台的发展背景、历程和现状,结合大模型平台的特点提出了具体的落地策略与路径,同时…

PPTAGENT:让PPT生成更智能

想要掌握如何将大模型的力量发挥到极致吗?叶梓老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具。 1小时实战课程,您将学习到如何轻松上手并有效利用 Llama Factory 来微调您的模型,以发挥其最大潜力。 CSDN教学平台录播地址…