본문으로 건너뛰기

함수: createCapability()

function createCapability<TValue>(): <TName>(name) => Capability<TValue, TName>;

정의 위치: packages/ai/src/activities/chat/middleware/capabilities.ts:114

Capability를 생성합니다. [get, provide]로 구조 분해할 수 있으며, 그 자체가 requires/provides의 식별자 역할을 하는 하이브리드 핸들을 반환합니다.

값 타입은 명시적으로 제공하면서 이름 리터럴은 인수에서 추론되도록 커링합니다: createCapability<T>()('name'). (한 번의 호출인 createCapability<T>('name')은 작동할 수 없습니다. T를 명시적으로 제공하면 TypeScript가 이름을 추론하지 못해 string으로 축약되고, 리터럴 이름을 기준으로 하는 컴파일 타임 적용 범위 검사가 무력화됩니다.)

타입 매개변수

TValue

TValue = unknown

반환값

&lt;TName>(name) => Capability&lt;TValue, TName>

예시

Provider + consumer 미들웨어

const counterCapability = createCapability<{ value: number }>()('counter')
const [getCounter, provideCounter] = counterCapability

const withCounter = defineChatMiddleware({
name: 'counter',
provides: [counterCapability],
setup(ctx) { provideCounter(ctx, { value: 0 }) },
})

const readsCounter = defineChatMiddleware({
name: 'reads-counter',
requires: [counterCapability],
onChunk(ctx) { getCounter(ctx).value++ },
})

chat({ adapter, messages, middleware: [withCounter, readsCounter] })

참고

Capability의 name은 앱 전체에서 고유해야 합니다. 컴파일 타임 적용 범위 추적은 이름 리터럴을 키로 사용하고, 런타임 키는 참조를 사용합니다.