@ anvia/ 核心
构建提供者-独立 AI 代理和工作流程,并配有被键入的工具,流出,结构化输出, 和应用程序的内存。 核心运行模型/工具循环,而您的应用程序选择提供者, 证书、存储和交货.
安装
pnpm add @anvia/core @anvia/openai zod
这个例子使用OpenAI. 其他提供者适配器则与同为Core API.
快速启动
设定 OPENAI_API_KEY 在服务器环境中,然后创建带有输入工具的代理 :
import { Agent, createTool } from "@anvia/core";
import { OpenAIClient } from "@anvia/openai";
import { z } from "zod";
const apiKey = process.env.OPENAI_API_KEY;
if (!apiKey) throw new Error("Set OPENAI_API_KEY.");
const client = new OpenAIClient({ apiKey });
const lookupOrder = createTool({
name: "lookup_order",
description: "Look up an order by ID.",
inputSchema: z.object({ orderId: z.string() }),
execute: async ({ orderId }) => ({ orderId, status: "processing" }),
});
const agent = new Agent({
id: "support",
model: client.completionModel({ modelId: "gpt-5", api: "responses" }),
instructions: "Help customers with order questions.",
tools: [lookupOrder],
maxTurns: 4,
});
const result = await agent.generate({ prompt: "What is happening with order A123?" });
if (result.type === "response") console.log(result.output);
将样本工具机构替换为应用程序的数据访问。 代理结果区分a 反应,一个护栏块,以及需要应用程序输入的相互作用.
问用户一个问题
添加 createQuestionTool() 给经纪人的 tools 允许它索取缺失的信息:
import {
createQuestionTool,
DEFAULT_QUESTION_TOOL_NAME,
DEFAULT_QUESTION_TOOL_DESCRIPTION,
} from "@anvia/core/tool";
const askUser = createQuestionTool(); // name: "ask_user", with built-in model instructions
const clarify = createQuestionTool({ name: "clarify" }); // either option can be overridden
默认也导出自 @anvia/core。描述指导模型只要求
当它无法进行时, 批出问题, 并使用合理的默认 常规选择.
提供自定义名称和说明。 省略一个选项时适用默认;
保留清晰的字符串,包括空白,以便与现有的呼叫者兼容.
新工具调用接受1–4个问题,并配有独特的,无空白的ID和无空白的文本. 任择选择
必须包含2–4个有非空白标签和唯一非空白值的条目。 数值被修剪
在验证之前。 设定 allowCustom: true 在选择之外允许答案,或者省略选择
为免费文本。 一个没有选择的问题不能设置 allowCustom: false。 。 。 .
蛇案的ID,问号, 和相互排斥的选择是示范指导,
而不是额外的计划限制.
运行返回 a type: "interaction" 成果 tool-question 请求和续作.
收集每个问题的非空白答复,然后继续
{ type: "tool-question", answers: [{ questionId, value }] }。该模型收到
{ answers: [...] } 作为工具的结果。 直接调用提问工具不会触发UI;
您的应用程序使交互和提供答案.
存储的交互请求和续作保留其现有的解析规则; 新数组 限制仅适用于新工具输入。 见 互动指南 恢复协议.
你能建造的东西
- 具有打字工具、批准、问题、护栏和流出答复的代理人.
- 代理团队 单独交谈 授权 协调取消.
- 直接完成和有计划验证的提取,没有代理环.
- 类型决定 用于分类、标记、打分和路由.
- 具有内置或定制度量衡的连续或平行管道和评价.
- 使用内存适配器和明确的收缩政策进行状态性对话,包括活性工具循环.
- RAG 带有文件块、嵌入和向量存储合同.
- 图像生成,语音,转录,MCP工具,以及本地代理技能.
使用 @anvia/client, (中文(简体) ), @anvia/server,以及 @anvia/react 为应用程序 UI 提供代理输出.
为您选择的基础设施使用提供者、内存、矢量存储和可观察性适配器.
InMemoryVectorStore.inspect() 在
安全整数范围; 省略光标从零开始。 丢出无效光标
VectorInspectCursorError页:1 RangeError编辑 @anvia/core/vector-store 子路径也导出
parseVectorInspectCursor() 财务报告和审定财务报表 VectorInspectCursorError.isCursorError() 用于审定和
处理错误 。 见 检查指南。 。 。 .
流出补全保存仅由最终提供者提供的空或加密推理 反应,包括Azure反应流。 最终加密的细节也可以丰富匹配 在之后的回合中重放的串流推理。 文本、推理和工具调用仍有冲突 失败提供者输出验证 .
对于可收回的执行,请在实验中登记一个支持的代理
@anvia/durable 运行时间。 内部执行协议 4 增加了同步方向检查点边界
持续排队的用户输入并持续重放 。 将核心升级,使之持久.
持久工具可选稳定
ToolCallContext.operationId 外在的专有能力。 直接执行不能提供.
持久的登记可选择与 stream: true; 核心执行
程序版4的检查站与工具结果一起验证了流程完成情况.
学多点
流动消费
一个 AgentStream 有一个消费者。 阅读 stream.result 或者说 stream.text 附表
如果事件迭代尚未开始, 则自动排入下一个微任务 。 当你
需要事件和最后结果,先排列然后读 result 循环后 :
const stream = agent.stream({ prompt: "Hello" });
for await (const event of stream) {
if (event.type === "text_delta") process.stdout.write(event.delta);
}
const outcome = await stream.result;
HTTP 适配器的消费从稍后开始,无需读取即可通过溪流 其最后承诺; 记录最终结果事件并同时转发事件.