Deep Dive: PAL / Program-of-Thought
Tổng quan Code reasoning
PAL đổi câu hỏi từ “model có tự tính đúng không?” sang “model có thể viết chương trình đúng không?”. Với arithmetic, symbolic reasoning và table manipulation, đây thường là bước nhảy chất lượng đáng kể.
Program-aided / Program-of-Thought prompting tách việc hiểu bài toán khỏi việc tính toán. Model lo phần diễn giải và viết program; interpreter lo phần thực thi. Cách này đặc biệt mạnh khi computation chứ không phải language generation là bottleneck.
Điểm quan trọng là PAL không chỉ là “bảo model viết code”. Nó là một giao kèo rõ giữa LLM và runtime: LLM sinh ra chương trình, runtime xác minh kết quả.
| Thành phần | Vai trò | Lý do tồn tại |
|---|---|---|
| LLM | Viết program / pseudo-code | Dùng language understanding |
| Interpreter | Thực thi computation | Loại bỏ arithmetic noise |
| Executor guardrails | Kiểm soát sandbox | Tránh chạy code nguy hiểm |
Cơ chế Mechanics
Cụm từ khóa ở đây là intermediate representation. Thay vì để model cố “tính trong đầu”, ta để nó build một artifact có thể chạy được. Điều này giúp output cuối dựa vào thực thi thật thay vì chỉ dựa vào một chain of words.
Trong nhiều trường hợp, việc code hóa bài toán cũng làm ý định của model rõ hơn: biến nào là input, biến nào là state, và bước nào là compute step.
PAL-style prompt
Write Python to solve the problem.
Use comments only for brief reasoning.
Execute the program and return the final numeric answer.PAL chuyển reasoning thành code, rồi để runtime xử lý computation.
flowchart LR Q[Problem] --> C[Generate program] C --> R[Runtime / interpreter] R --> A[Final answer]
Khi dùng Fit
PAL hợp với arithmetic, symbolic manipulation, data transformation, tabular reasoning và những bài mà code có thể đại diện cho lời giải một cách tự nhiên.
Nếu bài toán là open-ended writing hoặc policy reasoning, code execution ít hữu ích hơn. Khi đó PAL thường chỉ làm prompt phức tạp thêm.
Ưu điểm
- Giảm arithmetic mistakes
- Tách reasoning khỏi computation
- Dễ kiểm tra và trace
Nhược điểm
- Phụ thuộc sandbox/runtime
- Có rủi ro an toàn nếu execute code bừa bãi
- Không hợp với mọi domain
Failure modes Risk
Rủi ro khi dùng code làm reasoning
- Code syntactically đúng nhưng semantic sai.
- Runtime không được sandbox chặt.
- LLM hallucinates API/library không tồn tại.
- Interpreter output bị hiểu nhầm như ground truth tuyệt đối.
So sánh Compare
| Technique | Khác biệt | Khi nào ưu tiên PAL |
|---|---|---|
| CoT | Reasoning bằng text | Khi computation không phải bottleneck |
| ReAct | Reasoning + action + observation | Khi cần tool use online |
| Self-consistency | Vote nhiều reasoning paths | Khi answer final ổn định hơn path |