使用函数计算调用通义千问大模型实现AI对话
2024-01-13 本文已影响0人
梅西爱骑车
前提条件
步骤一:创建Web函数
-
登录函数计算控制台,在左侧导航栏,单击函数。
-
在顶部菜单栏,选择地域,然后在函数页面,单击创建函数。
-
在创建函数页面,按需选择创建函数的方式,配置以下配置项,然后单击创建。
-
创建函数的方式:Web函数。
-
基本设置:填写函数名称。
-
函数代码:配置函数的运行环境和代码相关信息。
-
运行环境:Debian 10。
-
代码上传方式:使用示例代码。
-
启动命令:
python3 app.py
。 -
监听端口:9000。
-
-
高级配置:单实例并发度设置为100,函数角色选择
AliyunFCServerlessDevsRole
,其他配置使用默认值。
-
环境变量:添加变量DASHSCOPE_API_KEY,值为获取到的API-KEY。
-
步骤二:编写并部署通义千问AI对话代码
函数创建成功后,您可以开始编写使用通义千问的AI对话代码。
-
在函数详情页面,单击代码页签,在代码编辑器中编写代码。
以下代码是以Python为例,通过调用通义千问模型对一个用户指令进行响应。
单轮问答——prompt方式
import dashscope
import random
from flask import abort
from flask import Flask
from flask import request
from http import HTTPStatus
app = Flask(__name__)
def call_with_prompt(prompt):
response = dashscope.Generation.call(
model=dashscope.Generation.Models.qwen_turbo,
prompt=prompt
)
# The response status_code is HTTPStatus.OK indicate success,
# otherwise indicate request is failed, you can get error code
# and message from code and message.
if response.status_code == HTTPStatus.OK:
print(response.output) # The output text
print(response.usage) # The usage information
else:
print(response.code) # The error code.
print(response.message) # The error message.
return response
@app.route("/invoke", methods=['POST', 'GET'])
def index():
bytes = request.stream.read()
if bytes:
payload = str(bytes, encoding='utf-8')
print("Request Payload: " + payload)
return call_with_prompt(payload)
else:
abort(403)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=9000)
多轮会话——通过messages调用
from http import HTTPStatus
from dashscope import Generation
from dashscope.api_entities.dashscope_response import Role
def conversation_with_messages():
messages = [{'role': Role.SYSTEM, 'content': 'You are a helpful assistant.'},
{'role': Role.USER, 'content': '如何学习千义通问?'}]
response = Generation.call(
Generation.Models.qwen_turbo,
messages=messages,
result_format='message', # set the result to be "message" format.
)
if response.status_code == HTTPStatus.OK:
print(response)
# append result to messages.
messages.append({'role': response.output.choices[0]['message']['role'],
'content': response.output.choices[0]['message']['content']})
else:
print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
response.request_id, response.status_code,
response.code, response.message
))
messages.append({'role': Role.USER, 'content': '千义通问有SDK吗?'})
# make second round call
response = Generation.call(
Generation.Models.qwen_turbo,
messages=messages,
result_format='message', # set the result to be "message" format.
)
if response.status_code == HTTPStatus.OK:
print(response)
else:
print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
response.request_id, response.status_code,
response.code, response.message
))
if __name__ == '__main__':
conversation_with_messages()
使用在线IDE安装DashScope SDK。
选择IDE的Terminal > New Terminal。
在Terminal输入pip3 install dashscope -t .
安装DashScope SDK。
多出很多下载的内容
SDK安装完成后,单击部署代码。
步骤三:测试函数
在函数详情页面,单击测试页签,填写好事件名称和事件内容,然后单击测试函数,执行完成后,可以直接查看执行结果。
配置测试参数
prompt
执行单轮对话测试:
{
"code": "",
"message": "",
"output": {
"choices": null,
"finish_reason": "stop",
"text": "通常,大语言模型的学习需要大量的数据和计算资源。在实践中,可以使用深度学习技术来训练一个大型的语言模型,包括RNN、LSTM等,并利用GPU进行加速。此外,还可以使用预训练模型,如BERT和GPT系列,这些模型可以在较少的数据上达到良好的效果。"
},
"request_id": "2f5f6ec9-e1a7-998a-bf33-3d739dc86a44",
"status_code": 200,
"usage": {
"input_tokens": 7,
"output_tokens": 66,
"total_tokens": 73
}
}
多轮对话返回结果:
{
"RequestId": "1-65a23a5f-15c49df0-ce93caa84ab4",
"Code": "CAExited",
"Message": "Function instance exited unexpectedly(code 0) with start command 'python3 app.py '.\nLogs:{\"status_code\": 200, \"request_id\": \"22c8529c-3c35-9762-a4d6-7b85b4819443\", \"code\": \"\", \"message\": \"\", \"output\": {\"text\": null, \"finish_reason\": null, \"choices\": [{\"finish_reason\": \"stop\", \"message\": {\"role\": \"assistant\", \"content\": \"千义通问是一种基于人工智能的问答系统,它可以帮助人们快速获取有用的信息。为了学习千义通问,您可以从以下几个方面入手:\\n\\n1. 阅读有关千义通问的资料,了解它的基本原理和功能。\\n\\n2. 练习使用千义通问,熟悉它的界面、操作方法以及查询技巧。\\n\\n3. 尝试使用千义通问解决实际问题,并根据实际情况调整搜索策略。\\n\\n4. 与其他千义通问用户交流,分享经验心得。\\n\\n总之,学习千义通问需要花费一定的时间和精力,但只要您坚持不懈,就一定能够掌握它!\"}}]}, \"usage\": {\"input_tokens\": 13, \"output_tokens\": 134, \"total_tokens\": 147}}\r\n{\"status_code\": 200, \"request_id\": \"039b9f3f-530b-9d67-80a4-a74cabd329f4\", \"code\": \"\", \"message\": \"\", \"output\": {\"text\": null, \"finish_reason\": null, \"choices\": [{\"finish_reason\": \"stop\", \"message\": {\"role\": \"assistant\", \"content\": \"是的,千义通问提供了丰富的SDK,支持多种编程语言,包括C++、Java、Python等,方便开发者在自己的项目中集成千义通问的功能。此外,千义通问还提供了一系列工具,可以帮助开发者轻松地将SDK应用到自己的项目中。\"}}]}, \"usage\": {\"input_tokens\": 155, \"output_tokens\": 61, \"total_tokens\": 216}}"
}
使用postman测试结果: