目的:学习与使用。我用的是python
1.先交钱,然后生成一个key
2.建一个python文件,存储一下。别给忘了。
question365_key = "sk-888888888888888888888888888"
question365_url = "https://api.deepseek.com"
from deepseek_info import question365_key,question365_url
from openai import OpenAI
client = OpenAI(api_key=question365_key, base_url=question365_url)
print(client.models.list())
(ollama_env) kt@kt4028:~/myproject/ollama$ python deepseek_go.py
SyncPage[Model](data=[Model(id='deepseek-chat', created=None, object='model', owned_by='deepseek'), Model(id='deepseek-reasoner', created=None, object='model', owned_by='deepseek')], object='list')
(ollama_env) kt@kt4028:~/myproject/ollama$
从上面可以看到目前有两个Model。这两个是有区别的。看价格就知道质量如何了。不过测试时尽量还是用便宜的。
2. 如何使用指定的模型,测试多轮对话
长度及相关参数参考:注意参数不写时的默认值问题,另外还有mod1/2需要注意
测试代码:非流式
from openai import OpenAI
# 初始化OpenAI客户端,并获得目前的模型列表
client = OpenAI(api_key=question365_key, base_url=question365_url)
print(client.models.list())
#非stream
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": "用300字介绍下孔子。要严谨"},
{"role": "user", "content": "Hello"},
],
frequency_penalty=2, # 频率惩罚,默认0,范围-2到2,正数降低模型重复相同内容的可能性
max_tokens=1024, # 最大输出字数1-8192,默认4096
presence_penalty=2,#介于 -2.0 和 2.0 之间的数字。如果该值为正,那么新 token 会根据其是否已在已有文本中出现受到相应的惩罚,从而增加模型谈论新主题的可能性。
temperature=0.7, #采样温度,介于 0 和 2 之间。更高的值,如 0.8,会使输出更随机,而更低的值,如 0.2,会使其更加集中和确定。 我们通常建议可以更改这个值或者更改 top_p,但不建议同时对两者进行修改。
stream=False
)
print(response.choices[0].message.content)
测试代码:流式
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": "用300字介绍下孔子。要严谨"},
{"role": "user", "content": "Hello"},
],
stream=True
)
content = ""
for chunk in response:
delta = chunk.choices[0].delta
if delta.content:
# 直接打印当前片段,并立即刷新输出缓冲区
print(delta.content, end="", flush=True) # end="" 避免自动换行
content += delta.content # 仍可保留完整内容
# 最终可检查完整内容(非必须)
print("\n\n[完整响应长度]:", len(content))
多轮对话参考,实际上就是不断压入新的messages。包括了上一轮的内容,我在测试的时候没留意。角色,一定在注意角色的定位。
多轮对话 | DeepSeek API Docs ,注意这个网站上提供的代码可能是错的。
测试代码:非流式
from deepseek_info import question365_key,question365_url
from openai import OpenAI
# 初始化OpenAI客户端,并获得目前的模型列表
client = OpenAI(api_key=question365_key, base_url=question365_url)
# print(client.models.list())
messages00={"role": "user", "content": "用300字介绍下孔子。要严谨"}
messages01={"role": "user", "content": "他有哪些治学精神可以学习?"}
messages=[]
#非stream
# messages = messages00.copy() # 假设messages00是初始消息列表
messages.append(messages00)
response1 = client.chat.completions.create(
model="deepseek-chat",
messages=messages,
frequency_penalty=2, # 频率惩罚,默认0,范围-2到2,正数降低模型重复相同内容的可能性
max_tokens=1024, # 最大输出字数1-8192,默认4096
presence_penalty=2,#介于 -2.0 和 2.0 之间的数字。如果该值为正,那么新 token 会根据其是否已在已有文本中出现受到相应的惩罚,从而增加模型谈论新主题的可能性。
temperature=0.7, #采样温度,介于 0 和 2 之间。更高的值,如 0.8,会使输出更随机,而更低的值,如 0.2,会使其更加集中和确定。 我们通常建议可以更改这个值或者更改 top_p,但不建议同时对两者进行修改。
stream=False
)
# 将第一次的AI回复加入对话历史
ai_reply1 = response1.choices[0].message.content
messages.append({"role": "assistant", "content": ai_reply1}) # 关键修复点
# 添加新的用户消息
messages.append(messages01) # 假设messages01是新的用户消息字典
# 第二次对话(保持相同参数)
response2 = client.chat.completions.create(
model="deepseek-chat",
messages=messages,
frequency_penalty=2, # 保持参数一致
max_tokens=1024,
presence_penalty=2,
temperature=0.7,
stream=False
)
# 将第二次的AI回复加入历史(如需继续对话)
ai_reply2 = response2.choices[0].message.content
messages.append({"role": "assistant", "content": ai_reply2})
print(messages)
[{'role': 'user', 'content': '用300字介绍下孔子。要严谨'}, {'role': 'assistant', 'content': '孔子(公元前551年—前479年),名丘,字仲尼,春秋时期鲁国陬邑(今山东曲阜)人。他是中国古代伟大的思想家、教育家、政治家,儒家学派“有教无类”是他教育思想的体现之一;他还整理编订了《诗》《书》等经典文献并传授给弟子们。《论语》,由其后世门徒记录编纂而成, 记载着其言行及对话内容.\n\n作为政治改革者, 虽然未能实现自己理想中的社会秩序与制度变革但影响深远; 'role': 'user', 'content': '他有哪些治学精神可以学习?'}, {'role': 'assistant', 'content': '孔子的治学精神对后世学者具有深远的启示和影响,以下几点尤为值得学习:\n\n1. **勤奋好学**:孔子自述“吾十有五而志于学”,并终身不懈求是(格物致知)**: 虽然这一概念后来在宋明理学中有更系统的阐述,但源头可追溯至孔子提倡的实践与理论相结合的原则——通过观察事物本质来获取真理性认识.\n\n3.谦虚谨慎: “三人行必有我师焉”,表明即使面对普通人也应保持谦逊心态寻找可之理念\n\n5 .知行合一 :将所学付诸行动是Confucius非常重视的一个方面。“听其言观其行”反映出来对于理论与实践相统一要求高标准严苛程度 \n\n6 。开放包容兼容多元文化视角-尽管身处特定历史背景下仍能广泛吸收其他学派精华如道家墨家贤智慧勇气魄力'}]
测试代码:流式
from deepseek_info import question365_key,question365_url
from openai import OpenAI
# 初始化OpenAI客户端,并获得目前的模型列表
client = OpenAI(api_key=question365_key, base_url=question365_url)
# print(client.models.list())
messages00={"role": "user", "content": "用300字介绍下孔子。要严谨"}
messages01={"role": "user", "content": "他有哪些治学精神可以学习?"}
messages=[]
#非stream
# messages = messages00.copy() # 假设messages00是初始消息列表
messages.append(messages00)
response1 = client.chat.completions.create(
model="deepseek-chat",
messages=messages,
frequency_penalty=2, # 频率惩罚,默认0,范围-2到2,正数降低模型重复相同内容的可能性
max_tokens=1024, # 最大输出字数1-8192,默认4096
presence_penalty=2,#介于 -2.0 和 2.0 之间的数字。如果该值为正,那么新 token 会根据其是否已在已有文本中出现受到相应的惩罚,从而增加模型谈论新主题的可能性。
temperature=0.7, #采样温度,介于 0 和 2 之间。更高的值,如 0.8,会使输出更随机,而更低的值,如 0.2,会使其更加集中和确定。 我们通常建议可以更改这个值或者更改 top_p,但不建议同时对两者进行修改。
stream=True
)
content1 = ""
for chunk in response1:
delta = chunk.choices[0].delta
if delta.content:
# 直接打印当前片段,并立即刷新输出缓冲区
print(delta.content, end="", flush=True) # end="" 避免自动换行
content1 += delta.content # 仍可保留完整内容
# 将第一次的AI回复加入对话历史
print("\n\n[完整响应长度]:", len(content1))
ai_reply1 = content1
messages.append({"role": "assistant", "content": ai_reply1}) # 关键修复点
# 添加新的用户消息
messages.append(messages01) # 假设messages01是新的用户消息字典
# 第二次对话(保持相同参数)
response2 = client.chat.completions.create(
model="deepseek-chat",
messages=messages,
frequency_penalty=2, # 保持参数一致
max_tokens=1024,
presence_penalty=2,
temperature=0.7,
stream=True
)
content2 = ""
for chunk in response2:
delta = chunk.choices[0].delta
if delta.content:
# 直接打印当前片段,并立即刷新输出缓冲区
print(delta.content, end="", flush=True) # end="" 避免自动换行
content2 += delta.content # 仍可保留完整内容
# 将第二次的AI回复加入历史(如需继续对话)
print("\n\n[完整响应长度]:", len(content2))
ai_reply2 = content2
messages.append({"role": "assistant", "content": ai_reply2})
print(messages)
先这些吧。