paint-brush
Xây dựng ứng dụng đánh vần từ đơn giản với ElevenLabs, Streamlit và Claudetừ tác giả@lablab
1,055 lượt đọc
1,055 lượt đọc

Xây dựng ứng dụng đánh vần từ đơn giản với ElevenLabs, Streamlit và Claude

từ tác giả lablab.ai hackathons12m2023/07/22
Read on Terminal Reader

dài quá đọc không nổi

ElevenLabs là một công ty nghiên cứu công nghệ giọng nói cung cấp giải pháp tổng hợp giọng nói. Với API dễ sử dụng, nó cho phép các nhà phát triển tạo các bài phát biểu chất lượng cao bằng AI. Điều đó có thể thực hiện được nhờ mô hình AI đã được đào tạo trên một lượng lớn sách nói và cả podcast.
featured image - Xây dựng ứng dụng đánh vần từ đơn giản với ElevenLabs, Streamlit và Claude
lablab.ai hackathons HackerNoon profile picture
0-item
1-item

Bạn có biết tiếng nói chung có khả năng gì không? Chúng mở ra những khả năng to lớn nào và có bao nhiêu lĩnh vực có thể hưởng lợi từ chúng?


Có thể bạn cần một ứng dụng để lồng tiếng cho blog video hoặc sách. Có lẽ bạn muốn làm cho một nhân vật trong trò chơi trở nên sống động bằng cách lồng tiếng chuyên nghiệp. Làm thế nào về việc tạo một ứng dụng cho việc học ngoại ngữ?


Hôm nay, lablab.ai đã chuẩn bị một hướng dẫn cho bạn để giúp bạn hiểu rõ hơn về công nghệ giọng nói AI! Hãy đi sâu vào!

Giới thiệu

Đây là một trong những thời điểm thú vị nhất để phát triển phần mềm, với sự xuất hiện của nhiều công cụ " AI sáng tạo " khác nhau trên thị trường. Chỉ cần đặt tên cho nó, tạo thư xin việc? Kiểm tra! Tạo thư điện tử? Kiểm tra! Tạo nhận xét mã tự động? Kiểm tra! Ngay cả bên ngoài mã hóa và phát triển phần mềm, khả năng trường hợp sử dụng là rất lớn.


Giờ đây, chúng ta có thể tạo hình ảnh bằng lời nhắc văn bản với nhiều mô hình tạo hình ảnh khác nhau. Do đó, chúng tôi có thể kết hợp các tài sản được tạo ra trong các sản phẩm khác nhau của mình. Câu hỏi tiếp theo là: còn giọng nói thì sao? Xu hướng trải nghiệm người dùng trong vài năm qua đề cập đến "ra lệnh bằng giọng nói" là một trong những xu hướng mới nổi.


Điều tự nhiên là phần mềm chúng tôi xây dựng sẽ kết hợp giọng nói như một trong những tính năng. Đó là lý do tại sao, trong hướng dẫn này, chúng tôi sẽ giới thiệu tính năng " Speech Synthesis " do ElevenLabs cung cấp trong một ứng dụng đơn giản, tạo ra các từ ngẫu nhiên và để nó đánh vần từ đó. Để xây dựng giao diện người dùng cho ứng dụng dựa trên Python này, chúng tôi sẽ sử dụng Streamlit , một thư viện giao diện người dùng mới để chia sẻ các dự án khoa học dữ liệu.

Giới thiệu về ElevenLabs

ElevenLabs là một công ty nghiên cứu công nghệ giọng nói cung cấp giải pháp tổng hợp giọng nói . Với API dễ sử dụng, nó cho phép các nhà phát triển tạo các bài phát biểu chất lượng cao bằng AI. Điều đó có thể thực hiện được nhờ mô hình AI đã được đào tạo trên một lượng lớn sách nói và cả podcast. Quá trình đào tạo cho phép AI mang lại kết quả chất lượng cao và có thể dự đoán được trong quá trình tạo giọng nói.


