- Harness คืออะไร
- ภาพรวมสถาปัตยกรรม
- ความสามารถใดพร้อมใช้งาน
- ทดลองสร้าง Harness ด้วย Python
- Harness เทียบกับ Agent และ Workflow
- แนวทางนำไปใช้กับงาน Software Testing
- แหล่งอ้างอิง
อัปเดต: 26 กันยายน 2026 · สำหรับนักพัฒนา Python และ .NET
บทความนี้อ้างอิงเอกสาร Microsoft Learn ฉบับที่ตรวจสอบ ณ วันที่เขียน ความสามารถของแพ็กเกจและ API อาจเปลี่ยนเมื่ออัปเดตเวอร์ชัน
#Harness คืออะไร
Microsoft Agent Framework Harness คือชุดส่วนประกอบรันไทม์ที่ห่อหุ้ม chat client เพื่อให้โมเดลทำงานเป็น agent ได้ต่อเนื่อง: เรียกเครื่องมือ จัดการบทสนทนาและสถานะ วางแผนงาน ติดตามสิ่งที่ทำแล้ว ขออนุมัติการใช้เครื่องมือ และส่งข้อมูลการทำงานไปยังระบบสังเกตการณ์ได้ Microsoft เปิดตัวแกนหลักของ Harness สำหรับ Python และ .NET เมื่อ 22 กรกฎาคม 2026 [1][2]
นึกภาพงาน “ตรวจสอบ API ที่ทดสอบล้มเหลวและสรุปสาเหตุ” โมเดลหนึ่งครั้งอาจตอบคำถามได้ แต่การทำงานจริงต้องอ่านผลทดสอบ แบ่งงานเป็นขั้นตอน เรียกเครื่องมือ ตรวจหลักฐาน กลับมาทำขั้นต่อไป และเก็บสถานะของรอบสนทนา Harness เตรียมโครงสร้างส่วนนี้ไว้ให้ โดยผู้พัฒนาเลือก chat client กำหนดคำสั่ง และเพิ่มความสามารถตามงาน [1]
คำศัพท์: Harness ในที่นี้หมายถึง รันไทม์ที่ช่วยให้ agent ลงมือทำงาน ไม่ใช่ test harness ที่ใช้รันทดสอบหรือประเมินผลโมเดล
#ภาพรวมสถาปัตยกรรม
flowchart TD
U["ผู้ใช้ / แอปพลิเคชัน"] --> H["Harness Agent"]
H --> C["Chat client และโมเดล"]
H --> P["แผน • todo • session • memory"]
H --> T["เครื่องมือและ context providers"]
H --> G["การอนุมัติ • telemetry • compaction"]
T --> R["ไฟล์ / เว็บ / API ตามที่เปิดใช้"]
ภายใน Harness ประกอบจากองค์ประกอบของ Agent Framework ที่มีอยู่แล้ว ได้แก่ chat pipeline สำหรับการเรียกฟังก์ชันและบันทึกประวัติ, context providers สำหรับสถานะและความจำ, middleware สำหรับการอนุมัติและ observability และชั้น UI ที่แอปของเรารับผิดชอบเอง วัตถุที่ได้ยังเป็น agent ตาม abstraction ปกติของเฟรมเวิร์ก: HarnessAgent ซึ่งสืบทอดจาก AIAgent ใน .NET หรือ Agent ที่ได้จาก create_harness_agent ใน Python [1]
#ความสามารถใดพร้อมใช้งาน
| ความสามารถ | สถานะตามเอกสารปัจจุบัน | ใช้ทำอะไร |
|---|---|---|
| Function invocation และจำกัดรอบเรียก | เปิดใช้; ตั้งขีดจำกัดได้ | ให้โมเดลเรียกเครื่องมือในงานหลายขั้น |
Todo และโหมด plan / execute |
เปิดโดยค่าเริ่มต้น | ติดตามแผนและความคืบหน้า |
| Session file memory | เปิดโดยค่าเริ่มต้น | เก็บโน้ตในขอบเขต session |
| ประวัติระหว่างการเรียกโมเดล | บันทึกหลังแต่ละ model call | รองรับการตรวจงานระหว่างทางและกู้คืนการทำงาน |
| Context compaction | ใช้เมื่อกำหนด token limits หรือ strategy | ลดปัญหาบริบทยาวเกินหน้าต่างของโมเดล |
| Tool approval และ OpenTelemetry | เปิดโดยค่าเริ่มต้น | ควบคุมการอนุมัติและตรวจร่องรอยการทำงาน |
| Web search | เพิ่มเมื่อ chat client รองรับ | ค้นข้อมูลปัจจุบันผ่านผู้ให้บริการโมเดล |
| Agent Skills | .NET เปิดโดยค่าเริ่มต้น; Python ต้อง opt in | โหลดความสามารถเฉพาะทาง |
| File access, background agents, looping | opt in; ยังเป็น experimental | ทำงานกับไฟล์ มอบหมายงานย่อย หรือวนทำจนถึงเงื่อนไข |
| Shell execution | opt in; เครื่องมือ shell เป็นแพ็กเกจก่อน release | รันคำสั่งในสภาพแวดล้อมที่กำหนด |
ข้อควรแยกให้ชัดคือ file memory สำหรับบันทึกของ session กับ file access สำหรับอ่านและแก้ไขไฟล์งานเป็นคนละความสามารถ File access ไม่ได้เปิดใช้ทั่วไปโดยอัตโนมัติ ส่วนการมีนโยบายอนุมัติเครื่องมือไม่ได้ทำให้ shell หรือการแก้ไฟล์ปลอดภัยเอง ต้องกำหนดสิทธิ์และขอบเขตงานให้เหมาะสม [1][3]
#ทดลองสร้าง Harness ด้วย Python
ตัวอย่างนี้ใช้ OpenAI chat client ตามเอกสาร Microsoft โดยต้องมี API key ของบริการที่เลือก และติดตั้งแพ็กเกจ provider ซึ่งรวมส่วนพึ่งพาที่จำเป็นสำหรับ framework [1][4]
python -m venv .venv
# macOS / Linux
source .venv/bin/activate
# Windows PowerShell: .venv\Scripts\Activate.ps1
python -m pip install agent-framework-openai
# macOS / Linux; ใช้ค่าของคุณเอง
export OPENAI_API_KEY="<your-api-key>"
export OPENAI_CHAT_MODEL="gpt-4o-mini"
# Windows PowerShell:
# $env:OPENAI_API_KEY="<your-api-key>"
# $env:OPENAI_CHAT_MODEL="gpt-4o-mini"
สร้างไฟล์ harness_demo.py:
import asyncio
import os
from agent_framework import create_harness_agent
from agent_framework.openai import OpenAIChatClient
async def main() -> None:
client = OpenAIChatClient(
model=os.getenv("OPENAI_CHAT_MODEL", "gpt-4o-mini")
)
agent = create_harness_agent(
client=client,
name="ApiTestPlanner",
agent_instructions=(
"คุณเป็นผู้ช่วยวางแผนทดสอบ API "
"แยกสิ่งที่ทราบ ข้อสมมติ และสิ่งที่ต้องตรวจสอบให้ชัดเจน"
),
)
# ใช้ session เดิมเพื่อรักษาประวัติและสถานะข้ามรอบสนทนา
session = agent.create_session()
first = await agent.run(
"วางแผนทดสอบ API สำหรับการสมัครสมาชิก โดยระบุ positive/negative cases",
session=session,
)
print(first.text)
second = await agent.run(
"ต่อจากแผนเดิม ช่วยจัดลำดับกรณีที่ควรรันทดสอบก่อน",
session=session,
)
print(second.text)
if __name__ == "__main__":
asyncio.run(main())
python harness_demo.py
ตัวอย่างยังไม่มีเครื่องมืออ่านไฟล์หรือรันคำสั่ง จึงเป็นการวางแผนและตอบจากบริบทสนทนา หากต้องการให้ agent ตรวจผลทดสอบจริง ต้องเพิ่มเครื่องมือหรือเปิด file access อย่างตั้งใจ อย่าใส่ API key ลงในซอร์สโค้ดหรือ commit ขึ้น repository [1][4]
#ฝั่ง .NET ใช้อย่างไร
ติดตั้งแพ็กเกจ Harness จาก NuGet แล้วส่ง IChatClient ที่กำหนดผู้ให้บริการและข้อมูลรับรองเรียบร้อยเข้า extension method:
dotnet add package Microsoft.Agents.AI.Harness
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
// chatClient คือ IChatClient ที่เชื่อมต่อโมเดลไว้แล้ว
AIAgent agent = chatClient.AsHarnessAgent();
AgentSession session = await agent.CreateSessionAsync();
AgentResponse response = await agent.RunAsync(
"วางแผนตรวจสอบผลทดสอบ API ที่ล้มเหลว",
session);
Console.WriteLine(response.Text);
ส่วนการสร้าง chatClient ขึ้นอยู่กับผู้ให้บริการโมเดลและแพ็กเกจ integration ที่เลือก ตัวอย่างข้างต้นแสดงเฉพาะการประกอบ Harness; ตัวอย่าง interactive และการสตรีมดูได้จากบทเรียน Microsoft Learn [1][5]
#Harness เทียบกับ Agent และ Workflow
| ทางเลือก | เหมาะกับ |
|---|---|
Agent แบบพื้นฐาน |
งานสนทนาหรือเรียกเครื่องมือไม่ซับซ้อน ต้องการประกอบส่วนต่าง ๆ เอง |
Harness Agent |
งานปลายเปิดและหลายขั้นตอนที่ต้องการแผน สถานะ การอนุมัติ และ observability พร้อมใช้ |
Workflow |
ลำดับขั้นและเส้นทางการทำงานที่ผู้พัฒนาต้องกำหนดแน่ชัด รวมถึงการประสานหลาย agent |
Harness เป็นการประกอบความสามารถลงใน agent หนึ่งตัว ส่วน Workflow ระบุเส้นทางการประมวลผลชัดเจน ทั้งสองอยู่ใน Agent Framework เดียวกัน และเลือกใช้ตามรูปแบบของงาน [1][6]
#แนวทางนำไปใช้กับงาน Software Testing
เริ่มจาก agent ที่ อ่านรายงานทดสอบและเสนอแผนวิเคราะห์ โดยให้เครื่องมืออ่านข้อมูลแบบจำกัดสิทธิ์ เก็บรายการกรณีที่ต้องตรวจซ้ำไว้ใน todo และให้ผู้ใช้อนุมัติก่อนการแก้ไฟล์หรือสั่งรันทดสอบ จากนั้นบันทึก telemetry เพื่อดูว่า agent เรียกเครื่องมือใด ใช้เวลาที่ขั้นไหน และสรุปตามหลักฐานหรือไม่ นี่เป็น รูปแบบการออกแบบที่เสนอ สำหรับงาน testing ไม่ใช่ชุดเครื่องมือทดสอบที่ Harness ติดตั้งไว้เอง [1][3]
เมื่อมีผู้ใช้หลายคนและเปิด file access ใน Python ให้พิจารณา file_access_session_scoped=True พร้อม file store ที่กำหนด เพราะเอกสารระบุว่าการเปิด file access ด้วย store เพียงอย่างเดียวใช้ workspace ร่วมกันโดยค่าเริ่มต้น นอกจากนี้ให้กำหนดขอบเขตไฟล์และคำสั่งที่อนุญาต ตรวจผลลัพธ์ก่อนนำไปใช้ และเพิ่มเงื่อนไขอนุมัติสำหรับการกระทำที่แก้ระบบจริง [1]