SemanticCacheLookup ์ •์ฑ…

์ด ํŽ˜์ด์ง€๋Š” Apigee ๋ฐ Apigee Hybrid์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

Apigee Edge ๋ฌธ์„œ ๋ณด๊ธฐ

๊ฐœ์š”

SemanticCacheLookup ์ •์ฑ…์€ AI ์›Œํฌ๋กœ๋“œ, ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ(LLM)๊ณผ ๊ด€๋ จ๋œ ์›Œํฌ๋กœ๋“œ์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋„๋ก ์„ค๊ณ„๋œ ๊ณ ๊ธ‰ ์บ์‹ฑ ์ •์ฑ…์ž…๋‹ˆ๋‹ค.

์ด ์ •์ฑ…์€ Vertex AI Text Embeds API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ์šฉ ์ž„๋ฒ ๋”ฉ์„ ์ƒ์„ฑํ•˜๊ณ  ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •ํ™•ํ•œ ์ผ์น˜๊ฐ€ ์•„๋‹Œ ์‹œ๋งจํ‹ฑ ์œ ์‚ฌ์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์œ ์‚ฌํ•œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

SemanticCacheLookup ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ˜๋ณต ์ฟผ๋ฆฌ์˜ ์‘๋‹ต ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  LLM์— ๋Œ€ํ•œ ํ†ตํ™” ๋ณผ๋ฅจ์„ ์ค„์—ฌ ๋น„์šฉ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ •์ฑ…์€ SemanticCachePopulate ์ •์ฑ…๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ด ์ •์ฑ…์€ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์ •์ฑ…์ด๋ฉฐ, ์ด ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜๋ฉด Apigee ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋น„์šฉ ๋˜๋Š” ์‚ฌ์šฉ๋ฅ ์ด ์˜ํ–ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์ฑ… ์œ ํ˜• ๋ฐ ์‚ฌ์šฉ ์˜ํ–ฅ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ •์ฑ… ์œ ํ˜•์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

SemanticCacheLookup ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋จผ์ € ๋‹ค์Œ ์ž‘์—…์„ ์™„๋ฃŒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • Vertex AI ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ์ƒ‰์ธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ์ƒ‰์ธ์˜ Vertex AI ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • SemanticCachePopulate ์ •์ฑ…์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์‹œ๋งจํ‹ฑ ์บ์‹ฑ ์ •์ฑ… ์‹œ์ž‘ํ•˜๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

ํ•„์š”ํ•œ ์—ญํ• 

SemanticCacheLookup ์ •์ฑ…์„ ์ ์šฉํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ถŒํ•œ์„ ์–ป์œผ๋ ค๋ฉด ๊ด€๋ฆฌ์ž์—๊ฒŒ Apigee ํ”„๋ก์‹œ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค ๊ณ„์ •์— ๋Œ€ํ•œ AI Platform ์‚ฌ์šฉ์ž(roles/aiplatform.user) IAM ์—ญํ• ์„ ๋ถ€์—ฌํ•ด ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•˜์„ธ์š”. ์—ญํ•  ๋ถ€์—ฌ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ”„๋กœ์ ํŠธ, ํด๋”, ์กฐ์ง์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ด€๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ปค์Šคํ…€ ์—ญํ• ์ด๋‚˜ ๋‹ค๋ฅธ ์‚ฌ์ „ ์ •์˜๋œ ์—ญํ• ์„ ํ†ตํ•ด ํ•„์š”ํ•œ ๊ถŒํ•œ์„ ์–ป์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

API ์‚ฌ์šฉ ์„ค์ •

Enable the Compute Engine, Vertex AI, and Cloud Storage APIs.

Enable the APIs

<SemanticCacheLookup> ์š”์†Œ

