如何使用 ChatGPT 和 GPT 您所在的位置:网站首页 维娜美白淡斑补水套装多少钱一盒啊 如何使用 ChatGPT 和 GPT

如何使用 ChatGPT 和 GPT

#如何使用 ChatGPT 和 GPT| 来源: 网络整理| 查看: 265

你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。

了解如何使用 ChatGPT 和 GPT-4 模型 项目 05/15/2023

ChatGPT 和 GPT-4 模型是针对对话接口进行了优化的语言模型。 该模型的行为与旧的 GPT-3 模型不同。 以前的模型是文本输入和文本输出,这意味着它们接受了提示字符串并返回了一个会追加到提示的补全。 但 ChatGPT 和 GPT-4 模型都是输入对话和输出消息模式。这两种模型需要以类似聊天的具体脚本形式提供输入,然后通过聊天返回补全信息,以展示模型编写的消息。 虽然这种形式专为多回合对话而设计,但你会发现它也适用于非聊天场景。

在 Azure OpenAI 中,你有两种不同的方案与这两种类型的模型交互:

聊天补全 API。 使用聊天标记语言 (ChatML) 的补全 API。

聊天补全 API 是一种用于与 ChatGPT 和 GPT-4 模型交互的新式专用 API。 访问这些模型的首选方式是使用此 API。 这也是访问新版 GPT-4 模型的唯一方法。

虽然 ChatML 使用的补全 API 与其他模型(如 text-davinci-002)使用的相同,但它需要一种以标记为单位的唯一提示格式,称为聊天标记语言 (ChatML)。 他提供的访问权限级别不仅比专用的聊天补全 API 低,而且还需要额外的输入验证,仅支持 ChatGPT (gpt-35-turbo) 模型,并且基础格式更有可能随着时间的推移而更改。

本文将指导你开始使用新的 ChatGPT 和 GPT-4 模型。 请务必使用本文所述的技术以获得最佳结果。 如果尝试以与旧模型系列交互的方式来与新模型交互,则模型通常会很冗长,并且提供不太有用的回复。

使用 ChatGPT 和 GPT-4 模型

以下代码片段演示了通过聊天补全 API 使用 ChatGPT 和 GPT-4 模型的最基本方法。 如果你是第一次以编程方式使用这些模型,建议先开始学习 ChatGPT 和 GPT-4 快速入门。

GPT-4 模型目前仅按请求提供。 现有的 Azure OpenAI 客户可以通过填写此表单来申请访问权限。

import os import openai openai.api_type = "azure" openai.api_version = "2023-05-15" openai.api_base = os.getenv("OPENAI_API_BASE") # Your Azure OpenAI resource's endpoint value. openai.api_key = os.getenv("OPENAI_API_KEY") response = openai.ChatCompletion.create( engine="gpt-35-turbo", # The deployment name you chose when you deployed the ChatGPT or GPT-4 model. messages=[ {"role": "system", "content": "Assistant is a large language model trained by OpenAI."}, {"role": "user", "content": "Who were the founders of Microsoft?"} ] ) print(response) print(response['choices'][0]['message']['content']) 输出 { "choices": [ { "finish_reason": "stop", "index": 0, "message": { "content": "The founders of Microsoft are Bill Gates and Paul Allen. They co-founded the company in 1975.", "role": "assistant" } } ], "created": 1679014551, "id": "chatcmpl-6usfn2yyjkbmESe3G4jaQR6bsScO1", "model": "gpt-3.5-turbo-0301", "object": "chat.completion", "usage": { "completion_tokens": 86, "prompt_tokens": 37, "total_tokens": 123 } }

注意

以下参数不适用于新的 ChatGPT 和 GPT-4 模型:logprobs、best_of 和 echo。 如果你设置了这些参数中的任何一个,则会收到错误。

每个回复都包含 finish_reason。 finish_reason 可能的值为:

stop:API 返回了完整的模型输出。 length:由于 max_tokens 参数或标记限制,模型输出不完整。 content_filter:由于内容筛选器的标志,省略了内容。 null:API 回复仍在进行中或未完成。

考虑将 max_tokens 设置为略高于正常值,例如 300 或 500。 这可确保模型在到达消息末尾之前不会停止生成文本。

模型版本控制

注意

