大模型开发实战篇1:调用DeepSeek的对话接口,即聊天机器人接口

本文较长,建议点赞收藏。更多AI大模型应用开发学习视频及资料,在智泊AI

很多AI产品对外的接口都复用了OpenAI公司的接口WebAPI,DeepSeek、智谱等也是如此。因此,只要学会OpenAI的接口,其他AI产品也就学调用了。我们就从OpenAI的接口来作为切入点学习。

对话接口也是聊天机器人, 在网页上与chatgpt类似的效果。

一、开发环境准备

OpenAI的接口是WebAPI形式的Rest API接口,并且还提供了各种常用语言的SDK,比如Python,Java,.Net,Javascript。这些SDK也同样完全适用于DeepSeek和智谱。大家可以根据自己熟悉的开发语言选择,sdk下载地址:platform.openai.com/docs/librar...

本教程以Python作为开发语言。

1、安装Python解释器

官方下载安装包:www.python.org/downloads/

安装好后看下版本

css 复制代码
命令:python --version

Python 3.13.1

2、安装Jupyter Lab

JupyterLab是人工智能领域常用的web版本的开发工具,非常好用,优点很多就不一一介绍了。也可以在VSCode,Pycharm 这些IDE开发。

复制代码
pip install jupyterlab

启动Jupyter Lab,可以打开指定的目录,使用以下命令。

复制代码
jupyter lab

二、注册账号

OpenAI的开放平台注册账号有点复杂,需要科学上网。我们可以使用国内的代理平台进行调用。比如我使用的是:aiyi 的,注册地址如下:www.apiyi.com/register/?a..._code=LxAQ

注册号后设置令牌key,就可以使用了。DeepSeek的官方的公众平台停止充值,无法调用,也可以使用第3方提供的平台调用,甚至是本地搭建的DeepSeek也同样可以调用,这个后期讲。

三、开发单轮对话接口

1、Python导入常用的包

diff 复制代码
!pip install tiktoken openai pandas matplotlib plotly scikit-learn numpy

我们本次会使用openai包, 若已安装了旧版本,需要更新到最新版本。

css 复制代码
pip install --upgrade openai

2、对话接口的代码Demo

ini 复制代码
from openai import OpenAI
client = OpenAI(api_key="填写自己的令牌apikey", base_url="https://vip.apiyi.com/v1")
messages=[
{"role": "system", "content": "你是一个乐于助人的体育界专家。"},
{"role": "user", "content": "2008年奥运会是在哪里举行的?"},
]
data = client.chat.completions.create(
model="gpt-4o-mini",
stream=False,
messages=messages
)
print(data.choices[0].message)

(1)我们使用的是aiyi代码,则使用aiyi的令牌key,base_url填写aiyi的接口地址。

(2)调用的接口是 chat.completions对话补齐接口。

执行会print的结果如上。单轮对话的代码就非常简单。.Net,Java,Javascript语言的开发也是类似的。

也可以print整个返回值data,这里的返回值的格式,在deepseek里稍稍有些不一样,开发的时候注意下。

scss 复制代码
print(data)
python 复制代码
ChatCompletion(id='chatcmpl-89CkHs99ByfRhSd7oB3bz8Cfj5f79', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='2008年奥运会在中国北京举行。这是中国第一次主办夏季奥林匹克运动会。', refusal=None, role='assistant', audio=None, function_call=None, tool_calls=None))], created=1739239104, model='gpt-4o-mini', object='chat.completion', service_tier=None, system_fingerprint='fp_5154047bf2', usage=CompletionUsage(completion_tokens=25, prompt_tokens=33, total_tokens=58, completion_tokens_details=CompletionTokensDetails(accepted_prediction_tokens=None, audio_tokens=None, reasoning_tokens=None, rejected_prediction_tokens=None), prompt_tokens_details=PromptTokensDetails(audio_tokens=None, cached_tokens=None)))

3、请求的接口说明

使用 Chat Completions API 实现对话任务

聊天补全(Chat Completions API)以消息列表作为输入,并返回模型生成的消息作为输出。尽管聊天格式旨在使多轮对话变得简单,但它同样适用于没有任何对话的单轮任务。

主要请求参数说明:

model (string,必填)

要使用的模型ID。有关哪些模型适用于Chat API的详细信息

messages (array,必填)

迄今为止描述对话的消息列表

role (string,必填)

发送此消息的角色。system 、user 或 assistant 之一(一般用 user 发送用户问题,system 发送给模型提示信息)。system就是大模型在本次对话中扮演什么角色,比如代码里写的,大模型本次扮演的是"体育专家",一般使用第3人称"你是xxx专家/教授。。"。

content (string,必填)

消息的内容

name (string,选填)

此消息的发送者姓名。可以包含 a-z、A-Z、0-9 和下划线,最大长度为 64 个字符

stream (boolean,选填,是否按流的方式发送内容)

当它设置为 true 时,API 会以 流式SSE( Server Side Event )方式返回内容。SSE 本质上是一个长链接,会持续不断地输出内容直到完成响应。如果不是做实时聊天,默认false即可。

max_tokens (integer,选填)

在聊天补全中生成的最大 tokens 数。

输入token和生成的token的总长度受模型上下文长度的限制。

temperature (number,选填,默认是 1)

采样温度,在 0和 2 之间。

较高的值,如0.8会使输出更随机,而较低的值,如0.2会使其更加集中和确定性。

通常建议修改这个(temperature )或者 top_p ,但两者不能同时存在,二选一。

四、开发多轮对话接口

单轮对话与多轮对话是完全一样的,只是在messages里将历史对话信息追加上。因为API 是一个"无状态" API,即服务端不记录用户请求的上下文,用户在每次请求时,需将之前所有对话历史拼接好后,传递给对话 API。

