大模型语言模型gpt消息类型:系统消息system message、用户消息user message、助手消息assistant message、函数调用消息function message的区别

文章目录

大模型语言模型消息类型

在大型语言模型(如GPT-4)的交互过程中,不同类型的消息用于区分不同的角色和功能。以下是用户消息(User Message)助手消息(Assistant Message)、**系统消息(System Message)函数调用消息(Function Message)**的详细区别:

1. 系统消息(System Message)

定义:系统消息用于设定模型的整体行为、角色和上下文。它通常在对话的开始阶段提供,用于指导模型如何响应后续的用户输入。
功能
- 设定角色:例如,“你是一个知识渊博的中文助手。”
- 定义行为规范:如,“请以简洁明了的方式回答问题。”
- 限制内容:例如,“避免讨论敏感话题。”
示例
{
  "role": "system",
  "content": "你是一个友好的中文助手,擅长回答各种问题并提供有用的建议。"
}

2. 用户消息(User Message)

定义:用户消息代表用户输入的内容,即用户提出的问题、指令或请求。
功能
- 提问:例如,“今天天气怎么样?”
- 指令:如,“帮我写一封求职信。”
- 提供信息:例如,“以下是我的日程安排,请帮我优化。”
示例
{
  "role": "user",
  "content": "请帮我解释一下量子计算的基本原理。"
}

3. 助手消息(Assistant Message)

定义:助手消息是模型根据用户消息生成的响应。这些消息旨在直接回答用户的问题或完成用户的请求。
功能
- 回答问题:如,“量子计算利用量子比特进行运算,能够在某些任务上比经典计算机更高效。”
- 执行任务:例如,编写代码、撰写文档等。
- 提供建议:如,推荐书籍、优化计划等。
示例
{
  "role": "assistant",
  "content": "量子计算利用量子比特(qubits)进行运算,这些比特可以同时处于0和1的叠加状态,使得量子计算机在处理某些复杂问题时具有并行计算的优势。"
}

4. 函数调用消息(Function Message)

定义:函数调用消息用于模型调用预定义的函数或API,以完成特定任务或获取外部数据。这通常在需要模型与外部系统交互时使用。
功能
- 调用API:如获取实时天气数据、查询数据库等。
- 执行计算:例如,复杂的数学计算或数据处理。
- 触发操作:如发送电子邮件、设置提醒等。
示例
{
  "role": "function",
  "name": "get_weather",
  "content": {
    "location": "北京",
    "date": "2025-01-02"
  }
}

代码示例1

# -*- coding: utf-8 -*-

"""
Author: Dontla
Date: 2024-12-27
Description: test3.py
"""

import os
import openai
import json
import time
from redlines import Redlines
import re


def get_openai_key():
    """
    自动查找 .env 文件并加载 OpenAI API 密钥。
    """
    from dotenv import load_dotenv, find_dotenv
    load_dotenv(find_dotenv())
    return os.getenv('OPENAI_API_KEY')


def get_custom_openai_client():
    return openai.OpenAI(
        # 如果使用自定义 API 端点(如 https://xiaoai.plus/v1),取消下面一行的注释并设置你的 API 基础 URL
        base_url='https://xiaoai.plus/v1',

        # 在代码中直接指定 api_key(不推荐,可能导致api key泄漏)
        # api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

        # 通过环境变量读取 api_key(推荐)
        api_key=get_openai_key()
    )


def get_completion_from_messages(messages, temperature=0.7):
    """
    调用 OpenAI API 获取基于消息列表的完成内容。

    参数:
        messages (list of dict): 要发送给模型的消息列表,通常包含多个角色的对话。
        temperature (float, optional): 控制生成文本的随机性。范围为0到1。默认值为0.7。

    返回:
        str: 模型生成的回复内容。如果请求失败,则返回 `None`。
    """
    try:
        client = get_custom_openai_client()
        response = client.chat.completions.create(
            # model="gpt-4",
            model="gpt-4o-mini",
            messages=messages,
            temperature=temperature  # 设置 temperature 参数
        )
        return response.choices[0].message.content.strip()
    except Exception as e:
        print("获取完成内容失败,错误信息:", e)
        return None


def normalize_spaces(s):
    return re.sub(r'\s+', ' ', s).strip()


