
# 文本生成
在开发智能应用的过程中，开发者经常需要处理文本理解和生成的任务，但传统的文本处理方法往往效率低下且效果不佳。语言大模型具备文本理解和文本对话的能力，如当您传入文本信息时，大模型可以理解信息，并结合这些信息进行回复。然而，如何高效地利用这些大模型成为了一个挑战。通过这篇教程，您可以学习到如何使用模型服务API，来调用模型理解文本，生成文本内容，并可以基于此API构建或者扩展自己的应用或者自动化任务，从而提高开发效率和应用质量。
#### 应用场景
您可以在以下场景中使用模型的文本生成能力。
表1应用场景 
| 场景    | 场景细分   | 说明                                  |
|:---|:---|:---|
| 内容创作  | 文章生成   | 自动生成文章、新闻、评论等实用文本，提高内容产出效率。         |
| 内容创作  | 文本润色   | 在新闻报道、博客文章创作中辅助作者进行创意构思和文本润色。       |
| 智能交互  | 智能客服   | 在客服系统中生成自然流畅的回复，提升用户体验。             |
| 智能交互  | 聊天机器人  | 在线咨询、英语学习等领域，理解用户意图、按照要求并生成回复。      |
| 个性化教学 | 学科问题解答 | 分析题目、考点说明、解题思路、解题结果。                |
| 个性化教学 | 语言学习   | 按照要求，进行某些语种对话，帮助用户习惯目标语言日常交流。       |
| 机器翻译  | 自动翻译   | 结合语音类模型，实现同声传译、日常字幕生成、文本语言翻译等。      |
| 工作处理  | 数据处理   | 根据读入的数据以及任务要求进行处理，如读取研报、分析新闻、评价内容等。 |
   
