大模型 API 接入初探

文章目录

  • 大模型 API 接入初探
    • 一、使用大模型 API 的前置步骤
      • (一)注册账户与获取凭证
      • (二)理解 API 文档
    • 二、三个常用 API
      • (一)列出模型
      • (二)FIM 补全
      • (三)对话补全
    • 三、连续对话
    • 四、计算 tokens 的大小

大模型 API 接入初探

在当今的技术领域,大模型的应用日益广泛,为众多应用赋予了强大的智能能力。若应用需要接入大模型的能力,当下流行的大模型均提供了 API 接入方式,这极大地降低了开发门槛,使开发者能够快速整合大模型的强大功能。

本文将以 DeepSeek 大模型为例(基本是通用的),详细介绍大模型 API 的接入过程,涵盖从前期准备到具体 API 使用,以及连续对话处理和 token 计算等关键方面,为开发者提供全面且实用的指导。

一、使用大模型 API 的前置步骤

(一)注册账户与获取凭证

https://www.deepseek.com/

要接入 DeepSeek 大模型 API,首先需在其官方平台注册账户。注册过程中,务必妥善填写相关信息,确保账户注册成功。注册完成后,获取可用的 tokens,这些 tokens 是使用 API 的关键资源,可能涉及免费额度或充值方式获取。同时,生成 API keys,此为调用 API 的唯一凭证,其重要性不言而喻。需严格保密,切勿告知他人,谨慎保存,因为它直接关联着 tokens 的消耗与计费,关乎使用成本与安全性。

在这里插入图片描述

(二)理解 API 文档

在开始使用 API 之前,深入研读官方文档至关重要。以 DeepSeek 大模型为例,其官方文档(https://api-docs.deepseek.com/zh-cn/api/deepseek-api)详细阐述了 API 的各项说明,包括但不限于模型列表、请求参数、响应格式、使用限制等关键信息。通过仔细研究文档,开发者能够全面了解 API 的功能与规则,为后续的开发工作奠定坚实基础,避免因对 API 不熟悉而导致的开发失误和资源浪费。

二、三个常用 API

**YOUR_API_KEY 替换你刚才获取的 api key **

(一)列出模型

此 API 功能在于列出当前可用的模型列表,并提供各模型的基本信息。这对于开发者而言,能够清晰知晓大模型所提供的模型种类,进而确定哪些模型适用于自身应用场景。例如,通过以下 Python 代码实现:

from openai import OpenAI# 为保持向后兼容性,仍可使用 `https://api.deepseek.com/v1` 作为 `base_url`
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.deepseek.com")
print(client.models.list())

运行结果将展示类似如下信息:

SyncPage[Model](data=[Model(id='deepseek-chat', created=None, object='model', owned_by='deepseek'), Model(id='deepseek-coder', created=None, object='model', owned_by='deepseek')], object='list')

从结果中,我们可以获取模型的 ID、所属者等基本信息,以便在后续的 API 调用中准确选择合适的模型。

(二)FIM 补全

FIM(Fill - In - the - Middle)补全是一项极具创新性的功能,允许开发者设定前缀和后缀,让大模型完善中间的内容,仅设置前缀同样可行。这在文本创作、内容补全、逻辑推理等场景中具有广泛应用价值。以下是一个简单示例:

from openai import OpenAI# 用户需设置 `base_url="https://api.deepseek.com/beta"` 以使用此功能
client = OpenAI(api_key="YOUR_API_KEY",  ### 替换此处的api keybase_url="https://api.deepseek.com/beta"
)
response = client.completions.create(model="deepseek-chat",prompt="从前战争开始了,我们",suffix="哈哈哈",max_tokens=1024
)
# print(response)
print(response.choices[0].text)

运行结果可能为:

就打仗,现在战争开始了,我们就先打仗,再打仗,打完了仗还打仗,直到打不动为止,

需要注意的是,在实际应用中,根据具体需求合理设置前缀、后缀以及 max_tokens 等参数,以获取满意的补全结果。同时,由于不同模型的特点和训练数据差异,FIM 补全的效果可能会有所不同,开发者需要根据实际情况进行调整和优化。

(三)对话补全

对话补全 API 依据输入的上下文,让模型生成相应的对话内容。在这个过程中,涉及三个重要角色:

  • system(系统):system 角色用于设定场景或角色

  • user(用户): user 角色代表用户输入的消息

  • assistant(大模型回复):assistant 角色则是大模型给出的回复

以下是一个具体示例:

from openai import OpenAI# 为保持向后兼容性,仍可使用 `https://api.deepseek.com/v1` 作为 `base_url`
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.deepseek.com")
response = client.chat.completions.create(model="deepseek-chat",messages=[{"role": "system", "content": "你是一名资深的地理学家"},{"role": "user", "content": "你好,我想知道中国有几个省"}],max_tokens=1024,temperature=0.7,stream=False
)
print(response)
print(response.choices[0].message.content)

运行结果如下:

ChatCompletion(id='928e783b-7833-458c-a28d-99d270c7f80d', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='你好!中国共有**23个省**。以下是这些省份的列表:\n\n1. 河北省\n2. 山西省\n3. 辽宁省\n4. 吉林省\n5. 黑龙江省\n6. 江苏省\n7. 浙江省\n8. 安徽省\n9. 福建省\n10. 江西省\n11. 山东省\n12. 河南省\n13. 湖北省\n14. 湖南省\n15. 广东省\n16. 海南省\n17. 四川省\n18. 贵州省\n19. 云南省\n20. 陕西省\n21. 甘肃省\n22. 青海省\n23. 台湾省\n\n此外,中国还有**5个自治区**、**4个直辖市**和**2个特别行政区**。如果你对这些地区也感兴趣,我可以为你提供更多信息。', refusal=None, role='assistant', audio=None, function_call=None, tool_calls=None))], created=1735481817, model='deepseek-chat', object='chat.completion', service_tier=None, system_fingerprint='fp_f1afce2943', usage=CompletionUsage(completion_tokens=167, prompt_tokens=15, total_tokens=182, completion_tokens_details=None, prompt_tokens_details=None, prompt_cache_hit_tokens=0, prompt_cache_miss_tokens=15))
你好!中国共有**23个省**。以下是这些省份的列表:
1. 河北省
2. 山西省
3. 辽宁省
4. 吉林省
5. 黑龙江省
6. 江苏省
7. 浙江省
8. 安徽省
9. 福建省
10. 江西省
11. 山东大学
12. 河南省
13. 湖北省
14. 湖南省
15. 广东省
16. 海南省
17. 四川省
18. 贵州省
19. 云南省
20. 陕西省
21. 甘肃省
22. 青海省
23. 台湾省
此外,中国还有**5个自治区**、**4个直辖市**和**2个特别行政区**。如果你对这些地区也感兴趣,我可以为你提供更多信息。

