Chào bạn, bạn có tin được không? Nền tảng phân tích dữ liệu phi cấu trúc của Snowflake lại vừa có một bước nhảy vọt ngoạn mục! Sau khi mở rộng khả năng của Cortex AI cho hình ảnh và tài liệu trong suốt năm 2025, giờ đây, chúng ta có thể làm việc với dữ liệu âm thanh *trực tiếp từ SQL*! Nghe "ảo diệu" quá đúng không?\n\nChức năng AI_TRANSCRIBE mới toanh, vừa ra mắt dưới dạng Public Preview trong Snowflake Cortex AISQL, hứa hẹn sẽ thay đổi hoàn toàn cách chúng ta xử lý dữ liệu âm thanh. Nào là các cuộc gọi hỗ trợ khách hàng, ghi âm cuộc họp, phỏng vấn... tất tần tật những kho tài nguyên âm thanh 'khó nhằn' này giờ đây có thể được chuyển đổi thành văn bản chỉ với một câu lệnh SQL duy nhất! Tuyệt vời hơn nữa, bạn còn có thể kết hợp nó với các chức năng AISQL khác để thực hiện phân tích chuyên sâu.\n\nVới sự hỗ trợ cho hình ảnh, tài liệu và giờ là âm thanh – ba định dạng dữ liệu phi cấu trúc 'khổng lồ' nhất – Snowflake đã mở rộng đáng kể khả năng phân tích dữ liệu kinh doanh. Nào, chúng ta hãy cùng nhau khám phá AI_TRANSCRIBE hoạt động thế nào, những ứng dụng 'thực chiến' của nó, và tôi thậm chí còn chia sẻ một chatbot AI nhận diện giọng nói cực chất được xây dựng bằng Streamlit trong Snowflake nữa đấy!\n\nLưu ý nhỏ xíu: Chức năng AI_TRANSCRIBE hiện đang trong giai đoạn Public Preview, nên các tính năng có thể có những cập nhật lớn trong tương lai nhé. À, và bài viết này thể hiện quan điểm cá nhân của tôi, không phải của Snowflake đâu nha!\n<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://i.imgur.com/sound_to_text.png' alt='Âm thanh chuyển thành văn bản'>\n\nVậy, 'em nó' AI_TRANSCRIBE là gì mà 'hot' vậy? Đơn giản thôi, đây chính là chức năng 'biến' âm thanh thành văn bản của Snowflake Cortex AISQL! Trước đây, để tận dụng dữ liệu âm thanh, bạn phải 'loay hoay' với các dịch vụ bên ngoài hoặc thư viện của bên thứ ba, tốn công tốn sức đủ đường. Nhưng giờ đây, AI_TRANSCRIBE cho phép bạn chuyển đổi âm thanh trực tiếp ngay trong các truy vấn SQL của mình. Cứ như có một 'phù thủy ngôn ngữ' ngay trong database của bạn vậy!\n<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://i.imgur.com/snowflake_cortex_ai.png' alt='Snowflake Cortex AI'>\n\nĐiểm danh những tính năng 'đỉnh của chóp' của AI_TRANSCRIBE nào:\n* **Tích hợp SQL "chuẩn chỉnh"**: Gọi trực tiếp từ SQL y như các hàm AISQL 'xịn sò' khác, tích hợp dễ như ăn kẹo!\n* **Hỗ trợ đa ngôn ngữ**: 'Hiểu' được vô số ngôn ngữ, từ tiếng Anh, Tây Ban Nha, Pháp, Đức đến tiếng Trung (Quan Thoại, Quảng Đông), Nhật, Hàn và rất nhiều tiếng khác nữa. Thật bá đạo!\n* **Nhận diện người nói**: 'Biết' và dán nhãn cho nhiều người nói khác nhau. Ai nói gì, ai nói lúc nào, rõ mồn một!\n* **Tạo dấu thời gian**: Cung cấp dấu thời gian chi tiết đến từng từ hoặc từng người nói. Giúp bạn tìm kiếm thông tin cực nhanh!\n* **Xử lý an toàn "tuyệt mật"**: Mọi dữ liệu đều được xử lý bên trong môi trường bảo mật 'đỉnh cao' của Snowflake. Yên tâm mà dùng nhé!\n\nSức mạnh của AI_TRANSCRIBE còn được nhân lên gấp bội khi nó 'bắt tay' với các chức năng Cortex AISQL hiện có:\n* **AI_SENTIMENT**: Phân tích cảm xúc trong văn bản đã chuyển đổi từ âm thanh. Biết được khách hàng đang vui, buồn, hay 'giận tím người' ngay!\n* **AI_CLASSIFY**: Tự động phân loại nội dung âm thanh. Giúp bạn sắp xếp 'núi' dữ liệu mà không tốn sức!\n* **AI_COMPLETE**: Tóm tắt hoặc trả lời các câu hỏi về nội dung âm thanh. Giúp bạn nắm bắt thông tin nhanh chóng.\n* **AI_AGG**: Trích xuất thông tin chuyên sâu từ dữ liệu âm thanh được nhóm lại. Biến dữ liệu thô thành 'vàng'!\n* **AI_EMBED**: Chuyển đổi văn bản đã chuyển đổi thành vector để tìm kiếm sự tương đồng. 'Mò kim đáy bể' giờ đây thật dễ dàng!\n<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://i.imgur.com/ai_sql_functions.png' alt='Hàm AISQL kết hợp'>\n\nCú pháp cơ bản của AI_TRANSCRIBE thì siêu đơn giản, ai cũng có thể 'thực hành' được ngay:\n`AI_TRANSCRIBE( <file_âm_thanh> [ , <tùy_chọn> ] )`\n\nCác tham số:\n* `file_âm_thanh`: Một đối tượng kiểu `FILE` đại diện cho tệp âm thanh. Bạn cứ dùng hàm `TO_FILE` để 'trỏ' đến các tệp đã được đưa lên stage là được.\n* `tùy_chọn`: Một đối tượng kiểu `OBJECT` tùy chọn với các trường sau:\n * `timestamp_granularity`: Chỉ định mức độ chi tiết của dấu thời gian.\n * `"word"`: Dấu thời gian cho từng từ (siêu chi tiết!).\n * `"speaker"`: Dấu thời gian và nhãn cho từng người nói (biết ai nói đoạn nào!).\n\nTrường hợp sử dụng đơn giản nhất là 'biến hóa' file âm thanh thành văn bản thuần túy:\n`-- Biến file âm thanh thành văn bản`\n`SELECT AI_TRANSCRIBE( TO_FILE('@audio_stage', 'customer_call_001.wav'));`\n\nKết quả sẽ trả về một chuỗi JSON như vầy:\n`{ "audio_duration": 19.08, "text": "Hi, I'd like to inquire about the product I purchased last week. The packaging was damaged when it arrived, and I'd like to request an exchange if possible. Could you help me with this? Thank you."}`\n\nÀ, một điểm đáng kinh ngạc nữa là: thời gian xử lý cho file âm thanh 19 giây này chỉ mất khoảng 2 giây mà thôi! Nhanh chóng một cách ấn tượng cho các kịch bản phân tích đúng không nào!\n<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://i.imgur.com/sql_query_icon.png' alt='Ví dụ truy vấn SQL'>\n\nNếu bạn muốn phân tích siêu chi tiết, hãy thêm dấu thời gian cấp độ từ (word-level timestamps):\n`-- Chuyển đổi kèm dấu thời gian cấp độ từ`\n`SELECT AI_TRANSCRIBE( TO_FILE('@audio_stage', 'meeting_recording.wav'), {'timestamp_granularity': 'word'});`\n\nKết quả sẽ chi tiết đến từng từ, cho bạn cái nhìn sâu sắc nhất:\n`{ "audio_duration": 19.08, "segments": [ { "end": 1.254, "start": 0.993, "text": "Hi" }, { "end": 1.434, "start": 1.254, "text": "I'd" }, { "end": 1.514, "start": 1.434, "text": "like" } // ... còn nhiều đoạn nữa ], "text": "Hi I'd like to inquire about the product..."}`\n\nĐối với các cuộc họp hay phỏng vấn có nhiều người nói, bạn chỉ cần dùng tính năng nhận diện người nói là xong:\n`-- Chuyển đổi kèm nhận diện người nói`\n`SELECT AI_TRANSCRIBE( TO_FILE('@audio_stage', 'interview_2025.mp3'), {'timestamp_granularity': 'speaker'});`\n\nKết quả sẽ trả về cả nhãn của từng người nói, giúp bạn dễ dàng theo dõi cuộc trò chuyện:\n`{ "audio_duration": 16.2, "segments": [ { "end": 8.461, "speaker_label": "SPEAKER_00", "start": 0.511, "text": "Good morning, thank you for joining us today. My name is Sarah." }, { "end": 15.153, "speaker_label": "SPEAKER_01", "start": 9.048, "text": "Thank you for having me. I'm John, pleased to be here." } ], "text": "Good morning, thank you for joining us today. My name is Sarah. Thank you for having me. I'm John, pleased to be here."}`\n\n**Ngôn ngữ được hỗ trợ:** AI_TRANSCRIBE hỗ trợ một danh sách ngôn ngữ 'khủng' bao gồm: Tiếng Anh, Tây Ban Nha, Pháp, Đức, Trung Quốc (Quan Thoại, Quảng Đông), Nhật Bản, Hàn Quốc, Ả Rập, Bulgaria, Catalan, Séc, Hà Lan, Hy Lạp, Hungary, Indonesia, Ý, Latvia, Ba Lan, Bồ Đào Nha, Romania, Nga, Serbia, Slovenia, Thụy Điển, Thái Lan, Thổ Nhĩ Kỳ, Ukraina. Gần như 'phủ sóng' toàn cầu luôn!\n\n**Định dạng âm thanh được hỗ trợ:** Các định dạng âm thanh phổ biến đều được 'chăm sóc' cẩn thận:\n* **MP3**: Định dạng âm thanh phổ biến nhất (chắc ai cũng biết!).\n* **WAV**: Âm thanh chất lượng cao, không nén (nghe 'sướng tai'!).\n* **FLAC**: Âm thanh nén không mất dữ liệu (vừa gọn nhẹ vừa chất lượng!).\n* **Ogg**: Định dạng mã nguồn mở (thân thiện với cộng đồng!).\n* **WebM**: Định dạng chuẩn cho web (tối ưu cho trải nghiệm online!).\n\nTuy 'siêu việt' nhưng AI_TRANSCRIBE cũng có vài 'điểm cần lưu ý' nhỏ xíu nhé:\n* **Giới hạn kỹ thuật**:\n * **Kích thước tệp tối đa**: 700MB (Khá rộng rãi rồi đúng không?).\n * **Thời lượng tối đa (không dấu thời gian)**: 120 phút.\n * **Thời lượng tối đa (có dấu thời gian)**: 60 phút.\n * **Xử lý đồng thời**: Tùy thuộc vào tài nguyên tính toán của tài khoản bạn.\n* **Những điều cần cân nhắc khi sử dụng**:\n * **Chất lượng âm thanh**: Tiếng ồn xung quanh hay chất lượng âm thanh kém có thể làm giảm độ chính xác của bản chuyển đổi. Cứ như bạn đang cố nghe một người nói trong quán karaoke vậy!\n * **Thuật ngữ chuyên ngành**: Các thuật ngữ đặc thù của ngành hoặc tên riêng có thể không được chuyển đổi hoàn toàn chính xác. Ví dụ: tên công ty, tên thuốc khó đọc.\n * **Hành vi theo ngôn ngữ**: Một số ngôn ngữ có thể có những hành vi đặc biệt với dấu thời gian cấp độ từ.\n * **Xử lý theo lô (chưa real-time)**: Hiện tại, AI_TRANSCRIBE chỉ hỗ trợ xử lý theo lô (batch processing), chưa phải là xử lý trực tuyến (real-time streaming) đâu nha.\n\nAI_TRANSCRIBE hiện có sẵn 'ngay và luôn' tại các khu vực sau:\n* AWS US West 2 (Oregon)\n* AWS US East 1 (N. Virginia)\n* AWS EU Central 1 (Frankfurt)\n* Azure East US 2 (Virginia)\nĐối với các khu vực khác, bạn vẫn có thể 'chạm tay' vào AI_TRANSCRIBE bằng cách sử dụng tính năng 'suy luận liên vùng' (cross-region inference), nhưng có thể sẽ có một chút độ trễ nhỏ nhé.\n\nAI_TRANSCRIBE tỏa sáng 'rực rỡ' trong vô vàn tình huống kinh doanh:\n\n1. **Nâng cao chất lượng dịch vụ khách hàng**:\n * **Phân tích cảm xúc**: Dùng AI_SENTIMENT để 'soi' mức độ chuyên nghiệp, khả năng giải quyết vấn đề, hay cảm nhận của khách hàng về thời gian chờ.\n * **Phân loại cuộc gọi**: Tự động dán nhãn các cuộc gọi là khiếu nại, yêu cầu, hay lời khen ngợi bằng AI_CLASSIFY.\n * **Tách riêng người nói**: Phân tích giọng nói của nhân viên tổng đài và khách hàng riêng biệt để có cái nhìn chi tiết hơn.\n * **Bảng điều khiển (dashboard) thời gian thực**: Trực quan hóa kết quả phân tích để cải thiện chất lượng dịch vụ ngay lập tức.\n\n2. **Tự động hóa cuộc họp và trích xuất 'việc cần làm'**:\n * **Biên bản cuộc họp tự động**: Lập tức có được toàn bộ nội dung văn bản từ các cuộc họp dài lê thê.\n * **Tạo bản tóm tắt**: Dùng AI_COMPLETE để tạo ra các bản tóm tắt cuộc họp súc tích.\n * **Trích xuất mục hành động**: Tự động xác định các quyết định và 'to-do list' để theo dõi hiệu quả.\n * **Phân tích người tham gia**: Theo dõi ai đã nói gì bằng tính năng nhận diện người nói.\n\n3. **Tự động hóa pháp lý và tuân thủ**:\n * **Tài liệu hoàn chỉnh**: Lưu giữ toàn bộ các cuộc đàm phán hợp đồng và thảo luận pháp lý dưới dạng văn bản.\n * **Phát hiện rủi ro tuân thủ**: Phân loại nội dung cuộc trò chuyện theo mức độ rủi ro bằng AI_CLASSIFY.\n * **Lưu giữ bằng chứng**: Ghi lại chính xác ai đã nói gì và khi nào với tính năng nhận diện người nói và dấu thời gian.\n * **Báo cáo kiểm toán tự động**: Trích xuất các điểm chính và tạo tài liệu sẵn sàng cho kiểm toán.\n\n4. **Nâng cao giáo dục và đào tạo**:\n * **Lưu trữ bài giảng**: Lưu nội dung khóa học dưới dạng văn bản có thể tìm kiếm được.\n * **Tạo phụ đề**: Thêm phụ đề cho tài liệu video bằng dấu thời gian cấp độ từ.\n * **Phân tích phản hồi đào tạo**: Xác định các lĩnh vực cần cải thiện trong phương pháp đào tạo.\n * **Hỗ trợ đa ngôn ngữ**: Chuyển đổi các khóa học tiếng nước ngoài để dễ dàng xem lại.\n\n5. **Hồ sơ y tế (với kiểm soát quyền riêng tư chặt chẽ)**:\n * **Ghi chú lâm sàng tự động**: Tạo hồ sơ y tế có cấu trúc từ các cuộc trò chuyện giữa bác sĩ và bệnh nhân.\n * **Tích hợp EHR**: Trích xuất thông tin liên quan cho hồ sơ sức khỏe điện tử.\n * **Chăm sóc bệnh nhân đa ngôn ngữ**: Hỗ trợ bệnh nhân quốc tế bằng tính năng chuyển đổi và dịch thuật.\n * **Đảm bảo chất lượng**: Phân tích nội dung tư vấn để cải thiện dịch vụ y tế.\n<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://i.imgur.com/business_insights.png' alt='Phân tích kinh doanh và thông tin chi tiết'>\n\nGiờ thì, hãy cùng 'xắn tay áo' xây dựng một chatbot AI hỗ trợ giọng nói siêu đơn giản bằng AI_TRANSCRIBE trong Streamlit trên Snowflake nhé! Người dùng có hỏi bằng giọng nói, chatbot sẽ 'biến' giọng nói thành văn bản và sau đó được AI (bao gồm cả OpenAI GPT-5 mới toanh!) trả lời.\n\nỨng dụng này sẽ cung cấp cho bạn:\n* **Ghi âm giọng nói**: Ghi âm trực tiếp từ trình duyệt và lưu vào stage.\n* **Chuyển đổi âm thanh**: Chuyển thành văn bản bằng AI_TRANSCRIBE.\n* **Tạo phản hồi AI**: Tạo câu trả lời bằng AI_COMPLETE.\n\nBạn cần gì để bắt đầu? Không nhiều đâu!\n* **Yêu cầu môi trường**:\n * **Phiên bản Python**: 3.11 trở lên.\n * **Các gói bổ sung**: Không cần gì thêm (chỉ cần các gói chuẩn là 'chiến' được rồi).\n * **Streamlit trong Snowflake**: Môi trường để tạo và chạy ứng dụng (đây là nơi 'phép màu' xảy ra!).\n* **Kiểm tra khu vực**: Đảm bảo khu vực của bạn hỗ trợ các chức năng AI_TRANSCRIBE và AI_COMPLETE, hoặc kích hoạt tính năng suy luận liên vùng nhé.\n\nCác bước thực hiện thì 'dễ như ăn bánh':\n\n1. **Tạo một ứng dụng Streamlit mới trong Snowflake**:\n * Truy cập 'Streamlit' trong thanh bên trái của Snowsight và nhấp vào '+ Streamlit' để tạo ứng dụng mới.\n2. **Dán mã mẫu**:\n * Sao chép và dán trực tiếp mã mẫu bên dưới vào trình chỉnh sửa ứng dụng. Không cần chỉnh sửa gì cả – tên stage đã được tự động cấu hình rồi!\n3. **Chạy ứng dụng**:\n * Nhấp vào nút "Run" để khởi chạy ứng dụng. Stage sẽ được tạo tự động trong lần chạy đầu tiên.\n4. **Sử dụng ứng dụng**:\n * **Nhập giọng nói**: Nhấp vào nút micro để nói (như đang nói chuyện với một người bạn vậy!).\n * **Chọn mô hình**: Chọn mô hình AI bạn muốn từ thanh bên.\n * **Nhập văn bản**: Bạn cũng có thể nhập văn bản thông thường nếu muốn.\n\n```python\nimport streamlit as st\nimport io\nimport uuid\nimport json\nfrom datetime import datetime\nfrom snowflake.snowpark.context import get_active_session\nfrom snowflake.snowpark.functions import ai_complete, to_file\n\n# Get Snowflake session\nsession = get_active_session()\n\n# Constants\nSTAGE_NAME = \"AUDIO_TRANSCRIBE_STAGE\"\n\n# Page configuration\nst.set_page_config(layout=\"wide\")\nst.title(\"AI Voice Chatbot\")\n\n# Sidebar: Model selection\nst.sidebar.title(\"⚙️ Settings\")\n\n# Model options\nmodel_options = [\n \"━━━ 🟢 OpenAI ━━━\",\n \"openai-gpt-oss-120b\",\n \"openai-gpt-oss-20b\",\n \"openai-gpt-5\",\n \"openai-gpt-5-mini\",\n \"openai-gpt-5-nano\",\n \"openai-gpt-5-chat\",\n \"openai-gpt-4.1\",\n \"openai-o4-mini\",\n \"━━━ 🔵 Claude ━━━\",\n \"claude-4-opus\",\n \"claude-4-sonnet\",\n \"claude-3-7-sonnet\",\n \"claude-3-5-sonnet\",\n \"━━━ 🦙 Llama ━━━\",\n \"llama4-maverick\",\n \"llama4-scout\",\n \"llama3.3-70b\",\n \"llama3.2-3b\",\n \"llama3.2-1b\",\n \"llama3.1-405b\",\n \"llama3.1-70b\",\n \"llama3.1-8b\",\n \"llama3-70b\",\n \"llama3-8b\",\n \"━━━ 🟣 Mistral ━━━\",\n \"mistral-large2\",\n \"mistral-large\",\n \"mixtral-8x7b\",\n \"mistral-7b\",\n \"━━━ ❄️ Snowflake ━━━\",\n \"snowflake-arctic\",\n \"snowflake-llama-3.3-70b\",\n \"snowflake-llama-3.1-405b\",\n \"━━━ 🔴 Others ━━━\",\n \"deepseek-r1\",\n \"reka-core\",\n \"reka-flash\",\n \"jamba-1.5-large\",\n \"jamba-1.5-mini\",\n \"jamba-instruct\",\n \"gemma-7b\"\n]\n\n# Default model setting\ndefault_model = \"llama4-maverick\"\ndefault_index = model_options.index(default_model) if default_model in model_options else 1\nllm_model = st.sidebar.radio(\n \"Select AI Model\",\n options=model_options,\n index=default_index,\n format_func=lambda x: x if \"━━━\" in x else f\" • {x}\"\n)\n\n# Use next model if separator is selected\nif \"━━━\" in llm_model:\n llm_model = \"llama4-maverick\"\n\n# Stage setup\[email protected]_resource\ndef setup_stage():\n \"\"\"Setup stage for audio file storage\"\"\"\n try:\n session.sql(f\"DESC STAGE {STAGE_NAME}\").collect()\n except:\n session.sql(f\"\"\"\n CREATE STAGE IF NOT EXISTS {STAGE_NAME}\n ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE')\n DIRECTORY = (ENABLE = TRUE)\n \"\"\").collect()\n\nsetup_stage()\n\n# Initialize session state\nif 'messages' not in st.session_state:\n st.session_state.messages = []\n st.session_state.chat_history = \"\"\n\ndef extract_text_from_transcript(transcript_result):\n \"\"\"Extract text from AI_TRANSCRIBE result\"\"\"\n if isinstance(transcript_result, str) and transcript_result.startswith('{'):\n try:\n return json.loads(transcript_result).get('text', '')\n except:\n return transcript_result\n return transcript_result\n\ndef clean_ai_response(response):\n \"\"\"Clean up AI response\"\"\"\n if isinstance(response, str):\n response = response.strip('\"')\n response = response.replace('\\\\n', '\\n')\n return response\n\ndef generate_ai_response(prompt, model):\n \"\"\"Generate AI response\"\"\"\n df = session.range(1).select(\n ai_complete(model=model, prompt=prompt).alias(\"response\")\n )\n return clean_ai_response(df.collect()[0]['RESPONSE'])\n\n# Display chat history\nfor message in st.session_state.messages:\n with st.chat_message(message[\"role\"]):\n st.markdown(message[\"content\"])\n\n# Voice input section\nst.subheader(\"Voice Input\")\naudio_value = st.audio_input(\"Click the microphone button to speak\")\n\nif st.button(\"📤 Send Voice\", disabled=(audio_value is None), use_container_width=True):\n if audio_value:\n try:\n # Upload audio file\n with st.spinner(\"🎤 Uploading audio...\"):\n audio_filename = f\"audio_{datetime.now().strftime('%Y%m%d_%H%M%S')}_{uuid.uuid4().hex[:8]}.wav\"\n audio_stream = io.BytesIO(audio_value.getvalue())\n session.file.put_stream(\n audio_stream,\n f\"@{STAGE_NAME}/{audio_filename}\",\n auto_compress=False,\n overwrite=True\n )\n\n # Transcribe\n with st.spinner(\"📝 Transcribing audio...\"):\n query = f\"\"\"\n SELECT AI_TRANSCRIBE(\n TO_FILE('@{STAGE_NAME}/{audio_filename}')\n ) as transcript\n \"\"\"\n result = session.sql(query).collect()\n if result and len(result) > 0:\n transcribed_text = extract_text_from_transcript(result[0]['TRANSCRIPT'])\n if transcribed_text:\n # Add user message\n st.session_state.messages.append({\"role\": \"user\", \"content\": transcribed_text})\n st.session_state.chat_history += f\"User: {transcribed_text}\\n\"\n\n # Generate AI response\n with st.spinner(\"🤖 AI is generating response...\"):\n full_prompt = st.session_state.chat_history + \"AI: \"\n response = generate_ai_response(full_prompt, llm_model)\n st.session_state.messages.append({\"role\": \"assistant\", \"content\": response})\n st.session_state.chat_history += f\"AI: {response}\\n\"\n st.rerun()\n else:\n st.warning(\"Transcription failed. Please try again.\")\n except Exception as e:\n st.error(f\"Error occurred: {str(e)}\")\n\n# Text input\nif prompt := st.chat_input(\"Enter your message...\"):\n # Add and display user message\n st.session_state.messages.append({\"role\": \"user\", \"content\": prompt})\n st.session_state.chat_history += f\"User: {prompt}\\n\"\n with st.chat_message(\"user\"):\n st.markdown(prompt)\n\n # Generate and display AI response\n try:\n with st.spinner(\"🤖 AI is generating response...\"):\n full_prompt = st.session_state.chat_history + \"AI: \"\n response = generate_ai_response(full_prompt, llm_model)\n st.session_state.messages.append({\"role\": \"assistant\", \"content\": response})\n st.session_state.chat_history += f\"AI: {response}\\n\"\n with st.chat_message(\"assistant\"):\n st.markdown(response)\n except Exception as e:\n st.error(f\"Error occurred: {str(e)}\")\n\n# Clear chat history\nif st.button(\"🗑️ Clear Chat History\"):\n st.session_state.messages = []\n st.session_state.chat_history = \"\"\n st.rerun()\n```\n<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9qho81aiuncz9xtd24a1.png' alt='Giao diện Chatbot AI hỗ trợ giọng nói'>\n<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F46xzqa9nw1adt3ermx82.png' alt='Tương tác trò chuyện với đầu vào giọng nói'>\n\nNhững điểm nhấn 'cực đỉnh' của việc triển khai này là:\n* **Triển khai đơn giản**: Không cần gói bổ sung, chỉ cần thư viện chuẩn là đủ sức 'chiến' rồi!\n* **Quản lý âm thanh 'thông minh'**: Lưu trữ dữ liệu âm thanh trong các stage và xử lý bằng AI_TRANSCRIBE.\n* **Hỗ trợ đa phương thức**: Nhận cả đầu vào giọng nói và văn bản. Cực kỳ linh hoạt!\n* **Lựa chọn mô hình phong phú**: Thoải mái chọn lựa từ các mô hình mới nhất, bao gồm cả OpenAI GPT-5 'thần thánh'.\n\nGiờ thì nói chuyện 'tiền nong' một chút nhé! Giá của AI_TRANSCRIBE tuân theo mô hình dựa trên token giống như các chức năng AISQL khác:\n* **Tiêu thụ và định giá token**:\n * **50 token mỗi giây âm thanh**: Áp dụng nhất quán cho mọi ngôn ngữ và mức độ chi tiết dấu thời gian.\n * **1 giờ âm thanh = 180.000 token**.\n * **Ước tính chi phí**: Với 1,3 credits/triệu token và giả sử 3 USD/credit, 1 giờ xử lý âm thanh tốn khoảng 0,117 USD. (Nghe có vẻ nhỏ xíu đúng không?)\n* **Ví dụ**: Một tệp âm thanh dài 60 giây:\n * 60 giây × 50 token = 3.000 token.\n * **Lưu ý quan trọng**: Các tệp âm thanh dưới 1 phút sẽ được tính phí tối thiểu là 1 phút (3.000 token). Vì vậy, để tối ưu chi phí khi xử lý nhiều tệp âm thanh ngắn, hãy cân nhắc 'gộp' chúng lại với nhau để xử lý theo lô nhé!\nĐể biết thông tin giá mới nhất, bạn có thể tham khảo 'Bảng tiêu thụ dịch vụ Snowflake'.\n<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://i.imgur.com/cost_efficiency.png' alt='Biểu đồ hiệu quả chi phí'>\n\nTóm lại, AI_TRANSCRIBE chính là một chức năng 'đột phá' mở ra cánh cửa hoàn toàn mới cho việc phân tích dữ liệu âm thanh. Kết hợp với sự hỗ trợ tăng cường của Snowflake cho hình ảnh và tài liệu vào năm 2025, việc bổ sung âm thanh – định dạng dữ liệu phi cấu trúc 'thứ ba' – thực sự định vị Snowflake là một nền tảng dữ liệu đa phương thức toàn diện. Đúng là 'All-in-one'!\n\nNhững lợi ích 'cực khủng' mà bạn sẽ nhận được:\n* **Xử lý dữ liệu hợp nhất**: Xử lý tất cả các loại dữ liệu, bao gồm âm thanh, ngay trong Snowflake. Không cần 'chạy đi chạy lại' nhiều nơi nữa!\n* **Tích hợp chức năng AISQL**: Kết hợp dễ dàng với phân tích cảm xúc, phân loại, tóm tắt và chuyển đổi vector. Sức mạnh được nhân đôi!\n* **Môi trường bảo mật 'tuyệt đối'**: Không cần di chuyển dữ liệu ra bên ngoài, duy trì quản trị chặt chẽ. An tâm là trên hết!\n* **Hiệu quả phát triển vượt trội**: Xây dựng các pipeline phân tích âm thanh chỉ bằng SQL, không cần 'đau đầu' với các gói bên thứ ba. Phát triển 'siêu tốc'!\n\nTừ dịch vụ khách hàng và chuyển đổi cuộc họp đến hồ sơ y tế và tuân thủ pháp lý, AI_TRANSCRIBE đang 'khai thác' những thông tin giá trị từ dữ liệu âm thanh mà trước đây chúng ta bỏ qua. Hãy bắt đầu khám phá cách chức năng này có thể 'biến đổi' công việc phân tích kinh doanh của bạn ngay hôm nay!\n\nBạn đã thử phân tích âm thanh trong quy trình dữ liệu của mình chưa? Những trường hợp sử dụng nào khiến bạn hào hứng nhất? Hãy chia sẻ trải nghiệm của bạn trong phần bình luận bên dưới nhé!\n<img src='https://truyentranh.letranglan.top/api/v1/proxy?url=https://i.imgur.com/data_platform.png' alt='Nền tảng dữ liệu đa phương tiện'>\n\nÀ, đừng quên theo dõi các cập nhật 'What's New' của Snowflake trên X (Twitter) nhé! Tôi sẽ chia sẻ những thông tin mới nhất tại đây:\n* **Phiên bản tiếng Anh**: Theo dõi Snowflake What's New Bot (English Version) tại đây: https://x.com/snow_new_en\n* **Phiên bản tiếng Nhật**: Theo dõi Snowflake's What's New Bot (Japanese Version) tại đây: https://x.com/snow_new_jp\n\n(20250810) Bài viết khởi tạo\nBài viết gốc tiếng Nhật tại: https://zenn.dev/tsubasa_tech/articles/65e96e2bd257ec
Khám phá Snowflake Copilot Inline – tính năng AI đột phá tích hợp trực tiếp vào Snowflake Workspaces, giúp bạn viết, tối ưu SQL và sửa lỗi cực nhanh, biến bạn thành 'phù thủy' dữ liệu chỉ trong tích tắc. Đừng bỏ lỡ công cụ thay đổi cuộc chơi này!