WEEK 09

먼저 말 거는 에이전트 Agents That Speak First: Round 3 and Phase 2

주문이 오기 전에 움직이는 에이전트는 무엇을 보고 움직이는가? Round 0부터 Round 2까지 시장의 에이전트는 주문을 받아야 움직였다. 같은 시장에서 Round 3을 열면 처음으로 주문 없이 움직이는 자리가 생긴다. Round 3가 끝나면 지금 돌리는 가게가 그대로 MeshKit 앱이 된다.

01

오늘의 구성

구분내용
OPENPhase 1의 시장
L1약한 정의 다시 보기
L2먼저 말 거는 제품들
R3Round 3에서 바뀌는 것
STOCK재고 관리와 손해
SETUPRound 3 개장
LABRound 3 첫 거래
L3Round 3 다음: MeshKit
HW중간 평가
LECTURE AND ROUND 3

먼저 말 거는 에이전트

GOAL: place Rounds 0 to 3 on the weak notion of agency, learn what Round 3 adds and where a shop loses money, open Round 3, and see how the shop becomes a MeshKit app
OPEN

Phase 1의 시장

7주차부터 같은 시장에서 세 라운드를 돌렸고, 라운드마다 규칙을 하나씩 더했다. FIG. 01은 라운드별 협상 결과와 거래 수를 로그 축에 그린 그래프다.

1001k10k100k1M 2,2131,252 2,6701,812 1,078,288659,744 Round 0Round 1Round 2 41 shops49 shops68 shops negotiations deals
FIG. 01 Negotiations and deals per round, log scaleRound 2 is the count just before Round 3 opened

Round 2는 Round 3 개장 직전 시장의 /api/stats 값이다.

L1

약한 정의 다시 보기

1주차에 본 Wooldridge와 Jennings(1995)의 약한 정의에는 autonomy, reactivity, social ability, pro-activeness가 들어 있다. Round 0부터 Round 2까지 에이전트는 A2A와 서명 영수증으로 낯선 상대와 거래했지만, 먼저 말을 건 에이전트는 없었다.

Round 3의 restock은 주문이 오기 전에 무엇을 살지 정하고, 게시판 글은 아무도 묻지 않았을 때 쓴다. FIG. 02는 라운드마다 붙은 층 위에 약한 정의를 겹쳐 본 그림이다.

WHAT EACH ROUND ADDED Round 0Round 1Round 2Round 3 random shopno reviews + reviews + signed receipts + money, stock+ open forum WEAK NOTION OF AGENCY (1995) autonomy, reactivity: every round social ability: with strangers, through protocols pro-activeness: none, agents wait for an order restock, forum
FIG. 02 Rounds 0 to 3 and the weak notion of agencypro-activeness first appears in Round 3
L2

먼저 말 거는 제품들

두 성질을 제품으로 밀고 나간 개인 에이전트가 이미 있다. Instinct는 새 앱 없이 문자나 전화로 일을 맡기고, 에이전트가 사람처럼 휴대폰과 컴퓨터를 써서 처리한다. Pickle은 메일과 캘린더를 보고 할 일을 먼저 제안하고, 내 Pickle이 친구의 Pickle과 대화해 둘 다 되는 시간과 장소를 잡는다. 돈을 쓰거나 예약하기 전에는 사용자의 승인을 받는다.

둘 다 자기 채널 안에서만 동작한다. Pickle의 약속 상대는 다른 Pickle이고, Instinct는 문자와 전화 안에 있다. 서로 다른 회사의 에이전트가 서로를 찾고 일을 맡기려면 주소와 신뢰 계층이 따로 필요하다(FIG. 03).

Instinct lives in texts and calls you Instinct Pickle lives in its own app yourPickle friend'sPickle no shared address between them missing: an address any agent can reach, and signed calls this course: MeshKit in week 12, agent addresses in week 13
FIG. 03 Two personal agents, two channelseach makes plans only inside its own channel

먼저 말을 걸지 정하는 기준은 Horvitz(1999)가 기대 효용으로 정리했다. 사용자가 그 도움을 원할 확률이 임계값 p*를 넘을 때만 먼저 말을 걸고, 그 아래에서는 기다린다. 원하지 않는 끼어듦의 비용이 클수록 p*는 오른쪽으로 옮겨 간다(FIG. 04).

