Tool-definitioner
Definitionerne bruger JSON Schema, som de fleste modeller og agent-frameworks forstår. Nogle kalder feltet parameters i stedet for input_schema. Indholdet er det samme.
[
{
"name": "cvr_lookup",
"description": "Look up a Danish company by its 8-digit CVR number. Returns name, address, industry, status, owners and management.",
"input_schema": {
"type": "object",
"properties": {
"cvr": {"type": "string", "description": "8-digit CVR number, e.g. 24256790"}
},
"required": ["cvr"]
}
},
{
"name": "cvr_search",
"description": "Find Danish companies by name. Tolerates typos. Returns name, cvr_number and industry for each hit.",
"input_schema": {
"type": "object",
"properties": {
"name": {"type": "string", "description": "Company name or part of it"}
},
"required": ["name"]
}
}
]Handler i Python
Når modellen kalder et værktøj, kører du funktionen og sender resultatet tilbage som tekst. P-enhederne fjernes, fordi store virksomheder kan have hundredvis, og de fylder meget i modellens kontekst.
import json
import urllib.error
import urllib.parse
import urllib.request
BASE = "https://apicvr.dk/api/v1"
def _get(url):
try:
with urllib.request.urlopen(url, timeout=15) as res:
return json.load(res)
except urllib.error.HTTPError as err:
return {"error": err.code}
def run_tool(name, args):
if name == "cvr_lookup":
company = _get(f"{BASE}/{args['cvr']}")
company.pop("p_units", None) # keep the context small
return json.dumps(company, ensure_ascii=False)
if name == "cvr_search":
hits = _get(f"{BASE}/search/fuzzy/" + urllib.parse.quote(args["name"]) + "?limit=5")
return json.dumps(hits, ensure_ascii=False)
return json.dumps({"error": "unknown tool"})Systemprompt
Du har adgang til CVR-API (https://apicvr.dk), et gratis JSON API til
det danske CVR-register uden API-nøgle. Brug cvr_search til at finde
CVR-nummeret ud fra et navn, og cvr_lookup til at hente detaljer.
Hvis feltet "protected" er true, må virksomheden ikke kontaktes med
markedsføring.llms.txt
Bruger du en agent, der selv læser dokumentation, så peg den på https://apicvr.dk/llms.txt. Filen beskriver alle endpoints kort i Markdown. llms-full.txt indeholder også alle svarfelter og fejlkoder.
Gode råd
- Lad modellen søge først og slå op bagefter. Navne er tvetydige, CVR-numre er ikke.
- Brug
/api/v1/{cvr}/direktion-og-ansvarlig, hvis agenten kun skal kende ejere og ledelse. Svaret er meget mindre. - Cache svarene i din agent. CVR-data ændrer sig sjældent fra minut til minut.
- Ejere og direktører er personoplysninger. Brug dem kun til formål, du har lovligt grundlag for.
Ofte stillede spørgsmål
Virker det med alle sprogmodeller?
Ja, med alle modeller og frameworks, der understøtter tool calling eller function calling. Selve API'et er bare HTTP og JSON.
Skal agenten have en API-nøgle?
Nej. CVR-API kræver ingen nøgle, så der er intet at gemme eller rotere.
Kan agenten få regnskabstal?
Nej, regnskaber er ikke en del af CVR-API. Agenten får stamdata, ejere, direktion og P-enheder.