语言大模型具备文本理解和文字对话的能力。如当您传入文本信息时,大模型可以理解信息,并结合这些信息进行回复。通过这篇教程,您可以学习到如何使用模型服务 API,来调用模型理解文本,并生成文本内容,并可以基于此 API 构建或者扩展自己的应用或者自动化任务。
您可以在以下场景中使用模型的文本生成能力。
场景 | 场景细分 | 描述 |
---|---|---|
内容创作 | 文章生成 | 自动生成文章、新闻、评论等实用文本,提高内容产出效率。 |
文本润色 | 在新闻报道、博客文章创作中辅助作者进行创意构思和文本润色。 | |
智能交互 | 智能客服 | 在客服系统中生成自然流畅的回复,提升用户体验。 |
聊天机器人 | 在线咨询、英语学习等领域,理解用户意图、按照要求并生成回复。 | |
个性化教学 | 学科问题解答 | 分析题目、考点说明、解题思路、解题结果。 |
语言学习 | 按照要求,进行某些语种对话,帮助用户习惯目标语言日常交流。 | |
机器翻译 | 自动翻译 | 结合语音类模型,实现同声传译、日常字幕生成、文本语言翻译等等。 |
工作处理 | 数据处理 | 根据读入的数据,根据任务要求进行处理,如读取研报、分析新闻、评价内容等。 |
支持文本生成的大模型当前支持在请求中传入图片链接,图片信息需要作为用户角色输入信息传给大模型,即"role": "user"
,下面是简单的视觉模型调用示例代码。
import os # 通过 pip install volcengine-python-sdk[ark] 安装方舟SDK from volcenginesdkarkruntime import Ark # 从环境变量中获取您的API KEY,配置方法见 。 api_key = os.getenv('ARK_API_KEY') # 替换为您的推理接入点ID,创建方法见 model = "<YOUR_ENDPOINT_ID>" # 初始化Ark客户端 client = Ark(api_key = api_key) # 创建一个对话请求 completion = client.chat.completions.create( model = model, messages = [ {"role": "user", "content": "请将下面内容进行结构化处理:火山方舟是火山引擎推出的大模型服务平台,提供模型训练、推理、评测、精调等全方位功能与服务,并重点支撑大模型生态。 火山方舟通过稳定可靠的安全互信方案,保障模型提供方的模型安全与模型使用者的信息安全,加速大模型能力渗透到千行百业,助力模型提供方和使用者实现商业新增长。"}, ], ) print(completion.choices[0].message.content)
模型回复预览:
**一、火山方舟的所属与定位** 火山方舟是火山引擎推出的大模型服务平台。 **二、火山方舟的功能与服务** 1. 提供全方位功能 - 包括模型训练、推理、评测、精调等功能与服务。 2. 重点支撑 - 重点支撑大模型生态。 **三、火山方舟的安全保障与作用** 1. 安全保障 - 通过稳定可靠的安全互信方案,保障模型提供方的模型安全与模型使用者的信息安全。 2. 作用 - 加速大模型能力渗透到千行百业,助力模型提供方和使用者实现商业新增长。
当前支持文本生成的模型有如下这些:
更多模型选择的建议:
doubao-pro-32k 240828
能力强于doubao-pro-32k 240615
10%左右,尤其在文本分类、内容创作等能力大幅提升。browsing
字段的模型,配合联网插件使用,在网页内容总结方面具有更好的效果,信息检索回答任务全面提升,回答更准确、更少冗余内容。functioncall
字段的模型,对任务解析与函数调用的能力进行了重点优化,在调用预定义函数、获取外部信息方面都有更好的效果。如您使用大模型时需要调用函数或者其他接口时可选该类模型。character
字段的模型,针对性提高角色扮演与情感陪伴能力,具备更强的上下文感知与剧情推动能力,多轮对话、智能交互类场景可以选择该模型。128k
、256k
字段的模型,可以输入 20 万字(128k
)、40 万字(256k
)左右的上下文,您进行如文本分类与信息抽取、小说全文总结摘要等长文本分析场景可以选择该类模型。模型计费说明请参见大语言模型。
提示词(Prompt)是输入给模型的信息,模型会根据提示词来进行推理,生成回复内容。正确设计和编写提示词,如提供说明、示例、好的规范等方法可以提高模型输出的质量和准确性。而进行提示词优化的工作也被称为提示词工程(Prompt Engineering)。
我们为您提供了如何编辑好的提示词的一些实践Prompt 最佳实践,您可以基于实践来优化提示词,以获得更好的回复。
下面为您介绍如何使用 chatcompletions
接口,将提示词正确输入给模型。
在 ChatCompletions-文本生成中,您可以通过 messages
对象将信息传入给模型,其中role
字段定义信息传入的角色,content
承载消息内容。模型会结合传入的角色和信息来理解内容,并生成对应的回复。
最终用户传入给模型消息,此时 role
字段应设置为user
,该类型消息往往是包含用户希望模型处理的具体任务或者处理的信息。
下面就是一个简单的用户消息,要求模型对文本进行结构化处理。
messages = [ {"role": "user", "content": "请将下面内容进行结构化处理:火山方舟是火山引擎推出的大模型服务平台,提供模型训练、推理、评测、精调等全方位功能与服务,并重点支撑大模型生态。 火山方舟通过稳定可靠的安全互信方案,保障模型提供方的模型安全与模型使用者的信息安全,加速大模型能力渗透到千行百业,助力模型提供方和使用者实现商业新增长。"} ]
用于指定模型扮演角色或交代背景信息,此时 role
字段应设置为systerm
。如果设置系统消息,请放在messages
列表的第一位。
下面是一个系统消息示例,模型会作为文本转化工具进行结构化处理。
messages =[ {"role": "systerm", "content": "你是一个文本转化器,能够将输入的文本进行结构化处理。你收到信息后,只返回结构化处理后的内容,不应该返回其他内容。"}, {"role": "user", "content": "请将下面内容进行结构化处理:火山方舟是火山引擎推出的大模型服务平台,提供模型训练、推理、评测、精调等全方位功能与服务,并重点支撑大模型生态。 火山方舟通过稳定可靠的安全互信方案,保障模型提供方的模型安全与模型使用者的信息安全,加速大模型能力渗透到千行百业,助力模型提供方和使用者实现商业新增长。"}, ]
假定为模型返回的消息,此时role
字段应设置为assistant
。在多轮对话中,会需要传入历史的对话,而模型回复的消息就可以用模型消息表示。
messages =[ {"role": "systerm", "content": "你是个十进制计算器,只返回结算结果,不返回其他"}, {"role": "user", "content": "一加一"}, {"role": "assistant", "content": "2"}, {"role": "user", "content": "再加一"}, ]
doubao-pro-128k
、doubao-pro-256k
等模型名称中带128k
、256k
字段的模型。举例来说:一个主账号下,创建doubao-pro-32k a、b、c 3个版本的A、B 、C 3个推理接入点,某模型的 TPM 为80w。那么某分钟,A、B、C 3个节点处理内容量 A 20w token、B 50w token、C 20w token,就会在触发80w TPM限制,并产生报错。
对于token用量,您可以使用接口Tokenization-分词来计算。
与模型进行一次交互,交互内容为单轮对话,模型根据系统消息和用户消息来返回内容。
因为是非流式输出,需要等待模型推理完所有内容,将内容一起返回给您,会有一定延时。
import os from volcenginesdkarkruntime import Ark # 从环境变量中获取您的API KEY,配置方法见 。 client = Ark(api_key=os.environ.get("ARK_API_KEY")) completion = client.chat.completions.create( # 替换为您的推理接入点ID,创建方法见 model="<YOUR_ENDPOINT_ID>", messages=[ {"role": "system", "content": "你是豆包,是由字节跳动开发的 AI 人工智能助手"}, {"role": "user", "content": "常见的十字花科植物有哪些?"}, ], ) print(completion.choices[0].message.content)
组合使用系统消息、模型消息以及用户消息,可以实现多轮对话,即根据一个主题进行多次对话。
需要注意,chat.completions
接口是无状态的,在每次请求时,将历史信息都放在messages
中,并通过role
字段设置,让模型了解之前不同角色的不同对话内容,以便进行主题相关的延续性对话。
import os from volcenginesdkarkruntime import Ark # 从环境变量中获取您的API KEY,配置方法见 。 client = Ark(api_key=os.environ.get("ARK_API_KEY")) completion = client.chat.completions.create( # 替换为您的推理接入点ID,创建方法见 model="<YOUR_ENDPOINT_ID>", messages = [ {"role": "system", "content": "你是豆包,是由字节跳动开发的 AI 人工智能助手"}, {"role": "user", "content": "花椰菜是什么?"}, {"role": "assistant", "content": "花椰菜又称菜花、花菜,是一种常见的蔬菜。"}, {"role": "user", "content": "再详细点"}, ], ) print(completion.choices[0].message.content)
随着大模型输出,动态输出内容。无需等待模型推理完毕,即可看到中间输出过程内容,可以缓解用户等待体感(一边输出一边看内容),效果如下所示。
import os from volcenginesdkarkruntime import Ark # 从环境变量中获取您的API KEY,配置方法见 。 client = Ark(api_key=os.environ.get("ARK_API_KEY")) print("----- streaming request -----") stream = client.chat.completions.create( # 替换为您的推理接入点ID,创建方法见 model="<YOUR_ENDPOINT_ID>", messages = [ {"role": "system", "content": "你是豆包,是由字节跳动开发的 AI 人工智能助手"}, {"role": "user", "content": "常见的十字花科植物有哪些?"}, ], stream=True ) for chunk in stream: if not chunk.choices: continue print(chunk.choices[0].delta.content, end="") print()
当您的任务较为复杂或者多个任务并发等场景下,您可以使用Asyncio接口实现并发调用,提高程序的效率,优化体验。示例代码如下:
import asyncio import os from volcenginesdkarkruntime import AsyncArk # 从环境变量中获取您的API KEY,配置方法见 。 client = Ark(api_key=os.environ.get("ARK_API_KEY")) async def main() -> None: stream = await client.chat.completions.create( # 替换为您的推理接入点ID,创建方法见 model="<YOUR_ENDPOINT_ID>", messages=[ {"role": "system", "content": "你是豆包,是由字节跳动开发的 AI 人工智能助手"}, {"role": "user", "content": "常见的十字花科植物有哪些?"}, ], stream=True ) async for completion in stream: print(completion.choices[0].delta.content, end="") print() asyncio.run(main())
import os from volcenginesdkarkruntime import Ark # 从环境变量中获取您的API KEY,配置方法见 。 client = Ark(api_key=os.environ.get("ARK_API_KEY")) print("----- function call request -----") completion = client.chat.completions.create( # 替换为您的推理接入点ID,创建方法见 model="<YOUR_ENDPOINT_ID>", messages = [ {"role": "user", "content": "北京今天天气如何?"}, ], tools=[ { "type": "function", "function": { "name": "get_current_weather", "description": "获取给定地点的天气", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "地点的位置信息,比如北京" }, "unit": { "type": "string", "enum": [ "摄氏度", "华氏度" ] } }, "required": [ "location" ] } } } ] ) print(completion.choices[0])
增加异常处理,帮助定位问题。
import os from volcenginesdkarkruntime._exceptions import ArkAPIError from volcenginesdkarkruntime import Ark # 从环境变量中获取您的API KEY,配置方法见 。 client = Ark(api_key=os.environ.get("ARK_API_KEY")) client = Ark( # Streaming: print("----- streaming request -----") try: stream = client.chat.completions.create( # 替换为您的推理接入点ID,创建方法见 model="<YOUR_ENDPOINT_ID>", messages=[ {"role": "system", "content": "你是豆包,是由字节跳动开发的 AI 人工智能助手"}, {"role": "user", "content": "常见的十字花科植物有哪些?"}, ], stream=True ) for chunk in stream: if not chunk.choices: continue print(chunk.choices[0].delta.content, end="") print() except ArkAPIError as e: print(e)
通过预填(Prefill)部分Assistant
角色的内容,来引导和控制模型的输出。输出的控制可以应用在多个方面:强制按照 JSON 或 XML 等特定格式输出;跳过已生成的内容,避免触发模型最大输出限制;控制大模型在角色扮演场景中保持同一角色。
- 支持的模型:Doubao-pro [热门]、Doubao-lite 0828版本及以后。
- 更详细的场景使用说明,请参见Prefill Response模式最佳实践。
import os from volcenginesdkarkruntime import Ark # 从环境变量中获取您的API KEY,配置方法见 。 client = Ark(api_key=os.environ.get("ARK_API_KEY")) completion = client.chat.completions.create( # 替换为您的推理接入点ID,创建方法见 model="<YOUR_ENDPOINT_ID>", messages=[ {"role": "user", "content": "你是一个计算器,请计算: 1 + 1 "}, # 最后Role为Assistant,并补充部分内容,便于模型进行续写 {"role": "assistant", "content": "="} ] ) print(completion.choices[0].message.content)
为了保证推理会话数据的传输安全,在默认的网络层加密方案基础上,为在线推理的会话数据提供了端到端应用层加密方案,更多能力介绍和原理信息请参见推理会话数据应用层加密方案。
您可以通过增加一行代码免费使用本功能。
- 使用要求
- 需要保证 SDK 版本
volcengine-python-sdk
1.0.104
及以上。可以通过pip install 'volcengine-python-sdk[ark]' -U
获得 SDK 的最新版本。- 使用限制
- 仅支持 Access Key 初始化。
- 仅支持豆包文生文语言模型。
- 仅支持
ChatCompletions
中的单轮/多轮会话,支持流式/非流式,同步/异步接口。
示例代码如下
import os from volcenginesdkarkruntime import Ark # 从环境变量中获取您的API KEY,配置方法见 。 ak = os.environ.get("VOLC_ACCESSKEY") sk = os.environ.get("VOLC_SECRETKEY") client = Ark(ak=ak, sk=sk) print("----- standard request -----") completion = client.chat.completions.create( # 替换为您的推理接入点ID,创建方法见 model="<YOUR_ENDPOINT_ID>", messages = [ {"role": "system", "content": "你是豆包,是由字节跳动开发的 AI 人工智能助手"}, {"role": "user", "content": "常见的十字花科植物有哪些?"}, ], #按下述代码设置自定义header,免费开启推理会话应用层加密 extra_headers={'x-is-encrypted': 'true'} ) print(completion.choices[0].message.content)