第一个 LLM调用

一、通义千问大模型接入

阿里云地址:大模型服务平台百炼控制台

二、代码调用云端大模型

如果安装依赖过慢,可选用国内镜像源

或者通过uv添加

点击模型,找到示例代码

python 复制代码
from openai import OpenAI
import os

client = OpenAI(
    # 如果没有配置环境变量,请用阿里云百炼API Key替换:api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY", "x7ARU8kktQ8aahn-w58Q_HJ5aeQqYMRCt36IeI"),
    base_url="https://llm-wenndyj9zsqatxni.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)

messages = [{"role": "user", "content": "你是谁"}]
completion = client.chat.completions.create(
    model="qwen3.7-max",  # 您可以按需更换为其它深度思考模型
    messages=messages,
    extra_body={"enable_thinking": True},
    stream=True
)
is_answering = False  # 是否进入回复阶段
print("\n" + "=" * 20 + "思考过程" + "=" * 20)
for chunk in completion:
    if not chunk.choices:
        continue
    delta = chunk.choices[0].delta
    if hasattr(delta, "reasoning_content") and delta.reasoning_content is not None:
        if not is_answering:
            print(delta.reasoning_content, end="", flush=True)
    if hasattr(delta, "content") and delta.content:
        if not is_answering:
            print("\n" + "=" * 20 + "完整回复" + "=" * 20)
            is_answering = True
        print(delta.content, end="", flush=True)

三、使用环境变量保护APIKEY

python 复制代码
client = OpenAI(
    # 如果没有配置环境变量,请用阿里云百炼API Key替换:api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://llm-wenndyj9zsqatxni.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)

四、Ollama简介

五、win&mac部署Ollama并运行蒸馏模型

六、代码调用Ollama本地模型

七、OpenAI基础使用-01、OpenAI库的基础使用

解释 assistant 和 system 区别

一句话先分清核心本质,再拆开对比,一看就懂

核心本质区别

  1. system(系统指令) :给 AI 定永久规矩、人设、底线 ,是后台强制规则,不会出现在聊天界面,全程约束 AI 所有回答;
  2. assistant(助手记录) :只是AI 之前说过的话的存档,属于聊天历史,只用来让 AI 记住刚才聊了啥,没有强制约束力。

举生活类比(最好理解)

把 AI 想象成一个线下门店店员:

  1. system = 店长贴在后台的员工守则写死:你必须是 Python 编程专家、只写代码、回答简洁、不许闲聊。守则贴后台,顾客看不见,但店员每一次接待顾客都必须遵守。→ 不管顾客问多少次,这条规则永远生效。

  2. assistant = 店员和顾客刚刚的聊天记录店员上一句说:我是 Python 专家,有什么能帮您?只是存档,没有任何约束作用;只是让店员记得刚才自己说了这句话,对话能接上。如果删掉这段记录,店员就忘了刚才打过招呼,但他依旧会遵守后台的店长守则(system)。

  3. user = 顾客现在的提问顾客:写 for 循环输出 1 到 5。

分维度详细对比

1. 作用完全不同

system
  • 作用:全局约束、定义 AI 身份、回答格式、行为限制
  • 举例:content="你只能回答Python代码,语言专业简洁"
  • 约束力:永久生效,每一轮对话都会遵守
  • 删掉它:AI 失去身份约束,回答会变得杂乱、不符合你的要求
assistant
  • 作用:保存 AI 上一轮的回复,维持多轮对话上下文
  • 举例:content="我是一个Python编程专家。请问有什么可以帮助您的吗?"
  • 约束力:无任何强制规则,只是聊天历史
  • 删掉它:AI 忘记刚才自己说过什么,但依旧遵守 system 设定的身份

2. 使用时机不同

  1. system:整个对话从头到尾只写 1 条,放在 messages 最开头全程不变,不用每次提问重复写。
  2. assistant:每一轮对话新增 1 条 用户提问 → AI 生成回答 → 把这条回答包装成assistant字典塞进 messages 列表,下一轮提问带上,保证对话连贯。

3. 能不能省略

  • system:可以省略,只是 AI 没有固定人设,回答不受控制;
  • assistant:单轮提问(只问一次,不用上下文)完全不需要;多轮连续聊天必须加

拿截图代码举实例对比

python

运行

复制代码
messages=[
    # system:强制规则,AI永久记住自己是Python专家
    {"role": "system", "content": "你是一个Python编程专家。"},
    # assistant:AI之前说的话,只是聊天记录,没有规则
    {"role": "assistant", "content": "我是一个Python编程专家。请问有什么可以帮助您的吗?"},
    # user:用户当前问题
    {"role": "user", "content": "for循环输出1到5的数字"}
]

测试 1:删掉 assistant 这条,只剩 system+user

messages 只剩 system 规则和用户提问结果:AI 依旧以 Python 专家身份写代码,只是不会提到 "刚才打过招呼" 这件事,规则完全不变。

测试 2:删掉 system 这条,只剩 assistant+user

messages 只剩打招呼记录和用户提问结果:AI 没有强制身份约束,可能随便闲聊、不写专业代码,哪怕之前说了自己是编程专家,也不受约束。

最简总结

  1. system = 规矩(管 AI 怎么说话,永久生效)
  2. assistant = 聊天存档(只记 AI 之前说了啥,没有约束力,只为上下文连贯)
python 复制代码
from openai import OpenAI
import os

from main import client

# 1.获取client对象, OpenAI类对象
client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://llm-wenndyj9zsqatxni.cn-beijing.maas.aliyuncs.com/compatible-mode/v1"
)
# 2.调用模型
response = client.chat.completions.create(
    model = "qwen3.7-max",
    messages=[
        {"role": "system", "content": "你是一个Python编程资深专家"},
        {"role": "assistant", "content": "好的,我是编程专家,并且话不多,你要问什么?"}   ,
        {"role": "user", "content": "学习LangChain需要多长时间?"}   ,
    ]
)
# 3.处理结果
print(response.choices[0].message.content)

八、OpenAI基础使用-02、OpenAI库流式输出

python 复制代码
from openai import OpenAI
import os

from main import client

# 1.获取client对象, OpenAI类对象
client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://llm-wenndyj9zsqatxni.cn-beijing.maas.aliyuncs.com/compatible-mode/v1"
)
# 2.调用模型
response = client.chat.completions.create(
    model = "qwen3.7-max",
    messages=[
        {"role": "system", "content": "你是一个Python编程资深专家,并且话非常多"},
        {"role": "assistant", "content": "好的,我是编程专家,并且话非常多,你要问什么?"}   ,
        {"role": "user", "content": "输出1-10的数字,使用Python代码"}   ,
    ],
    stream = True  # 开启了流式输出的功能
)
# 3.处理结果
for chunk in response:
    if not chunk.choices:  # 最后一个chunk(含usage统计)的choices为空
        continue
    content = chunk.choices[0].delta.content
    if content:  # delta.content 可能为 None
        print(content, end="", flush=True)

九、OpenAI基础使用-03、OpenAI库附带历史消息调用模型

python 复制代码
from openai import OpenAI
import os

from main import client

# 1.获取client对象, OpenAI类对象
client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://llm-wenndyj9zsqatxni.cn-beijing.maas.aliyuncs.com/compatible-mode/v1"
)
# 2.调用模型
response = client.chat.completions.create(
    model = "qwen3.7-max",
    messages=[
        {"role": "system", "content": "你是一个AI助理,回答很简介"},
        {"role": "user", "content": "小名有2只宠物狗"}   ,
        {"role": "assistant", "content": "好的"}   ,
        {"role": "user", "content": "小红有3只宠物狗"}   ,
        {"role": "assistant", "content": "好的"}   ,
        {"role": "user", "content": "总共有几只宠物"}   ,
    ],
    stream = True  # 开启了流式输出的功能
)
# 3.处理结果
for chunk in response:
    if not chunk.choices:  # 最后一个chunk(含usage统计)的choices为空
        continue
    content = chunk.choices[0].delta.content
    if content:  # delta.content 可能为 None
        print(content, end="", flush=True)