Có hai tính năng chính mà ElevenLabs cung cấp, tính năng đầu tiên là VoiceLab, nơi người dùng có thể sao chép giọng nói từ âm thanh đã ghi và/hoặc giọng nói tạo sẵn hiện có, đồng thời "thiết kế" giọng nói dựa trên giới tính, độ tuổi, dân tộc và chủng tộc. Sau khi người dùng có giọng nói để làm việc, họ có thể chuyển sang tính năng tiếp theo, Tổng hợp giọng nói, nơi họ có thể tạo giọng nói bằng giọng nói được thiết kế hoặc chỉ sử dụng giọng nói được tạo sẵn.

Giới thiệu về Mô hình Claude của Anthropic

Claude là mô hình AI mới nhất được phát triển bởi Anthropic , một tổ chức nghiên cứu AI tập trung vào việc cải thiện khả năng tương tác, sự mạnh mẽ và an toàn của các hệ thống trí tuệ nhân tạo.


Mô hình Claude được thiết kế để tạo ra các phản hồi giống như con người, làm cho nó trở thành một công cụ mạnh mẽ cho nhiều ứng dụng, từ tạo nội dung, pháp lý đến dịch vụ khách hàng. Cũng giống như bất kỳ mô hình AI nào khác trên thị trường, Claude cũng được đào tạo về nhiều loại văn bản trên internet. Tuy nhiên, không giống như hầu hết các mô hình AI, nó tập trung vào "sự an toàn", điều này cho phép từ chối các đầu ra mà nó cho là "có hại" hoặc "không trung thực" đối với người dùng.

Giới thiệu về Streamlit

Streamlit là một thư viện Python mã nguồn mở giúp các nhà phát triển và nhà khoa học dữ liệu dễ dàng tạo và chia sẻ các ứng dụng web tùy chỉnh và hấp dẫn trực quan. Các nhà phát triển có thể sử dụng Streamlit để xây dựng và triển khai các ứng dụng khoa học dữ liệu đầy đủ tính năng trong vài phút. Điều này được thực hiện nhờ API đơn giản và trực quan có thể được sử dụng để biến các tập lệnh dữ liệu thành các thành phần giao diện người dùng.

điều kiện tiên quyết

  • Kiến thức cơ bản về Pythonphát triển giao diện người dùng bằng Streamlit
  • Truy cập vào Anthropic API
  • Truy cập API ElevenLabs

Đề cương

  1. Đang khởi tạo Dự án Streamlit của chúng tôi
  2. Thêm tính năng tạo từ bằng Mô hình Claude
  3. Thêm tính năng tạo giọng nói bằng API ElevenLabs
  4. Kiểm tra ứng dụng Word Generator

Cuộc thảo luận

Có ít nhất bốn bước mà chúng ta sẽ thực hiện trong hướng dẫn này. Trước tiên, chúng ta cần khởi tạo dự án dựa trên Streamlit, để có cảm nhận chung về việc phát triển giao diện người dùng bằng Streamlit.


Tiếp theo, chúng tôi bắt đầu thêm nhiều tính năng hơn, bắt đầu với lời nhắc kỹ thuật để lấy mô hình Claude cung cấp cho chúng tôi một từ ngẫu nhiên thường bị viết sai chính tả. Sau đó, chúng tôi sẽ thêm tính năng tạo văn bản thành giọng nói do ElevenLabs cung cấp để minh họa cách mô hình đa ngôn ngữ đánh vần các từ. Cuối cùng, chúng ta sẽ thử nghiệm ứng dụng đơn giản.

Đang khởi tạo Dự án Streamlit của chúng tôi

Hãy bắt tay vào hành động mã hóa! Trước tiên, hãy tạo một thư mục cho dự án của chúng ta và nhập nó vào!

 mkdir randomwords cd randomwords