gpt-35-turbo 等效于 OpenAI 中的 gpt-3.5-turbo 模型。

与以前的 GPT-3 和 GPT-3.5 模型不同,gpt-35-turbo 模型以及 gpt-4 和 gpt-4-32k 模型将继续更新。 创建这些模型的部署时,还需要指定模型版本。

目前,只有 0301 版本可用于 ChatGPT 模型,0314 版本可用于 GPT-4 模型。 我们会在将来继续提供更新的版本。 可以在我们的模型页上找到这些模型的模型弃用时间。

使用聊天补全 API

OpenAI 训练了 ChatGPT 和 GPT-4 模型,以接受对话形式的输入。 消息参数获取字典数组,对话按角色整理。

基本的聊天补全的格式如下所示:

{"role": "system", "content": "Provide some context and/or instructions to the model"}, {"role": "user", "content": "The users messages goes here"}

一个示例答案后跟一个问题的对话如下所示:

{"role": "system", "content": "Provide some context and/or instructions to the model."}, {"role": "user", "content": "Example question goes here."}, {"role": "assistant", "content": "Example answer goes here."}, {"role": "user", "content": "First question/message for the model to actually respond to."} 系统角色

数组的开头包含系统角色(也称为系统消息)。 此消息提供模型的初始说明。 可以在系统角色中提供各种信息,包括:

助手的简要说明 助手的个性特征 你希望助手遵循的指令或规则 模型所需的数据或信息,例如 FAQ 中的相关问题

你可以为用例自定义系统角色,也可以仅包含基本说明。 系统角色/消息是可选的,但建议至少包含一条基本说明,以获得最佳结果。

消息

在系统角色之后,可以在用户和助手之间加入一系列消息。

{"role": "user", "content": "What is thermodynamics?"}

若要触发模型回复,在用户消息的末尾应提示该轮到助手回复了。 还可以在用户和助手之间加入一系列样本消息,以此进行少样本学习。

消息提示示例

以下部分展示了可用于 ChatGPT 和 GPT-4 模型的不同提示样式的示例。 这些示例只是为了抛砖引玉,你可以尝试使用不同的提示来为自己的用例自定义行为。

基本示例

如果你希望 ChatGPT 模型的行为类似于 chat.openai.com,则可以使用基本系统消息,例如“助手是 OpenAI 训练的大型语言模型。”

{"role": "system", "content": "Assistant is a large language model trained by OpenAI."}, {"role": "user", "content": "Who were the founders of Microsoft?"} 说明的示例

对于某些场景,你可能希望向模型提供其他说明,以定义模型能够执行的操作边界。

{"role": "system", "content": "Assistant is an intelligent chatbot designed to help users answer their tax related questions. Instructions: - Only answer questions related to taxes. - If you're unsure of an answer, you can say "I don't know" or "I'm not sure" and recommend users go to the IRS website for more information. "}, {"role": "user", "content": "When are my taxes due?"} 使用数据进行验证

你还可以在系统消息中加入相关数据或信息,为模型提供额外的对话上下文。 如果只需要包含少量信息,则可以将其硬编码到系统消息中。 如果你有模型应注意的大量数据,则可以使用嵌入或 Azure 认知搜索等产品在查询时检索最相关的信息。

{"role": "system", "content": "Assistant is an intelligent chatbot designed to help users answer technical questions about Azure OpenAI Serivce. Only answer questions using the context below and if you're not sure of an answer, you can say 'I don't know'. Context: - Azure OpenAI Service provides REST API access to OpenAI's powerful language models including the GPT-3, Codex and Embeddings model series. - Azure OpenAI Service gives customers advanced language AI with OpenAI GPT-3, Codex, and DALL-E models with the security and enterprise promise of Azure. Azure OpenAI co-develops the APIs with OpenAI, ensuring compatibility and a smooth transition from one to the other. - At Microsoft, we're committed to the advancement of AI driven by principles that put people first. Microsoft has made significant investments to help guard against abuse and unintended harm, which includes requiring applicants to show well-defined use cases, incorporating Microsoft’s principles for responsible AI use." }, {"role": "user", "content": "What is Azure OpenAI Service?"} 使用聊天补全进行少样本学习