SemanticCacheLookup ์ •์ฑ…์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’ ์•„๋ž˜์˜ ๊ธฐ๋ณธ ์ •์ฑ… ํƒญ์„ ์ฐธ์กฐํ•˜์„ธ์š”.
ํ•„์ˆ˜ ์—ฌ๋ถ€ ํ•„์ˆ˜
์œ ํ˜• ๋ณตํ•ฉ ๊ฐ์ฒด
์ƒ์œ„ ์š”์†Œ ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ
ํ•˜์œ„ ์š”์†Œ <DisplayName>
<IgnoreUnresolvedVariables>
<UserPromptSource>
<Embeddings>
<SimilaritySearch>

<SemanticCacheLookup> ์š”์†Œ๋Š” ๋‹ค์Œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ๋ฌธ

<SemanticCacheLookup> ์š”์†Œ๋Š” ๋‹ค์Œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

<SemanticCacheLookup async="false" continueOnError="false" enabled="true" name="SCL-lookup">
  <DisplayName>SCL-lookup</DisplayName>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <UserPromptSource>{jsonPath($.contents[-1].parts[-1].text,request.content,true)}</UserPromptSource>
  <Embeddings>
    <VertexAI>
      <URL>https://{LOCATION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{LOCATION}/publishers/google/models/{MODEL_ID}:predict</URL>
    </VertexAI>
  </Embeddings>
  <SimilaritySearch>
    <VertexAI>
      <URL>https://{PUBLIC_DOMAIN_NAME}/v1/projects/{PROJECT_ID}/locations/{LOCATION}/indexEndpoints/{INDEX_ENDPOINT_ID}:findNeighbors</URL>
      <DeployedIndexID>{DEPLOYED_INDEX_ID}</DeployedIndexID>
      <Threshold>0.95</Threshold>
    </VertexAI>
  </SimilaritySearch>
</SemanticCacheLookup>

๊ธฐ๋ณธ ์ •์ฑ…

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” Apigee UI์—์„œ ํ๋ฆ„์— SemanticCacheLookup ์ •์ฑ…์„ ์ถ”๊ฐ€ํ•  ๋•Œ์˜ ๊ธฐ๋ณธ ์„ค์ •์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

<SemanticCacheLookup async="false" continueOnError="false"enabled="true" name="SCL-lookup">
  <DisplayName>SCL-lookup</DisplayName>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <UserPromptSource>{jsonPath($.contents[-1].parts[-1].text,request.content,true)}</UserPromptSource>
  <Embeddings>
    <VertexAI>
      <URL>https://{LOCATION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{LOCATION}/publishers/google/models/{MODEL_ID}:predict
      </URL>
    </VertexAI>
  </Embeddings>
  <SimilaritySearch>
    <VertexAI>
      <URL>https://{PUBLIC_DOMAIN_NAME}/v1/projects/{PROJECT_ID}/locations/{LOCATION}/indexEndpoints/{INDEX_ENDPOINT_ID}:findNeighbors</URL>
      <Threshold>0.9</Threshold>
      <DeployedIndexID>{DEPLOYED_INDEX_ID}</DeployedIndexID>
    </VertexAI>
  </SimilaritySearch>
</SemanticCacheLookup>

Apigee UI์— ์ƒˆ SemanticCacheLookup ์ •์ฑ…์„ ์‚ฝ์ž…ํ•˜๋ฉด ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ž‘์—…์— ๋Œ€ํ•œ ์Šคํ…์ด ํ…œํ”Œ๋ฆฟ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ํ•„์ˆ˜ ์š”์†Œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ด ์š”์†Œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ชจ๋“  ์ •์ฑ…์— ๊ณตํ†ต๋œ ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์†์„ฑ ๊ธฐ๋ณธ๊ฐ’ ํ•„์ˆ˜ ์—ฌ๋ถ€ ์„ค๋ช…
name ํ•ด๋‹น ์—†์Œ ํ•„์ˆ˜