Tiếp theo, chúng ta sẽ sử dụng thư mục này làm cơ sở cho dự án Streamlit của mình. Vì dự án Streamlit về cơ bản là một dự án Python nên chúng ta cần thực hiện một số bước để khởi tạo dự án Python , chẳng hạn như xác định và kích hoạt môi trường ảo của chúng ta.

 # Creating the virtual environment python -m venv env # Activate the virtual environment # On Linux/Mac source env/bin/activate # On Windows: .\env\Scripts\activate

Sau khi được kích hoạt, đầu ra của thiết bị đầu cuối của chúng tôi sẽ hiển thị tên của môi trường ảo (env), như vậy:


Tiếp theo, đã đến lúc cài đặt các thư viện chúng ta cần cho dự án này! hãy sử dụng lệnh pip để cài đặt thư viện streamlit , anthropicelevenlabs . Lưu ý rằng chúng tôi cũng cài đặt thư viện pydantic bị khóa phiên bản để ngăn lỗi liên quan đến Pydantic ở một trong các chức năng elevenlabs .

 pip install streamlit anthropic elevenlabs "pydantic==1.*"


Với tất cả các yêu cầu của dự án, bây giờ chúng ta hãy đi sâu vào phần mã hóa! Tạo một tệp mới bên trong thư mục dự án của chúng tôi, hãy gọi nó là randomwords_app.py .

 touch randomwords_app.py


Sau khi tệp được tạo, hãy mở tệp trong trình chỉnh sửa mã yêu thích của chúng tôi hoặc môi trường phát triển tích hợp (IDE). Để bắt đầu, hãy xây dựng ứng dụng đơn giản của chúng ta từ những phần đơn giản nhất có thể, tiêu đề và văn bản cho chú thích!

 import streamlit as st st.title("Random Words Generator") st.text("Hello, this is a random words generator app")


Để kết thúc phần khởi tạo dự án của chúng ta, hãy thử chạy thử ứng dụng. Đảm bảo rằng thư mục làm việc hiện tại của chúng tôi vẫn nằm trong dự án của chúng tôi và môi trường ảo của chúng tôi đã được kích hoạt. Khi mọi thứ đã sẵn sàng, hãy sử dụng streamlit run <app-name> để chạy ứng dụng.

 streamlit run randomwords_app.py

Ứng dụng sẽ tự động mở trong trình duyệt mặc định của chúng tôi! bây giờ nó sẽ hiển thị tiêu đề và văn bản. Tiếp theo, chúng tôi sẽ thêm tính năng tạo từ ngẫu nhiên bằng mô hình Claude của Anthropic .


Tuy nhiên, một điều cuối cùng, chúng tôi sẽ phải cung cấp cho ứng dụng của mình các khóa API cho các dịch vụ mà chúng tôi sẽ sử dụng, cụ thể là mô hình Claude của Anthropic và tính năng Tổng hợp giọng nói của ElevenLabs . Vì các khóa này được coi là nhạy cảm nên chúng ta nên giữ chúng ở nơi an toàn và biệt lập.


Tuy nhiên, lần này chúng tôi không lưu trữ chúng trong tệp .env . Điều này là do Streamlit xử lý các biến môi trường theo cách khác. Theo tài liệu , chúng ta cần tạo một tệp cấu hình bí mật bên trong thư mục .streamlit . Chúng ta có thể tạo thư mục bên trong dự án của mình và sau đó tạo tệp.

 mkdir .streamlit touch .streamlit/secrets.toml


Hãy chỉnh sửa tệp TOML mà chúng tôi đã tạo, lưu ý rằng tệp TOML sử dụng định dạng khác với tệp .env thông thường.

 xi_api_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" claude_key = "sk-ant-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Thêm tính năng tạo từ bằng Mô hình Claude

Trong bước này, chúng tôi sẽ thêm một nút sẽ tạo từ ngẫu nhiên, phần tử tiêu đề để hiển thị từ được tạo và tiêu đề phụ để hiển thị nghĩa của từ. Tuy nhiên, xuất phát từ nền tảng webdev, tôi thực sự tin rằng các phần tử giao diện người dùng nên được đặt và sắp xếp bên trong các thùng chứa. Vì vậy, chúng tôi sẽ làm chính xác điều đó.