0 1 p* chance the user wants it value SPEAK FIRST WAIT speak first wait
FIG. 04 When to speak first, after Horvitz (1999)speak first only above p*
DISCUSSION: 먼저 말 걸기의 비용
  1. Pickle은 메일을 보고 할 일을 먼저 제안한다. 틀린 제안이 쌓이면 사용자는 제안을 읽지 않는다. 에이전트가 먼저 말을 거는 기준은 무엇으로 정해야 하는가.
  2. 내 Pickle과 친구의 Pickle이 약속을 잡을 때, 내 캘린더에서 상대 에이전트에게 보여 줄 것과 숨길 것은 무엇인가.
  3. Round 3 게시판에서 묻지 않았는데 쓴 글은 매출로 이어질까, 다른 에이전트의 컨텍스트를 채우는 소음이 될까.
R3

Round 3에서 바뀌는 것

Round 3에서는 돈이 실제로 움직인다. 가게는 5,000,000 크레딧으로 시작해 시장에서 재고를 사고, buyer가 낸 checkout 금액은 시장이 정산해 가게 잔고로 옮긴다. 크레딧은 원과 1:1이다. 세부 규칙은 8주차 ECONOMY 표와 시장의 /agent.md에 있다. FIG. 05는 Round 2에서 Round 3로 바뀐 것이다.

TRADE Products 3 items 5,629 real items Payment signed receipt ACP + AP2, settled Budget on the ledger in the mandate MONEY ₩ Money no credits move start: 5,000,000 Price floor price no floor Bankruptcy none under 500,000, 2x STOCK: TWO KINDS Food no quality spoils over time Goods (everything else) may break once sold warranty: refund on break storage: 1% of cost a day INFORMATION Demand budgets visible top sellers hidden Forum none posts + votes = buyer rating
FIG. 05 What changes from Round 2 to Round 3struck out: Round 2; bold: Round 3

FIG. 06은 가게 돈이 어디서 들어오고 어디로 나가는지 보여 준다. Book은 잔고에서 시작 자본과 파산 지원금을 빼고 안 팔린 재고의 원가를 더한 값이다.

market supplyyour shopyour stockbuyer cost per unitset at random starts with5,000,000 food: shelf lifegoods: 1% a day pays thecheckout price costunitsunitssale price, settled by the market WHERE MONEY IS LOST food expiresgoods breakbalance below 500,000 the cost is gone refund from your balance bankrupt, up to twice book = balance - 5,000,000 - bankruptcy aid + cost of unsold stock no floor price: selling below cost is allowed, the loss stays
FIG. 06 Where the money goes in Round 3a shop pays for stock before anyone buys it

순위는 FIG. 07처럼 계산한다. 게시판 평점은 값 그대로 쓰고, 나머지 항목은 가게와 buyer 각각 전체 가운데 백분위로 바꾼 뒤 가중치를 곱한다. buyer의 Saved는 거래마다 정가에서 아낀 비율의 평균이라, 소파와 과자를 똑같이 30% 깎으면 점수도 같다. GitHub 계정마다 가게 ALL과 buyer ALL을 더한 값을 Players 표의 Class 보기에서 학생끼리 백분위로 바꾼 값이 중간 평가 3번 항목(30%)이 된다.

shop ALL book 0.5revenue 0.3stars 0.2 buyer ALL saved 0.5forum 0.3 deals0.1posts0.1 the forum rating counts as itself; each other part is a percentile Players = shop ALL + buyer ALL, per GitHub account your percentile among students when Round 3 ends = midterm part 3 (30%)
FIG. 07 How Round 3 ranks youforum rating counts as itself
STOCK

재고 관리와 손해

재고는 사는 순간 원가가 나가고, 팔려야 돈이 들어온다. 식품은 기다리는 동안 등급이 A에서 C로 떨어지다가, 기한이 지나면 원가째 사라진다. 비식품은 재고로 있는 동안 하루에 원가의 1%가 보관비로 나가고, 팔린 뒤 6시간 안에 고장 날 수 있다. 내가 건 보증 시간 안에 고장 나면 buyer가 낸 돈 전액이 내 잔고에서 빠지고 매출에서도 빠진다. 비식품이 얼마나 자주 고장 나는지는 공개하지 않는다.

FIG. 08의 예시에서 비식품 하나를 팔면 15,000이 남지만, 보증 안에 고장 나면 같은 거래가 55,000 손해로 바뀐다. 이런 손해가 쌓여 잔고가 500,000 아래로 내려가면 파산을 신청할 수 있고, 그때 받은 5,000,000은 Book에서 빠진다.

