CYBERSOFT
Đăng nhập

Chống hallucination & grounding cho AI testing agent (y tế)

Chuyên nâng caoY tếAI AgentNâng caoKinh nghiệmThực tế
🗓 1 tháng trước21 phút đọc·👁 1,703 lượt xem👤 82 người đọc

Khi agent tự viết test, nó có thể bịa selector, bịa API, bịa assertion. Bài này chỉ cách grounding bằng artifact thật (DOM/OpenAPI/schema), verify-before-action, trích dẫn chứng cứ và ràng buộc an toàn cho trợ lý y tế đang được kiểm thử.

1. Hallucination trong ngữ cảnh agent kiểm thử là gì

Trong ngữ cảnh một AI testing agent tự sinh và tự chạy test, hallucination (ảo giác) không phải là chuyện văn chương bay bổng, mà là những khẳng định cụ thể mà agent tự tin đưa ra nhưng không hề tồn tại trong hệ thống thật. Ví dụ agent viết một locator kiểu getByTestId('submit-appointment') trong khi trang thật không có test-id đó; hoặc gọi POST /api/v2/prescribe khi API thực chỉ là /api/prescriptions. Nó cũng có thể chèn một assertion nghe rất hợp lý — expect(banner).toHaveText('Đặt lịch thành công') — nhưng banner ấy chưa từng xuất hiện. Những sai lệch này nguy hiểm vì test vẫn trông đẹp và người review dễ tin.

Khác với chatbot trả lời sai một câu hỏi kiến thức, agent kiểm thử tạo ra hiện vật hành động: mã sẽ chạy, sẽ gọi mạng, và trong domain y tế có thể chạm tới dữ liệu bệnh nhân. Một test hallucinated có ba số phận: (a) fail ngay vì locator không tồn tại — đỡ nhất; (b) pass giả vì assertion quá yếu hoặc trúng phần tử khác — nguy hiểm; (c) chạm nhầm endpoint thật và gây tác dụng phụ. Vì vậy chúng ta cần xem hallucination như một lỗi bảo mật và an toàn, không chỉ lỗi chất lượng.

Grounding loop: retrieve → verify → act → cite RETRIEVE DOM · OpenAPI · schema VERIFY locator/API tồn tại? ACT + CITE action kèm chứng cứ không tìm được chứng cứ → REFUSE, không bịa Hallucination bị chặn ✗ selector bịa · ✗ API tưởng tượng✗ assertion không có oracle✗ liều thuốc tự nghĩ ra Evidence store aria snapshot · request/responseschema id · nguồn y khoa duyệt→ mọi bước có citation
Vòng lặp grounding: lấy chứng cứ → xác minh → hành động kèm trích dẫn; không có chứng cứ thì từ chối.
Định nghĩa vận hành: một bước của agent bị coi là hallucinated nếu nó tham chiếu tới thực thể (selector, route, field, giá trị) không truy vết được về một artifact thật đã được retrieve.

2. Ba dạng hallucination hay gặp: selector, API, assertion bịa

Dạng thứ nhất là selector bịa. Agent suy diễn cấu trúc UI từ tên trường trong prompt và tạo locator theo quy ước mà nó thấy quen — data-testid, id, hoặc text — nhưng không xác nhận trên trang thật. Dạng thứ hai là API tưởng tượng: agent giả định RESTful đẹp đẽ (versioning /v2, số nhiều, mã 201) trong khi API thật lệch chuẩn. Dạng thứ ba, tinh vi nhất, là assertion không có oracle: agent khẳng định một hành vi mong đợi mà không có nguồn nào định nghĩa hành vi đó — đặc biệt nguy hiểm trong y tế khi 'liều dùng đúng' phải đến từ phác đồ, không phải trí nhớ mô hình.

ts
// ❌ Test do agent SINH RA — chứa cả 3 dạng hallucination
import { test, expect } from '@playwright/test';