์ •์ฑ…์˜ ๋‚ด๋ถ€ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. name ์†์„ฑ์˜ ๊ฐ’์—๋Š” ๋ฌธ์ž, ์ˆซ์ž, ๊ณต๋ฐฑ, ํ•˜์ดํ”ˆ, ๋ฐ‘์ค„, ๋งˆ์นจํ‘œ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ 255์ž(์˜๋ฌธ ๊ธฐ์ค€)๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์›ํ•˜๋Š” ๊ฒฝ์šฐ <DisplayName> ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ฆฌ UI ํ”„๋ก์‹œ ํŽธ์ง‘๊ธฐ์˜ ์ •์ฑ…์— ๋‹ค๋ฅธ ์ž์—ฐ์–ด ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์ฑ…์— ๋ผ๋ฒจ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

continueOnError ๊ฑฐ์ง“ ์„ ํƒ์‚ฌํ•ญ ์ •์ฑ…์ด ์‹คํŒจํ•  ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐ˜ํ™˜๋˜๋„๋ก ํ•˜๋ ค๋ฉด false๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์ •์ฑ…์—์„œ ์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์ž…๋‹ˆ๋‹ค. ์ •์ฑ…์ด ์‹คํŒจํ•ด๋„ ํ๋ฆ„ ์‹คํ–‰์ด ๊ณ„์†๋˜๋„๋ก ํ•˜๋ ค๋ฉด true๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์กฐ:
enabled ์ฐธ ์„ ํƒ์‚ฌํ•ญ ์ •์ฑ…์„ ์‹œํ–‰ํ•˜๋ ค๋ฉด true๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ •์ฑ…์„ ์ค‘์ง€ํ•˜๋ ค๋ฉด false๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ •์ฑ…์ด ํ๋ฆ„์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด๋„ ์ •์ฑ…์ด ์‹œํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
async   ๊ฑฐ์ง“ ์ง€์› ์ค‘๋‹จ๋จ ์ด ์†์„ฑ์€ ์ง€์›์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” <SemanticCacheLookup>์˜ ํ•˜์œ„ ์š”์†Œ์— ๋Œ€ํ•œ ๋Œ€๋žต์ ์ธ ์„ค๋ช…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์œ„ ์š”์†Œ ํ•„์ˆ˜ ์—ฌ๋ถ€ ์„ค๋ช…
<DisplayName> ์„ ํƒ์‚ฌํ•ญ ์ •์ฑ…์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

<IgnoreUnresolvedVariables> ์„ ํƒ์‚ฌํ•ญ ๋ณ€์ˆ˜๊ฐ€ ํ™•์ธ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ๋ฅผ ์ค‘์ง€ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ํ™•์ธ๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ๊ณ„์† ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด true๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
<UserPromptSource> ์„ ํƒ์‚ฌํ•ญ ์ถ”์ถœํ•  ์‚ฌ์šฉ์ž ๋ฉ”์‹œ์ง€ ํ…์ŠคํŠธ์˜ ํŽ˜์ด๋กœ๋“œ ์œ„์น˜์ž…๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด ํ…์ŠคํŠธ ๊ฐ’๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

์ด ํ•„๋“œ๋Š” ๋ณ€์ˆ˜ ๋˜๋Š” JSON ๊ฒฝ๋กœ ํ•จ์ˆ˜ ์‚ฌ์šฉ์„ ํฌํ•จํ•œ Apigee ๋ฉ”์‹œ์ง€ ํ…œํ”Œ๋ฆฟ ๊ตฌ๋ฌธ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{jsonPath($.contents[-1].parts[-1].text,request.content,true)}

<Embeddings> ํ•„์ˆ˜ ์ž„๋ฒ ๋”ฉ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ์š”์†Œ์ž…๋‹ˆ๋‹ค.
<SimilaritySearch> ํ•„์ˆ˜ ์œ ์‚ฌ์„ฑ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ณต๊ฐœ ์ƒ‰์ธ์„ ์ฟผ๋ฆฌํ•˜์—ฌ ์ตœ๊ทผ์ ‘ ์ด์›ƒ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

ํ•˜์œ„ ์š”์†Œ ์ฐธ์กฐ