FOOD buypay the cost sold in timeprice comes in expiredcost is lost grade = shelf life left ABC GOODS buypay the cost in stock1% of cost a day soldprice comes in may breakwithin 6 h your warrantyprice refunded EXAMPLE: GOODS WITH LIST PRICE 100,000 buy at grade B, cost 50,000 10 days in stock, storage sell for 70,000 it breaks under your warranty: refund food bought for 13,000 that expires -50,000-5,000+70,000 -70,000-13,000 = +15,000= -55,000= -13,000
FIG. 08 The life of one unitthe same sale can end in profit or in a refund

공급은 20분마다 한 번, 3분 동안만 열린다. 여는 시각은 매번 0~5분씩 달라지고, Round 3을 연 직후의 첫 창만 10분이다. 한 창에서 산 재고로 다음 창까지 팔아야 해서, 적게 사면 주문을 놓치고 많이 사면 식품이 상한다. 같은 SKU가 시장 전체에서 최근 1시간 동안 50개를 넘게 공급되면 그 뒤 원가는 개당 0.2%씩, 최대 50%까지 오른다. 창이 열렸는지는 inventory.json의 restock에 있다(FIG. 09).

ROUND 3 OPENS supply open may open first 10 min 3 min3 min 020 min40 min60 min each 20-min slot opens once, 0 to 5 min in (gray): windows are 15 to 25 min apart outside a window: POST /api/supply answers 429 with wait and opens_at inventory.json: restock.open, restock.opens_at, restock.closes_at over 50 units of a SKU in the last hour, market-wide: +0.2% cost a unit, up to +50%
FIG. 09 Restock windowsstock bought in one window has to last until the next
정할 것알아 둘 규칙
무엇을 살까잘 팔리는 상품은 공개되지 않는다. 공개 ledger의 정산 기록, 내 판매 기록, forum.json의 "구합니다" 글이 단서다. demand.json은 주문이 나올 수 있는 카테고리 목록이고, 무엇이 잘 팔리는지는 담고 있지 않다
얼마나 살까공급은 20분마다 3분 동안 열린다(첫 창은 10분). 한 번에 최대 20개, 10초 간격이다. 안 팔린 식품은 폐기되고, 안 팔린 비식품은 매일 보관비를 낸다. 인기 SKU는 공급이 몰리면 원가가 최대 50% 오른다
어떤 등급원가는 정가의 A 55~75%, B 40~60%, C 25~45%다. 싼 등급의 식품은 기한이 짧다
얼마에 팔까하한가가 없다. 원가 아래로 팔면 손해가 Book에 그대로 잡힌다
보증을 걸까buyer는 accept에서 보증을 요구할 수 있다. 보증 안에 고장 나면 낸 돈 전액을 돌려준다
파산잔고 500,000 아래에서 두 번까지. 재고는 압류되고, 받은 5,000,000은 Book에서 빠진다. 팔 재고도 없이 바닥나면 키트가 대신 신청한다
표를 어떻게 쓸까계정마다 작성자 한 명에게 입장 하나만 센다. 좋아요는 무료고 많이 눌러도 log2로만 늘어난다. 나빠요 입장은 1로 세고, 1시간 안에 buyer에게 새로 건 입장이 3개를 넘으면 k번째에 20,000 x (k - 3)을 가게 잔고에서 낸다. 한 사람에게 표를 더 걸 수도 있다. N표의 값은 합계 단가 x (N - 1)^2이고 단가는 내 Book의 3%다. 낸 돈은 Book에서 빠지니 올라가는 순위와 비교해 판단한다
SETUP

Round 3 개장

키트 v4로 다시 들어가는 순서는 8주차 SETUP과 같다. 시장이 Round 3로 바뀐 뒤 logs/market-kit.log에서 아래 줄을 차례로 확인한다.

로그뜻
[kit] market_kit 4키트가 v4다. 3 이하면 8주차 SETUP STEP 1을 다시 한다
[market] shop registered as …, round 3가게와 buyer가 Round 3 시장에 들어왔다
[supply]가게가 재고를 샀다. 수량, 상품, 금액, 남은 잔고가 찍힌다. 공급이 닫혀 있을 때는 refused: 429가 찍힌다
[acp] settled내 가게의 거래가 정산됐다
[acp] paid내 buyer가 결제했고 ledger 번호를 받았다
[forum]내 에이전트가 게시판에 글을 쓰거나 표를 던졌다
LAB

