1、简介
作为开发者,chat系列模型在工作和生活中十分常用,已经成为不可分割的一部分。
目前国内外常用的大模型有:
- 文心一言:百度发布的一款生成式对话产品,基于飞桨深度学习平台和文心知识增强大模型,能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。
- 通义千问:阿里云推出的大规模语言模型,具有广泛的通用性和灵活性,能够处理各种自然语言任务,如问答、文本生成、文本分类等。
- 盘古大模型:华为云推出的基于昇思MindSpore AI框架的大模型,具有强大的自然语言理解和生成能力,以及跨模态、跨语言的特性。
- GPT-3:OpenAI开发的一款大型语言模型,具有极高的文本生成能力和语言理解能力,被广泛应用于各种自然语言处理任务中。
- ERNIE Bot:由百度公司开发的一款基于ERNIE(Enhanced Representation through knowledge IntEgration)技术的对话机器人,具有强大的语义理解和生成能力,以及丰富的知识库支持。
此外,还有一些其他的大模型产品,如腾讯的“混元”大模型、华为的“孟子”大模型、科大讯飞的“星火”大模型等。这些大模型产品在自然语言处理、计算机视觉、语音识别等领域都有着广泛的应用和前景。
而chat系列模型是指对话类的模型,常用的就是大名鼎鼎的chatgpt等对话类模型。
下面就来简单讨论一下chatgpt调用方面的API。
2、OpenAI的chat系列模型
2.1 openai chat系列模型代表
openai chat系列模型代表有gpt-4
, gpt-4-turbo-preview
, gpt-3.5-turbo
2.2 python调用方式
(openai的api_key需要替换为实际的api_key)
首先导入openai的包
import openai
openai.api_key="sk-IhTBrFu*************************"
2.2.1 模型输入
调用模型
chat_completions_res
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "什么是机器学习?"}
]
)
参数需要传入model和messages。model是一个字符串,代表实际调用的模型;messages是一个列表,里边是多个字典,每个字典有两个key, 一个是对话的角色,一个是对话的内容。角色分为system、user、assistant等
例如system一般放在最前面,代表对模型对话的预先设定。一般对话轮次不多的情况下,模型基本上会遵循system的设定
然后是user和assistant的多轮对话
chat_completions_res= client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)
2.2.2 模型输出
print(chat_completions_res)
输出结果为:
{
"id": "chatcmpl-9EtERNFMsHsiXjXti4qICLr9qq9nO",
"object": "chat.completion",
"created": 1713335931,
"model": "gpt-3.5-turbo-0125",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "\u673a\u5668\u5b66\u4e60\u662f\u4e00\u79cd\u4eba\u5de5\u667a\u80fd\u7684\u5206\u652f\u9886\u57df\uff0c\u901a\u8fc7\u8ba9\u8ba1\u7b97\u673a\u7cfb\u7edf\u5229\u7528\u6570\u636e\u548c\u7b97\u6cd5\u6765\u8fdb\u884c\u5b66\u4e60\u548c\u6539\u8fdb\u6027\u80fd\uff0c\u800c\u4e0d\u9700\u8981\u660e\u786e\u5730\u901a\u8fc7\u7f16\u7a0b\u6307\u5b9a\u6bcf\u4e00\u4e2a\u6b65\u9aa4\u3002\u673a\u5668\u5b66\u4e60\u7684\u6838\u5fc3\u601d\u60f3\u662f\u8ba9\u673a\u5668\u80fd\u591f\u4ece\u6570\u636e\u4e2d\u5b66\u4e60\u6a21\u5f0f\u548c\u89c4\u5f8b\uff0c\u4ece\u800c\u505a\u51fa\u9884\u6d4b\u3001\u4f18\u5316\u548c\u51b3\u7b56\u3002\u673a\u5668\u5b66\u4e60\u7684\u5e94\u7528\u975e\u5e38\u5e7f\u6cdb\uff0c\u5305\u62ec\u56fe\u50cf\u8bc6\u522b\u3001\u8bed\u97f3\u8bc6\u522b\u3001\u81ea\u7136\u8bed\u8a00\u5904\u7406\u3001\u63a8\u8350\u7cfb\u7edf\u7b49\u9886\u57df\u3002"
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 17,
"completion_tokens": 157,
"total_tokens": 174
},
"system_fingerprint": "fp_c2295e73ad"
}
模型输出包含的大量的信息,对于chat系列模型,最关键的参数就是返回的文本。
在openai 中,提取模型返回的文本一般是通过解析模型输出,大多数情况下模型都会至少返回一个回答的结果,因此可以通过 ["choices"][0].message["content"] 来提取
print(chat_completions_res["choices"][0]message["content"])
输出结果:
'机器学习是一种人工智能的分支领域,它使计算机系统可以通过学习和经验改进性能,而无需明确地进行编程。机器学习依靠统计学和数据分析来识别模式和建立预测模型,从而让计算机系统能够自动学习和进行决策。通过使用机器学习算法,计算机系统可以从数据中学习并根据其学习的知识和经验来做出预测和决策。机器学习应用广泛,包括语音识别、图像识别、自然语言处理、推荐系统、数据挖掘等方面。'
2.3 curl方式
和python方式基本一样,把OPENAI_API_KEY替换成实际的openai api_key即可
curl https://api.openai.com/v1/chat/completions
-H "Content-Type: application/json"
-H "Authorization: Bearer $OPENAI_API_KEY"
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Who won the world series in 2020?"
},
{
"role": "assistant",
"content": "The Los Angeles Dodgers won the World Series in 2020."
},
{
"role": "user",
"content": "Where was it played?"
}
]
}'
3. qwen的chat系列模型
3.1 qwen系列(阿里云官网可以调用的模型)
截止 2024年5月
3.2 python调用
和openai类似,api-key也需要替换成实际的api_key
from dashscope import Generation
import dashscope
dashscope.api_key="sk-**********************"
3.2.1 模型输入
messages = [{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': '如何做西红柿炒鸡蛋?'}]
response = Generation.call(
'qwen1.5-14b-chat',
messages=messages,
result_format='message',
)
3.2.2 模型输出
print(response)
输出格式:
{
"status_code": 200,
"request_id": "f5c770b8-389b-9327-901f-18ec89f62770",
"code": "",
"message": "",
"output": {
"text": null,
"finish_reason": null,
"choices": [{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": "材料:\n西红柿2个,鸡蛋3个,葱1根,盐适量,糖少许,食用油适量\n\n步骤:\n\n1. 西红柿洗净后切成块状,鸡蛋打入碗中搅拌均匀备用。\n2. 葱洗净切葱花备用。\n3. 热锅凉油,油热后加入葱花,用中小火煸炒出香味。\n4. 倒入鸡蛋液,用筷子快速搅拌,待鸡蛋凝固后盛出备用。\n5. 锅中留底油,放入西红柿块,用中小火慢慢翻煮,让西红柿出汁。\n6. 西红柿稍微软烂后,倒入炒好的鸡蛋块,继续翻煮均匀。\n7. 加入适量的盐和少许糖调味,目的是中和西红柿的酸味,提鲜。\n8. 炒至西红柿和鸡蛋完全融合,汤汁稍微浓稠即可出锅。\n\n炒西红柿鸡蛋就做好了,可以根据个人口味调整盐和糖的量。这道菜营养丰富,色彩鲜艳,简单易做,是一道家常菜。"
}
}]
},
"usage": {
"input_tokens": 25,
"output_tokens": 231,
"total_tokens": 256
}
可以看出,和openai基本类似,不过需要通过["output"]["choices"][0].message["content"] 这种方式
相比openai,输入参数多了一个result_format, 设置为messages。不设置这个参数,模型输出与openai差距很大;设置这个参数,模型输出和openai差不太多。
3.3 curl 方式
和openai也类似,把api-key替换即可
curl --location '[https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation](https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation)' \\
--header 'Authorization: Bearer sk-\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*' \\
--header 'Content-Type: application/json' \\
--data '{
"model": "qwen1.5-14b-chat",
"input":{
"messages":[
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "你好,哪个公园距离我最近?"
}
]
},
"parameters": {
"result\_format": "message"
}
}'
4.总结
qwen和openai的区别主要在
4.1 调用接口不同
openai
https://api.openai.com/v1/chat/completions
qwen
https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation
4.2 输入参数
qwen比openai参数多一个result_format参数
4.3 输出参数
qwen比openai参数多一个字典,需要多解析一层
因此,适配qwen需要修改源码中解析返回值的逻辑
5. 注意事项
- 需要注意保护API Key的安全,避免泄露给他人,否则可能会被滥用。
- 在调用API时,需要注意token的使用量,以避免超出套餐额度而产生额外费用。