์ด ์„น์…˜์—์„œ๋Š” <SemanticCacheLookup>์˜ ํ•˜์œ„ ์š”์†Œ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

<DisplayName>

name ์†์„ฑ ์™ธ์— ์ด ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ฆฌ UI ํ”„๋ก์‹œ ํŽธ์ง‘๊ธฐ์—์„œ ์ž์—ฐ์Šค๋Ÿฌ์šด ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์ •์ฑ…์˜ ๋ผ๋ฒจ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

<DisplayName> ์š”์†Œ๋Š” ๋ชจ๋“  ์ •์ฑ…์— ๊ณตํ†ต์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’ ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ
ํ•„์ˆ˜ ์—ฌ๋ถ€ ์„ ํƒ์‚ฌํ•ญ. <DisplayName>์„ ์ƒ๋žตํ•˜๋ฉด ์ •์ฑ…์˜ name ์†์„ฑ ๊ฐ’์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
์œ ํ˜• ๋ฌธ์ž์—ด
์ƒ์œ„ ์š”์†Œ <PolicyElement>
ํ•˜์œ„ ์š”์†Œ ์—†์Œ

<DisplayName> ์š”์†Œ๋Š” ๋‹ค์Œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ๋ฌธ

<PolicyElement>
  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>
  ...
</PolicyElement>

์˜ˆ

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

<DisplayName> ์š”์†Œ์— ์†์„ฑ ๋˜๋Š” ํ•˜์œ„ ์š”์†Œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

<IgnoreUnresolvedVariables>

๋ณ€์ˆ˜๊ฐ€ ํ™•์ธ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ๋ฅผ ์ค‘์ง€ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ํ™•์ธ๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ๊ณ„์† ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด true๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

<DefaultValue>๊ฐ€ ์ œ๊ณต๋œ ๊ฒฝ์šฐ IgnoreUnresolvedVariables๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’ ๊ฑฐ์ง“
ํ•„์ˆ˜ ์—ฌ๋ถ€ ์„ ํƒ์‚ฌํ•ญ
์œ ํ˜• Boolean
์ƒ์œ„ ์š”์†Œ <SemanticCacheLookup>
ํ•˜์œ„ ์š”์†Œ ์—†์Œ

<UserPromptSource>

์ถ”์ถœํ•  ์‚ฌ์šฉ์ž ๋ฉ”์‹œ์ง€ ํ…์ŠคํŠธ์˜ ํŽ˜์ด๋กœ๋“œ ์œ„์น˜์ž…๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด ํ…์ŠคํŠธ ๊ฐ’๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

์ด ํ•„๋“œ๋Š” ๋ณ€์ˆ˜ ๋˜๋Š” JSON ๊ฒฝ๋กœ ํ•จ์ˆ˜ ์‚ฌ์šฉ์„ ๋น„๋กฏํ•œ Apigee ๋ฉ”์‹œ์ง€ ํ…œํ”Œ๋ฆฟ ๊ตฌ๋ฌธ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{jsonPath($.contents[-1].parts[-1].text,request.content,true)}
๊ธฐ๋ณธ๊ฐ’ {jsonPath($.contents[-1].parts[-1].text,request.content,true)}
ํ•„์ˆ˜ ์—ฌ๋ถ€ ์„ ํƒ์‚ฌํ•ญ
์œ ํ˜• ๋ฌธ์ž์—ด
์ƒ์œ„ ์š”์†Œ <SemanticCacheLookup>
ํ•˜์œ„ ์š”์†Œ ์—†์Œ

<Embeddings>

์ด ์š”์†Œ๋Š” ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’ ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ
ํ•„์ˆ˜ ์—ฌ๋ถ€ ์„ ํƒ์‚ฌํ•ญ
์œ ํ˜• ๋ฌธ์ž์—ด
์ƒ์œ„ ์š”์†Œ <SemanticCacheLookup>
ํ•˜์œ„ ์š”์†Œ <VertexAI>