Nhập các thư viện cần thiết

Trước hết, hãy thêm một số câu lệnh nhập. Chúng tôi sẽ nhập thư viện anthropic để tạo các từ ngẫu nhiên của chúng tôi.

 import streamlit as st import anthropic


Sau đó, trước khi đến phần giao diện người dùng, trước tiên hãy tạo chức năng tạo từ.

Xác định chức năng tạo từ

 def generate_word(): prompt = (f"{anthropic.HUMAN_PROMPT} Give me one non-English word that's commonly misspelled and the meaning. Please strictly follow the format! example: Word: Schadenfreude; Meaning: joy at other's expenses." f"{anthropic.AI_PROMPT} Word: Karaoke; Meaning: a form of entertainment where people sing popular songs over pre-recorded backing tracks." f"{anthropic.HUMAN_PROMPT} Great! just like that. Remember, only respond following the pattern.") c = anthropic.Anthropic(api_key=st.secrets["claude_key"]) resp = c.completions.create( prompt=f"{prompt} {anthropic.AI_PROMPT}", stop_sequences=[anthropic.HUMAN_PROMPT], model="claude-v1.3-100k", max_tokens_to_sample=900, ) print(resp.completion) return resp.completion

Trong chức năng này, công việc nâng vật nặng nhất được thực hiện bởi ** chế độ Claude của Anthropic **l (Cảm ơn, Claude ! 😉). Tuy nhiên, phần của chúng ta trong chức năng này là làm thế nào để Claude trả về định dạng chính xác một cách nhất quán. Vì vậy, chúng tôi cần vừa hướng dẫn Claude "tuân thủ nghiêm ngặt định dạng" vừa đưa ra phản hồi ví dụ bằng cách thêm nó sau lời nhắc ban đầu của chúng tôi.


Cuối cùng, chúng tôi đảm bảo rằng Claude tuân thủ các thỏa thuận của chúng tôi bằng cách yêu cầu nó "Hãy nhớ chỉ trả lời theo mẫu". Hàm kết thúc bằng cách trả về phản hồi từ Claude .

Tiếp theo, hãy quay lại chỉnh sửa giao diện người dùng!

Cập nhật giao diện người dùng

 st.title("Random Words Generator") with st.container(): st.header("Random Word") random_word = st.subheader("-") word_meaning = st.text("Meaning: -") st.write("Click the `Generate` button to generate new word") if st.button("Generate"): result = generate_word() # Split the string on the semicolon split_string = result.split(";") # Split the first part on ": " to get the word word = split_string[0].split(": ")[1] # Split the second part on ": " to get the meaning meaning = split_string[1].split(": ")[1] print(f"word result: {word}") random_word.subheader(word) word_meaning.text(f"Meaning: {meaning}")

Lần này, chúng tôi đã thêm một thùng chứa với một số yếu tố bên trong nó. Tiêu đề, tiêu đề phụ để hiển thị từ ngẫu nhiên và thành phần văn bản để hiển thị nghĩa của từ. Chúng tôi cũng có một văn bản để hiển thị gợi ý về cách sử dụng ứng dụng, cũng như một nút bên dưới nó.


Trong Streamlit , chúng ta có thể khai báo trình xử lý sự kiện nhấp bằng cách sử dụng câu lệnh có điều kiện, trong đó nó trả về True khi nút được nhấp. Trong mã này, chúng tôi gọi hàm generate_word() trả về từ được tạo và nghĩa, đồng thời chia kết quả thành các biến riêng biệt tương ứng cho từ và nghĩa. Cuối cùng, chúng tôi cập nhật tiêu đề phụ và thành phần văn bản để hiển thị từ và nghĩa.

Hình thức cuối cùng

