client.chat.completions.create用法介绍

client.chat.completions.create() 是 OpenAI Python SDK 里的 API 方法,用于调用 GPT 模型生成回复。

示例

response = client.chat.completions.create(
    model="gpt-4",
    messages=[
        {"role": "system", "content": "你是一个有帮助的助手"},
        {"role": "user", "content": "你好,介绍一下自己"}
    ],
    temperature=0.7,
    top_p=1.0,
    n=1,
    stream=False,
    stop=None,
    max_tokens=200,
    presence_penalty=0.0,
    frequency_penalty=0.0,
    logit_bias={},
    response_format="text"
)

参数介绍

必要参数

  • model:str格式 指定模型,如 gpt-4, gpt-4-turbo, gpt-3.5-turbo
  • messages list格式 聊天记录,messages 参数是一个列表,每个消息是一个字典,包含:
    • role: 消息的角色,可选 “system” | “user” | “assistant” | “function” | “tool”
    • content: 消息内容

在这里插入图片描述

  • 示例
messages=[
    {"role": "system", "content": "你是一个智能助手"},
    {"role": "user", "content": "你好"},
    {"role": "assistant", "content": "你好!有什么可以帮忙的吗?"}
]

messages的role说明

  • “system”(系统角色):设定 AI 角色、个性、行为规则,适合用来引导 AI 的行为
{"role": "system", "content": "你是一个风趣幽默的 AI 助手"}

  • “user”(用户消息):代表用户输入,主要用于提供问题或指令
{"role": "user", "content": "给我讲个笑话"}

  • “assistant”(AI 回复):代表 AI 的回答,用于记忆上下文(重要),如果省略 assistant 消息,AI 可能不会记住过去的回复
{"role": "assistant", "content": "当然!为什么鸡过马路?为了到另一边!"}

用以保存上下文

messages = [
    {"role": "system", "content": "你是一个智能助手"},
    {"role": "user", "content": "你好"},
    {"role": "assistant", "content": "你好!"},
    {"role": "user", "content": "我们刚才聊了什么?"}
]

  • “function”(函数调用结果):当 AI 要求调用外部函数时,会自动生成 “function” 角色的消息,content 必须是 None,name 表示函数名,函数返回值会填充 content
{"role": "function", "name": "get_weather", "content": '{"temperature": "25°C", "condition": "晴天"}'}

执行流程示例:

import openai

# 定义本地的天气 API
def get_weather(city):
    weather_data = {
        "北京": {"temperature": "20°C", "condition": "晴天"},
        "上海": {"temperature": "18°C", "condition": "多云"},
        "广州": {"temperature": "25°C", "condition": "雨天"},
    }
    return weather_data.get(city, {"temperature": "未知", "condition": "未知"})

# 定义可调用的 functions
functions = [
    {
        "name": "get_weather",
        "description": "获取指定城市的天气信息",
        "parameters": {
            "type": "object",
            "properties": {
                "city": {
                    "type": "string",
                    "description": "需要查询天气的城市名称",
                }
            },
            "required": ["city"]
        }
    }
]

# 调用 OpenAI API
client = openai.OpenAI()

messages = [
    {"role": "system", "content": "你是一个天气助手"},
    {"role": "user", "content": "北京的天气怎么样?"}
]

response = client.chat.completions.create(
    model="gpt-4-turbo",
    messages=messages,
    functions=functions
)

# 解析大模型的响应
assistant_message = response.choices[0].message
print(assistant_message)

# 如果 AI 触发了函数调用
if assistant_message.function_call:
    function_name = assistant_message.function_call.name
    function_args = assistant_message.function_call.arguments

    if function_name == "get_weather":
        city = function_args["city"]
        function_result = get_weather(city)

        # 把函数执行结果加入 `messages`
        messages.append(assistant_message)  # 记录 AI 触发的函数调用
        messages.append({
            "role": "function",
            "name": function_name,
            "content": str(function_result)
        })

        # 让 AI 继续处理返回结果
        final_response = client.chat.completions.create(
            model="gpt-4-turbo",
            messages=messages
        )

        print(final_response.choices[0].message)

  • “tool”(工具调用结果,GPT-4 Turbo):GPT-4 Turbo 增加的新角色,用于 API 工具调用,用法类似 function
{"role": "tool", "name": "search_tool", "content": "在网上找到了你要的信息"}

name 用法(优化对话记忆)

name 只适用于 user 和 function,用于标识不同来源的消息。如果 name 为空,AI 可能会把两条消息看作同一个人的输入。

messages = [
    {"role": "user", "name": "Alice", "content": "你好"},
    {"role": "user", "name": "Bob", "content": "你是谁?"}
]

messages总结

在这里插入图片描述

可选参数

在这里插入图片描述

用法示例

生成一个回复

response = client.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": "你好!"}]
)

print(response.choices[0].message.content)

生成多个回复

response = client.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": "说3句笑话"}],
    n=3
)

for choice in response.choices:
    print(choice.message.content)

对于长文本

response = client.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": "讲一个长故事"}],
    stream=True
)

for chunk in response:
    print(chunk.choices[0].delta.content, end="", flush=True)

返回json

response = client.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": "返回一个 JSON 格式的天气预报"}],
    response_format="json"
)

print(response.choices[0].message.content)  # 应该是一个 JSON 格式的字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值