Python SDK调用对话Chat
更新时间:2025-03-03
安装与升级
千帆千帆v2版本推理接口兼容openai、deepseek接口规范,因此可以使用OpenAI SDK请求千帆平台v2版推理接口,其中包含DeepSeek-R1模型。 请确保已安装最新版本的 OpenAI SDK。可以通过以下命令进行升级:
pip3 install -U openai
调用示例
下面的代码以 Python 语言为例,展示了如何访问思维链和最终回答,以及如何在多轮对话中进行上下文拼接。
非流式请求
- 请求示例
from openai import OpenAI
client = OpenAI(
# 替换下列示例中参数,将your_APIKey替换为真实值,如何获取API Key请查看https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Um2wxbaps#步骤二-获取api-key
api_key="your_APIKey",
# 千帆ModelBuilder平台地址
base_url="https://qianfan.baidubce.com/v2",
)
messages = [{"role": "user", "content": "20和11,哪个数大?"}] # 对话messages信息
response = client.chat.completions.create(
model="deepseek-r1-distill-qwen-32b",#模型对应的model值,请查看支持的模型列表:https://cloud.baidu.com/doc/WENXINWORKSHOP/s/wm7ltcvgc
messages=messages # messages信息
)
print(response.choices[0].message)
- 返回示例
\n\n要比较 \\(20\\) 和 \\(11\\) 的大小,可以按照以下步骤进行:\n\n1. **直接比较数值:**\n - \\(20\\) 是一个两位数,表示二十。\n - \\(11\\) 也是一个两位数,表示十一。\n \n2. **数值大小的判断:**\n - 在整数比较中,位数更多的数通常更大,但在这里两者都是两位数,需要比较每一位上的数字。\n - 比较十位数:\\(2\\)(在20中)与 \\(1\\)(在11中)。显然,\\(2 > 1\\)。\n \n3. **得出结论:**\n - 因此,\\(20\\) 大于 \\(11\\)。\n\n最终答案是:\n\n\\[\n\\boxed{20 \\text{ 比 } 11 \\text{ 大}}\n\\]', refusal=None, role='assistant', audio=None, function_call=None, tool_calls=None, reasoning_content='首先,比较两个数的数值大小。\n\n20和11都是整数。\n\n通过直接比较,可以发现20大于11。\n\n因此,20是较大的数。\n
流式请求
- 请求示例
from openai import OpenAI
client = OpenAI(
# 替换下列示例中参数,将your_APIKey替换为真实值,如何获取API Key请查看https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Um2wxbaps#步骤二-获取api-key
api_key="your_APIKey"
# 千帆ModelBuilder平台地址
base_url="https://qianfan.baidubce.com/v2",
)
# Round 1
messages = [{"role": "user", "content": "20和11,哪个数大?"}] # 对话messages信息
response = client.chat.completions.create(
model="deepseek-r1-distill-qwen-32b", #模型对应的model值,请查看支持的模型列表:https://cloud.baidu.com/doc/WENXINWORKSHOP/s/wm7ltcvgc
messages=messages,
stream=True
)
reasoning_content = ""
content = ""
for chunk in response:
if chunk.choices[0].delta.reasoning_content:
print(chunk.choices[0].delta.reasoning_content, end="")
reasoning_content += chunk.choices[0].delta.reasoning_content
else:
print(chunk.choices[0].delta.content, end="")
content += chunk.choices[0].delta.content
# Round 2
messages.append({"role": "assistant", "content": content})
messages.append({'role': 'user', 'content': "'strawberry'单词包含几个r?"})
response = client.chat.completions.create(
model="deepseek-r1-distill-qwen-32b",
messages=messages,
stream=True
)
for chunk in response:
if chunk.choices[0].delta.reasoning_content:
print(chunk.choices[0].delta.reasoning_content, end="")
reasoning_content += chunk.choices[0].delta.reasoning_content
else:
print(chunk.choices[0].delta.content, end="")
content += chunk.choices[0].delta.content
- 返回示例
首先,我需要比较20和11这两个数的大小。
20是一个两位数,十位上的数字是2,个位上的数字是0,所以它的实际值是二十。
11也是一个两位数,十位上的数字是1,个位上的数字是1,所以它的实际值是十一。
接下来,我比较这两个数的十位数字。20的十位数字是2,而11的十位数字是1。因为2大于1,所以在十位数上20更大。
因此,20比11大。
要比较数字 **20** 和 **11** 的大小,可以按照以下步骤进行:
1. **数字位数分析**:
- **20** 是一个两位数,十位上的数字是 **2**,个位上的数字是 **0**。因此,20 的实际值是二十。
- **11** 也是一个两位数,十位上的数字是 **1**,个位上的数字是 **1**。因此,11 的实际值是十一。
2. **比较十位数字**:
- 比较十位数字时,20 的十位数字是 **2**,而 11 的十位数字是 **1**。因为 **2 > 1**,所以在十位数上 20 更大。
3. **得出结论**:
- 由于 20 的十位数字大于 11 的十位数字,因此 **20 > 11**。
最终答案是:
\[
\boxed{20 > 11}
\]今天,我遇到了一个有趣的问题:“'strawberry'单词包含几个r?”。一开始,我觉得这个问题挺简单的,但仔细想想,还是需要仔细分析一下。首先,我需要理解什么是“r”,以及它在单词中的位置和出现次数。
首先,我知道“strawberry”是一个英文单词,意思是“草莓”。它的拼写是s-t-r-a-w-b-e-r-r-y。现在,我要数一数其中有多少个“r”。为了确保自己不会漏掉,我可以把单词拆开来看,逐个字母检查。
让我把单词写出来:s, t, r, a, w, b, e, r, r, y。现在,我来数一数“r”出现了几次。第一个字母是s,不是r。第二个是t,也不是。第三个是r,这算第一个r。接下来是a、w,都不是r。然后是b,接着是e,都不算。接下来是r,这是第二个r。再来一个r,这是第三个r。最后一个是y,不是r。
所以,按照这个拆分,我找到了三个r。但是,我有点疑惑,因为有时候在发音中,可能会有连音或者发音上的变化,会不会影响r的出现次数呢?为了确认,我决定再仔细检查一遍。
让我重新写下单词,并标出每个字母的位置:1-s, 2-t, 3-r, 4-a, 5-w, 6-b, 7-e, 8-r, 9-r, 10-y。这样看起来,r出现在第3、第8和第9位,总共有三个r。
不过,我又想到,有些时候,单词在书写时可能会有变化,比如不同的拼写习惯或者方言中的拼写差异,会不会影响r的数量呢?为了进一步确认,我查了一下“strawberry”的标准拼写,确认它的拼写确实是s-t-r-a-w-b-e-r-r-y,有三个r。
因此,我的结论是,“strawberry”这个单词中包含三个r。虽然一开始觉得简单,但通过这样的详细分析,我更加确信自己的答案了。
自定义安全等级和appid
- 请求示例
from openai import OpenAI
client = OpenAI(
# 替换下列示例中参数,将your_APIKey替换为真实值,如何获取API Key请查看https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Um2wxbaps#步骤二-获取api-key
api_key="your_APIKey",
# 千帆ModelBuilder平台地址
base_url="https://qianfan.baidubce.com/v2",
# 千帆ModelBuilder平台应用ID,如何获取请查看V2版本应用ID:https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Fllg87pck#v2版本应用id
default_headers={"appid": "app-xxxxxxxx"}
)
safety= {
"input_level": "none"
}
web_search={
"enable":True,
"enable_trace":True
}
extra_data={
"safety":safety,
"web_search":web_search
}
completion = client.chat.completions.create(
#模型对应的model值,请查看支持的模型列表:https://cloud.baidu.com/doc/WENXINWORKSHOP/s/wm7ltcvgc
model="ernie-3.5-8k",
# 对话messages信息
messages=[
{"role": "user", "content": "今天上海天气怎么样"}
],
stream=True,
extra_body=extra_data
)
for chunk in completion:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="")
- 返回示例
今天上海的天气情况如下:
### 一、实时天气概况
* **天气现象**:多云。
* **温度**:当前温度为9℃,体感温度为7℃。
* **湿度**:相对湿度为84%。
* **风力**:西风2级。
* **紫外线指数**:1,属于紫外线最弱级别,外出时可轻微防护。
### 二、未来短时间天气预报(今天)
* **日间**:
+ 天气现象:中雨,降水概率为90%。
+ 风向风力:西北风3级。
+ 最高气温:11℃。
* **夜间**:
+ 天气现象:小雨,降水概率为80%。
+ 风向风力:西风3级。
+ 最低气温:7℃。
### 三、生活气象指数
* **钓鱼**:不太适宜。
* **穿衣**:建议穿大衣类衣物,因为天气较凉。
* **洗车**:不宜,因为近期有雨。
* **运动**:不适宜,可能受天气影响。
* **旅游**:一般,外出时需携带雨具以应对可能的降雨。
综上所述,今天上海天气以多云转中雨为主,夜间可能转为小雨,气温适中但略偏低,湿度较大,风力适中。建议市民外出时携带雨具并注意适当增添衣物以防感冒。%