在使用对话补全 API 时,合理设置 system 角色的内容能够引导模型生成更符合预期的回复。同时,根据应用需求调整 max_tokens(生成回复的最大 token 数)和 temperature(控制回复的随机性)等参数,可实现更精准、多样化的对话效果。

三、连续对话

在实际应用中,连续对话场景较为常见,且需要模型理解上下文关系。为此,每次 API 调用时,需将之前的对话历史一同传入接口,使大模型能够基于完整的上下文生成连贯、合理的回复。以下是一个连续对话的示例:

先设定了是一个地理学家,问了河南省,然后又问了有几个市? 这里问的几个市,大模型就知道了你问的是河南省

from openai import OpenAI# 为保持向后兼容性,仍可使用 `https://api.deepseek.com/v1` 作为 `base_url`
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.deepseek.com")messages = [{"role": "system", "content": "你是一名资深的地理学家"},{"role": "user", "content": "你好,你知道河南省吗?"}]
conversation_dict = {"previous_messages": messages
}print("问题:" + conversation_dict["previous_messages"][1]["content"])response = client.chat.completions.create(model="deepseek-chat",messages=conversation_dict["previous_messages"],max_tokens=256,temperature=0.7,stream=False
)print("回答:" + response.choices[0].message.content)conversation_dict["previous_messages"].append(response.choices[0].message)newMessage = {"role": "user", "content": "有几个市?"}
conversation_dict["previous_messages"].append(newMessage)print("提问:" + newMessage["content"])response = client.chat.completions.create(model="deepseek-chat",messages=conversation_dict["previous_messages"],max_tokens=256,temperature=0.7,stream=False
)print("回答:" + response.choices[0].message.content)

运行结果如下:

