推理模型最佳实践
阶跃星辰为开发者提供了两款多模态推理模型 —— step-3 和 step-r1-v-mini,它们具备强大的图像理解和深度思考能力,能够处理复杂的逻辑推理、数学问题、代码生成等任务。
step-3 是一款全新多模态推理模型,能够同时处理图文输入并输出文字回复。具备深度思考自主开展推理过程的能力。即在生成最终输出前完成一段“思考”过程(例如通过 reasoning 字段展示思考信息),提高最终结果的准确性和推理深度。在调用时,开发者无需预设过多的系统提示(sys_prompt),模型可自动发挥内在的深度思考能力。
step-3 模型最佳实践
step-3 作为多模态推理模型,其温度参数 temperature 一般设置为 0.7 并可根据实际需求调整温度。我们推荐将温度设置在 0.1 ~ 1.0 之间。
此外,在使用过程中,我们建议开发者不要设置 max_tokens 参数。因为 step-3 模型会根据问题的复杂度和内容自动调整输出长度,设置 max_tokens 可能会导致无法输出完整的 reasoning 和 content。在不设置时,模型的上下文总长为 65536 ,并根据问题的复杂度进行长短不一的思考。
step-3 模型特性
- 全能理解:像人脑一样同时”看懂”图片和”理解”文字,比如你能发一张图表图片+一段问题,它会先分析图片里的数据,再结合文字内容综合回答。
- 深度思考过程:遇到难题时会先自己”想一想”,比如解数学题时会列出解题步骤、分析问题关键点,这个思考过程还会显示出来,就像你解题时的草稿纸。
- 不用复杂指令:不需要你写很多提示词,它自己就能发挥推理能力。比如你说”看看这张地图,告诉我最佳路线”,它就能自动分析地图并规划路径。
- 多才多艺:会解数学题、能看懂图表、还能帮你写代码。
- 学习能力强:通过海量虚拟训练(比如用合成数据模拟各种场景),让它在处理复杂任务时更可靠,已经在很多专业测试里拿了高分。
核心示例代码
以下使用最简单的代码实现 step-3 模型对图片进行分析。
import time
import base64
from openai import OpenAI
BASE_URL,STEP_API_KEY = "https://api.stepfun.com/v1", "YOUR_STEPFUN_APIKEY"
# 选择模型
COMPLETION_MODEL = "step-3" # 也可替换为 step-r1-v-mini
# 用户问题提示
user_prompt = "帮我看看这是什么菜,如何制作?"
# 将本地图片转换为 base64 字符串
def image_to_base64(image_path):
with open(image_path, "rb") as image_file:
encoded_string = base64.b64encode(image_file.read())
return encoded_string.decode('utf-8')
# 注意提供准确的图片路径
image_path1 = "./宫保鸡丁.png"
bstring1 = image_to_base64(image_path1)
# 构造消息,依靠模型自主深度思考
messages = [
{"role": "user", "content": [
{"type": "image_url", "image_url": {"url": f"data:image/jpg;base64,{bstring1}", "detail": "high"}},
{"type": "text", "text": user_prompt}
]}
]
time_start = time.time()
client = OpenAI(api_key=STEP_API_KEY, base_url=BASE_URL)
try:
response = client.chat.completions.create(
model=COMPLETION_MODEL,
messages=messages,
stream=True
)
except Exception as e:
print("请求 API 时发生异常:", e)
exit(1)
try:
for chunk in response:
# 你可以在这里获取到补全的内容,并判断是否是 reaonsing 内容。
print(chunk)
except Exception as e:
print("处理流式结果时发生错误:", e)
time_end = time.time()
print(f"\n总生成时间: {time_end - time_start:.2f}秒")输入参数详情可以参考Chat Completion 文档
输出示例
ChatCompletionChunk(id='f41b47b291e690d3659f6d8c01a6b0a8.20f353f807a52a5f3252692a22d49568', choices=[Choice(delta=ChoiceDelta(content='', function_call=None, refusal=None, role='assistant', tool_calls=None), finish_reason=None, index=0, logprobs=None)], created=1744290861, model='step-3', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=0, prompt_tokens=701, total_tokens=701, completion_tokens_details=None, prompt_tokens_details=None), agent='')
ChatCompletionChunk(id='f41b47b291e690d3659f6d8c01a6b0a8.20f353f807a52a5f3252692a22d49568', choices=[Choice(delta=ChoiceDelta(content='', function_call=None, refusal=None, role='assistant', tool_calls=None, reasoning='\n'), finish_reason=None, index=0, logprobs=None)], created=1744290861, model='step-3', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=1, prompt_tokens=701, total_tokens=702, completion_tokens_details=None, prompt_tokens_details=None), agent='')
ChatCompletionChunk(id='f41b47b291e690d3659f6d8c01a6b0a8.20f353f807a52a5f3252692a22d49568', choices=[Choice(delta=ChoiceDelta(content='', function_call=None, refusal=None, role='assistant', tool_calls=None, reasoning='好的'), finish_reason=None, index=0, logprobs=None)], created=1744290861, model='step-3', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=2, prompt_tokens=701, total_tokens=703, completion_tokens_details=None, prompt_tokens_details=None), agent='')
。。。
ChatCompletionChunk(id='f41b47b291e690d3659f6d8c01a6b0a8.20f353f807a52a5f3252692a22d49568', choices=[Choice(delta=ChoiceDelta(content='!', function_call=None, refusal=None, role='assistant', tool_calls=None), finish_reason=None, index=0, logprobs=None)], created=1744290861, model='step-3', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=1031, prompt_tokens=701, total_tokens=1732, completion_tokens_details=None, prompt_tokens_details=None), agent='')
ChatCompletionChunk(id='f41b47b291e690d3659f6d8c01a6b0a8.20f353f807a52a5f3252692a22d49568', choices=[Choice(delta=ChoiceDelta(content='', function_call=None, refusal=None, role='assistant', tool_calls=None), finish_reason='stop', index=0, logprobs=None)], created=1744290861, model='step-3', object='chat.completion.chunk', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=1032, prompt_tokens=701, total_tokens=1733, completion_tokens_details=None, prompt_tokens_details=None), agent='')响应体字段说明请参考文档
获取 Reasoning 内容
阶跃星辰的推理大模型在处理复杂问题时,会在输出中包含 reasoning 字段,展示模型的思考过程。开发者可以通过判断该字段是否存在来获取模型的思考信息。
if chunk.choices[0].delta.reasoning:
reasoning = chunk.choices[0].delta.reasoning
print("模型思考过程:", reasoning)对于非流式场景可以直接提取 reasoning 字段,获取模型的思考过程。
msg = completion.choices[0].message.content
reasoning = completion.choices[0].message.reasoning通过 reasoning_content 字段,获取模型的思考过程。
如果你目前使用的推理模型中已经使用 reasoning_content 字段,可以继续使用该字段。阶跃星辰的推理模型也支持这一字段,开发者可以根据自己的需求选择使用。
只需要在请求时传入 reasoning_format="deepseek-style" 即可。(如使用 OpenAI SDK,则需要通过 extra_body 字段传入)
注意事项
- 深度思考优势:模型在接收到图片及文字提示后,会首先经过内部思考(reasoning)再输出最终结果。这一过程有助于完成复杂的关联和因果推理,但可能会使响应时间略有延迟,应据此考虑超时设置。
- JSON 模式与联网搜索限制:当前版本暂时不支持 JSON mode 以及联网搜索功能,后续版本会逐步补齐这些功能。开发者在使用过程中请以当前能力为准,确保设计逻辑不依赖联网检索结果。
- 图片数据格式:确保传入的图片数据使用正确的 Base64 编码格式,并按照 API 要求指定图片类型(如 JPG/JPEG、PNG、静态GIF、WebP等)和细节参数,保证推理的准确性。详见文档
- 错误处理与日志记录:在输出时已加入Trace ID,若遇到模型推理问题,可将此ID反馈给我们。