跳转到内容

LLM 提示词脚本

llm 使用 Viat 1.1.0 已有的多提供商抽象:openai、anthropic、azure、custom,不是最新提供商 SDK 教程。必须恰好声明一个 llm 资源,配置实际可用的模型/部署、端点和凭证,不暗示存在通用模型 ID 或免费请求。没有明确同意不得真实调用或产生账单。

已有 assistant 指向隔离固定服务或明确获准使用的模型时,保存 scripts/summary.llm:

# @resource assistant
# timeout: 30
Summarise the following text in one sentence for {{ audience }}:
{{ text }}
终端窗口
viat script create --name summary --language llm --file scripts/summary.llm
viat script run summary --args '{"audience":"engineers","text":"The fixture is ready."}'
viat script update summary --file scripts/summary.llm

预期的是形状,不是固定文案:{"content":"...","model":"configured model","usage":null,"tool_calls":[]},usage 也可能为提供商 token 对象。固定服务可返回 content: "Fixture summary.";真实模型措辞不是测试判据。运行时序列化共享 chat 结果,包含 tool_calls(模板不提供工具,因此通常为空);当前提取输出 Schema 只列 content/model/usage。本文没有执行模型调用。

非注释正文整体作为一条 user 提示词。所有左侧去空白后以 # 开头的行都会移除,不止已识别指令,因此 Markdown # 标题也会消失。剩余正文 trim 后必须非空。

只替换 {{ name }},名称匹配 [A-Za-z_][A-Za-z0-9_]*,花括号内可有空白。缺失或 null 变量在调用提供商前失败,不会渲染为空。字符串直接插入;直接执行时其他 JSON 值插入紧凑 JSON,但端点提取输入将变量声明为必填 string。重复占位符在 Schema 中去重。不支持点路径、循环、条件、filter、include 或 system prompt 声明。未识别花括号不是新功能,不要假设会执行。

脚本用默认 chat 选项发送一条 user 消息,模型等默认来自资源;自定义参数放在资源或 helper 调用中。Azure 使用配置的部署名称。没有 requirements、main、ctx、原生工具调用或模板流式功能。

Python/TypeScript 可调用 ctx.resources.assistant.chat(messages, ...),支持 system/user/assistant/tool 消息、max_tokens、temperature、尽力 JSON 模式、tools、tool_choice 和提供商 extra。结果为 {content,model,usage,tool_calls}。工具形状 {name,description?,parameters},调用形状 {id,name,arguments};平台转换提供商格式,但不执行函数。必须限制循环次数、验证参数(错误参数可保留为原始字符串)、逐次授权,并把 assistant calls 和对应 tool results 加回对话。只请求工具的轮次 content 可为空,不算失败。

Python chat_stream / TypeScript chatStream 产生文本片段,带工具的流式请求会被拒绝。适当时与脚本 ViatStream 配合;.llm 模板始终缓冲返回。运行时说明流与取消限制。

空提示词、错误/多个资源、缺失变量会在本地失败。网络传输、提供商 HTTP/API 拒绝、响应格式错误和超时不同;工作流重试分类不代表所有 429/500 响应体都自动重试。来自用户的提示词是不可信数据,不能把模型输出作为授权或直接执行的代码。

先用固定服务断言渲染后的 user 消息和结果形状,再明确同意付费验证。不要记录资源密钥或敏感提示词。公共端点仍需认证、限流/预算控制和显式发布。只删除一次性脚本/端点;删除 Viat 脚本不会撤销已有模型账单。LLM 资源定义提供商字段,测试区分离线与真实执行。