文章目录
- 大模型 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 的使用方式,结合具体业务需求,充分发挥大模型的潜力,将为应用带来更大的价值。