×
Community Blog Sử dụng Alibaba Cloud Model Studio với Python SDK

Sử dụng Alibaba Cloud Model Studio với Python SDK

Hướng dẫn Sử dụng Alibaba Cloud Model Studio với Python SDK tạo chatbot đơn giản như GPTChat

1. Alibaba Cloud Model Studio

Model Studio cho phép các nhà phát triển xây dựng các ứng dụng AI tạo sinh bằng cách tận dụng một loạt các mô hình ngôn ngữ lớn (LLMs), chẳng hạn như dòng mô hình Qwen độc quyền của Alibaba Cloud và các mô hình bên thứ ba chất lượng cao như Baichuan LLM. Hàng loạt các công cụ sẽ được cung cấp để quá trình phát triển một ứng dụng AI trở nên dễ dàng hơn bao giờ hết.

Xem thêm Alibaba Cloud Model Studio là gì ?

2. Test Python SDK với chatbot đơn giản

2.1 Chuẩn bị API KEY

Để sử dụng được các model, cần có một API Key, key này có thể lấy dễ dàng trên giao diện web, mình truy cập đường link: https://bailian.console.alibabacloud.com/ hoặc tìm kiếm Model Studio trên console của Alibaba Cloud, mọi người có thể tạo key ngay cả khi chưa kích hoạt dịch vụ, nhưng key sẽ không có hiệu lực cho đến khi dịch vụ được kích hoạt:
Ali_Create_Key

2.2 Chatbot với streaming output

Mình sẽ sử dụng Gradio, một thư viện python nổi tiếng để demo nhanh chóng các mô hình máy học với giao diện web thân thiện. Mình sẽ thử một chatbot đơn giản, với Qwen SDK có hỗ trợ Streaming Output (từng phần trong phản hồi của LLM model sẽ hiển thị ngay lập tức lên màn hình, mà không phải đợi nhận hết toàn bộ phản hồi mới hiển thị).
Để bắt đầu sử dụng Qwen Python SDK và gradio, chỉ cần chạy lệnh đơn giản sau để cài đặt:

pip install dashscope
pip install gradio

dashscope cần chỉ định endpoint và api key, có nhiều cách để thiết lập API key, như tạo biến môi trường hay thêm trực tiếp vào code, nhưng mình sẽ tạo một file lưu API key chỉ định đường dẫn trong biến api_key_file_path:

from dashscope import Generation
import dashscope
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
dashscope.api_key_file_path = '/content/key.txt'

Sau khi cấu hình xong, mình có thể bắt đầu tự do thử nghiệm, với sự hỗ trợ của gradio chỉ với vài dòng code, mình đã có một webchatbot đơn giản:

from http import HTTPStatus
from dashscope import Generation
import dashscope
import gradio as gr
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
dashscope.api_key_file_path = '/content/key.txt'

def call_stream(user_input,history):  
  messages = [{'role': 'system', 'content': 'You are a helpful assistant.'},
                {'role': 'user', 'content': user_input}]
  responses = Generation.call(model="qwen-max",
                                messages=messages,
                                result_format='message',  # set the result to be "message"  format.
                                stream=True, # set streaming output
                                incremental_output=True  # get streaming output incrementally
                                )
  chat_response=""
  for response in responses:
      if response.status_code == HTTPStatus.OK:
          time.sleep(0.05)
          chat_response += response.output.choices[0]['message']['content']
          yield chat_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
          ))



interface = gr.ChatInterface(
  fn=call_stream,
  textbox=gr.Textbox(placeholder="Ask me anything"),
  retry_btn=None,
)
interface.launch()

Và kết quả là:

Ali_Streamoutput

2.3 Chatbot liên kết với chat history

Với cách gọi thông thường, các mô hình ngôn ngữ sẽ không lưu trữ lại lịch sử trò chuyện, nghĩa là giữa các câu không có sự tương tác, liên kết, hay sử dụng nội dung câu trước để làm bối cảnh trả lời cho câu tiếp theo. Vậy nên, có thể lập trình để thêm lịch sử các cuộc trỏ chuyện trước đó, thêm vào API để các mô hình có thể hiểu rõ hơn về bối cảnh cuộc trò chuyện đang diễn ra. Khác với đoạn code lúc đầu, chỉ gửi input là lời thoại mà user nhập vào, thì đoạn code này sẽ gửi kèm theo lịch sử các cuộc trò chuyện trước đó, bao gồm một cặp là user input và phản hổi từ model (lưu ý, phải đúng theo thứ tự này), và system role được đặt ở đầu tiên, để tránh ảnh hưởng thứ tự của các đoạn lịch sử. Code mẫu như sau:

import random
from http import HTTPStatus
from dashscope import Generation
import dashscope
import gradio as gr
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
dashscope.api_key_file_path = '/content/key.txt'

def call_with_history(user_input,history):  
  chat_history=[]
  for chat in history:
      chat_history.append({'role': 'user','content': chat[0]})
      chat_history.append({'role': 'assistant','content': chat[1]})  
  messages = [{'role': 'system', 'content': 'You are a helpful assistant.'},
              {'role': 'user', 'content': user_input}]
  if len(chat_history)>0:
    for record in chat_history:
         messages.append(record)
  messages.append({'role': 'user', 'content': user_input})
  responses = Generation.call("qwen-max",
                                messages=messages,
                                result_format='message',  # set the result to be "message"  format.
                                stream=True, # set streaming output
                                incremental_output=True  # get streaming output incrementally
                                )
  chat_response=""
  for response in responses:
      if response.status_code == HTTPStatus.OK:
          time.sleep(0.05)
          chat_response += response.output.choices[0]['message']['content']
          yield chat_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
          ))

interface = gr.ChatInterface(
  fn=call_with_history,
  textbox=gr.Textbox(placeholder="Ask me anything"),
  retry_btn=None,
)
interface.launch()

Và dưới đây là kết quả đạt được, có thể thấy, dù mình không nói rõ ràng, nhưng model vẫn hiểu là Viết lại một câu khác có chứa từ sky, đó là nhờ model đã biết được ngữ cảnh câu chuyện (lịch sử), biết được trước đó mình đã yêu cầu "Viết một câu với từ sky":
Ali_ChatHistory

3. Kết luận

Có thể thấy, model studio đã cung cấp một khả năng truy cập vào những AI hiệu quả, tiên phong và sáng tạo nhất của Alibaba Cloud, với những mẩu code đơn giản trên, mình hi vọng có thể cung cấp cho mọi người một nền tảng để hiện thực hóa sự sáng tạo vô hạn của mình với những khả năng tuyệt với mà những FM trong Model Studio mang lại. Còn rất nhiều công cụ đang được phát triển, nó cho mình thấy một tiềm năng đầy hứa hẹn.

4. Tham khảo

0 0 0
Share on

Tran Phuc Hau

18 posts | 5 followers

You may also like

Comments

Tran Phuc Hau

18 posts | 5 followers

Related Products

  • Alibaba Cloud Model Studio

    A one-stop generative AI platform to build intelligent applications that understand your business, based on Qwen model series such as Qwen-Max and other popular models

    Learn More
  • EMAS HTTPDNS

    EMAS HTTPDNS is a domain name resolution service for mobile clients. It features anti-hijacking, high accuracy, and low latency.

    Learn More
  • OpenAPI Explorer

    OpenAPI Explorer allows you to call an API through its web interface or WebCLI, and view the entire process.

    Learn More
  • API Gateway

    API Gateway provides you with high-performance and high-availability API hosting services to deploy and release your APIs on Alibaba Cloud products.

    Learn More