#### 计费说明
部署推理服务会基于时长计费。当服务状态为"运行中"和"告警"时，实例正常运行将产生费用；不使用时，请及时停止。详情请见[推理部署计费项](https://support.huaweicloud.com/price-modelarts/price-modelarts-0013.html)。
#### 前提条件
- 要调用的模型服务已在ModelArts平台部署。
- 已获取部署模型URL、API Key和model参数。具体操作请参见[调用预置模型](https://support.huaweicloud.com/model-call-modelarts/model-call-modelarts-0001.html#ZH-CN_TOPIC_0000002548104305__section17445725193413)。
 
#### API参考
模型调用的完整参数列表请见[模型API调用指南](https://support.huaweicloud.com/model-call-modelarts/model-call-modelarts-0004.html)。
#### 编写提示词
提示词（Prompt）是用户与大模型进行交互时输入的文本，用于指导模型生成用户所需的回复内容。正确设计和编写的提示词，可以提高模型输出的内容质量和准确性。提示词的核心作用：
- 明确任务：告诉模型要做什么（例如：翻译、总结、创作、推理等）。
- 提供上下文：补充背景信息，让回复更贴合需求。
- 约束输出格式：指定回答的结构（如列表、JSON、代码等）。
- 控制风格与语气：调整回复的专业性、简洁性或创意性。
在对话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": "介绍下你自己" }
  ]
  ```
  
 
#### 单轮对话
与模型进行一次交互，交互内容为单轮对话，模型根据系统消息和用户消息来返回内容。
因为是非流式输出，需要等待模型推理完所有内容，将内容一次性返回给您，会有一定延时。
以下为单轮对话的示例代码，可通过model参数替换模型，model参数详情请参见[创建对话请求](https://support.huaweicloud.com/model-call-modelarts/model-call-modelarts-0004.html#ZH-CN_TOPIC_0000002516384504__zh-cn_topic_0000002363662136_section17573450594)。
- [Curl]
  ```
  curl -X POST "https://***/v2/infer/***/v1/chat/completions" \   
  -H "Content-Type: application/json" \   
  -H "Authorization: Bearer $API_KEY" \   
  -d '{     
      "model": "qwen3_32b",
      "messages": [       
          {"role": "system", "content": "You are a helpful assistant."},     
          {"role": "user", "content": "你好"}    
      ]
  }'
  ```
- [Python]
  ```
  import requests
  import json
  if __name__ == '__main__':
      url = "https://***/v2/infer/***/v1/chat/completions"  # API地址
      api_key = "API_KEY"  # 把API_KEY替换成已获取的API Key      
      # Send request.
      headers = {
          'Content-Type': 'application/json',
          'Authorization': f'Bearer {api_key}'
      }
      data = {
           "model": "qwen3_32b",  # 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)
  ```
#### 多轮对话
组合使用系统消息、模型消息以及用户消息，可以实现多轮对话，即根据一个主题进行多次对话。
注意：chat.completions接口是无状态的，在每次请求时，将历史信息都放在messages中，并通过role字段设置，让模型了解之前不同角色的不同对话内容，以便进行主题相关的延续性对话。
以下为多轮对话的示例代码，可通过model参数替换模型，model参数详情请参见[创建对话请求](https://support.huaweicloud.com/model-call-modelarts/model-call-modelarts-0004.html#ZH-CN_TOPIC_0000002516384504__zh-cn_topic_0000002363662136_section17573450594)。
- [Curl]
  ```
  curl -X POST "https://***/v2/infer/***/v1/chat/completions" \   
  -H "Content-Type: application/json" \   
  -H "Authorization: Bearer $API_KEY" \   
  -d '{     
      "model": "qwen3_32b",     
      "messages": [       
          {"role": "system", "content": "You are a helpful assistant."},     
          {"role": "user", "content": "你好"}, 
          {"role": "assistant", "content": "你好！很高兴见到你！"},     
          {"role": "user", "content": "介绍下你自己"}
      ]
  }'
  ```
- [Python SDK]
  ```
  import requests
  import json
  if __name__ == '__main__':
      url = "https://***/v2/infer/***/v1/chat/completions"  # API地址
      api_key = "API_KEY"  # 把_API_KEY替换成已获取的API Key
      # Send request.
      headers = {
          'Content-Type': 'application/json',
          'Authorization': f'Bearer {api_key}'
      }
      data = {
           "model": "qwen3_32b",  # model参数
           "messages": [
               {"role": "system", "content": "You are a helpful assistant."},
               {"role": "user", "content": "你好"},
               {"role": "assistant", "content": "你好！很高兴见到你！"},
               {"role": "user", "content": "介绍下你自己"}
           ]
       }
      response = requests.post(url, headers=headers, data=json.dumps(data), verify=False)
      # Print result.
      print(response.status_code)
      print(response.text)
  ```
  
#### 流式输出
随着大模型输出，动态输出内容。无需等待模型推理完毕，即可看到中间输出过程内容，可以缓解用户等待体感（一边输出一边看内容）
以下为流式输出的示例代码，可通过model参数替换模型，model参数详情请参见[创建对话请求](https://support.huaweicloud.com/model-call-modelarts/model-call-modelarts-0004.html#ZH-CN_TOPIC_0000002516384504__zh-cn_topic_0000002363662136_section17573450594)。
- [Curl]
  ```
  curl -X POST "https://***/v2/infer/***/v1/chat/completions" \   
  -H "Content-Type: application/json" \   
  -H "Authorization: Bearer $API_KEY" \   
  -d '{     
      "model": "qwen3_32b",     
      "messages": [       
          {"role": "system", "content": "You are a helpful assistant."},     
          {"role": "user", "content": "你好"}    
      ],
      "stream": true
  }'
  ```
- [Python SDK]
  ```
  import requests
  import json
  if __name__ == '__main__':
      url = "https://***/v2/infer/***/v1/chat/completions"  # API地址
      api_key = "API_KEY"  # 把API_KEY替换成已获取的API Key 
      # Send request.
      headers = {
          'Content-Type': 'application/json',
          'Authorization': f'Bearer {api_key}'
      }
      data = {
           "model": "qwen3_32b",  # model参数
           "messages": [
               {"role": "system", "content": "You are a helpful assistant." },
               {"role": "user","content": "你好" }
           ],
           "stream": True
       }
      response = requests.post(url, headers=headers, data=json.dumps(data), verify=False)
      # Print result.
      print(response.status_code)
      print(response.text)
  ```
  
#### Function Call
Function Call通过定义工具接口规范，使模型能动态调用外部API实现功能扩展。
以下为使用Function Call的示例代码，可通过model参数替换模型，model参数详情请参见[创建对话请求](https://support.huaweicloud.com/model-call-modelarts/model-call-modelarts-0004.html#ZH-CN_TOPIC_0000002516384504__zh-cn_topic_0000002363662136_section17573450594)。
Python SDK示例：
```
import requests
import json
def get_weather(location: str, unit: str):
    return f"Getting the weather for {location} in {unit}..."