问题:你好,你知道河南省吗?
回答:你好!是的,河南省是中国的一个省份,位于中国中部地区。以下是一些关于河南省的基本信息:
1. **地理位置**:河南省位于中国中部,东接山东、安徽,北接河北、山西,西接陕西,南接湖北。黄河从河南省北部流过,因此得名“河南”,意为“黄河之南”。
2. **省会**:河南省的省会是郑州,郑州也是中国重要的交通枢纽和物流中心。
3. **人口**:河南省是中国人口最多的省份之一,常住人口超过1亿。
4. **历史与文化**:河南省是中国古代文明的发源地之一,历史上曾多次作为中国的政治、经济和文化中心。洛阳、开封、安阳等城市都是中国历史上的重要古都。
5. **经济**:河南省的经济发展较为多元化,农业、工业和服务业都有显著的发展。河南是中国重要的粮食生产基地,尤其是小麦和玉米的产量在全国名列前茅。
6. **旅游资源**:河南省拥有丰富的旅游资源,包括龙门石窟、少林寺、云台山、嵩山等著名景点。
7. **气候**:河南省属于温带季风气候,四季分明,夏季炎热多雨,冬季寒冷干燥。
如果你有关于河南省的更多具体问题,欢迎继续
提问:有几个市?
回答:截至2023年,河南省下辖**17个地级市**,分别是:
1. **郑州市**(省会)  
2. **开封市**  
3. **洛阳市**  
4. **平顶山市**  
5. **安阳市**  
6. **鹤壁市**  
7. **新乡市**  
8. **焦作市**  
9. **濮阳市**  
10. **许昌市**  
11. **漯河市**  
12. **三门峡市**  
13. **南阳市**  
14. **商丘市**  
15. **信阳市**  
16. **周口市**  
17. **驻马店市**  
此外,河南省还设有1个省直辖县级市——**济源市**,但济源市属于县级市,不属于地级市。  
如果你对某个城市有更详细的了解需求,可以告诉我!

在连续对话中,准确管理对话历史至关重要。确保每次传入的对话历史完整且有序,避免信息缺失或错乱,以保证模型能够准确理解上下文,生成符合逻辑的回复。同时,根据对话场景和需求,合理控制 max_tokens 参数,避免生成过长或过短的回复,影响用户体验。

四、计算 tokens 的大小

在使用大模型 API 时,tokens 的消耗直接关系到使用成本。因此,了解每次用户提问所需的 token 数量具有重要意义。DeepSeek 大模型提供了离线计算 token 大小的 Python 程序,开发者可利用此工具进行测试。

计算 token 大小的主要目的在于优化成本控制和资源管理。通过预估每次请求所需的 token 数量,开发者能够在满足需求的前提下,合理控制提问内容,避免不必要的 token 消耗。同时,对于一些对成本较为敏感的应用场景,精确计算 token 大小有助于制定合理的预算和使用策略。

具体使用离线计算程序时,需按照官方文档(https://api-docs.deepseek.com/zh-cn/quick_start/token_usage)提供的方法和步骤进行操作。通常,需要将待计算的文本输入到程序中,程序将根据模型的 token 化规则,输出相应的 token 数量。在实际应用中,开发者可结合具体业务场景,对不同类型的提问进行 token 数量统计分析,总结规律,以便在开发过程中更精准地控制 token 使用。

综上所述,通过对大模型 API 接入的全面解析,包括前置步骤、常用 API 的使用、连续对话处理以及 token 计算等方面,开发者能够更加熟练、高效地将大模型能力整合到应用中,实现智能化功能的提升,同时合理控制成本,为用户提供优质的服务体验。在实际开发过程中,不断探索和优化 API 的使用方式,结合具体业务需求,充分发挥大模型的潜力,将为应用带来更大的价值。

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

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

相关文章

ACPI PM Timer

ACPI PM Timer 概述: ACPI PM Timer是一个非常简单的计时器,它以 3.579545 MHz 运行,在计数器溢出时生成系统控制中断(SCI)。它精度较低,建议使用其他定时器,如HPET或APIC定时器。 检测ACPI P…

力扣--LCR 188.买卖芯片的最佳时机

题目 数组 prices 记录了某芯片近期的交易价格,其中 prices[i] 表示的 i 天该芯片的价格。你只能选择 某一天 买入芯片,并选择在 未来的某一个不同的日子 卖出该芯片。请设计一个算法计算并返回你从这笔交易中能获取的最大利润。 如果你不能获取任何利…

工业相机基本参数

分辨率(Resolution) 定义:分辨率指的是相机图像的像素数,通常以 宽度 x 高度 的形式表示,如 1920x1080 或 2592x1944。作用:分辨率越高,相机可以捕捉到更多的细节。高分辨率相机适用于需要精确…

实时在线翻译谷歌插件

Real - time Translation插件的安装 1、下载插件并解压 2、打开谷歌浏览器,在地址栏输入 “chrome://extensions/” 进入扩展程序页面. 3、开启页面右上角的 “开发者模式”. 4、点击 “加载已解压的扩展程序” 按钮,选择之前解压的文件夹,点…

torch.sparse_csc_tensor

torch.sparse_csc_tensor 以CSC格式构建一个稀疏张量。CSC格式的稀疏张量乘法运算通常比 COO 格式的稀疏张量更快。 CSC格式(Compressed Sparse Column Format)是一种存储稀疏矩阵的常用格式,它通过三个数组来表示稀疏矩阵: 非零…

C++ 设计模式:原型模式(Prototype Pattern)

链接:C 设计模式 链接:C 设计模式 - 工厂方法 链接:C 设计模式 - 抽象工厂 链接:C 设计模式 - 建造者模式 原型模式(Prototype Pattern)是一种创建型设计模式,它允许一个对象通过复制现有对象来…

C语言中的贪心算法

贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前最优解的算法,希望通过局部最优解的选择,最终得到全局最优解。它常用于解决最优化问题,如最小生成树、最短路径等。本文将从理论到实践,逐步引导…

区块链:概念与应用场景

一、区块链的定义 区块链是一种分布式账本技术,它以去中心化的方式存储数据,通过密码学保证数据的安全性和不可篡改性。 (一)分布式账本 账本结构:区块链可以看作是一个由多个节点共同维护的账本。这个账本是由一系列…

[数据集][图像分类]常见鱼类分类数据集2w张8类别

数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):7554(剩余1w多为测试集) 分类类别数:…