沿用上面的单轮对话,进行第2轮对话。

1、将消息追加到 messages 列表中

ini 复制代码
new_message = data.choices[0].message
new_message_dict = {"role": new_message.role, "content": new_message.content}
# 将消息追加到 messages 列表中
messages.append(new_message_dict)

可以看到大模型返回的结果中,role是assistant 小助手,我们直接沿用。

2、第2轮对话

go 复制代码
new_chat = {
"role": "user",
"content": "1.讲一个程序员才听得懂的冷笑话;2.今天是几号?3.明天星期几?"
}
messages.append(new_chat)
from pprint import pprint
pprint(messages)
打印结果

{'content': '你是一个乐于助人的体育界专家。', 'role': 'system'}, {'content': '2008年奥运会是在哪里举行的?', 'role': 'user'}, {'content': '2008年夏季奥运会在中国的北京举行。', 'role': 'assistant'}, {'content': '1.讲一个程序员才听得懂的冷笑话;2.今天是几号?3.明天星期几?', 'role': 'user'}

调用对话接口

ini 复制代码
data = client.chat.completions.create(
model="gpt-4o-mini",
stream=False,
messages=messages
)
ini 复制代码
new_message = data.choices[0].message
# 打印 new_messages
print(new_message)

若还有第3轮以及更多轮对话,都要将历史对话带上。

五、调用本地安装的DeepSeek-R1

1、使用ollama在本地安装deepseek

教程如下

DeepSeek本地安装太简单了,人人都会操作

本地安装了deepsek-r1:7b,模型名也是这个。

run跑起来

arduino 复制代码
ollama run deepseek-r1:7b

2、调用对话接口

ini 复制代码
from openai import OpenAI
client = OpenAI(api_key="sk-33333", base_url="http://localhost:11434/v1/")
messages=[
{"role": "system", "content": "你是一个乐于助人的体育界专家。"},
{"role": "user", "content": "2008年奥运会是在哪里举行的?"},
]
data = client.chat.completions.create(
model="deepseek-r1:7b",
stream=False,
messages=messages
)
print(data.choices[0].message)

(1)api_key随便填写,但必须是英文和数字,不要有中文。

(2)模型model填写deepseek-r1:7b,若你本地安装的参数是别的,就把7b改掉。

(3)base_url是你本地localhost地址。

3、看回答结果

css 复制代码
ChatCompletionMessage(content='<think>\n好,用户问的是2008年北京奥运会的举办地。\n\n首先,我确定奥运会每四年举办一次,所以从2000年开始推算,应该是2008年在北京举行。接着,我会想到北京有丰富的文化遗产和举办过其他国际盛会的经验,比如第24届冬奥会,这对奥运会的成功很有帮助。\n\n然后,考虑举办地点的选择,北京不仅地理位置优越,基础设施也很齐全,能够支持一个成功的大型活动。我还应该提到这一点,让回答更有说服力。\n\n另外,2008年对于中国人来说是特殊的一年,奥运会上会有许多来自中国各地的运动员参加,这将展现他们的精神和团结。这也是用户的可能兴趣点吧?\n\n最后,按照用户的提示,避免使用Markdown格式,并且提供一个自然流畅的回答。\n</think>\n\n2008年北京奥运会在北京成功举办了,这是中国继上海世博会后第二个国际盛会,展现了中国的文化和魅力。', refusal=None, role='assistant', audio=None, function_call=None, tool_calls=None)

3、调用第3方的deepseek接口

因为deepseek的api接口有很多限制,所以可以使用第3方提供的deepseek接口,比如华为云,腾讯云、硅基流动等,调用方式都一样,仅仅模型名称不一样,接口地址不一样。

我们选择硅基流动: cloud.siliconflow.cn/i/M6a0xrcX

ini 复制代码
from openai import OpenAI
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.siliconflow.cn/v1")
response = client.chat.completions.create(
model='deepseek-ai/DeepSeek-V2.5',
messages=[
{'role': 'user',
'content': "中国大模型行业2025年将会迎来哪些机遇和挑战"}
],
stream=True
)
for chunk in response:
print(chunk.choices[0].delta.content, end='')

简单的机器人对话接口就讲完了,下一期讲解对话接口的最佳实践。

学习资源推荐

如果你想更深入地学习大模型,以下是一些非常有价值的学习资源,这些资源将帮助你从不同角度学习大模型,提升你的实践能力。

本文较长,建议点赞收藏。更多AI大模型应用开发学习视频及资料,在智泊AI

相关推荐
念心之所向2 小时前
深度解析:基于 Prompt 演进策略的企业级自动化 Agent 架构设计
llm
十月南城8 小时前
SQL性能的三要素——索引、执行计划与数据分布的协同影响
后端·程序员
吴法刚9 小时前
Gemini cli 源码分析之-Agent分析-Agent架构系统分析
架构·agent·ai编程·gemini
163240154111 小时前
回顾-Qwen2.5[1]-->“ 一句话概括论文核心+技术亮点总结”
llm
程序员西西21 小时前
SpringBoot接口安全:APIKey保护指南
java·spring boot·计算机·程序员·编程·编程开发
AI-智能1 天前
别啃文档了!3 分钟带小白跑完 Dify 全链路:从 0 到第一个 AI 工作流
人工智能·python·自然语言处理·llm·embedding·agent·rag
大模型教程1 天前
AI基础入门(应用开发篇)——LangChain:核心抽象
langchain·llm·agent
大模型教程1 天前
LangChain 入门①:什么是 LangChain?LLM 应用开发的 “好帮手”
langchain·llm·agent
AI大模型1 天前
当大模型遇上垂直领域:微调如何让 AI 从 “什么都会” 到 “样样精通”?
程序员·llm·agent