if __name__ == '__main__':
    url = "https://***/v2/infer/***/v1/chat/completions"  # API地址
    api_key = "API_KEY"  # 把API_KEY替换成已获取的API Key
    # Send request.
    headers = {
        'Content-Type': 'application/json',
        'Authorization': f'Bearer {api_key}'
    }
    data = {
        "model": "qwen3_32b",  # model参数
        "messages": [
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "北京天气"}
        ],
        "tools": [
            {
                "type": "function",
                "function": {
                    "name": "get_weather",
                    "description": "Get weather information for a specified location",
                    "parameters": {
                        "type": "object",
                        "properties": {
                            "location": {
                                "type": "string",
                                "description": "City and state, e.g., 'San Francisco, CA'"
                            }
                        },
                        "required": [
                            "location"
                        ]
                    }
                }
            }
        ],
        "thinking": {
            "type": "enabled"  # 是否开启深度思考模式，默认关闭
        }
    }
    response = requests.post(url, headers=headers, data=json.dumps(data), verify=False)
    # Print result.
    print(response.status_code)
    print(response.text)
```
#### 设置模型回答长度限制
当您需要调整模型回答长度，如需控制成本，回答不超过500字，可通过在请求时设置max_tokens字段，来限制最大长度。
以下为设置模型回答长度限制的示例代码，可通过model参数替换模型，model参数详情请参见[创建对话请求](https://support.huaweicloud.com/model-call-modelarts/model-call-modelarts-0004.html#ZH-CN_TOPIC_0000002516384504__zh-cn_topic_0000002363662136_section17573450594)。
- [Curl]
  ```
  curl -X POST "https://***/v2/infer/***/v1/chat/completions" \   
  -H "Content-Type: application/json" \   
  -H "Authorization: Bearer $API_KEY" \   
  -d '{     
      "model": "qwen3_32b",     
      "messages": [       
          {"role": "system", "content": "You are a helpful assistant."},     
          {"role": "user", "content": "你好"}    
      ],
      "max_tokens": 1024
  }'
  ```
- [Python SDK]
  ```
  import requests 
  import json  
  if __name__ == '__main__':     
      url = "https://***/v2/infer/***/v1/chat/completions"  # API地址     
      api_key = "API_KEY"  # 把API_KEY替换成已获取的API Key      
      # Send request.     
      headers = {         
          'Content-Type': 'application/json',         
          'Authorization': f'Bearer {api_key}'     
      }     
      data = {         
           "model": "qwen3_32b",  # model参数         
           "messages": [
               {"role": "system", "content": "You are a helpful assistant." },             
               {"role": "user","content": "你好" }         
           ],
           "max_tokens": 1024
       }     
      response = requests.post(url, headers=headers, data=json.dumps(data), verify=False)      
      # Print result.     
      print(response.status_code)     
      print(response.text)
  ```