还可以为模型提供少样本学习的示例。 由于新的提示格式,少样本学习的方法略有变化。 现在可以在提示中加入用户和助理之间的一系列消息,作为少样本学习示例。 这些例子可以用来为常见问题设定回答,以启动模型或教它特定的行为。

这只是通过 ChatGPT 和 GPT-4 使用少样本学习的一个示例。 可以尝试不同的方法,看看哪种方法最适合你的用例。

{"role": "system", "content": "Assistant is an intelligent chatbot designed to help users answer their tax related questions. "}, {"role": "user", "content": "When do I need to file my taxes by?"}, {"role": "assistant", "content": "In 2023, you will need to file your taxes by April 18th. The date falls after the usual April 15th deadline because April 15th falls on a Saturday in 2023. For more details, see https://www.irs.gov/filing/individuals/when-to-file."}, {"role": "user", "content": "How can I check the status of my tax refund?"}, {"role": "assistant", "content": "You can check the status of your tax refund by visiting https://www.irs.gov/refunds"} 将聊天补全用于非聊天场景

聊天补全 API 设计用于多回合对话,但也适用于非聊天场景。

例如,对于实体提取场景,可以使用以下提示:

{"role": "system", "content": "You are an assistant designed to extract entities from text. Users will paste in a string of text and you will respond with entities you've extracted from the text as a JSON object. Here's an example of your output format: { "name": "", "company": "", "phone_number": "" }"}, {"role": "user", "content": "Hello. My name is Robert Smith. I'm calling from Contoso Insurance, Delaware. My colleague mentioned that you are interested in learning about our comprehensive benefits policy. Could you give me a call back at (555) 346-9322 when you get a chance so we can go over the benefits?"} 创建基本聊天循环

到目前为止,这些示例演示了与聊天补全 API 交互的基本机制。 此示例演示如何创建对话循环以执行以下操作:

持续接受控制台输入,并将其正确格式化为消息数组的一部分作为用户角色内容。 输出恢复,这些恢复在控制台中显示,经过格式化并添加到消息数组中作为助手角色内容。

这意味着,每次提出新问题时,都会将到截至目前正在运行的对话脚本连同最新问题一起发送。 由于模型没有内存,因此需要发送包含每个新问题的更新脚本,否则模型将丢失上述问题和答案的上下文。

import os import openai openai.api_type = "azure" openai.api_version = "2023-05-15" openai.api_base = os.getenv("OPENAI_API_BASE") # Your Azure OpenAI resource's endpoint value . openai.api_key = os.getenv("OPENAI_API_KEY") conversation=[{"role": "system", "content": "You are a helpful assistant."}] while(True): user_input = input() conversation.append({"role": "user", "content": user_input}) response = openai.ChatCompletion.create( engine="gpt-3.5-turbo", # The deployment name you chose when you deployed the ChatGPT or GPT-4 model. messages = conversation ) conversation.append({"role": "assistant", "content": response['choices'][0]['message']['content']}) print("\n" + response['choices'][0]['message']['content'] + "\n")

运行上面的代码时,你将看到一个空白的控制台窗口。 在窗口中输入第一个问题,然后点击 Enter 键。 回复返回后,可以重复此过程并不断提出问题。

管理对话

前面的示例将一直运行,直到达到模型的标记限制。 在提出每个问题和收到答案后,messages 数组的大小都会增加。 gpt-35-turbo 的标记限制为 4096 个标记,而 gpt-4 和 gpt-4-32k 的标记限制分别为 8192 和 32768。 这些限制包括发送的消息数组和模型回复中的标记计数。 与 max_tokens 参数的值组合在一起的消息数组中的标记数必须保持在这些限制以下,否则将收到错误。

你有责任确保提示和补全操作在标记限制范围内。 这意味着,对于较长的对话,需要跟踪标记数,并仅向模型发送在限制以内的提示。

注意

强烈建议继续遵守适用于所有模型的记录输入令牌限制,即时发现自己能够超出该限制也是如此。

以下代码示例演示了一个简单的聊天循环示例,以及使用 OpenAI 的 tiktoken 库处理 4096 标记计数的技术。

代码需要 tiktoken 0.3.0。 如果有旧版本,请运行 pip install tiktoken --upgrade。