Hãy kiểm tra lại mã của chúng tôi một lần nữa! Nó phải chứa các câu lệnh nhập, hàm tạo từ ngẫu nhiên và giao diện người dùng được cập nhật chứa tiêu đề phụ và các thành phần văn bản cũng như nút tạo từ bằng cách gọi hàm generate_word() .

 import streamlit as st import anthropic def generate_word(): prompt = (f"{anthropic.HUMAN_PROMPT} Give me one non-English word that's commonly misspelled and the meaning. Please strictly follow the format! example: Word: Schadenfreude; Meaning: joy at other's expenses." f"{anthropic.AI_PROMPT} Word: Karaoke; Meaning: a form of entertainment where people sing popular songs over pre-recorded backing tracks." f"{anthropic.HUMAN_PROMPT} Great! just like that. Remember, only respond following the pattern.") c = anthropic.Anthropic(api_key=st.secrets["claude_key"]) resp = c.completions.create( prompt=f"{prompt} {anthropic.AI_PROMPT}", stop_sequences=[anthropic.HUMAN_PROMPT], model="claude-v1.3-100k", max_tokens_to_sample=900, ) print(resp.completion) return resp.completion st.title("Random Words Generator") with st.container(): st.header("Random Word") random_word = st.subheader("-") word_meaning = st.text("Meaning: -") st.write("Click the `Generate` button to generate new word") if st.button("Generate"): result = generate_word() # Split the string on the semicolon split_string = result.split(";") # Split the first part on ": " to get the word word = split_string[0].split(": ")[1] # Split the second part on ": " to get the meaning meaning = split_string[1].split(": ")[1] print(f"word result: {word}") random_word.subheader(word) word_meaning.text(f"Meaning: {meaning}")

Kiểm tra chức năng tạo từ

Hãy chạy lại ứng dụng với lệnh tương tự. Chúng tôi cũng có thể chạy lại ứng dụng bằng cách nhấp vào menu phía trên bên phải và nhấp vào " Chạy lại " nếu chúng tôi đã chạy ứng dụng trước đó.

Nó sẽ hiển thị giao diện người dùng được cập nhật này.

Bây giờ, hãy thử nhấp vào nút Generate !

Một trong những điều thú vị về Streamlit là nó xử lý tải và cung cấp chỉ báo tải ngay lập tức. Chúng ta sẽ thấy chỉ báo ở góc trên bên phải, cũng như tùy chọn " dừng " hoạt động. Gọn gàng nhỉ?

Sau vài giây, kết quả sẽ được hiển thị trong giao diện người dùng.

Hoàn hảo! lưu ý rằng ứng dụng đã phân tách chính xác văn bản được tạo từ mô hình Claude thành từ và nghĩa. Tuy nhiên, nếu kết quả không xuất hiện theo định dạng mong đợi, chúng tôi luôn có thể nhấp lại vào nút Generate .


Bước tiếp theo là tính năng chính của ứng dụng này, để kết hợp tạo giọng nói vào trình tạo từ ngẫu nhiên của chúng tôi. Bên cạnh việc minh họa cách tạo tệp âm thanh bằng API do ElevenLabs cung cấp, bước này còn nhằm minh họa các khả năng của mô hình đa ngôn ngữ của ElevenLabs.

Thêm tính năng tạo giọng nói bằng API ElevenLabs

Bước đầu tiên của phần này, như bạn có thể đoán, là thêm nhiều câu lệnh nhập hơn! Vì vậy, hãy thêm một số hàm từ elevenlabs mà chúng ta sẽ sử dụng cho tính năng tạo giọng nói.

 import streamlit as st import anthropic ++ from elevenlabs import generate, set_api_key


Tiếp theo, chúng ta sẽ định nghĩa hàm để xử lý việc tạo giọng nói.

 def generate_speech(word): set_api_key(st.secrets['xi_api_key']) audio = generate( text=word, voice="Bella", model='eleven_multilingual_v1' ) return audio