test('đặt lịch khám', async ({ page, request }) => {
  await page.goto('/booking');
  // (1) selector BỊA: trang thật không có test-id này
  await page.getByTestId('submit-appointment').click();
  // (2) API TƯỞNG TƯỢNG: version /v2 + tên endpoint không tồn tại
  const res = await request.post('/api/v2/prescribe', {
    data: { drug: 'Amoxicillin', dose: '500mg', freq: 'tid' }, // liều tự nghĩ
  });
  // (3) assertion KHÔNG có oracle: banner text này chưa từng tồn tại
  await expect(page.getByRole('alert')).toHaveText('Đặt lịch thành công');
});
⚠️ Với trợ lý y tế, một liều 'nghe hợp lý' do mô hình bịa có thể vượt ngưỡng an toàn nhi khoa. Không bao giờ để giá trị lâm sàng đến từ trí nhớ mô hình; phải neo vào phác đồ đã duyệt.
  • Selector bịa → verify trên DOM/ARIA snapshot thật
  • API tưởng tượng → verify với OpenAPI spec
  • Assertion không oracle → chặn ở review, đòi nguồn

3. Grounding: neo agent vào artifact thật của ứng dụng

Grounding (nối đất) là nguyên tắc: agent chỉ được nói về những gì nó đã nhìn thấy trong hệ thống thật, thông qua các artifact được retrieve trước khi hành động. Ba nguồn grounding cốt lõi cho một web app y tế là: (1) ARIA/DOM snapshot của trang hiện tại để biết vai trò, tên, và bounding box của phần tử; (2) OpenAPI spec để biết chính xác route, method, schema request/response; (3) database schema (hoặc data dictionary) để biết ràng buộc và bảng nào là nguồn sự thật. Khi agent muốn dùng một selector hay endpoint, nó phải rút ra từ chính các artifact này, không phải từ trí nhớ.

Ma trận: độ tự tin vs độ đúng (calibration) Đúng (grounded) → Tự tin → CONFIDENTLY WRONG tự tin cao · sai — nguy hiểm nhất CONFIDENT & CORRECT tin tưởng · hành động UNSURE & WRONG tự khai không chắc → refuse OK UNSURE & CORRECT bỏ lỡ · nên nâng grounding
Ma trận tự tin × đúng: ô nguy hiểm nhất là 'tự tin nhưng sai' — grounding kéo agent về phía cột đúng.
ts
// Retrieve artifact THẬT trước khi để agent viết bất kỳ selector nào
import { chromium } from '@playwright/test';
import fs from 'node:fs';

async function retrieveGrounding(url: string) {
  const browser = await chromium.launch();
  const page = await browser.newPage();
  await page.goto(url);
  // 1) ARIA snapshot: nguồn sự thật cho role + accessible name
  const aria = await page.locator('body').ariaSnapshot();
  // 2) OpenAPI: nguồn sự thật cho route/method/schema
  const openapi = JSON.parse(fs.readFileSync('openapi.json', 'utf8'));
  const routes = Object.keys(openapi.paths); // vd: ['/api/appointments','/api/prescriptions']
  await browser.close();
  return { aria, routes, schemas: openapi.components?.schemas ?? {} };
}
// Agent CHỈ được chọn selector/route xuất hiện trong { aria, routes }
💡 Playwright v1.60 đưa bounding box vào ARIA snapshot — rất hợp cho agent AI vì có toạ độ layout để phân biệt hai nút cùng tên. Dùng nó làm nguồn grounding chính cho UI.
🔒

Nội dung bị khoá

Bạn đang xem bản xem trước. Đăng nhập để mở khoá toàn bộ bài viết và tất cả tài liệu Tester/QA.

Đã xem 24% nội dung
  • Đọc trọn vẹn mọi bài viết
  • Lưu bài & ghi chú cá nhân
  • Theo dõi tiến độ đã đọc
  • Luyện phỏng vấn, ISTQB, Mock
Đăng nhập để đọc tiếp

Chưa có mã? Lấy mã qua Fanpage / Zalo CyberSoft.

0

💬 Bình luận (0)

Bạn có thể đọc mọi bình luận. Đăng nhập để bình luận

Chưa có bình luận nào. Hãy là người đầu tiên!