import tiktoken import openai import os openai.api_type = "azure" openai.api_version = "2023-05-15" openai.api_base = os.getenv("OPENAI_API_BASE") # Your Azure OpenAI resource's endpoint value . openai.api_key = os.getenv("OPENAI_API_KEY") system_message = {"role": "system", "content": "You are a helpful assistant."} max_response_tokens = 250 token_limit= 4096 conversation=[] conversation.append(system_message) def num_tokens_from_messages(messages, model="gpt-3.5-turbo-0301"): encoding = tiktoken.encoding_for_model(model) num_tokens = 0 for message in messages: num_tokens += 4 # every message follows {role/name}\n{content}\n for key, value in message.items(): num_tokens += len(encoding.encode(value)) if key == "name": # if there's a name, the role is omitted num_tokens += -1 # role is always required and always 1 token num_tokens += 2 # every reply is primed with assistant return num_tokens while(True): user_input = input("") conversation.append({"role": "user", "content": user_input}) conv_history_tokens = num_tokens_from_messages(conversation) while (conv_history_tokens+max_response_tokens >= token_limit): del conversation[1] conv_history_tokens = num_tokens_from_messages(conversation) response = openai.ChatCompletion.create( engine="gpt-35-turbo", # The deployment name you chose when you deployed the ChatGPT or GPT-4 model. messages = conversation, temperature=.7, max_tokens=max_response_tokens, ) conversation.append({"role": "assistant", "content": response['choices'][0]['message']['content']}) print("\n" + response['choices'][0]['message']['content'] + "\n")

在此示例中,达到标记计数后,将删除对话脚本中最早的消息。 为提高效率,使用了 del 而不是 pop(),并且从索引 1 开始,以便始终保留系统消息,并仅删除用户/助手消息。 随着时间的推移,这种管理对话的方法可能会导致对话质量下降,因为模型将逐渐失去对话早期部分的上下文。

另一种方法是将对话持续时间限制为最大标记长度或特定回合。 在达到最大标记限制,并且若允许对话继续,模型将失去上下文后,可以提示用户需要开始新的对话,清除消息数组可启动可用标记限制满额的全新对话。

前面演示的代码的标记计数部分是 OpenAI 食谱示例之一的简化版本。

后续步骤 详细了解 Azure OpenAI。 通过 ChatGPT 快速入门开始使用 ChatGPT 模型。 有关更多示例,请查看 Azure OpenAI 示例 GitHub 存储库。 使用 ChatGPT 模型

重要

将 GPT-35-Turbo 模型与补全终结点配合使用的功能仍为预览版。 由于可能会更改基础 ChatML 语法,我们强烈建议使用聊天补全 API/终结点。 建议使用聊天补全 API 与 ChatGPT (gpt-35-turbo) 模型进行交互。 也只能通过聊天补全 API 来使用 GPT-4 模型。

以下代码片段演示了通过 ChatML 使用 ChatGPT 模型的最基本的方法。 如果你是第一次以编程方式使用这些模型,建议先开始学习 ChatGPT 和 GPT-4 快速入门。