<Embeddings> ์š”์†Œ๋Š” ๋‹ค์Œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

<Embeddings>
  <VertexAI>
    <URL>https://{LOCATION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{LOCATION}/publishers/google/models/{MODEL_ID}:predict</URL>
  </VertexAI>
</Embeddings>

<VertexAI>(<Embeddings>์˜ ํ•˜์œ„ ์š”์†Œ)

Vertex AI ๊ด€๋ จ ์†์„ฑ์˜ <URL> ์š”์†Œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’ ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ
ํ•„์ˆ˜ ์—ฌ๋ถ€ ํ•„์ˆ˜
์œ ํ˜• ๋ฌธ์ž์—ด
์ƒ์œ„ ์š”์†Œ <Embeddings>
ํ•˜์œ„ ์š”์†Œ <URL>

VertexAI ์š”์†Œ๋Š” ๋‹ค์Œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

<VertexAI>
  <URL>https://{LOCATION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{LOCATION}/publishers/google/models/{MODEL_ID}:predict</URL>
</VertexAI>

<URL>(<VertexAI>์˜ ํ•˜์œ„ ์š”์†Œ)

ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” URL์ž…๋‹ˆ๋‹ค. SemanticCacheLookup ์ •์ฑ…์— ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋ธ ๋ชฉ๋ก์€ ์ง€์›๋˜๋Š” ๋ชจ๋ธ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๊ธฐ๋ณธ๊ฐ’ ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ
ํ•„์ˆ˜ ์—ฌ๋ถ€ ํ•„์ˆ˜
์œ ํ˜• ๋ฌธ์ž์—ด
์ƒ์œ„ ์š”์†Œ <VertexAI>
ํ•˜์œ„ ์š”์†Œ ์—†์Œ

URL ์š”์†Œ๋Š” ๋‹ค์Œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

<URL>https://{LOCATION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{LOCATION}/publishers/google/models/{MODEL_ID}:predict</URL>

<SimilaritySearch>

์ด ์š”์†Œ์—๋Š” ์œ ์‚ฌ์„ฑ ๊ฒ€์ƒ‰์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ณต๊ฐœ ์ƒ‰์ธ์„ ์ฟผ๋ฆฌํ•˜์—ฌ ์ตœ๊ทผ์ ‘ ์ด์›ƒ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๊ธฐ๋ณธ๊ฐ’ ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ
ํ•„์ˆ˜ ์—ฌ๋ถ€ ํ•„์ˆ˜
์œ ํ˜• ๋ฌธ์ž์—ด
์ƒ์œ„ ์š”์†Œ <SemanticCacheLookup>
ํ•˜์œ„ ์š”์†Œ <VertexAI>

<SimilaritySearch> ์š”์†Œ๋Š” ๋‹ค์Œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

<SimilaritySearch>
  <VertexAI>
    <URL>https://{PUBLIC_DOMAIN_NAME}/v1/projects/{PROJECT_ID}/locations/{LOCATION}/indexEndpoints/{INDEX_ENDPOINT_ID}:findNeighbors
    </URL>
    <Threshold>0.9</Threshold>
    <DeployedIndexID>{DEPLOYED_INDEX_ID}</DeployedIndexID>
  </VertexAI>
</SimilaritySearch>

<VertexAI>(<SimilaritySearch>์˜ ํ•˜์œ„ ์š”์†Œ)

Vertex AI ๊ด€๋ จ ์†์„ฑ์˜ <URL> ์š”์†Œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’ ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ
ํ•„์ˆ˜ ์—ฌ๋ถ€ ํ•„์ˆ˜
์œ ํ˜• ๋ฌธ์ž์—ด
์ƒ์œ„ ์š”์†Œ <SimilaritySearch>
ํ•˜์œ„ ์š”์†Œ <URL>

VertexAI ์š”์†Œ๋Š” ๋‹ค์Œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

