Muistiinpano
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
Tämä opas ohjaa sinut koko prosessin läpi agentin telemetrian lähettämiseksi Agent 365:lle suoraan OpenTelemetryn (OTLP/HTTP+JSON) kautta. Ennen kuin aloitat, lue Agent 365:n havainnointikonseptit saadaksesi käsityksen mallista, autentikointipoluista ja kohteista, joihin tietosi päätyy.
Tärkeää
Suora OTel-polku on poikkeus, ei oletus. Käytä tätä vain, jos sinulla on jo OpenTelemetry-putkisto, kehys ei tue Agent 365 SDK:ta tai agenttisi on ohjelmointikielellä, jota SDK ei vielä tue (esimerkiksi Java). Muille käyttäjille suositeltu tapa on Microsoft OpenTelemetry Distro, joka tarjoaa yhtenäisen havaittavuus-SDK:n Agent 365:n, Microsoft Foundryn, Azure Monitorin ja muiden palveluiden käyttöön. Aiempi havaittavuus-SDK toimii edelleen rikkomatta muutoksia, mutta sitä ei enää suositella uusiin integraatioihin; siirtymäohjeistus nykyisille SDK-käyttäjille on tulossa.
Edellytykset
Varmista, että seuraavat asetukset ovat kunnossa ennen kuin telemetriaa lähetetään.
| Kuka | Mitä |
|---|---|
| Vuokraajan järjestelmänvalvoja | Rekisteröidy Agent 365:een ja anna suostumus agenttisovellukselle. Katso Agent 365:n käyttöönotto. Ilman lisensoitua vuokraajaa käsittely keskeytetään hiljaisesti – pyyntö palauttaa 200 OK ja partialSuccess: null, mutta data ei koskaan näy järjestelmässä. |
| Vuokraajan järjestelmänvalvoja |
Määritä Microsoft 365 E7- tai Microsoft Agent 365 -lisenssi vähintään yhdelle käyttäjälle vuokraajassa. SKU:n läsnäolo ei riitä. Lisenssin määrittäminen käyttäjälle käynnistää Defenderin taustajärjestelmän työnkulun, joka mahdollistaa tietojen käsittelyn. Ilman määritettyä lisenssiä pyynnöt palauttavat kohteen 200 OK yhdessä kohteen partialSuccess: null kanssa, ja data hylätään hiljaisesti. |
| Vuokraajan järjestelmänvalvoja | Anna vuokraajan suostumus. Katso agenttien pääsyn myöntäminen Microsoft 365 -resursseihin. Ilman sitä tunnukset myönnetään ilman roolia tai vaikutusaluetta ja pyynnöt palauttavat arvon 403. |
| Kehitystiimisi | Rekisteröi sovellus (tavallinen Microsoft Entra-sovellus tai blueprint-sovellus). Katso Agent 365 -kehityksen aloitus. |
| Kehitystiimisi | Lisää Agent365.Observability.OtelWrite kohtaan API-oikeudet (sovellusrooli S2S:lle, vaikutusalue delegoidulle): Blueprint-sovelluksille, katso Määritä periytyvät oikeudet. Tee yhteistyötä Agent 365:n onboarding-tiimin kanssa, jotta lupa voidaan ottaa käyttöön. |
Todennusreseptit
Kaikki neljä menetelmää käyttävät tavallista Microsoft Entra -tunnus-päätepistettä:
| Kenttä | Value |
|---|---|
| Tunnuksen päätepiste | https://login.microsoftonline.com/{your-tenant-id}/oauth2/v2.0/token |
Resurssi (aud palautetussa tunnuksessa) |
9b975845-388f-4429-889e-eab1ef63949c (hyväksyy myös api://9b975845-388f-4429-889e-eab1ef63949c) |
| S2S-laajuus | 9b975845-388f-4429-889e-eab1ef63949c/.default |
| OBO-laajuus | 9b975845-388f-4429-889e-eab1ef63949c/Agent365.Observability.OtelWrite |
Alla olevat integraatio-ohjeet näyttävät raakaa HTTP:tä selkeyden vuoksi. Tuotannossa suositellaan käyttämään Microsoft.Identity.Web:iä tai muuta MSAL-kirjastoa, joka hoitaa tunnusten päivityksen ja välimuistin hallinnan.
Minkä reseptin tarvitsen?
| Sovelluksen malli | Minun OAuth-työnkulkuni | Siirry |
|---|---|---|
| Standard Microsoft Entra -sovelluksen rekisteröinti | S2S (asiakkaan tunnistetiedot) | S2S, Microsoft Entra -vakiosovellus |
| Standard Microsoft Entra -sovelluksen rekisteröinti | OBO (delegoitu) | OBO, Microsoft Entra -vakiosovellus |
| Blueprint-pohjainen agentti-identiteetti | S2S (asiakkaan tunnistetiedot) | S2S, Blueprint-pohjainen agentti-identiteetti |
| Blueprint-pohjainen agentti-identiteetti | OBO / tekoälytiimikaveri | OBO, Blueprint-pohjainen agentti-identiteetti |
S2S, Microsoft Entra -vakiosovellus
Lähetä yksi POST-pyyntö vuokralaisen tunnuksen päätepisteelle kohteella grant_type=client_credentials. Tunnista sovellus käyttämällä asiakassalaisuutta, varmennetta (allekirjoitettu JWT-väite) tai hallittua identiteettiä tai liittoutunutta tunnistetietoa.
POST https://login.microsoftonline.com/{your-tenant-id}/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
client_id={your-app-id}
&scope=9b975845-388f-4429-889e-eab1ef63949c%2F.default
&client_secret={secret}
&grant_type=client_credentials
Palautettu token sisältää appid/azp = {your-app-id}, roles, joka sisältää Agent365.Observability.OtelWrite, sekä aud = 9b975845-.... Käytä sitä reitillä /observabilityService/.../traces.
Varmennepohjaisessa tunnistautumisessa korvaa client_secret={secret}client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&client_assertion={signed-jwt}:llä.
S2S, Blueprint-pohjainen agentti-identiteetti
Agentti-identiteeteillä ei ole omia tunnistetietoja. Agentti-identiteetin blueprint pitää hallussaan tunnistetiedot (hallittu identiteetti FIC, varmenne tai asiakkaan salaisuus) ja myöntää tunnuksia aliagentti-identiteettien puolesta kaksivaiheisen vaihtoprosessin kautta. Lisätietoja on kohdassa autonomisen sovelluksen OAuth-työnkulku.
Blueprint tunnistautuu ja saa federatiivisen identiteettivaihtotunnuksen
T1:-
{blueprint-credential}on blueprintin MSI-tunnus, sertifikaatilla allekirjoitettu JWT tai salainen vaihtotunnusväittämä – blueprint-konfiguraation mukaisesti.
POST https://login.microsoftonline.com/{your-tenant-id}/oauth2/v2.0/token Content-Type: application/x-www-form-urlencoded client_id={blueprint-app-id} &scope=api%3A%2F%2FAzureADTokenExchange%2F.default &fmi_path={agent-identity-app-id} &client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer &client_assertion={blueprint-credential} &grant_type=client_credentials-
Agentin identiteetti vaihtaa
T1Agent 365 Observability -resurssitunnuksen:POST https://login.microsoftonline.com/{your-tenant-id}/oauth2/v2.0/token Content-Type: application/x-www-form-urlencoded client_id={agent-identity-app-id} &scope=9b975845-388f-4429-889e-eab1ef63949c%2F.default &client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer &client_assertion={T1} &grant_type=client_credentials- Palautettu token sisältää
appid/azp={agent-identity-app-id},roles, joka sisältääAgent365.Observability.OtelWrite, sekäaud=9b975845-.... - Käytä tätä tunnusta
/observabilityService/.../traces-reitillä. - URL-osoite
{agentId}on agentti-identiteetin appId, ei blueprintin appId.
- Palautettu token sisältää
OBO, Microsoft Entra -vakiosovellus
Vastaanota käyttäjän saapuva tunnus Tc yläpuoliselta kutsujalta (Bearer tai PFAT) ja vaihda se:
POST https://login.microsoftonline.com/{your-tenant-id}/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
client_id={your-app-id}
&scope=9b975845-388f-4429-889e-eab1ef63949c%2FAgent365.Observability.OtelWrite
&client_secret={secret}
&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
&assertion={Tc}
&requested_token_use=on_behalf_of
Sertifikaattitodennuksessa korvaa client_secret={secret} samalla client_assertion_type + client_assertion parilla kuin S2S:ssä.
Palautettu token sisältää appid/azp = {your-app-id}, scp, joka sisältää Agent365.Observability.OtelWrite, sekä aud = 9b975845-.... Käytä sitä reitillä /observability/.../traces. Päivitystunniste palautetaan samalla; tallenna se välimuistiin ja käytä uudelleen sen sijaan, että suorittaisit vaihdon uudelleen jokaisella kutsulla.
OBO, Blueprintistä johdettu agentti-identiteetti (mukaan lukien tekoälytiimikaveri)
On kolme päävaihetta on-behalf-of-prosessissa. Katso lisätietoja kohdasta agentti OAuth-työnkulut: On behalf of -työnkulku.
Vastaanota käyttäjätunnus
Tc. Tekoälyavustajalle tämä token edustaa agentin omaa käyttäjätiliä; muussa tapauksessa se edustaa ihmiskäyttäjää.Blueprint todentaa itsensä ja saa
T1, samalla tavalla kuin S2S blueprint -pohjaisessa agentin identiteettiprosessissa.Agentti-identiteetti vaihtaa
T1jaTcsaadakseen delegoidun resurssitunnuksen:POST https://login.microsoftonline.com/{your-tenant-id}/oauth2/v2.0/token Content-Type: application/x-www-form-urlencoded client_id={agent-identity-app-id} &scope=9b975845-388f-4429-889e-eab1ef63949c%2FAgent365.Observability.OtelWrite &client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer &client_assertion={T1} &grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer &assertion={Tc} &requested_token_use=on_behalf_of
Palautettu token sisältää appid/azp = {agent-identity-app-id}, scp, johon sisältyy Agent365.Observability.OtelWrite, ja edustaa agentin käyttäjää. Käytä sitä reitillä /observability/.../traces. URL-osoite {agentId} on agentti-identiteetin appId, ei blueprintin appId. Päivitystunnus palautetaan mukana; tallenna se välimuistiin ja käytä uudelleen.
Vaaditut vaatimukset palautettuun tunnukseen
S2S-reitti (/observabilityService/...) - pelkästään sovellukselle tarkoitettu tunnus:
| Vaatimus | Pakollinen arvo |
|---|---|
aud |
9b975845-388f-4429-889e-eab1ef63949c (tai api://9b975845-...) |
roles |
On sisällettävä Agent365.Observability.OtelWrite |
appid (v1) tai azp (v2) |
On oltava sama kuin URL {agentId} |
scp |
Ei saa olla |
Delegoitu reitti (/observability/...) - käyttäjän delegoima tunnus (Bearer tai PFAT):
| Vaatimus | Pakollinen arvo |
|---|---|
aud |
9b975845-388f-4429-889e-eab1ef63949c (tai api://9b975845-...) |
scp |
On sisällettävä Agent365.Observability.OtelWrite |
appid / azp |
On oltava sama kuin URL {agentId} |
Hyväksyy sekä Bearer- että MSAuth1.0 PFAT -tunnukset. Suorat kutsut tulisi tehdä käyttäen Bearer-koodia. Jos et tiedä, mitä sinulla on, käytä Bearer-koodia.
Päätepisteet
Kaksi reittiä; valitse sen mukaan, miten palvelusi tunnistautuu, älä sen mukaan, mitä käyttäjä tekee:
POST https://agent365.svc.cloud.microsoft/observabilityService/tenants/{tenantId}/otlp/agents/{agentId}/traces?api-version=1 # S2S
POST https://agent365.svc.cloud.microsoft/observability/tenants/{tenantId}/otlp/agents/{agentId}/traces?api-version=1 # OBO
Otsikot:
Authorization: Bearer <token> # or MSAuth1.0 ... for delegated PFAT
Content-Type: application/json
URL-parametrit
-
{tenantId}- Asiakkaan vuokraajan GUID. Palvelin pitää tätä määräävänä; jos spanienmicrosoft.tenant.id-arvo poikkeaa tästä, pyyntö hylätään. -
{agentId}- kutsuvan sovelluksen appId (myös OAuthclient_id). Blueprint-johdetuilla identiteeteillä tämä on agentti-identiteetin appId, ei blueprintin appId. Täytyy olla sama kuin tunnuksesiappid/azp-väite. -
api-version=1- vaadittu.
Pyynnön rungon koodaus
Runko on standardi OTLP/HTTP+JSON-rakenne: ExportTraceServiceRequest, jonka resourceSpans → scopeSpans → spans. Ota huomioon seuraavat asiat:
-
traceId(16 tavua) jaspanId(8 tavua) lähetetään pienaakkosin kirjoitettuina heksamerkkijonoina. -
startTimeUnixNano/endTimeUnixNanoovat merkkijonoja jotka sisältävät Unix-epookin nanosekunteja. -
kindon kokonaislukutyyppinen OTLP:n luettelointi-arvo (esimerkiksi1INTERNAL);status.codeon kokonaislukutyyppinen luettelointi-arvo (esimerkiksi1OK,2ERROR). - Kaikki attribuuttien arvot lähetetään muodossa
stringValue.
Vastemuoto
Onnistunut pyyntö palauttaa 200 OK:
{ "partialSuccess": null }
Jos joitakin spaneja hylättiin span-kohtaisella suodattimella:
{
"partialSuccess": {
"rejectedSpans": 2,
"errorMessage": "Dropped 2 non-A365 span(s) ..."
}
}
Kenttien nimet ovat camelCase-muodossa tiedonsiirrossa.
Tarkista aina partialSuccess: 200-vastaus, jossa kaikki spanit on hylätty, on todellinen lopputulos, joka täytyy tuoda esiin.
Rajoitus- ja pudotusehdot -osio listaa hiljaiset pudotustapaukset, joissa 200 palautuu partialSuccess: null, vaikka tietoja ei näy jatkovirrassa.
Pienin mahdollinen pyyntö
Yksinkertaisin end-to-end-testi lähettää yhden invoke_agent-spanin. Tämä span on pienin runko, joka päätyy Microsoft Defenderiin.
Vaihe 1. Hanki haltijatunnus. S2S:ssä käytä asiakastunnuksia laajuudella 9b975845-388f-4429-889e-eab1ef63949c/.default (katso Todentamisreseptit koko reseptiä varten).
Vaihe 2: JULKAISEE yhden spanin:
TOKEN="$(./get-token.sh)"
TENANT_ID="<customer-tenant-guid>"
AGENT_ID="<your-agent-app-id>"
curl -i -X POST \
"https://agent365.svc.cloud.microsoft/observabilityService/tenants/${TENANT_ID}/otlp/agents/${AGENT_ID}/traces?api-version=1" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
--data @- <<EOF
{
"resourceSpans": [{
"scopeSpans": [{
"scope": { "name": "my-instrumentation", "version": "1.0.0" },
"spans": [{
"traceId": "0102030405060708090a0b0c0d0e0f10",
"spanId": "1111111111111111",
"parentSpanId": "",
"name": "invoke_agent",
"kind": 1,
"startTimeUnixNano": "1736175600000000000",
"endTimeUnixNano": "1736175601500000000",
"status": { "code": 1 },
"attributes": [
{ "key": "gen_ai.operation.name", "value": { "stringValue": "invoke_agent" } },
{ "key": "gen_ai.agent.id", "value": { "stringValue": "${AGENT_ID}" } },
{ "key": "gen_ai.agent.name", "value": { "stringValue": "MyAgent" } },
{ "key": "microsoft.a365.agent.blueprint.id", "value": { "stringValue": "${AGENT_ID}" } },
{ "key": "gen_ai.conversation.id","value": { "stringValue": "conv-001" } },
{ "key": "microsoft.channel.name","value": { "stringValue": "web" } },
{ "key": "user.id", "value": { "stringValue": "<entra-user-objectid>" } },
{ "key": "client.address", "value": { "stringValue": "10.1.2.80" } },
{ "key": "server.address", "value": { "stringValue": "myagent.example.com" } },
{ "key": "server.port", "value": { "stringValue": "443" } },
{ "key": "gen_ai.input.messages", "value": { "stringValue": "[{\"role\":\"user\",\"content\":\"hi\"}]" } },
{ "key": "gen_ai.output.messages","value": { "stringValue": "[{\"role\":\"assistant\",\"content\":\"hello\"}]" } }
]
}]
}]
}]
}
EOF
Vaihe 3: Odota 200 OK tällä sisällöllä:
{ "partialSuccess": null }
Vaihe 4: Varmista, että data todella saapui. 200 OK ei ole todiste käsittelystä; Vastaanoton tarkistusohjeet käyvät läpi varmennusprosessin. Jos haluat JULKAISTA tallennetun runkotiedoston, korvaa se --data @- <<EOF ... EOF kohteella --data @./otlp-request.json
Esimerkki agentin suorituksesta
Microsoft Teamsin käyttäjä kysyy: "Millainen sää Seattlessa on?". Agenttisi kutsuu GetWeather-funktion, pyytää LLM:ää muotoilemaan vastauksen ja vastaa. Tuo yksittäinen suoritus koostuu neljästä spanista:
graph TD
A["<b>invoke_agent</b> · spanId=A · parentSpanId=∅<br/><i>root - the run itself</i>"]
B["<b>chat</b> · spanId=B · parentSpanId=A<br/><i>LLM picks the tool / formats reply</i>"]
C["<b>execute_tool</b> · spanId=C · parentSpanId=A<br/><i>the GetWeather call</i>"]
D["<b>output_messages</b> · spanId=D · parentSpanId=A<br/><i>final reply emitted to the user</i>"]
A --> B
A --> C
A --> D
Suorituksen kattavat attribuutit asetetaan jokaiseen spaniin:
| Ominaisuus | Esimerkkiarvo |
|---|---|
traceId |
0102030405060708090a0b0c0d0e0f10 |
gen_ai.conversation.id |
19:abc@thread.tacv2 |
microsoft.session.id |
session-1234 |
microsoft.channel.name |
msteams |
gen_ai.agent.id |
<AGENT_APP_ID> |
gen_ai.agent.name |
WeatherBot |
microsoft.a365.agent.blueprint.id |
<BLUEPRINT_APP_ID> |
user.id |
<entra-user-objectid> |
client.address |
10.1.2.80 |
server.address |
weatherbot.example.com |
server.port |
443 |
Tärkeää
Nämä suorituksen laajuiset attribuutit eivät siirry automaattisesti. Sinun täytyy asettaa gen_ai.conversation.id, microsoft.channel.name ja microsoft.session.id jokaiselle spanille itse.
Span A: invoke_agent (juuri)
{
"traceId": "0102030405060708090a0b0c0d0e0f10",
"spanId": "1111111111111111",
"parentSpanId": "",
"name": "invoke_agent",
"kind": 1,
"startTimeUnixNano": "1736175600000000000",
"endTimeUnixNano": "1736175601500000000",
"status": { "code": 1 },
"attributes": [
{ "key": "gen_ai.operation.name", "value": { "stringValue": "invoke_agent" } },
{ "key": "gen_ai.execution.type", "value": { "stringValue": "HumanToAgent" } },
{ "key": "gen_ai.input.messages", "value": { "stringValue": "[{\"role\":\"user\",\"content\":\"What's the weather in Seattle?\"}]" } },
{ "key": "gen_ai.output.messages", "value": { "stringValue": "[{\"role\":\"assistant\",\"content\":\"It's 65F and partly cloudy in Seattle.\"}]" } },
{ "key": "user.email", "value": { "stringValue": "alice@contoso.com" } }
/* plus all the run-wide attributes listed above */
]
}
Span B: chat (LLM-kutsu)
{
"traceId": "0102030405060708090a0b0c0d0e0f10",
"spanId": "2222222222222222",
"parentSpanId": "1111111111111111",
"name": "chat",
"kind": 1,
"startTimeUnixNano": "1736175600200000000",
"endTimeUnixNano": "1736175600900000000",
"status": { "code": 1 },
"attributes": [
{ "key": "gen_ai.operation.name", "value": { "stringValue": "chat" } },
{ "key": "gen_ai.request.model", "value": { "stringValue": "gpt-4o" } },
{ "key": "gen_ai.provider.name", "value": { "stringValue": "openai" } },
{ "key": "gen_ai.usage.input_tokens", "value": { "stringValue": "42" } },
{ "key": "gen_ai.usage.output_tokens", "value": { "stringValue": "23" } }
/* plus all the run-wide attributes */
]
}
Span C: execute_tool
{
"traceId": "0102030405060708090a0b0c0d0e0f10",
"spanId": "3333333333333333",
"parentSpanId": "1111111111111111",
"name": "execute_tool",
"kind": 1,
"startTimeUnixNano": "1736175600950000000",
"endTimeUnixNano": "1736175601200000000",
"status": { "code": 1 },
"attributes": [
{ "key": "gen_ai.operation.name", "value": { "stringValue": "execute_tool" } },
{ "key": "gen_ai.tool.name", "value": { "stringValue": "GetWeather" } },
{ "key": "gen_ai.tool.type", "value": { "stringValue": "function" } },
{ "key": "gen_ai.tool.call.id", "value": { "stringValue": "call-001" } },
{ "key": "gen_ai.tool.call.arguments", "value": { "stringValue": "{\"location\":\"Seattle\"}" } },
{ "key": "gen_ai.tool.call.result", "value": { "stringValue": "{\"tempF\":65,\"condition\":\"partly cloudy\"}" } }
/* plus all the run-wide attributes */
]
}
Span D: output_messages
{
"traceId": "0102030405060708090a0b0c0d0e0f10",
"spanId": "4444444444444444",
"parentSpanId": "1111111111111111",
"name": "output_messages",
"kind": 1,
"startTimeUnixNano": "1736175601400000000",
"endTimeUnixNano": "1736175601500000000",
"status": { "code": 1 },
"attributes": [
{ "key": "gen_ai.operation.name", "value": { "stringValue": "output_messages" } },
{ "key": "gen_ai.output.messages", "value": { "stringValue": "[{\"role\":\"assistant\",\"content\":\"It's 65F and partly cloudy in Seattle.\"}]" } }
/* plus all the run-wide attributes */
]
}
Telemetrian lähettäminen
OTel SDK:n käyttö
Useimmat kumppanit lähettävät traceja OTel SDK:n kautta itse toteutetun HTTP:n sijaan. OTel SDK hoitaa eräkäsittelyt, uudelleenyritykset ja OTLP/HTTP+JSON-koodauksen puolestasi. Aseta vientipäätepiste ja lisää otsake Authorization.
Vientipäätepiste on reitin URL, mukaan lukien kyselymerkkijono:
https://agent365.svc.cloud.microsoft/observabilityService/tenants/{tenantId}/otlp/agents/{agentId}/traces?api-version=1
(Käytä /observability/... delegoidun reitin tapauksessa /observabilityService/... sijaan.)
Python
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
exporter = OTLPSpanExporter(
endpoint="https://agent365.svc.cloud.microsoft/observabilityService/tenants/{tenantId}/otlp/agents/{agentId}/traces?api-version=1",
headers={"Authorization": f"Bearer {token}"},
)
Paketti: opentelemetry-exporter-otlp-proto-http.
Node.js / TypeScript
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
const exporter = new OTLPTraceExporter({
url: "https://agent365.svc.cloud.microsoft/observabilityService/tenants/{tenantId}/otlp/agents/{agentId}/traces?api-version=1",
headers: { Authorization: `Bearer ${token}` },
});
Paketti: @opentelemetry/exporter-trace-otlp-http.
.NET
using OpenTelemetry.Exporter;
services.AddOpenTelemetry().WithTracing(b => b
.AddOtlpExporter(o =>
{
o.Endpoint = new Uri("https://agent365.svc.cloud.microsoft/observabilityService/tenants/{tenantId}/otlp/agents/{agentId}/traces?api-version=1");
o.Headers = $"Authorization=Bearer {token}";
o.Protocol = OtlpExportProtocol.HttpJson;
}));
Paketti: OpenTelemetry.Exporter.OpenTelemetryProtocol.
Manuaalinen HTTP
Jos et voi tai halua käyttää OTel-SDK:ta, rakenna OTLP/HTTP+JSON-pyyntö itse ja JULKAISE se. Pyynnön rungon rakenne määritellään OpenTelemetry OTLP/HTTP+JSON -määrityksen mukaisesti:
{
"resourceSpans": [{
"resource": { "attributes": [ ... ] }, // optional
"scopeSpans": [{
"scope": { "name": "<your-instrumentation>", "version": "1.0.0" },
"spans": [ <span>, <span>, ... ]
}]
}]
}
Jokainen <span> on objekti, jonka pakollisia kenttiä ovat traceId, spanId, name, kind, startTimeUnixNano, endTimeUnixNano, attributes sekä (ei-juuri-spanien tapauksessa) parentSpanId. Tutustu osioihin Päätepisteet sekä Pyynnön rungon koodaus koodaussääntöjen osalta (merkkijonona koodatut ajat, heksadesimaalina traceId / spanId, kokonaislukuna kind / status.code, kaikki attribuuttiarvot muodossa stringValue).
Asetettavat attribuutit kullekin spanille määritellään kohdassa Viestisopimukset. Katso täydellinen määriteluettelo kohdassa Määriteviittaus. Katso agentti-suoritusesimerkkiä päästä päähän toimivasta mallista, jossa haltijatunnus on otsikossa ja runko sisältyy suoraan.
Voit lähettää kaikki suorituksen spanit yhdessä POST-pyynnön rungossa (suositeltu – yksi pyyntö, yksi jäljitys) tai useissa POST-pyynnöissä. Palvelin kokoaa ajon uudelleen traceId + parentSpanId + gen_ai.conversation.id avulla, joten jokainen span sisältää riittävästi tietoa, jotta ne voidaan korreloida kummassakin tapauksessa.
Viestisopimukset
Tässä osiossa määritellään, mitä spaneja voit lähettää ja mitkä attribuutit liitetään kuhunkin. Katso täydellinen attribuuttikohtainen spesifikaatio attribuuttiviitteestä.
Toimintotyypit
Jokaisessa lähettämässäsi spanissa täytyy olla gen_ai.operation.name asetettuna johonkin näistä neljästä arvosta (kirjainkoolla ei ole väliä). Jokainen span, jolta puuttuu tai jonka arvoa ei tunnisteta, hiljaisesti pudotetaan ja huomioidaan laskurissa partialSuccess.rejectedSpans.
gen_ai.operation.name |
Merkitys | Yleisin googlattu sudenkuoppa |
|---|---|---|
invoke_agent |
Agentin kutsu Agenttisuorituksen juuri. | Vaaditaan, jotta ajo näkyy Microsoft Defenderin agenttitoimintanäkymissä tai Microsoft 365 -hallintakeskuksessa. Ilman sitä telemetria päätyy vain Microsoft Defender Advanced Huntingiin (CloudAppEvents). |
execute_tool |
Agentin suorittama työkalun / funktion kutsu. | -- |
chat |
LLM-inferenssikutsu. |
Käytä kirjaimellista chat, EI inference. |
output_messages |
Viimeinen tuotettu tulosviesti. | -- |
Span-hierarkia ja suoritusryhmittely
Agent 365 rekonstruoi suorituksen tavallisesta OTLP-span-graafista (traceId, spanId, parentSpanId) sekä Attribuuttiviitteen suorituslaajuisista attribuuteista.
Kuusi sääntöä:
-
Aseta aina
parentSpanIdjokaiseen ei-juurispaniin. Ilman sitä suorituksen puurakennetta ei voi rekonstruoida. -
Käytä samaa
traceIdkaikissa suorituksen spaneissa. -
Aseta
gen_ai.conversation.idjokaiselle spanille sama arvo. Tämä on ensisijainen yhdistämisavain "kaikille tämän suorituksen spaneille". Se ei välity automaattisesti. -
Aseta
microsoft.channel.namejokaiselle spanille sama arvo. Työkaluspanit, joilta puuttuu kanava / keskustelu, voivat periä ne pääelementiltäinvoke_agentvain jos pääelementti on samassa OTLP-pyynnössä, joten määritä ne itse jokaiseen spaniin. -
Aseta
microsoft.session.idjokaiselle spanille kun käytössäsi on looginen istunto. - Agentista agenttiin tehtävissä kutsuissa, joissa aliagentti on eri pyynnössä, käytä samaa
gen_ai.conversation.idja käytämicrosoft.a365.caller.agent.*attribuutteja (katso Attribuuttiviite) tallentaaksesi kutsuja-agentin kontekstin.
Neljän spanin puu agentin suoritusesimerkissä on kanoninen muoto.
Yleiset suorituksen muodot
| Muoto | Lähetettävät spanit | Huomautuksia |
|---|---|---|
| Yhden agentin keskustelubotti (ei työkaluja, ei LLM-spania) | Vain yksi invoke_agent |
Aseta ajon laajuiset attribuutit sekä gen_ai.input.messages että gen_ai.output.messages. Sama kuin pienin mahdollinen pyyntö. |
| Työkaluilla varustettu agentti (yleisin) |
invoke_agent juuri + chat, execute_tool, output_messages alielementit |
Kaikki alielementit jakavat juuren traceId ja asettavat parentSpanId = root.spanId. Kaikilla on samat koko suorituksen ominaisuudet. Katso Agentin suoritusesimerkki täydellisestä esimerkistä. |
| Agenttien välinen | Jokainen agentti lähettää oman invoke_agent |
Käytä samaa gen_ai.conversation.id molempien agenttien välillä. Aseta kohteen invoke_agent, gen_ai.execution.type = "Agent2Agent"- ja microsoft.a365.caller.agent.*-attribuutit (kutsuvan agentin appId, nimi, Blueprint appId, käyttäjätunnus ja sähköposti). Jos kutsuvalla agentilla ei ole Entra-rekisteröintiä, käytä microsoft.a365.caller.agent.platform.id ja gen_ai.caller.agent.type sen sijaan. |
Käyttöönoton tarkistuslista
Käy läpi tämä käyttöönoton tarkistuslista ennen tuotannon aloittamista.
| Luokka | Sekki |
|---|---|
| Todennus | Entra-sovelluksesi (tai blueprinttisi) on rekisteröity ja voit luoda sille tunnuksia. |
| Todennus | Sovelluksellesi on myönnetty Agent365.Observability.OtelWrite (sovellusrooli (S2S), vaikutusalue (delegoitu)). |
| Todennus | Jokaisella agentilla on oma Entra appId , kuten {agentId} URL-osoitteessa. Blueprint-johdetuille identiteeteille tämä appId on agentin identiteetti-appId, ei blueprint-appId. Jos agentilla ei ole Entra-rekisteröintiä, katso Arvojen valinta. |
| Todennus | Vuokraajan järjestelmänvalvoja on antanut suostumuksen kohteelle Agent365.Observability.OtelWrite. Ilman suostumusta tunnukset myönnetään ilman roolia/vaikutusaluetta ja pyynnöt hylätään 403. |
| Käyttöoikeudet | Vähintään yhdellä käyttäjällä asiakasvuokraajassa on määritetty Microsoft 365 E7- tai Microsoft Agent 365 -lisenssi (määritys, ei pelkkä SKU:n läsnäolo vuokraajassa). Ilman osoitettua lisenssiä käsittely hylätään hiljaisesti. Katso Edellytykset. |
| Spanit | Jokainen väli asettaa koko suorituksenlaajuiset perusasiat (Span-hierarkia ja suoritusryhmittely). |
| Spanit |
invoke_agent spanit asettavat gen_ai.input.messages ja gen_ai.output.messages. |
| Spanit |
execute_tool-spanit asettavat gen_ai.tool.name, gen_ai.tool.type, gen_ai.tool.call.id, gen_ai.tool.call.arguments ja gen_ai.tool.call.result. |
| Spanit |
chat spanit asettavat gen_ai.request.model ja gen_ai.provider.name (ja ihanteellisesti gen_ai.usage.input_tokens / gen_ai.usage.output_tokens - merkkijonokoodattu). |
| Spanit | Kaikki ei-juurispanit asettavat parentSpanId; kaikki suoritukset spanit jakavat saman traceId. |
| Tiedot | Pyynnön runko on ≤ 1 MB. |
| Tarkistus | Jäsennät partialSuccess jokaisesta vastauksesta ja kirjaat hylkäykset lokiin. |
| Tarkistus | Suoritit varmennustyönkulun käsittelyn vahvistamisessa ensimmäisiin suorituskertoihisi. |
Seuraavat vaiheet
- Attribuuttiviite – Attribuuttikohtainen spesifikaatio ja arvonvalintaohjeistus.
- Vianmääritys – Vastaanoton tarkistaminen, yleiset sudenkuopat ja virhevasteet.