# 文本生成概述
在开发智能应用的过程中，开发者经常需要处理文本理解和生成的任务，但传统的文本处理方法往往效率低下且效果不佳。语言大模型具备文本理解和文字对话的能力，如当您传入文本信息时，大模型可以理解信息，并结合这些信息进行回复。然而，如何高效地利用这些大模型成为了一个挑战。
本文主要介绍MaaS文本类型模型的使用场景，支持的模型，以及如何在模型API中设置[多轮对话](https://support.huaweicloud.com/model-call-maas/model-call-100.html)，[流式输出](https://support.huaweicloud.com/model-call-maas/model-call-101.html)、[深度思考](https://support.huaweicloud.com/model-call-maas/model-call-005.html)、[前缀续写](https://support.huaweicloud.com/model-call-maas/model-call-006.html)、[工具调用](https://support.huaweicloud.com/model-call-maas/model-call-008.html)等功能，以满足您不同的业务诉求，从而提升您的工作效率。
#### 基础概念
在对话Chat API中，通过messages对象将提示词信息输入模型，其中role字段定义信息输入的角色， content承载消息内容。模型会根据输入的角色和信息来理解内容，并生成对应的回复。输入给模型的消息主要有以下三种：
- **用户消息**
  最终用户传入给模型消息，此时role字段应设置为user ，该类型消息往往是包含用户希望模型处理的具体任务或者处理的信息。
  下面就是一个简单的用户消息，要求模型对自身进行介绍。
  ```
  "messages": [
      { "role": "user", "content": "介绍下你自己"}         
  ]
  ```
  
- **系统消息**
  用于设定模型的长期人格、行为准则和对话上下文，此时role字段应设置为system。如果设置系统消息，请放在messages列表的第一位。
  下面是一个系统消息示例，提示模型是一个助手，并限制了模型的回答内容。
  ```
  "messages": [
      {"role": "system", "content": "你是一位乐于助人且简洁的助手。回答尽量不超过两句话。" }             
  ]
  ```
  
- **模型消息**
  用于提供对话历史，此时role字段应设置为assistant 。在多轮对话中，会需要传入对话历史，让模型知道它之前说过什么，从而保持连贯性。
  ```
  "messages": [
      {"role": "system", "content": "You are a helpful assistant."},             
      {"role": "user","content": "你好" },
      {"role": "assistant", "content": "你好！很高兴见到你！ 我是你的AI助手，随时准备为你提供帮助。无论是回答问题、协助分析，还是聊天解闷，我都可以为你效劳。有什么需要我做的吗？"},             
      {"role": "user","content": "介绍下你自己" }
  ]
  ```
  
 
#### 应用场景
您可以在以下场景中使用模型的文本生成能力。
表1应用场景 
| 场景     | 场景细分     | 说明                                    |
|:---|:---|:---|
| 内容创作    | 文章生成   | 自动生成文章、新闻、评论等实用文本，提高内容产出效率。           |
| 内容创作    | 文本润色      | 在新闻报道、博客文章创作中辅助作者进行创意构思和文本润色。         |
| 智能交互   | 智能客服    | 在客服系统中生成自然流畅的回复，提升用户体验。              |
| 智能交互   | 聊天机器人  | 在线咨询、英语学习等领域，理解用户意图、按照要求并生成回复。      |
| 个性化教学 | 学科问题解答 | 分析题目、考点说明、解题思路、解题结果。                 |
| 个性化教学 | 语言学习      | 按照要求，进行某些语种对话，帮助用户习惯目标语言日常交流。         |
| 机器翻译   | 自动翻译      | 结合语音类模型，实现同声传译、日常字幕生成、文本语言翻译等。        |
| 工作处理     | 数据处理   | 根据读入的数据以及任务要求进行处理，如读取研报、分析新闻、评价内容等。 |
   
#### 计费说明
将文本对话的输入和输出转化为Token计费。详情请参见[MaaS文本生成模型](https://support.huaweicloud.com/price-maas/price-maas-0002.html)。
#### 支持模型
当前支持文本生成的模型请参见[文本生成](https://support.huaweicloud.com/model-list-maas/model_list_0001.html#section1)。
模型选择建议：
- 选择最新的模型：如果您首次选择模型，推荐选择版本最新的模型。在文本分类、内容创作等能力大幅提升。
- 选择对应能力的模型：您可以在[文本生成](https://support.huaweicloud.com/model-list-maas/model_list_0001.html#section1)的能力支持列查看模型支持的能力。
 
#### API说明
模型调用的完整参数列表请见[对话Chat/Post](https://support.huaweicloud.com/model-call-maas/model-call-018.html)。
#### 前提条件
- 已在"模型推理 \> 在线推理 \> 预置服务"页签开通预置服务。详情请见[开通MaaS预置服务](https://support.huaweicloud.com/model-call-maas/model-call-052.html)。
- （可选）如果需要控制服务调用流量，可提前创建自定义接入点，详情请参见[创建自定义接入点](https://support.huaweicloud.com/model-call-maas/model-call-048.html#ZH-CN_TOPIC_0000002549717747__zh-cn_topic_0000002397381901_section446813817237)。

- 已获取API Key。详情请见[在MaaS管理API Key](https://support.huaweicloud.com/model-call-maas/model-call-049.html)。
- 已获取模型服务的model参数值。支持的模型信息和接口详情请见[对话Chat/Post](https://support.huaweicloud.com/model-call-maas/model-call-018.html)。
 
#### 快速开始
运行如下代码即可开始与GLM-5.2模型对话，实现内容创作、摘要生成等。
- [Python]
  ```
  import requests
  import json
  if __name__ == '__main__':
      url = "https://api.modelarts-maas.com/v2/chat/completions"  # API地址
      api_key = "MAAS_API_KEY"  # 把MAAS_API_KEY替换成已获取的API Key
      # Send request.
      headers = {
          'Content-Type': 'application/json',
          'Authorization': f'Bearer {api_key}'
      }
      data = {
          "model": "glm-5.2",  # model参数
          "messages": [
              {"role": "system", "content": "You are a helpful assistant."},
              {"role": "user", "content": "介绍下你自己"}
          ]
      }
      response = requests.post(url, headers=headers, data=json.dumps(data), verify=False)
      # Print result.
      print(response.status_code)
      print(response.text)
  ```
  模型回复预览：
  ```
  你好！我是一个由Z.ai训练的大语言模型，专门设计用于回答问题、提供信息和协助解决各种任务。我可以帮助你理解复杂的概念、撰写文本、翻译语言、生成创意内容等。我的知识来源于大量的公开数据，但请注意，我无法访问实时信息或个人数据。有什么我可以帮你的吗？
  ```
- [Curl]
  ```
  curl -X POST "https://api.modelarts-maas.com/v2/chat/completions"\
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $MAAS_API_KEY" \
    -d '{
      "model": "glm-5.2",
      "messages": [
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "请介绍一下自己"}
      ]
    }'
  ```
  模型回复预览：
  ```
  你好！我是一个由Z.ai训练的大语言模型，专门设计用于回答问题、提供信息和协助解决各种任务。我可以帮助你理解复杂的概念、撰写文本、翻译语言、生成创意内容等。我的知识来源于大量的公开数据，但请注意，我无法访问实时信息或个人数据。有什么我可以帮你的吗？
  ```
- [Java]
  建议JDK版本为15+。
  ```
  import java.net.URI;
  import java.net.http.HttpClient;
  import java.net.http.HttpRequest;
  import java.net.http.HttpResponse;
  import java.time.Duration;
  public class ChatCompletionsExample {
      public static void main(String[] args) {
          // 接口地址
          String apiUrl = "https://api.modelarts-maas.com/v2/chat/completions";
          // 把MAAS_API_KEY替换成已获取的API Key
          String apiKey = "MAAS_API_KEY";
          // 替换为你要调用的模型名称
          String modelName = "glm-5.2";
          // 构造请求体
          String requestBody = String.format(
              """
                  {
                      "model": "%s",
                      "messages": [
                          {"role": "system", "content": "You are a helpful assistant."},
                          {"role": "user", "content": "请介绍一下自己"}
                      ]
                  }""", modelName);
          // 创建 HttpClient
          HttpClient client = HttpClient.newBuilder()
                  .connectTimeout(Duration.ofSeconds(10))
                  .build();
          // 创建请求
          HttpRequest request = HttpRequest.newBuilder()
                  .uri(URI.create(apiUrl))
                  .header("Content-Type", "application/json")
                  .header("Authorization", "Bearer " + apiKey)
                  .POST(HttpRequest.BodyPublishers.ofString(requestBody))
                  .build();
          try {
              // 发送请求并打印结果
              HttpResponse<String> response = client.send(
                      request, HttpResponse.BodyHandlers.ofString());
              System.out.println("HTTP Status: " + response.statusCode());
              System.out.println("Response Body:\n" + response.body());
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
  }
  ```
  模型回复预览：
  ```
  你好！我是一个由Z.ai训练的大语言模型，专门设计用于回答问题、提供信息和协助解决各种任务。我可以帮助你理解复杂的概念、撰写文本、翻译语言、生成创意内容等。我的知识来源于大量的公开数据，但请注意，我无法访问实时信息或个人数据。有什么我可以帮你的吗？
  ```
#### 相关文档
上文介绍了基础的交互方式。针对更复杂的场景，可参考：
[多轮对话](https://support.huaweicloud.com/model-call-maas/model-call-100.html)：适用于智能客服、对话式问答，角色扮演等交互式场景。
[流式输出](https://support.huaweicloud.com/model-call-maas/model-call-101.html)：适用于长文本生成、代码生成、实时翻译等场景；降低了首字延迟，用户更快看到响应，提升交互体验。
[深度思考](https://support.huaweicloud.com/model-call-maas/model-call-005.html)：适用于复杂推理、策略分析等需要更高质量、更具条理的深度回答的场景。
[前缀续写](https://support.huaweicloud.com/model-call-maas/model-call-006.html)：用户给定一段文本的前缀（即开头部分），大模型即可按照用户要求生成语义连贯、合理的后续文本内容。
[Function Call](https://support.huaweicloud.com/model-call-maas/model-call-008.html)：将大模型与外部工具和API相连的关键功能，它能够将用户的自然语言请求智能地转化为对特定工具或API的调用，从而高效满足用户的特定需求。
正确设计和编写提示词，可以提高模型输出的内容质量和准确性，详情请参考[提示词工程实践](https://support.huaweicloud.com/bestpractice-maas/bestpractice_maas_0016.html)。
新模型文本生成最佳实践请参考[模型调用最佳实践总览](https://support.huaweicloud.com/bestpractice-maas/bestpractice_maas_0000.html)。
