文本生成是一种人工智能技术,它基于深度学习算法,根据给定的提示信息创作出有逻辑、连贯的文本内容。
文本生成所需的输入(提示或Prompt)可以是简单的关键词、一句话概述或是更复杂的指令和上下文信息。文本生成模型通过分析大量现有数据,学习语言模式,广泛应用于以下领域:
-
内容创作:自动生成新闻报道、商品介绍、短视频脚本等。
-
客户服务:在聊天机器人中应用,提供24小时客服支持,解答常见问题。
-
文本翻译:快速准确地将文本从一种语言翻译成另一种语言。
-
摘要生成:为长篇文章、报告、客户邮件自动生成摘要。
-
法律文档编写:自动化生成合同模板、法律意见书的基础框架。
文本生成示例:根据需求提取客户邮件中的关键信息
Prompt | |
模型输出 | |
更多示例可以参考文本生成样例。
文本生成模型
百炼大模型服务平台支持通义千问商业版、通义千问开源版与一些知名第三方模型,详细的模型列表请参考文本生成模型列表。
通义千问商业版
说明
通义千问VL的体验需要您在百炼的模型广场开通模型服务。
通义千问 | 通义千问-Max | 通义千问-Plus | 通义千问-Turbo | Qwen-Long | 通义千问VL |
特点 | 适合复杂任务,推理能力最强 | 性能均衡,介于Max和Turbo之间 | 适合简单任务,速度快、成本低 | 支持长达千万字文档,且成本极低 | 可输入超百万像素和任意长宽比的图像 |
上下文长度 (Token数) | 8k/30k(-longcontext) | 约131k | 8k | 10000k | 32k(含图片) |
输出长度 (Token数) | 2k | 8k | 1.5k | 2k | 2k |
每千Token成本 | 0.04元(输入) 0.12元(输出) | 0.004元(输入) 0.012元(输出) | 0.002元(输入) 0.006元(输出) | 0.0005元(输入) 0.002元(输出) | 0.008元(输入) 0.02元(输出) |
免费额度 (有效期:百炼开通后30天内) | 100万Token | 100万Token | 100万Token | 100万Token | 100万Token |
通义千问开源版
百炼同样支持通义千问开源版,您可以在百炼上直接使用它们。
说明
通义千问2-开源版、通义千问1-开源版的体验需要您在百炼的模型广场开通模型服务。
通义千问开源系列 | 通义千问2-开源版 | 通义千问1.5-开源版 | 通义千问1-开源版 |
上下文长度 (Token数) | 30k ~ 130k | 8k ~ 32k | 8k ~ 32k |
输出长度 (Token数) | 6k | 2 ~ 8k | 1.5k ~ 2k |
参数规模 (B: Billion) | 0.5B ~ 72B | 0.5B ~ 110B | 1.8B ~ 72B |
第三方模型
模型选型建议
-
如果您暂时不确定哪个模型最适合,建议尝试使用通义千问-Max,因为它是目前阿里推出的最强大模型,能应对复杂业务场景。如果是简单任务场景,则可以尝试使用通义千问-Turbo,成本更低且响应速度更快。通义千问-Plus在效果、速度、成本方面相对均衡,介于 Max 和 Turbo 之间。三个模型都兼容OpenAI 调用方式,相关细节请参考如何通过OpenAI接口调用通义千问模型。
-
如果您有明确的业务诉求,也可以选择更适合该场景的模型,比如:
-
希望实现超长文档的总结分析,可以尝试Qwen-Long、通义千问-Plus或月之暗面。
-
数学解题场景推荐使用Qwen2-Math。
-
法律领域推荐使用通义法睿,适用于检索法律知识、生成法律文书、检查合同条款等。
-
-
您也可以结合具体任务充分体验和评测,对比模型表现后再做决定:
-
使用模型体验功能,快速、直观地比较模型表现。通过选择多个文本生成模型,根据相同输入对模型能力进行快速横向比较。
-
使用模型评测功能,系统地比较模型表现。通过使用不同的模型评测方法,帮助您系统地评估模型表现。
-
开始使用
文本生成模型将接收的信息作为提示(Prompt),并返回一个根据提示信息生成的输出。百炼支持 OpenAI SDK、DashScope SDK、HTTP 接入方式。
本文以调用通义千问模型为例,介绍如何使用文本生成模型。OpenAI 兼容详细信息请参见OpenAI接口兼容,模型调用的完整参数列表参见通义千问 API 输入与输出参数。
消息类型
您通过API与大模型进行交互时的输入和输出也被称为消息(Message)。每条消息都属于一个角色(Role),角色包括系统(System)、用户(User)和助手(Assistant)。
-
系统消息(System Message,也称为System Prompt):用于告知模型要扮演的角色或行为。例如,您可以让模型扮演一个严谨的科学家等。默认值是“You are a helpful assistant”。您也可以将此类指令放在用户消息中,但放在系统消息中会更有效。
-
用户消息(User Message):您输入给模型的文本。
-
助手消息(Assistant Message):模型的回复。您也可以预先填写助手消息,作为后续助手消息的示例。
单轮对话
OpenAI兼容
DashScope
您可以通过OpenAI SDK或OpenAI兼容的HTTP方式调用通义千问模型,体验单轮对话的功能。
Python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # 如果环境变量中没有配置,请替换为您的实际API Key
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
completion = client.chat.completions.create(
model="qwen-max",
messages=[
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': '你是谁?'},
{'role': 'assistant', 'content': '我是通义千问,由阿里云开发的AI助手。有什么我可以帮助你的吗?'},
{'role': 'user', 'content': '你能帮助我什么?'}
]
)
print(completion.model_dump_json())
您可以通过 `message = completion.choices[0].message.content` 来提取助手回复的消息。
返回结果
{
"id": "chatcmpl-2ee8b101-8bc5-9d9e-bb92-85785e3603cc",
"choices": [
{
"finish_reason": "stop",
"index": 0,
"logprobs": null,
"message": {
"content": "我可以回答各种问题,提供信息、解决问题、学习新知识、进行翻译、总结文本、生成文本、分析情绪、提供建议、开发算法、编写代码等。只要不违反法律和道德规范,我都尽力帮助你。",
"role": "assistant",
"function_call": null,
"tool_calls": null
}
}
],
"created": 1724749558,
"model": "qwen-max",
"object": "chat.completion",
"service_tier": null,
"system_fingerprint": null,
"usage": {
"completion_tokens": 51,
"prompt_tokens": 57,
"total_tokens": 108
}
}
多轮对话
相比于单轮对话,多轮对话可以让大模型参考历史对话信息,更符合日常交流的场景。实现多轮对话的关键在于维护一个存放历史对话信息的列表,并将更新后的列表作为大模型的输入,从而使大模型可以参考历史对话信息进行回复。您可以将每一轮的对话历史添加到messages列表中,实现多轮对话的功能。多轮对话示例:
OpenAI兼容
DashScope
您可以通过OpenAI SDK或OpenAI兼容的HTTP方式调用通义千问模型,体验多轮对话的功能。
Python
import os
from openai import OpenAI
def get_response(messages):
client = OpenAI(
# 如果您没有配置环境变量,请在此处用您的API Key进行替换
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen-max",
messages=messages
)
return completion
messages = [{'role': 'system', 'content': '你是一名手机商店的店员,你负责给用户推荐手机。手机有这些参数:品牌、屏幕尺寸、分辨率和价格。如果用户提供的信息不全,你需要反问他,让他提供没有提供的参数。直到参数完整了再推荐手机。用户确定购买意向之后,要感谢用户选购。'}]
# 您可以自定义设置对话轮数,当前为3
for i in range(3):
user_input = input("请输入:")
# 将用户问题信息添加到messages列表中
messages.append({'role': 'user', 'content': user_input})
assistant_output = get_response(messages).choices[0].message.content
# 将大模型的回复信息添加到messages列表中
messages.append({'role': 'assistant', 'content': assistant_output})
print(f'用户输入:{user_input}')
print(f'模型输出:{assistant_output}')
print('\n')
流式输出
大模型收到输入后并不是一次性生成最终结果,而是逐步地生成中间结果,最终结果由中间结果拼接而成。使用非流式输出方式需要等待模型生成结束后再将生成的中间结果拼接后返回,而流式输出可以实时地将中间结果返回,您可以在模型进行输出的同时进行阅读,减少等待模型回复的时间。
OpenAI兼容
DashScope
您可以通过OpenAI SDK或OpenAI兼容的HTTP方式调用通义千问模型,体验流式输出的功能。
Python
import os
from openai import OpenAI
def get_response():
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen-max",
messages=[{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': '你是谁?'}],
stream=True,
# 可选,配置以后会在流式输出的最后一行展示Token使用信息
stream_options={"include_usage": True}
)
for chunk in completion:
print(chunk.model_dump_json())
if __name__ == '__main__':
get_response()
返回结果
{"id":"chatcmpl-xxx","choices":[{"delta":{"content":"","function_call":null,"role":"assistant","tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1721099636,"model":"qwen-max","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-xxx","choices":[{"delta":{"content":"我是","function_call":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1721099636,"model":"qwen-max","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-xxx","choices":[{"delta":{"content":"通","function_call":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1721099636,"model":"qwen-max","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-xxx","choices":[{"delta":{"content":"义","function_call":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1721099636,"model":"qwen-max","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-xxx","choices":[{"delta":{"content":"千问,由阿里","function_call":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1721099636,"model":"qwen-max","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-xxx","choices":[{"delta":{"content":"云开发的AI助手。我被","function_call":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1721099636,"model":"qwen-max","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-xxx","choices":[{"delta":{"content":"设计用来回答各种问题、提供信息","function_call":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1721099636,"model":"qwen-max","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-xxx","choices":[{"delta":{"content":"和与用户进行对话。有什么我可以","function_call":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1721099636,"model":"qwen-max","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-xxx","choices":[{"delta":{"content":"帮助你的吗?","function_call":null,"role":null,"tool_calls":null},"finish_reason":"stop","index":0,"logprobs":null}],"created":1721099636,"model":"qwen-max","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-xxx","choices":[],"created":1721099636,"model":"qwen-max","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":{"completion_tokens":36,"prompt_tokens":22,"total_tokens":58}}
了解更多
提示(Prompt)工程
提示(Prompt)是输入给大语言模型的文本信息,用于明确地告诉模型想要解决的问题或完成的任务,也是模型理解需求并生成相关、准确内容的基础。通过精心设计和优化 Prompt,向模型“明确”任务目的,使模型输出的结果更符合预期,这一过程被称之为"提示工程(Prompt Engineering)"。这个过程包括以下关键步骤:
如果您对提示工程感兴趣,请前往Prompt最佳实践了解如何构建有效的Prompt来提升模型表现。
也可以浏览百炼服务平台的 Prompt工程页面,从而快速了解如何利用模板来快速生成所需的文本内容。
工具调用
大语言模型虽然在许多领域已经有广泛运用,但仍然在某些具体任务上表现不佳,比如无法获取最新信息、存在幻觉倾向、不能进行精确计算等。
为了解决这些问题,模型需要借助外部工具来辅助其功能。工具调用(Function Calling)便指的是,在必要时,模型会调用相应的外部函数或API,帮助模型获得更准确、更实时的信息,提高模型表现和实用性。
例如,当模型能够调用计算器工具时,便能借助工具获得复杂计算的正确结果。
示例输入 | 模型输出 | 工具调用后输出 |
123,456 * 5,678 = 说明 (正确答案:700,983,168) |
百炼支持在构建大模型应用中添加各种各样的工具(插件)调用,包括但不限于:Python代码解释器、计算器、图片生成、夸克搜索等,您可以在构建大模型应用时,添加合适的插件。
关于插件的详细介绍,请参考插件概述。
多模态能力
多模态能力是指模型能够处理和结合多种不同类型的数据模态(如文本、图像、音频、视频等)进行信息的理解、处理和生成的能力。这种能力使得模型能够更全面地理解和生成内容,增强上下文理解,提高模型表现。
当前百炼支持的多模态模型有:
-
通义千问VL(文+图->文):具有图像理解能力的通义千问模型,能完成 OCR、视觉推理、本文理解等任务,支持超百万像素分辨率和任意长宽比规格的图像。
-
Paraformer 语音识别、SenseVoice (音->文):识别并转写音频中的语音内容,支持 中文(含粤语等各种方言)、英文、日语、韩语等。
常见问题
-
文本生成模型的后缀,比如:-chat、-instruct 等,具体是什么意思,会影响我的模型表现吗?
这些后缀代表了模型经过了微调和强化学习,并有场景专精方向。您需要根据您的业务场景,选择合适的模型。
-
-chat 表示模型专为处理人机交互而设计,善于理解上下文和生成连贯且情境相关的响应。适用于对话型任务,如聊天机器人、虚拟助手或客户支持场景,善于提供自然、流畅且符合对话习惯的回复。
-
-Instruct 表示模型能够理解和执行复杂的自然语言指令,拥有强大的工具调用能力,适用于执行具体指令,如回答问题、生成文本、翻译等任务。
-
-
通义千问模型的后缀,比如:-0428、-0206,是什么意思?
-0428 这种数字后缀的意思是该模型在今年4月28日的快照版本。
-
通义千问模型的快照版本和最新版本有什么区别?
通义千问模型的快照版本与最新版本在输入输出规格,使用费用、免费额度等各个方面均没有区别。
-
什么时候应该选择通义千问模型的快照版本?
由于通义千问系列模型会不定期更新升级(不带数字后缀的版本)。
如果希望您的应用在上线后有稳定表现,不受模型更新影响,可以优先选择快照版本。(当前快照版本只能通过 API 调用进行应用创建等)
推荐您在通义千问系列模型发布新版本后,对比评测当前您使用的快照版本和新版本的表现差异,并根据评测结果灵活切换模型版本,以保证您应用的最佳表现。