<VertexAI>
  <URL>https://{PUBLIC_DOMAIN_NAME}/v1/projects/{PROJECT_ID}/locations/{LOCATION}/indexEndpoints/{INDEX_ENDPOINT_ID}:findNeighbors</URL>
  <Threshold>0.9</Threshold>
  <DeployedIndexID>{DEPLOYED_INDEX_ID}</DeployedIndexID>
</VertexAI>

๋‹ค์Œ ํ‘œ์—์„œ๋Š” <VertexAI>์˜ ํ•˜์œ„ ์š”์†Œ์— ๋Œ€ํ•œ ๋Œ€๋žต์ ์ธ ์„ค๋ช…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์œ„ ์š”์†Œ ํ•„์ˆ˜ ์—ฌ๋ถ€ ์„ค๋ช…
<URL> ํ•„์ˆ˜ ๋ฌธ์ž์—ด

์œ ์‚ฌ์„ฑ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” URL์ž…๋‹ˆ๋‹ค. ์œ ์‚ฌ์„ฑ ๊ธฐ์ค€์— ๋”ฐ๋ผ ๊ฐ€์žฅ ์ผ์น˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

<Threshold> ์„ ํƒ์‚ฌํ•ญ ๋ฌธ์ž์—ด

๋‘ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์œ ์‚ฌ์„ฑ ์ ์ˆ˜์ž…๋‹ˆ๋‹ค. 0~1 ์‚ฌ์ด์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’์€ 0.9์ž…๋‹ˆ๋‹ค.

<DeployedIndexID> ํ•„์ˆ˜ ๋ฌธ์ž์—ด

์‹œ๋งจํ‹ฑ ์บ์‹ฑ์— ์‚ฌ์šฉ๋˜๋Š” ์ƒ‰์ธ ์—”๋“œํฌ์ธํŠธ์— ๋ฐฐํฌ๋œ ์ƒ‰์ธ์˜ ID์ž…๋‹ˆ๋‹ค.

ํ๋ฆ„ ๋ณ€์ˆ˜

ํ๋ฆ„ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด HTTP ํ—ค๋”, ๋ฉ”์‹œ์ง€ ์ฝ˜ํ…์ธ  ๋˜๋Š” ํ๋ฆ„์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •์ฑ… ๋ฐ ํ๋ฆ„์˜ ๋™์  ๋Ÿฐํƒ€์ž„ ๋™์ž‘์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ๋ฆ„ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ๋ฆ„ ๋ณ€์ˆ˜ ์ฐธ์กฐ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

์ •์ฑ…์€ ์‹คํ–‰ ์ค‘์— ์ด๋Ÿฌํ•œ ์ฝ๊ธฐ ์ „์šฉ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณ€์ˆ˜ ์ด๋ฆ„ ์„ค๋ช…
request.content ์ˆ˜์‹ ๋˜๋Š” API ์š”์ฒญ์˜ ์ „์ฒด ์ฝ˜ํ…์ธ ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
request.url ์ˆ˜์‹  API ์š”์ฒญ์˜ URL์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
semanticcache.lookup.policy_name.user_prompt ์š”์ฒญ ํ”„๋กฌํ”„ํŠธ์—์„œ ์ถ”์ถœ๋œ ํŠน์ • ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋ฉฐ, ์ž„๋ฒ ๋”ฉ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์œ ์‚ฌ์„ฑ ๊ฒ€์ƒ‰์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
semanticcache.lookup.policy_name.embeddings_request ์ž…๋ ฅ ํ…์ŠคํŠธ์˜ ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด Vertex AI Embeddings API๋กœ ์ „์†ก๋œ ์š”์ฒญ ํŽ˜์ด๋กœ๋“œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
semanticcache.lookup.policy_name.embeddings_response ์ƒ์„ฑ๋œ ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ์ด ํฌํ•จ๋œ Vertex AI Embeddings API์˜ ์‘๋‹ต์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
semanticcache.lookup.policy_name.dense_embeddings Vertex AI Embeddings API์—์„œ ์ƒ์„ฑ๋œ ์‹ค์ œ ์ˆซ์ž ์ž„๋ฒ ๋”ฉ ๊ฐ’์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
semanticcache.lookup.policy_name.is_nearest_neighbor_hit ์ง€์ •๋œ ์š”์ฒญ์— ๋Œ€ํ•ด ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ตœ๊ทผ์ ‘ ์ด์›ƒ์ด ๋ฐœ๊ฒฌ๋˜์—ˆ๊ณ  ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ๊ฐ€ ์œ ์‚ฌ์„ฑ ๊ธฐ์ค€์ ์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
semanticcache.lookup.policy_name.cache_hit ์‘๋‹ต์ด ์‹œ๋งจํ‹ฑ ์บ์‹œ์—์„œ ๋ฐœ๊ฒฌ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
semanticcache.lookup.policy_name.cached_llm_response ์˜๋ฏธ ์บ์‹œ์—์„œ ๊ฐ€์ ธ์˜จ ์‘๋‹ต์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค(์บ์‹œ ์ ์ค‘์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ).

