Show HN: Thêm Mistral Codestral và GPT-4o vào Jupyter Notebook
(github.com/pretzelai)- Pretzel là một bản fork của Jupyter, bổ sung môi trường notebook với tạo/chỉnh sửa mã bằng AI, hoàn thành tab nội dòng, chat ở thanh bên và sửa lỗi, đồng thời được thiết kế để dễ dàng tiếp tục dùng nguyên các thiết lập, keybinding và extension hiện có của Jupyter
- Bắt đầu chỉ cần chạy
pip install pretzelairồipretzel lab, và nếu ngại cài đặt thì có thể dùng phiên bản host miễn phí là pretzelai.app - Ask AI trong ô,
Cmd+K/Ctrl+K, AI Sidebar, tham chiếu biến bằng@, chỉnh sửa vùng được chọn và nút sửa lỗi đều tận dụng mã notebook và biến của session làm ngữ cảnh cho AI - Theo FAQ, model mặc định là GPT-4o, hoàn thành nội dòng dùng Mistral Codestral, và cũng có thể kết nối các model ngoài hoặc cục bộ như OpenAI, Anthropic/Claude, Ollama, Groq, Azure trong phần cài đặt
- Không thu thập thông tin cá nhân, nhưng có thể thu thập telemetry của tính năng AI và prompt; không lưu mã và phản hồi; mã mới được phát hành theo AGPLv3
Mục tiêu của Pretzel và khả năng tương thích với Jupyter
- Pretzel là một bản fork nhằm cải thiện trải nghiệm sử dụng Jupyter
- Bổ sung các tính năng tạo/chỉnh sửa mã bằng AI, hoàn thành tab nội dòng, chat ở thanh bên và sửa lỗi
- Khi chuyển từ Jupyter sang Pretzel, các config, thiết lập, keybinding và extension hiện có về cơ bản vẫn hoạt động
- Mục tiêu cốt lõi là để người dùng Jupyter có thể dùng tính năng AI với chi phí chuyển đổi gần như bằng 0
Bắt đầu nhanh và cài đặt
- Cài đặt cơ bản bằng
pip install pretzelai - Giao diện web được chạy bằng lệnh sau
pretzel lab
- Có thể dùng phiên bản host miễn phí tại pretzelai.app
- Trong môi trường conda, trước tiên chạy
conda install piprồi dùngpip install pretzelai - Nếu việc cài đặt gặp khó khăn, có thể chạy bằng container Docker
- Hướng dẫn dùng Docker khi cài đặt cục bộ bị chặn, chẳng hạn trên Windows
- Container sẽ mở cổng
8888và chạy theo dạngpretzel lab --ip=0.0.0.0 - Nếu cần truy cập thư mục cục bộ thì map thư mục hiện tại vào container bằng
-v $(pwd):/root/pretzel - Để cập nhật lên phiên bản mới nhất, build lại image bằng
docker build --no-cache -t pretzel .
- Có thể build phiên bản bleeding edge bằng Dockerfile trong repository
Lỗi cài đặt và công cụ build
- Lỗi
Failed to build installable wheels for some pyproject.toml based projects (pystemmer)nghĩa là việc cài dependencyPyStemmerđã thất bại - Nguyên nhân thường gặp là thiếu công cụ build cần thiết
- Cách xử lý tùy theo hệ điều hành
- Windows: cài Microsoft Build Tools
- Ubuntu và Debian:
sudo apt-get update && sudo apt-get install build-essential python3-dev - macOS:
brew install gcc, nếu cần thìxcode-select --install
- Sau khi cài công cụ build, chạy lại
pip install pretzelai
Các tính năng AI trong notebook
-
Hoàn thành tab nội dòng
- Khi bắt đầu gõ trong ô, có thể nhận hoàn thành tab nội dòng
- Gợi ý hoàn thành được kích hoạt sau 1 giây chờ, và sẽ hiện một spinner nhỏ trước nút Ask AI màu xanh của ô
- Pretzel AI Server mặc định dùng Mistral Codestral cho hoàn thành nội dòng
- Có thể đổi model hoàn thành nội dòng trong Pretzel AI Settings
-
Tạo và chỉnh sửa mã
- Trong ô, nhấn
Cmd+KhoặcCtrl+K, hoặc bấm Ask AI để mở hộp nhập prompt cho AI - Khi nhập
@, sẽ hiện dropdown danh sách biến của session hiện tại - Nếu đưa
@variablevào prompt thì giá trị của biến đó sẽ được gửi cho AI - Mã liên quan của notebook hiện tại tự động được đưa vào ngữ cảnh AI
- Với ô đã có mã, prompt sẽ chỉnh sửa chính đoạn mã đó
- Nếu chọn một phần mã thì chỉ phần được chọn là đối tượng chỉnh sửa
- Có thể chấp nhận hoặc từ chối phản hồi, và cũng có thể sửa prompt rồi gửi lại
- Có thể dùng
↑và↓để duyệt lịch sử prompt
- Trong ô, nhấn
-
AI Sidebar
- Có thể mở AI Sidebar bằng
Ctrl+Cmd+BhoặcCtrl+Alt+B, hoặc từ biểu tượng Pretzel ở thanh bên phải - Dùng để đặt câu hỏi, tạo mã và tìm kiếm mã hiện có
- AI luôn dùng mã của ô đang active làm ngữ cảnh
- Nếu chọn mã trong ô đang active thì chỉ phần được chọn được đưa vào ngữ cảnh
- Có thể tham chiếu biến và dataframe trong bộ nhớ bằng cú pháp
@ - Ví dụ tác vụ gồm tối ưu hàm, tìm mã để loại outlier, giải thích mã của ô hiện tại, tạo histogram age của
@df, và tính doanh thu trung bình theo loại sản phẩm trong dataframesales_data
- Có thể mở AI Sidebar bằng
-
Chèn mã vào giữa mã hiện có
- Đặt con trỏ ở dòng trống hoặc dòng mã hiện có rồi mở prompt AI bằng
Cmd+K - Nếu prompt bắt đầu bằng
injecthoặcijthì chỉ thêm mã mới mà không chỉnh sửa mã hiện có - Mã mới sẽ được thêm ở dòng ngay bên dưới vị trí con trỏ
- Đặt con trỏ ở dòng trống hoặc dòng mã hiện có rồi mở prompt AI bằng
-
Sửa lỗi
- Khi xảy ra lỗi, nút Fix Error with AI sẽ xuất hiện ở góc trên bên phải
- Có thể bấm nút này để thử sửa lỗi bằng AI
Model AI và cài đặt
- Pretzel hoạt động ngay mà không cần cấu hình riêng
- Mã hoặc dữ liệu gửi tới Pretzel AI Server mặc định sẽ không bị lưu lại
- Nếu muốn dùng model AI khác, có thể kết nối nhiều vendor và model cục bộ trong phần cài đặt
- OpenAI
- Anthropic/Claude
- Ollama
- Groq
- Azure
- Đường dẫn cài đặt là
Settings→Pretzel AI Settingsở menu trên cùng - Trong AI Settings, có thể chọn riêng model cho chat và model cho hoàn thành nội dòng
- Vì hiệu năng, khuyến nghị dùng model cấp GPT-4
- GPT-4 Turbo
- GPT-4o
- Claude-3.5 Sonnet
- Claude-3 Opus
- Llama-3.1 405B
- Trong Configure AI Services có thể bật/tắt dịch vụ AI và nhập API key hoặc URL
- Azure và Ollama mặc định bị tắt nhưng người dùng có thể bật lên
- Sau khi thay đổi cài đặt cần lưu lại, và Pretzel sẽ kiểm tra tính hợp lệ của cấu hình
- Azure Enterprise OpenAI model hiện vẫn chưa được kiểm thử; có thể báo lỗi tại GitHub issues
Cách hoạt động của model theo FAQ
- Pretzel dùng nhiều model AI tùy theo tác vụ
- Model mặc định là GPT-4o
- Được đánh giá có cân bằng tốt giữa tốc độ và chất lượng
- Khi dùng API key riêng, có thể đổi trong Pretzel Settings
- Hoàn thành nội dòng dùng Mistral Codestral
- Đây là model phù hợp cho hoàn thành mã
- Là model 22B tham số và cho hiệu năng nhanh
- Nếu dùng API key riêng mà không cung cấp Mistral API key thì hoàn thành nội dòng cũng sẽ dùng GPT-4o
- Hỗ trợ model cục bộ và hỗ trợ Anthropic Claude vẫn đang trong giai đoạn thử nghiệm, và Claude đang đứng đầu danh sách ưu tiên
Lộ trình
- Lộ trình của Pretzel bao gồm các tính năng sau
- Tạo và hiểu mã bằng AI native tương tự Cursor
- Cộng tác thời gian thực với pair programming, bình luận và lịch sử phiên bản
- Hỗ trợ SQL cả trong ô mã lẫn SQL IDE độc lập
- Trình dựng phân tích trực quan dựa trên pretzelai_visual
- Trải nghiệm viết mã kiểu VSCode dùng Monaco
- Tạo và chia sẻ dashboard từ Jupyter notebook chỉ với 1 cú nhấp
- Có thể gửi yêu cầu tính năng qua GitHub issues hoặc email
- Nhóm chỉ có hai người và muốn dùng phản hồi để xác định ưu tiên cho lộ trình
Quyền riêng tư, thu thập dữ liệu, lưu trữ
- Pretzel không thu thập thông tin cá nhân
- Chỉ dùng telemetry mặc định cho các tính năng AI
- Ví dụ là sự kiện ai đó đã bấm Ask AI
- Người dùng chỉ được gắn với một ID ẩn danh
- Nếu cho phép cookie, điều đó giúp nhận diện cùng một người dùng ẩn danh qua nhiều phiên trình duyệt
- Nếu không cho phép cookie, mỗi lần mở trình duyệt sẽ được coi là một người dùng ẩn danh mới
- Prompt của tính năng AI có được thu thập nhưng không thu thập phản hồi
- Có thể tắt prompt telemetry tại
Settings > Pretzel AI > Uncheck Prompt Telemetry - Mã sẽ không bị thu thập trong bất kỳ trường hợp nào
- Ngay cả khi dùng cloud AI server của Pretzel cho hoàn thành, mã cũng không bị lưu
- Khi dùng phiên bản host pretzelai.app, một người dùng dựa trên địa chỉ email sẽ được tạo ra
- Người dùng có thể đăng nhập để xóa dữ liệu đã lưu trên máy chủ host
- Máy chủ host không tạo bản sao lưu hay bản copy
- Máy chủ host miễn phí, nhưng sẽ xóa dữ liệu và tài khoản sau 30 ngày kể từ lần đăng nhập cuối cùng
- Nếu muốn xóa tài khoản sớm hơn, gửi email tới
founders@withpretzel.comvới tiêu đềAccount Deletionthì sẽ được xóa ngay
Giấy phép và lý do fork Jupyter
- Mã mới của Pretzel dùng giấy phép AGPLv3
- Mã của Jupyter dùng giấy phép BSD-3
- AGPLv3 được chọn để ngăn việc bên thứ ba lấy mã Pretzel, bán phiên bản host và không đóng góp ngược lại cho cộng đồng
- Nếu lấy mã Pretzel để bán dưới dạng SaaS hoặc tương tự thì các sửa đổi cũng phải được open source theo AGPLv3
- Nếu chỉ dùng nội bộ trong công ty như một công cụ, thì theo giải thích, AGPL không yêu cầu công khai mã kể cả khi có sửa đổi
- Lý do không đóng góp trực tiếp vào Jupyter mà fork là để đưa chi phí chuyển đổi xuống gần bằng 0
- Ban đầu nhóm muốn làm mới hoàn toàn, nhưng sau khi trao đổi với các chuyên gia dữ liệu thì nhận thấy việc chuyển sang công cụ mới là rất khó
- Jupyter là một sản phẩm đã trưởng thành, còn nhóm Pretzel đang phát hành tính năng với tốc độ nhanh
- Nhóm cho biết nhược điểm của việc fork là phải tốn nhiều thời gian để hiểu hệ sinh thái Jupyter, nhiều codebase, quy trình phát hành phức tạp và các API đa dạng
Pretzel AI trước đây và kế hoạch kiếm tiền
- Công cụ thao tác dữ liệu trực quan trong trình duyệt trước đây của Pretzel AI nằm trong thư mục
pretzelai_visual - Thông tin liên quan có trong PR #76
- Kế hoạch kiếm tiền là bán phiên bản host dành cho doanh nghiệp
- Phiên bản host cho doanh nghiệp có thể bao gồm các tính năng chuyên biệt mà người dùng cá nhân không cần
- Kiểm soát truy cập dữ liệu
- Connector nguồn dữ liệu
- Tích hợp GitHub
- Dashboard có thể host và chia sẻ
- Tài nguyên tính toán mở rộng theo nhu cầu cho các tác vụ dữ liệu quy mô lớn
- Nhóm khẳng định sẽ không hồi tố chuyển phiên bản Pretzel cá nhân sang trả phí về sau
1 bình luận
Ý kiến trên Hacker News
Các Jupyter Notebook tích hợp AI hiện đã có khá nhiều. Tuy ít hoặc không có tính mã nguồn mở, nhưng chúng đã được lặp lại cải tiến hơn một năm nên ở một số khía cạnh còn trưởng thành hơn
https://noteable.io/ từng khá ổn nhưng đã biến mất sau một thương vụ mua lại nhân tài (acqui-hire), còn https://deepnote.com mạnh về tích hợp AI và cộng tác thời gian thực
https://github.com/jupyterlab/jupyter-ai là một extension mã nguồn mở tiêu chuẩn về AI tạo sinh cho Jupyter do phía Amazon làm, khá tốt; bản thân JupyterLab giờ cũng đã khá trưởng thành về cộng tác thời gian thực
https://colab.google/ có tích hợp AI rất tốt nhưng chỉ dùng được các model được Google host
https://cocalc.com có tích hợp AI rộng, hỗ trợ hầu hết các model hosted chính cùng cộng tác thời gian thực, và phần lớn là miễn phí hoặc tính phí theo mức sử dụng. Tôi là đồng phát triển của dự án này
VS Code, như những người khác đã nói, cũng có Jupyter Notebook tích hợp rất tốt; còn thiếu cái nào nữa không?
https://deepnote.com đáng tiếc là mã nguồn đóng, nên không thể chạy cục bộ hay chỉnh sửa, và phải học rồi chuyển sang một giao diện mới
https://github.com/jupyterlab/jupyter-ai cũng đã được nhắc trong bài, nhưng theo trải nghiệm của tôi, trải nghiệm người dùng và tính năng thua khá xa những gì chúng tôi đã làm. Tuy nhiên, ưu điểm là hỗ trợ nhiều model hơn và codebase dễ sửa hơn nhiều
https://colab.google/ cũng giống Deepnote ở chỗ là mã nguồn đóng, và nếu muốn dùng trong công ty thì có vẻ sẽ cần bản enterprise vì các data connector và bảo đảm hỗ trợ; nhưng nó chỉ hoạt động trên GCP, nên có thể là điểm chí mạng với các tổ chức chủ yếu dùng AWS
https://cocalc.com thì tôi chưa dùng thử, nhưng có vẻ là một dự án tuyệt vời và tôi định sẽ xem qua. Ấn tượng ban đầu là giao diện khá khác Jupyter; điểm khác biệt lớn là mục tiêu của chúng tôi là đi đến nơi người dùng đã ở sẵn, tức Jupyter
VSCode, như tôi đã nói ở chỗ khác, các tính năng chúng tôi đang xây dựng tập trung hơn vào quy trình phân tích. VSCode cũng có tính năng AI, nhưng khi có thêm các tính năng trong roadmap, nó sẽ trông khá khác
Hỗ trợ Jupyter của VS Code và Cursor quá tốt, nên tôi thấy chúng phù hợp với quy trình làm việc của mình hơn nhiều so với một giải pháp riêng cho Jupyter Notebook
https://github.com/marimo-team/marimo
Phần triển khai mà đội ngũ và các contributor làm rất xuất sắc. Đơn giản nhưng hiệu quả, và tôi cũng thích việc họ giữ nó là mã nguồn mở, không như một số Show HN khác lấy công sức mã nguồn mở rồi đóng lại, chỉnh sửa chút ít rồi tuyên bố đã tạo ra thứ gì đó vĩ đại
Tôi tò mò liệu sau này họ có tiếp tục mở rộng thêm các tính năng khác không. Các tính năng như Copilot, chat thì hay, nhưng có lẽ người dùng ngày nay kỳ vọng những thứ này có sẵn trong IDE hoặc được cung cấp dưới dạng extension
Nếu bên kia không phải là một công ty rất lớn và nổi tiếng, tôi sẽ không giao dữ liệu công ty cho một lựa chọn thay thế Jupyter mã nguồn đóng
Tôi đồng ý rằng IDE nên cung cấp các tính năng như vậy. Tuy nhiên, các IDE hỗ trợ Jupyter Notebook chỉ có VSCode và PyCharm, và phần lớn extension AI cho VSCode không được tối ưu cho công việc trên notebook. Ví dụ, theo lời một người bạn, GitHub Copilot gặp khó khăn với việc hoàn thành mã xuyên qua các cell khác nhau
Đây mới chỉ là khởi đầu, và chúng tôi dự định xây dựng thêm nhiều tính năng chuyên biệt cho phân tích dữ liệu mà chưa IDE nào có, nên tôi nghĩ vẫn còn nhiều không gian cho các công cụ kiểu này
Tôi là Ramon, một đồng sáng lập khác của Pretzel. Dựa trên phản hồi ban đầu, chúng tôi đã bắt tay vào bổ sung hỗ trợ LLM cục bộ và Claude Sonnet 3.5; nếu có câu hỏi thì tôi sẽ trả lời
LocalAI: https://github.com/mudler/LocalAI
Ví dụ, promptfoo và chainforge cung cấp workflow làm việc với nhiều LLM
Promptfoo có cấu hình YAML cho phần thiết lập prompt và provider: https://www.promptfoo.dev/docs/configuration/guide/
Cũng cần xem system prompt là gì, và system prompt làm thiên lệch việc phân tích như thế nào
/? "system prompt" https://hn.algolia.com/?dateRange=all&page=0&prefix=false&qu...
Github Copilot là công cụ hữu ích nhất mà tôi tìm được sau một thời gian dài, và thật tuyệt khi có thể dùng nó trong Jupyter Notebooks. Đây là tính năng tôi đã chờ khá lâu, làm rất tốt
Chúng tôi đã dành thời gian tham khảo extension GH Copilot cho neovim [1] và Zed [2] để reverse engineer cách triển khai, nhưng cuối cùng nó quá thiếu ổn định và phiền phức
Trong lúc đó, chúng tôi cũng phát hiện Codestral, khác với LLM thông thường, có phiên bản fill-in-the-middle nên cân bằng tốc độ và chất lượng tốt hơn, vì vậy chúng tôi quyết định dùng Codestral. Chúng tôi lấy cảm hứng từ việc continue.dev dùng Codestral cho tab completion
[1] https://github.com/github/copilot.vim
[2] https://zed.dev/blog/copilot
Tôi tò mò ràng buộc nào khiến dự án phải fork thay vì làm thành extension
Ban đầu chúng tôi định xây một công cụ mới từ đầu, nhưng việc khiến mọi người chuyển sang dùng là rất khó, nên chúng tôi phải đến nơi người dùng đã có mặt: Jupyter
Nếu chỉ xét riêng tính năng này thì dù khó, vẫn có thể làm dưới dạng extension, và các thử nghiệm ban đầu cũng bắt đầu từ extension. Tuy nhiên sẽ khó kiểm soát tinh vi một số hành vi cốt lõi của Jupyter, chẳng hạn như tạo thư mục ẩn để lưu file như hiện nay. Dù vậy, tôi nghĩ có thể làm được một phiên bản Pretzel hoạt động 95% dưới dạng extension Jupyter
Lý do lớn hơn là trong tương lai chúng tôi muốn thay đổi hoàn toàn mô hình thực thi code sang dựa trên DAG để tạo notebook có thể tái lập. Ví dụ tương tự như https://plutojl.org/
Tương tự, chúng tôi muốn loại bỏ hoàn toàn CodeMirror và thay bằng Monaco, engine editor cốt lõi của VSCode, để mang lại trải nghiệm giống IDE trong Jupyter; những việc như vậy thì extension không làm được
Tôi không hiểu câu “GitHub Copilot vẫn chưa được hỗ trợ trong Jupyter” nghĩa là gì. Tôi đã dùng Copilot trong file .ipynb của VS Code hơn một năm rồi
Dùng thử Codestral, chúng tôi thấy có thể nhận được completion tốt tương đương Copilot, đôi khi còn tốt hơn, với tốc độ và chi phí tốt hơn nhiều
Các editor kiểu này đều tập trung vào lập trình; có gợi ý nào cho ghi chú nói chung hơn không?
Tôi muốn làm những việc như sắp xếp các ghi chú rất thô, định dạng lại theo template chung, áp dụng thay đổi theo prompt, và đặt câu hỏi trên một tập hợp ghi chú
Tôi không hiểu vì sao thứ này hấp dẫn. Nếu thật sự cần tích hợp AI thì dùng VSCode và Jupyter là có thể tiếp cận cả hệ sinh thái extension. Ý tưởng không tệ, nhưng có vẻ thiếu mục đích
Sản phẩm về cơ bản là một tiện ích mở rộng Jupyter (https://github.com/pretzelai/pretzelai/tree/main/packages/pr...); tôi tò mò vì sao không làm nó thành một extension như những thứ khác ở https://github.com/jupyterlab-contrib thay vì hard fork JupyterLab
Nói ngắn gọn, các chức năng hiện tại có lẽ cũng có thể được triển khai dưới dạng extension. Tất nhiên, chúng tôi cũng đã thực hiện nhiều thay đổi đối với hành vi cốt lõi của Jupyter
Nhưng trong roadmap có việc thay đổi lớn hơn rất nhiều đối với chính mô hình thực thi mã, và điều đó thì không thể làm bằng extension