Một lệnh, ba việc: chạy, soạn hồ sơ, đọc memo
Chạy hồ sơ mẫu để xem memo trông thế nào; soạn hồ sơ tổng hợp của bạn từ một bản sao; đọc memo để biết số nào đủ bằng chứng và số nào còn thiếu.
Chạy hồ sơ mẫu
Dùng khi bạn mới cài, hoặc muốn xem lại khuôn memo. Câu nói mẫu với agent: «Chạy Agent Real Estate với hồ sơ mẫu căn hộ và tóm tắt phần dòng tiền thuê.»
Mở PowerShell ở thư mục checkout
Đặt PYTHONPATH như ở trang Cài đặt.
Chọn hồ sơ mẫu
apartment.json cho căn hộ, house.json cho nhà ở; cả hai đều là dữ liệu tổng hợp.
Chạy lệnh
cmd /c "python -m agent_real_estate < tests\fixtures\house.json"
Đầu ra: memo Markdown trên màn hình gồm thông tin hồ sơ, bảng comparable, bằng chứng, dòng tiền thuê và giới hạn; mã thoát 0.
Soạn hồ sơ tổng hợp của bạn
Dùng khi bạn muốn thử luật chọn comparable hay dòng tiền với số liệu tự đặt. Câu nói mẫu: «Thêm ba comparable tổng hợp vào bản sao hồ sơ căn hộ, chạy lại và cho tôi khoảng đơn giá.»
Chép hồ sơ mẫu ra thư mục làm việc
Copy-Item tests\fixtures\apartment.json $HOME\ho-so.json
Thêm bằng chứng và comparable
Mỗi comparable trỏ tới một evidence có thật trong hồ sơ; tiền và diện tích viết dạng chuỗi số, không dấu phẩy.
Chạy và lưu memo
cmd /c "python -m agent_real_estate < %USERPROFILE%\ho-so.json > %USERPROFILE%\memo.md"
Đầu ra: file memo.md nằm nơi bạn chọn; chương trình không tự ghi file nào khác.
Bảng lệnh
Công cụ chỉ có một lệnh, không có cờ; khác nhau ở hồ sơ bạn đưa vào và nơi bạn lưu memo.
| Lệnh | Việc | Ví dụ |
|---|---|---|
python -m agent_real_estate | Đọc một hồ sơ từ đầu vào, in memo ra màn hình | cmd /c "python -m agent_real_estate < tests\fixtures\apartment.json" |
… > memo.md | Lưu memo vào file bạn chọn | cmd /c "python -m agent_real_estate < ho-so.json > memo.md" |
$LASTEXITCODE | Xem mã thoát: 0 đạt, 2 dữ liệu sai, 1 lỗi đọc/ghi | $LASTEXITCODE ngay sau lệnh chạy |
Ví dụ đầu-cuối
Hồ sơ dưới đây có bốn comparable tổng hợp; một dòng khác cơ sở diện tích nên bị loại.
{
"version": 1,
"case": {"id": "apt-demo", "asset_type": "apartment", "as_of": "2026-11-07",
"area_basis": "net_usable", "price_type": "asking_sale"},
"evidence": [
{"id": "ev1", "description": "Synthetic listing A", "source": "Synthetic label"},
{"id": "ev2", "description": "Synthetic listing B", "source": "Synthetic label"},
{"id": "ev3", "description": "Synthetic listing C", "source": "Synthetic label"}
],
"comparables": [
{"id": "comp1", "asset_type": "apartment", "area_basis": "net_usable", "price_type": "asking_sale",
"observed_on": "2026-10-01", "price_vnd": "2000000000", "area_m2": "50", "evidence_id": "ev1"},
{"id": "comp2", "asset_type": "apartment", "area_basis": "net_usable", "price_type": "asking_sale",
"observed_on": "2026-10-15", "price_vnd": "2640000000", "area_m2": "60", "evidence_id": "ev2"},
{"id": "comp3", "asset_type": "apartment", "area_basis": "net_usable", "price_type": "asking_sale",
"observed_on": "2026-09-20", "price_vnd": "2550000000", "area_m2": "68", "evidence_id": "ev3"},
{"id": "comp4", "asset_type": "apartment", "area_basis": "saleable", "price_type": "asking_sale",
"observed_on": "2026-10-05", "price_vnd": "3000000000", "area_m2": "70", "evidence_id": "ev3"}
],
"rental": null
}| `comp3` | 2026-09-20 | … | 37500000.00 | `ev3` | yes | included |
| `comp4` | 2026-10-05 | … | 42857142.86 | `ev3` | no | basis |
Included count: 3
Comparison status: asking_price_context
Min / median / max VND/m2: 37500000.00 / 40000000.00 / 44000000.00
Rental status: insufficient_evidenceSet-Content -Encoding ascii $HOME\sai.json '{"version": 1}'
cmd /c "python -m agent_real_estate < %USERPROFILE%\sai.json"
$LASTEXITCODE
# in ra: invalid_input rồi 2 — không có memoTừ điển đầu ra
Các từ bạn sẽ gặp trong memo và trên màn hình.
needs_human_review- Memo luôn chờ người xem xét; công cụ không ra quyết định.
legal_status: unknown- Pháp lý luôn là chưa biết; công cụ không đọc hay xác minh giấy tờ.
insufficient_evidence- Chưa đủ ba comparable với ba bằng chứng khác nhau, hoặc thiếu số thuê.
asking_price_context- Khoảng đơn giá dựng từ giá rao, không phải giao dịch.
reported_transaction_context- Khoảng đơn giá từ giao dịch do người nhập báo, chưa được xác minh độc lập.
asset·basis·price_type·future- Lý do một comparable bị loại: khác loại tài sản, khác cơ sở diện tích, khác loại giá, hoặc ngày sau mốc định giá.
- NOI · Cap rate
- Thu nhập ròng năm sau thất thu và chi phí vận hành; cap rate là NOI chia giá mua, viết dạng tỷ lệ (
0.0480= 4,8%). invalid_input·io_error- Hồ sơ sai hợp đồng dữ liệu (mã 2) · lỗi đọc hoặc ghi luồng (mã 1).
Hỏi đáp
Sao memo không có khoảng giá?
Cần ít nhất ba comparable được chọn với ba mã bằng chứng khác nhau. Xem cột Reason để biết dòng nào bị loại và vì sao.
Tôi nhập dữ liệu thật được không?
Không. Đây là nguyên mẫu cho dữ liệu tổng hợp; đừng nhập địa chỉ, tên người hay giao dịch thật.
Chi phí vay, thuế có được tính không?
Không. Công cụ chỉ dùng số bạn nhập cho tiền thuê, tỷ lệ trống, chi phí vận hành và giá mua; không tự suy nợ, thuế hay chi phí đầu tư.