์˜ค๋ฅ˜ ์ฐธ์กฐ

์ด ์„น์…˜์—์„œ๋Š” ๋ฐ˜ํ™˜๋˜๋Š” ์˜ค๋ฅ˜ ์ฝ”๋“œ ๋ฐ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์™€ <SemanticCacheLookup> ์ •์ฑ…๊ณผ ๊ด€๋ จํ•ด์„œ Apigee์—์„œ ์„ค์ •๋œ ์˜ค๋ฅ˜ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์˜ค๋ฅ˜ ๊ทœ์น™์„ ๊ฐœ๋ฐœ ์ค‘์ธ ๊ฒฝ์šฐ ์ด ์ •๋ณด๋Š” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ •์ฑ… ์˜ค๋ฅ˜์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•  ์‚ฌํ•ญ ๋ฐ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜

์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋Š” ์ •์ฑ…์ด ์‹คํ–‰๋  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ์ฝ”๋“œ HTTP ์ƒํƒœ ์›์ธ
steps.semanticcache.lookup.MessageTemplateExtractionFailed 400 JSON ๊ฒฝ๋กœ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
steps.semanticcache.lookup.FailedToExtractUserPrompt 500 API ์š”์ฒญ์—์„œ ์‚ฌ์šฉ์ž ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
steps.semanticcache.lookup.EmbeddingsServiceUnavailable 400 ํ˜„์žฌ Vertex AI Embeddings ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
steps.semanticcache.lookup.EmbeddingsAPIFailed 400 Vertex AI Embeddings ์„œ๋น„์Šค๊ฐ€ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.
steps.semanticcache.lookup.VectorSearchServiceUnavailable 400 ํ˜„์žฌ Vertex AI ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
steps.semanticcache.lookup.VectorSearchAPIFailed 400 Vertex AI ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ์„œ๋น„์Šค๊ฐ€ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.
steps.semanticcache.lookup.AuthenticationFailure 500 ์„œ๋น„์Šค ๊ณ„์ •์— ํ•„์š”ํ•œ ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.
steps.semanticcache.lookup.InternalError 500 SemanticCacheLookup ์ •์ฑ… ๋‚ด์—์„œ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
steps.semanticcache.lookup.CalloutError 500 Vertex AI ์„œ๋น„์Šค ํ˜ธ์ถœ์ด ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฐฐํฌ ์˜ค๋ฅ˜