import os import openai openai.api_type = "azure" openai.api_base = "https://{your-resource-name}.openai.azure.com/" openai.api_version = "2023-05-15" openai.api_key = os.getenv("OPENAI_API_KEY") response = openai.Completion.create( engine="gpt-35-turbo", # The deployment name you chose when you deployed the ChatGPT model prompt="system\nAssistant is a large language model trained by OpenAI.\n\nuser\nWho were the founders of Microsoft?\n\nassistant\n", temperature=0, max_tokens=500, top_p=0.5, stop=[""]) print(response['choices'][0]['text'])

注意

以下参数不适用于 gpt-35-turbo 模型:logprobs、best_of 和 echo。 如果你设置了这些参数中的任何一个,则会收到错误。

标记指示消息的结束。 建议将 标记作为停止序列包含在内,以确保模型在到达消息末尾时停止生成文本。 有关特殊标记的详细信息,请参阅聊天标记语言 (ChatML) 部分。

考虑将 max_tokens 设置为略高于正常值,例如 300 或 500。 这可确保模型在到达消息末尾之前不会停止生成文本。

模型版本控制

注意

gpt-35-turbo 等效于 OpenAI 中的 gpt-3.5-turbo 模型。

与以前的 GPT-3 和 GPT-3.5 模型不同,gpt-35-turbo 模型以及 gpt-4 和 gpt-4-32k 模型将继续更新。 创建这些模型的部署时,还需要指定模型版本。

目前,只有 0301 版本可用于 ChatGPT 模型,0314 版本可用于 GPT-4 模型。 我们会在将来继续提供更新的版本。 可以在我们的模型页上找到这些模型的模型弃用时间。

使用聊天标记语言 (ChatML)

注意

OpenAI 会持续改进 ChatGPT,用于模型的聊天标记语言将来会继续演变。 我们将在此文档中更新最新信息。

OpenAI 使用特殊标记对 ChatGPT 模型进行训练,以标明提示的不同部分。 提示从用于启动模型的系统消息开始,然后是用户和助手之间的一系列消息。

基本 ChatML 提示的格式如下所示:

system Provide some context and/or instructions to the model. user The user’s message goes here assistant 系统消息

系统消息包含在 system 和 标记之间的提示的开头。 此消息提供模型的初始说明。 可以在系统消息中提供各种信息,包括:

助手的简要说明 助手的个性特征 你希望助手遵循的指令或规则 模型所需的数据或信息,例如 FAQ 中的相关问题

可以为你的用例自定义系统消息,也可以仅包含基本系统消息。 系统消息是可选的,但建议至少包含一个基本消息,以获得最佳结果。

消息

在系统消息之后,可以在用户和助手之间加入一系列消息。 每条消息都应以 标记开头,后跟角色(user 或 assistant),以 标记结尾。

user What is thermodynamics?

若要触发模型的回复,提示应以 assistant 标记结尾,指示轮到助手回复了。 还可以在提示中加入用户和助手之间的消息,作为进行少样本学习的方式。

提示示例

以下部分展示了可用于 ChatGPT 和 GPT-4 模型的不同提示样式的示例。 这些示例只是为了抛砖引玉,你可以尝试使用不同的提示来为自己的用例自定义行为。

基本示例

如果你希望 ChatGPT 和 GPT-4 模型的行为类似于 chat.openai.com,则可以使用基本系统消息,例如“助手是 OpenAI 训练的大型语言模型”。

system Assistant is a large language model trained by OpenAI. user Who were the founders of Microsoft? assistant 说明的示例

对于某些场景,你可能希望向模型提供其他说明,以定义模型能够执行的操作边界。

system Assistant is an intelligent chatbot designed to help users answer their tax related questions. Instructions: - Only answer questions related to taxes. - If you're unsure of an answer, you can say "I don't know" or "I'm not sure" and recommend users go to the IRS website for more information. user When are my taxes due? assistant 使用数据进行验证

你还可以在系统消息中加入相关数据或信息,为模型提供额外的对话上下文。 如果只需要包含少量信息,则可以将其硬编码到系统消息中。 如果你有模型应注意的大量数据,则可以使用嵌入或 Azure 认知搜索等产品在查询时检索最相关的信息。

system Assistant is an intelligent chatbot designed to help users answer technical questions about Azure OpenAI Serivce. Only answer questions using the context below and if you're not sure of an answer, you can say "I don't know". Context: - Azure OpenAI Service provides REST API access to OpenAI's powerful language models including the GPT-3, Codex and Embeddings model series. - Azure OpenAI Service gives customers advanced language AI with OpenAI GPT-3, Codex, and DALL-E models with the security and enterprise promise of Azure. Azure OpenAI co-develops the APIs with OpenAI, ensuring compatibility and a smooth transition from one to the other. - At Microsoft, we're committed to the advancement of AI driven by principles that put people first. Microsoft has made significant investments to help guard against abuse and unintended harm, which includes requiring applicants to show well-defined use cases, incorporating Microsoft’s principles for responsible AI use user What is Azure OpenAI Service? assistant 使用 ChatML 进行少样本学习

还可以为模型提供少样本学习的示例。 由于新的提示格式,少样本学习的方法略有变化。 现在可以在提示中加入用户和助理之间的一系列消息,作为少样本学习示例。 这些例子可以用来为常见问题设定回答,以启动模型或教它特定的行为。

这只是通过 ChatGPT 使用少样本学习的一个示例。 可以尝试不同的方法,看看哪种方法最适合你的用例。

system Assistant is an intelligent chatbot designed to help users answer their tax related questions. user When do I need to file my taxes by? assistant In 2023, you will need to file your taxes by April 18th. The date falls after the usual April 15th deadline because April 15th falls on a Saturday in 2023. For more details, see https://www.irs.gov/filing/individuals/when-to-file user How can I check the status of my tax refund? assistant You can check the status of your tax refund by visiting https://www.irs.gov/refunds 在非聊天场景中使用聊天标记语言

ChatML 旨在使多轮次对话更易于管理,但它也适用于非聊天场景。

例如,对于实体提取场景,可以使用以下提示:

system You are an assistant designed to extract entities from text. Users will paste in a string of text and you will respond with entities you've extracted from the text as a JSON object. Here's an example of your output format: { "name": "", "company": "", "phone_number": "" } user Hello. My name is Robert Smith. I’m calling from Contoso Insurance, Delaware. My colleague mentioned that you are interested in learning about our comprehensive benefits policy. Could you give me a call back at (555) 346-9322 when you get a chance so we can go over the benefits? assistant 防止不安全的用户输入

请务必将缓解措施添加到你的应用程序中,以确保安全使用聊天标记语言。

建议阻止最终用户在其输入中加入特殊标记,例如 和 。 我们还建议加入其他验证,以确保发送到模型的提示格式正确,并遵循本文档中所述的聊天标记语言格式。

还可以在系统消息中提供说明,指导模型如何响应某些类型的用户输入。 例如,可以指示模型仅回复有关特定主题的消息。 还可以通过少样本学习示例来强化此行为。

管理对话

gpt-35-turbo 的标记限制为 4096 个标记。 此限制包括来自提示和补全的标记数。 与 max_tokens 参数的值组合在一起的提示中的标记数必须保持在 4096 以下,否则将收到错误。

你有责任确保提示和补全操作在标记限制范围内。 这意味着,对于较长的对话,需要跟踪标记数,并仅向模型发送在标记限制以内的提示。

以下简易代码示例演示了如何跟踪会话中的单独消息。

import os import openai openai.api_type = "azure" openai.api_base = "https://{your-resource-name}.openai.azure.com/" #This corresponds to your Azure OpenAI resource's endpoint value openai.api_version = "2023-05-15" openai.api_key = os.getenv("OPENAI_API_KEY") # defining a function to create the prompt from the system message and the conversation messages def create_prompt(system_message, messages): prompt = system_message for message in messages: prompt += f"\n{message['sender']}\n{message['text']}\n" prompt += "\nassistant\n" return prompt # defining the user input and the system message user_input = "" system_message = f"system\n{''}\n" # creating a list of messages to track the conversation messages = [{"sender": "user", "text": user_input}] response = openai.Completion.create( engine="gpt-35-turbo", # The deployment name you chose when you deployed the ChatGPT model. prompt=create_prompt(system_message, messages), temperature=0.5, max_tokens=250, top_p=0.9, frequency_penalty=0, presence_penalty=0, stop=[''] ) messages.append({"sender": "assistant", "text": response['choices'][0]['text']}) print(response['choices'][0]['text']) 控制在标记限制之下

控制在标记限制之下的最简单方法是在达到标记限制时删除对话中最早的消息。

可以选择始终包含尽可能多的标记,同时保持在限制范围内,也可以始终包含一定数量的先前消息(假设这些消息能保持在限制范围内)。 请务必记住,与较短的提示相比,较长的提示需要更长的时间生成回复并产生更高的成本。

可以使用 tiktoken Python 库估计字符串中的标记数,如下所示。

import tiktoken cl100k_base = tiktoken.get_encoding("cl100k_base") enc = tiktoken.Encoding( name="gpt-35-turbo", pat_str=cl100k_base._pat_str, mergeable_ranks=cl100k_base._mergeable_ranks, special_tokens={ **cl100k_base._special_tokens, "": 100264, "": 100265 } ) tokens = enc.encode( "user\nHelloassistant", allowed_special={"", ""} ) assert len(tokens) == 7 assert tokens == [100264, 882, 198, 9906, 100265, 100264, 78191] 后续步骤 详细了解 Azure OpenAI。 通过 ChatGPT 快速入门开始使用 ChatGPT 模型。 有关更多示例,请查看 Azure OpenAI 示例 GitHub 存储库。


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有