if __name__ == "__main__":

    # 中文
    messages = [
        {'role': 'system', 'content': '你是一个像莎士比亚一样说话的助手。'},
        {'role': 'user', 'content': '给我讲个笑话'},
        {'role': 'assistant', 'content': '鸡为什么过马路'},
        {'role': 'user', 'content': '我不知道'}]

    response = get_completion_from_messages(messages, temperature=1)

    if response:
        print(f"\nresponse:\n{response}")
    else:
        print("未能获取到有效的回复。")

在这里插入图片描述

代码示例中,各种类型消息被手动添加到 messages 列表中,这是为了模拟之前的对话历史。在实际应用中,这些消息应当来源于会话记录,并被保存和管理以便在后续请求中使用。

代码示例2:添加函数调用消息

参考文章:大模型语言模型gpt——函数调用消息function message

总结

在实际应用中,这些消息类型共同协作,确保对话的顺畅和功能的实现。例如,系统消息设定了助手的基本行为,用户通过用户消息提出需求,助手通过助手消息进行响应,必要时通过函数调用消息与外部系统交互,以提供更全面和动态的服务。

  • 系统消息:设定模型的角色和行为规范。
  • 用户消息:用户输入的问题、指令或信息。
  • 助手消息:模型生成的回应,直接回答用户需求。
  • 函数调用消息:模型调用外部函数或API以完成特定任务。

理解这些消息类型的区别,有助于更有效地设计和管理与大型语言模型的交互,提高对话的准确性和实用性。

### 解决无效令牌问题 当提到 `invalid token` 错误时,通常涉及多个领域中的不同上下文。以下是针对几种常见情况的具体解决方案: #### Android XML 文件解析错误 在 Android 中读取 XML 文件时可能出现 `not well-formed (invalid token)` 的错误[^1]。这通常是由于 XML 文件本身不符合标准格式引起的。要解决此问题,可以采取以下措施: - **验证 XML 结构**:确保 XML 文件遵循正确的结构规则,例如标签匹配、属性值加引号等。 - **编码一致性**:确认文件保存的字符集与程序期望一致(如 UTF-8),并避免非法字符。 ```java try { File inputFile = new File("input.xml"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(inputFile); } catch (SAXException | IOException e) { System.out.println("XML parsing failed due to invalid format."); } ``` --- #### CSRF Token 验证失败 CSRF(跨站请求伪造)Token 不合法可能是因为会话过期或客户端未正确传递 Token[^2]。处理方法如下: - **检查 Token 生命周期**:确保服务器端生成的 Token 在有效期内被使用。 - **前端同步机制**:通过隐藏表单字段或其他方式将 Token 嵌入到每次提交的数据中。 ```javascript function addCsrfTokenToRequest(xhr) { xhr.setRequestHeader('X-CSRF-Token', document.querySelector('[name="_csrf"]').value); } // 使用 AJAX 请求时调用该函数 var xhr = new XMLHttpRequest(); addCsrfTokenToRequest(xhr); xhr.open("POST", "/submit-form", true); xhr.send(formData); ``` --- #### Python 语法错误 Python 报告 `SyntaxError: invalid syntax` 可能由拼写错误、缩进不一致或者遗漏括号等问题引起[^3]。建议执行以下操作来排查原因: - **代码审查工具**:利用 IDE 或静态分析器自动检测潜在问题。 - **逐步调试运行**:逐行测试脚本以定位具体位置。 ```python def example_function(param): if param > 0: # 缩进错误示例 print("Positive value detected.") else: return None ``` 修复后的版本应调整为统一层次级距: ```python def example_function_fixed(param): if param > 0: print("Positive value detected.") else: return None ``` --- #### 大型语言模型上下文长度超限 对于 LLM 提供商返回的 `context_length_exceeded` 类型异常[^4],其核心在于减少输入序列总词数至允许范围内。策略包括但不限于: - **摘要提取技术应用**:先对原始文档做初步压缩再送入算法; - **分批查询接口**:把长篇幅拆分成若干短片段分别计算后再汇总结果; ```python import openai response_chunks = [] chunk_size = 2000 # 每次发送的最大token数量 for i in range(0, len(text), chunk_size): segment = text[i:i + chunk_size] response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": segment}, {"role": "assistant", "content": ""}] ) response_chunks.append(response['choices'][0]['message']['content']) final_output = ''.join(response_chunks) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dontla

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值