์ด ์˜ค๋ฅ˜๋Š” ์ด ์ •์ฑ…์ด ํฌํ•จ๋œ ํ”„๋ก์‹œ๋ฅผ ๋ฐฐํฌํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ์ด๋ฆ„ ์›์ธ
The Embeddings/VertexAI element is required. <Embeddings>์˜ <VertexAI> ์š”์†Œ๊ฐ€ ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
The SimilaritySearch/VertexAI element is required. <SimilaritySearch>์˜ <VertexAI> ์š”์†Œ๊ฐ€ ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
The Embeddings/URL element is required. <Embeddings>์˜ <URL> ์š”์†Œ๊ฐ€ ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
The SimilaritySearch/URL element is required. <SimilaritySearch>์˜ <URL> ์š”์†Œ๊ฐ€ ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
Embeddings URL {url} is invalid. <Embeddings>์˜ <URL> ์š”์†Œ๊ฐ€ ๋น„์–ด ์žˆ๊ฑฐ๋‚˜ ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
The SimilaritySearch URL {url} is invalid. <SimilaritySearch>์˜ <URL> ์š”์†Œ๊ฐ€ ๋น„์–ด ์žˆ๊ฑฐ๋‚˜ ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
The scheme {http-scheme} of Embeddings URL {url} must be one of http, https. Embeddings <URL> ์š”์†Œ์˜ http ์Šคํ‚ค๋งˆ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
The scheme {http-scheme} of SimilaritySearch URL {url} must be one of http, https. SimilaritySearch <URL> ์š”์†Œ์˜ http ์Šคํ‚ค๋งˆ๊ฐ€ ์ž˜๋ชป๋œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
SimilaritySearch/Threshold element must be >= 0 and <= 1. ์†์„ฑ์ด 0๊ณผ 1 ์‚ฌ์ด์— ์žˆ์ง€ ์•Š์œผ๋ฉด API ํ”„๋ก์‹œ ๋ฐฐํฌ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
SimilaritySearch/DeployedIndexID element is required. <SimilaritySearch>์˜ <DeployedIndexID> ์š”์†Œ๊ฐ€ ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
SimilaritySearch/DeployedIndexID element must not contain spaces. <SimilaritySearch>์˜ <DeployedIndexID> ์š”์†Œ์— ๊ณต๋ฐฑ์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ๋ณ€์ˆ˜

์ด๋Ÿฌํ•œ ๋ณ€์ˆ˜๋Š” ์ด ์ •์ฑ…์ด ๋Ÿฐํƒ€์ž„ ์‹œ ์˜ค๋ฅ˜๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•  ๋•Œ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ •์ฑ… ์˜ค๋ฅ˜์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•  ์‚ฌํ•ญ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ณ€์ˆ˜ ์œ„์น˜ ์˜ˆ
fault.name="FAULT_NAME" FAULT_NAME์€ ์œ„์˜ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜ ํ‘œ์— ๋‚˜์—ด๋œ ์˜ค๋ฅ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ์ด๋ฆ„์€ ์˜ค๋ฅ˜ ์ฝ”๋“œ์˜ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. fault.name Matches "UnresolvedVariable"
semanticcachelookup.POLICY_NAME.failed POLICY_NAME์€ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ์ •์ฑ…์˜ ์‚ฌ์šฉ์ž ์ง€์ • ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. semanticcachelookup.SC-lookup.failed = true

์˜ค๋ฅ˜ ์‘๋‹ต ์˜ˆ์‹œ

{
  "fault": {
    "faultstring": "SemanticCacheLookup[SC-lookup]: unable to resolve variable [variable_name]",
    "detail": {
      "errorcode": "steps.semanticcachelookup.UnresolvedVariable"
    }
  }
}

์˜ค๋ฅ˜ ๊ทœ์น™ ์˜ˆ์‹œ

<FaultRule name="SemanticCacheLookup Faults">
    <Step>
        <Name>SCL-CustomSetVariableErrorResponse</Name>
        <Condition>(fault.name = "SetVariableFailed")</Condition>
    </Step>
    <Condition>(semanticcachelookup.failed = true)</Condition>
</FaultRule>

์Šคํ‚ค๋งˆ

๊ฐ ์ •์ฑ… ์œ ํ˜•์€ XML ์Šคํ‚ค๋งˆ(.xsd)๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ GitHub์—์„œ ์ •์ฑ… ์Šคํ‚ค๋งˆ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.