Nhờ tính đơn giản và dễ đọc của Python cũng như API dễ sử dụng của ElevenLabs , chúng tôi có thể tạo bài phát biểu chỉ bằng cách sử dụng mã này! Hàm chấp nhận từ ngẫu nhiên mà chúng tôi sử dụng để tạo bài phát biểu. Chúng tôi cũng đặc biệt sử dụng mô hình "eleven_multilingual_v1", một mô hình đa ngôn ngữ, hoàn hảo cho trường hợp sử dụng của chúng tôi để chứng minh chính tả và cách phát âm của các từ nước ngoài và từ thường bị viết sai chính tả! Cuối cùng, chúng tôi sử dụng giọng nói " Bella " cho hướng dẫn này, đây là một trong những giọng nói được tạo sẵn do ElevenLabs cung cấp.


Tiếp theo, chúng tôi sẽ thêm trình phát âm thanh để phát bài phát biểu đã tạo.

 print(f"word result: {word}") random_word.subheader(word) word_meaning.text(f"Meaning: {meaning}") ++ speech = generate_speech(word) ++ st.audio(speech, format='audio/mpeg')

Ngay bên dưới mã mới nhất của chúng tôi từ trước đó, chúng tôi thêm biến để lưu bài phát biểu được tạo và chạy bài phát biểu bằng trình phát âm thanh được cung cấp bởi chức năng st.audio từ Streamlit. Tại thời điểm này, ứng dụng của chúng ta sẽ hoạt động như mong đợi, chỉ hiển thị trình phát âm thanh khi có sẵn một từ ngẫu nhiên để "đọc".


Tò mò làm thế nào nó hoạt động ra? Tôi cũng vậy! hãy kiểm tra ứng dụng ngay bây giờ!

Kiểm tra tính năng chính tả từ

Hãy chạy lại ứng dụng bằng cách sử dụng streamlit run hoặc chỉ chạy lại ứng dụng nếu chúng ta đã chạy ứng dụng đó. Nó sẽ trông giống hệt như lần trước chúng ta rời khỏi nó. Tuy nhiên, lần này chúng ta hãy thử nhấp vào nút "Tạo"!


Tuyệt vời! lần này, ứng dụng cũng hiển thị trình phát âm thanh! Hãy thử chơi nó. Sử dụng mô hình đa ngôn ngữ, lời nói được tạo nên sử dụng trọng âm và ngữ điệu gần với ngôn ngữ gốc của từ đó. Ví dụ: "doanh nhân" nên được phát âm theo giọng Pháp.

Phần kết luận

Trong hướng dẫn ngắn này, hy vọng chúng ta đã khám phá các khả năng của công nghệ tạo giọng nói do ElevenLabs cung cấp. Với mô hình đa ngôn ngữ, thật dễ dàng để tạo các bài phát biểu dành cho người nghe không phải tiếng Anh. Trong trường hợp sử dụng của chúng tôi, chúng tôi cần mô hình đa ngôn ngữ để hỗ trợ chúng tôi tìm cách phát âm và đánh vần chính xác các từ không phải tiếng Anh thường bị viết sai chính tả.


Với rất nhiều ý tưởng, chúng tôi mời các nhà phát triển tham gia cùng chúng tôi để tạo ra tương lai!


Vào ngày 28 tháng 7 , lablab.ai đã khởi động một thử thách trong đó bạn có thể tạo ứng dụng AI bằng giọng nói của riêng mình với các mẫu của ElevenLabs ! (Ngoài ra, bạn có thể tận dụng các mô hình AI khác như mô hình ngôn ngữ lớn, mô hình tạo hình ảnh và video, v.v., miễn là chúng không cạnh tranh trực tiếp với công nghệ hackathon).


*Your final submission should consist of a ready-to-play working prototype of your idea, a video pitch, and a presentation showcasing your solution.


Bạn có thể tìm thêm hướng dẫn TẠI ĐÂY và bạn có thể THAM GIA các hackathon khác để xây dựng bằng các công nghệ tiên tiến!


Và xin chân thành cảm ơn Septian Adi Nugraha - Tác giả của bài viết này. 💚