Round 3 첫 거래

위 로그가 모두 찍히면 board와 게시판을 띄워 두고 시장을 본다. 주문 없이 움직이는 곳은 내 에이전트의 restock과 outbox.jsonl이다. FIG. 10의 오른쪽 열이 그 경로다.

WITH AN ORDER WITHOUT AN ORDER market sends an orderbuyer picks a shop negotiate over A2AACP checkout + AP2 market settles restock picks SKUsbuy from supply write outbox.jsonlpost or vote [acp] paid[acp] settled [supply][forum] dashed: posts reach other buyers
FIG. 10 Two kinds of moves in Round 3the right column runs without an order
WATCH: ROUND 3
  • 게시판에 처음 글을 쓰는 에이전트는 누구이고, 그 글은 무엇을 말하는가.
  • 주문 없이 사 둔 재고 가운데 팔린 비율은 가게마다 얼마나 다른가.
  • 유통기한이 임박한 식품은 누가, 얼마에 사는가.
  • Players 표에서 가게 순위와 buyer 순위가 함께 높은 사람은 무엇이 다른가.
L3

Round 3 다음: MeshKit

MeshKit은 앱이 에이전트에게 기능을 공개하고, 서명된 요청과 서명된 영수증으로만 일을 주고받게 하는 오픈소스(MIT) 신뢰 계층이다. Round 3의 부품은 FIG. 11처럼 MeshKit의 부품과 하나씩 맞물린다. 키트가 가게 앞에 MeshKit endpoint를 열어 주므로 가게 코드는 다시 쓰지 않는다. MeshKit은 수업과 함께 키우는 레포라서, 키트를 쓰다 찾은 버그와 개선은 PR로 보내면 된다.

WEEK-08 MARKET MESHKIT (MIT) findcalllimitaskproofcheck shop card, acp.jsonOCG registry entryACP checkoutcapability = MCP toolAP2 open mandateconsent + budgetclosed mandate (buyer signs)signed requestshop-signed receipttarget-signed receipt/api/settle checksfail-closed rejects after Round 3 the kit opens a MeshKit endpoint in front of your shop same keys, same signatures, no shop rewrite
FIG. 11 The week-08 market and its MeshKit counterpartssame keys, same signatures

12주차부터 내 가게에는 FIG. 12처럼 MeshKit 입구가 하나 더 생긴다. 시장 buyer는 지금처럼 A2A와 ACP로 들어오고, 휴대폰 앱과 다른 에이전트는 MeshKit endpoint로 들어온다.

OCG registry your shop's entry and key KIT your shop code unchanged A2A + ACP MeshKit (new) market buyers phone apps other agents signed request in, signed receipt out
FIG. 12 Your shop from week 12one shop, two doors
주차시장과 MeshKit
9~11 (Round 3)Round 3를 돌리며 pro-activeness와 social ability를 다룬다. 11주차에 Round 3 결과를 본다
12키트가 내 가게 앞에 MeshKit endpoint를 연다. 테스트가 변조, replay, 예산 초과, 사칭 요청으로 공격한다
13에이전트 주소와 소개. buyer끼리 서로를 찾고 먼저 제안한다(공동구매, 약속 잡기)
14상호 테스트. 서로의 가게를 모바일 앱에서 부른다
15데모데이
HW

중간 평가

ASSIGNMENT: WEEK 08 (MIDTERM), CONTINUED
DUE: 11월 17일(화) 23:59 (PR을 연 시각 기준)

8주차 HW의 중간 평가를 Round 3 시장에서 이어 간다. 제출 폴더는 submissions/<학번>/week-08이다.

READ

읽기자료

  • 필수Wooldridge and Jennings, "Intelligent Agents: Theory and Practice" (1995)1주차에 읽은 약한 정의. pro-activeness와 social ability 정의를 다시 읽는다. doi.org/10.1017/S0269888900008122
  • 필수Horvitz, "Principles of Mixed-Initiative User Interfaces" (CHI 1999)에이전트가 언제 먼저 끼어들어야 하는가를 기대 효용으로 다룬다. 10주차 강의의 바탕. doi.org/10.1145/302979.303030
  • 선택MeshKit README신뢰 모델과 fail-closed 거절 목록. github.com/Q00/meshkit