3 điểm bởi GN⁺ 2024-07-04 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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 pretzelai rồi pretzel 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 pip rồi dùng pip 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 8888 và chạy theo dạng pretzel 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 dependency PyStemmer đã 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+K hoặc Ctrl+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 @variable và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 để duyệt lịch sử prompt
  • AI Sidebar

    • Có thể mở AI Sidebar bằng Ctrl+Cmd+B hoặc Ctrl+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 dataframe sales_data
  • 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 inject hoặc ij thì 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ỏ
  • 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à SettingsPretzel 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.com với tiêu đề Account Deletion thì 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

 
GN⁺ 2024-07-04
Ý 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?

    • Khi nghiên cứu, tôi đã xem qua hầu hết danh sách này, và nếu tóm tắt điểm khác biệt thì https://noteable.io/ đúng như đã nói, hiện không còn tồn tại nữa
      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
    • https://www.cursor.com/ là một bản clone VS Code ưu tiên AI
      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
    • marimo rất tuyệt. Tôi đã dùng vài tháng nay và đã chuyển phần lớn công việc liên quan đến notebook sang đó. Hỗ trợ Copilot cũng được tích hợp sẵn
      https://github.com/marimo-team/marimo
    • Không chắc https://hex.tech có được tính vào đây không
    • Một cái còn thiếu là DataSpell: https://www.jetbrains.com/dataspell
  • 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

    • Việc giữ Pretzel là mã nguồn mở rất quan trọng, đặc biệt là vì niềm tin. Nhiều người dùng Jupyter xử lý dữ liệu nhạy cảm, nên công cụ mã nguồn đóng khó có thể được chấp nhận
      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
    • Có vẻ họ đã lấy một dự án dùng giấy phép BSD-3-Clause rồi đổi sang giấy phép AGPLv3. Không hẳn là cùng một việc, nhưng có một số điểm tương tự với điều bạn lo ngại
  • 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ộClaude Sonnet 3.5; nếu có câu hỏi thì tôi sẽ trả lời

  • 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

    • Bạn cũng có thể mở file Jupyter notebook trong VS Code, và khi đó đó là một cách khác để dùng AI autocomplete. Tôi không dùng Jupyter đủ nhiều nên không chắc có nên luôn dùng VS Code hay không
    • Đồng ý. Thực ra chúng tôi đã cố làm cho GitHub Copilot chạy trong Jupyter, nhưng GH không có API chính thức
      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

    • FAQ có đề cập ngắn gọn, nhưng nói rộng hơn thì mục tiêu là tạo ra một công cụ lập trình literate hiện đại. Nhìn bề ngoài nó sẽ rất giống Jupyter, nhưng có các tính năng tốt hơn
      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

    • Như những người khác đã nói, VSCode có hỗ trợ Copilot, nhưng các nhà khoa học dữ liệu và đặc biệt là nhà phân tích, những người không dành phần lớn thời gian trong trình soạn thảo văn bản, vẫn dùng Jupyter Lab hoặc ứng dụng Notebook
      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ó vẻ họ đang nói đến Jupyter Notebook hoặc Lab, chứ không phải chạy trong VS Code
    • Có lẽ họ nói đến ứng dụng Jupyter Notebook, chứ không phải định dạng file notebook
  • 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

    • Trong chúng ta có những người thích Jupyter hoặc bắt buộc phải dùng Jupyter
  • 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

    • Câu hỏi hợp lý. Tôi từng trả lời ở đây về lý do fork: https://news.ycombinator.com/item?id=40857807
      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