uniapp开发小程序内嵌h5页面,video视频两边有细小黑色边框

1.问题如图 2.原因分析 是否为设置上述属性呢? 设置了,但是仍然有黑边。经过选中页面元素分析后,判断video元素本身就有这种特点,就是视频资源无法完全铺满元素容器。 3.解决方案

pod生命周期和pod的优雅终止

pod优雅终止 概念:当一个pod需要被终止时,系统会给予一定的时间窗口让pod内的应用程序完成正在处理的任务并安全地关闭,而不是立即强制终止。这样可以避免因突然终止而导致的数据丢失或服务中断 1. 发送终止信号: 当一个 pod 被…

Android 13 Launcher3 移除桌面抽屉入口

com.android.launcher3.taskbar.TaskbarView.updateHotseatItems // 移除任务栏抽屉入口 // if (mAllAppsButton != null) { // int index = Utilities.isRtl(getResources()) ? 0 : getChildCount(); // addView(mAllAppsButton, index)…

深度学习任务中的 `ulimit` 设置优化指南

深度学习任务中的 ulimit 设置优化指南 1. 什么是 ulimit?2. 深度学习任务中的关键 ulimit 设置2.1 max locked memory(-l)2.2 open files(-n)2.3 core file size(-c)2.4 stack size&#xff08…

【SpringMVC】SpringMVC 快速入门

通常,Web 应用的工作流程如下: 用户通过浏览器访问前端页面; 前端页面通过异步请求向后端服务器发送数据; 后端采用“表现层-业务层-数据层”三层架构进行开发: 表现层接收页面请求将请求参数传递给业务层业务层访问…

OpenGL变换矩阵和输入控制

在前面的文章当中我们已经成功播放了动画,让我们的角色动了起来,这一切变得比较有意思了起来。不过我们发现,角色虽然说是动了起来,不过只是在不停地原地踏步而已,而且我们也没有办法通过键盘来控制这个角色来进行移动…

【Spring MVC 核心机制】核心组件和工作流程解析

在 Web 应用开发中,处理用户请求的逻辑常常会涉及到路径匹配、请求分发、视图渲染等多个环节。Spring MVC 作为一款强大的 Web 框架,将这些复杂的操作高度抽象化,通过组件协作简化了开发者的工作。 无论是处理表单请求、生成动态页面&#x…

Verilog 过程赋值

关键词:阻塞赋值,非阻塞赋值,并行 过程性赋值是在 initial 或 always 语句块里的赋值,赋值对象是寄存器、整数、实数等类型。 这些变量在被赋值后,其值将保持不变,直到重新被赋予新值。 连续性赋值总是处…

[并发与并行] python如何构建并发管道处理多阶段任务?

文章目录 1. 背景&目标2. show me the code3.知识点4. 总结 1. 背景&目标 背景:一个任务可分为多个阶段(各个阶段非CPU密集型任务,而是属于IO密集型任务),希望每个阶段能够交给各自的线程去执行。 目标:构建支持多并发的…

07 基于OpenAMP的核间通信方案

引言 ZYNQ7020有两个CPU核心,这两个核心可以采用SMP或AMP方式进行调度,当采用AMP方式进行调度时核0和核1可以运行不同的操作系统,如核0运行Linux系统,提供有些复杂的用户交互工作,核1运行实时操作系统,对设…

7.若依参数设置、通知公告、日志管理

参数设置 对系统中的参数进行动态维护。 关闭验证码校验功能 打开页面注册功能 需要修改前端页面代码 通知公告 促进组织内部信息传递 若依只提供了一个半成品,只实现了管理员可以添加通知公告。 日志管理 追踪用户行为和系统运行状况。 登录日志 和操作日志…