@backtest-kit/ollama

中文文档
23.7.0发布于 2026/10/29MITTypeScriptESM + CJS近 30 天下载 3172

多供应商LLM推论库,用于AI动力交易策略. 支持10+供应商,包括OpenAI,克洛德,DeepSeek,Grok,Mistral 具有统一的API和自动符号旋转.

中文使用文档
文档目录9 节
  1. 为什么
  2. 提供商 HOF
  3. 结构化产出
  4. 提示
  5. 调试——放弃对话
  6. 战略优化器——生成可运行的战略代码
  7. API 参考
  8. * 贡献
  9. 许可证

@backtest-kit/ollama (英语)

通用 LLM 适配器 反测试- kit 贸易战略。 一个更高级的API 12个供应商,图案强制结构输出,用户空间提示模块,符号旋转——加一 LLM 策略优化器 生成可运行策略代码.

screenshot

Ask DeepWiki npm TypeScript

📚 文档 • 妇女 参考执行情况 • 妇女 GitHub 图像

npm install @backtest-kit/ollama backtest-kit agent-swarm-kit

为什么

AI策略通常指每个供应商SDK锅炉板和JSON,你无法信任. 此软件包将全部崩溃: 用一个提供商 HOF 来包裹任何 async 函数, 并运行在该提供商的推断上下文内—— 互换 deepseek() → claude() → gpt5() 没有其他改动。 结构输出是强制的(Zod或JSON通过 agent-swarm-kit是因为 addOutline),提示作为纪念的用户空间模块进行直播

  • 🔌 12个供应商 ——OpenAI,克洛德,DeepSeek,Grok,Groq,米斯特拉尔,迷惑,Cohere,Alibaba,Hugging Face,Ollama(当地),GLM-4(Z.ai).
  • ⚡ 上级职能 以推论上下文来包裹 aync fn 通过 di-scoped; 相同的签名输入, 相同的退出 .
  • 🎯 用户空间计划 ——定义你自己的Zod或JSON schema;结构化输出用自动重试+自定义验证执行.
  • 📝 用户空间提示 - 从负载 .cjs 模块 config/prompt/,或内入;通过 functools-kit。 。 。 .
  • 🔄 按键旋转 ——通过自动旋转的API密钥数组.
  • 🧬 战略优化器 —— 说 Optimizer 生成 完整的可执行策略代码 从整个培训范围的LLM分析.

提供商 HOF

整个适配器是一个形状,为12个提供者重复: provider(fn, model, apiKey?) => fn中返回函数 同名签名 作为 fn,在提供者的推论上下文中执行(因此 agent-swarm-kit 在内部完成 解决提供方.

import { deepseek } from '@backtest-kit/ollama';
import { addStrategy } from 'backtest-kit';

addStrategy({
  strategyName: 'llm-signal', interval: '5m',
  // swap deepseek() → claude() / gpt5() / ollama() / groq() with no other change
  getSignal: deepseek(getSignal, 'deepseek-chat', process.env.DEEPSEEK_API_KEY),
});
所有12个提供者, 基站 URL 旋转( S)
提供者函数推论基础 URL
开放AIgpt5()gpt5_inferencehttps://api.openai.com/v1/
克劳德claude()claude_inferencehttps://api.anthropic.com/v1/
深层搜索deepseek()deepseek_inferencehttps://api.deepseek.com/
格罗克(xAI)grok()grok_inferencehttps://api.x.ai/v1/
格罗克groq()groq_inferencehttps://api.groq.com/
迷雾mistral()mistral_inferencehttps://api.mistral.ai/v1/
复杂perplexity()perplexity_inferencehttps://api.perplexity.ai/
代码cohere()cohere_inferencehttps://api.cohere.ai/compatibility/v1/
阿里巴巴(昆文)alibaba()alibaba_inferencehttps://dashscope-intl.aliyuncs.com/compatible-mode/v1/
拥抱相貌hf()hf_inferencehttps://router.huggingface.co/v1/
Ollama(当地)ollama()ollama_inferencehttp://localhost:11434/
GLM-4(扎伊岛)glm4()glm4_inferencehttps://open.bigmodel.cn/api/paas/v4/
// apiKey accepts a single key OR an array → automatic rotation across calls
const wrappedFn = ollama(myFn, 'llama3.3:70b', ['key1', 'key2', 'key3']);

所有12个都有一个签名—— <T>(fn: T, model: string, apiKey?: string | string[]) => T 运行 fn 内部 ContextService.runInContext({ apiKey, inference, model })匹配 InferenceName enum + 每个提供者 client/*Provider.client.ts + 键 config/*.ts 解决实际的 SDK 呼叫.


结构化产出

定义一个 schema( Zod 或 生 JSON),将其注册为针对此软件包的大纲 CompletionName,而LLM则被迫返回有效的JSON——带有拒绝不良信号的自定义验证(例如"LSL必须是LONG的下入").

Zod 大纲
// schema/Signal.schema.ts
import { z } from 'zod';
export const SignalSchema = z.object({
  position: z.enum(['long', 'short', 'wait']).describe('long: bullish · short: bearish · wait: unclear'),
  price_open: z.number().describe('Entry price in USD'),
  price_stop_loss: z.number().describe('LONG: below entry · SHORT: above entry'),
  price_take_profit: z.number().describe('LONG: above entry · SHORT: below entry'),
  minute_estimated_time: z.number().describe('Estimated minutes to reach TP'),
  risk_note: z.string().describe('Whale manipulation, order-book imbalance, divergences — with numbers'),
});
export type TSignalSchema = z.infer<typeof SignalSchema>;
// outline/signal.outline.ts
import { addOutline } from 'agent-swarm-kit';
import { zodResponseFormat } from 'openai/helpers/zod';
import { SignalSchema, TSignalSchema } from '../schema/Signal.schema';
import { CompletionName } from '@backtest-kit/ollama';

addOutline<TSignalSchema>({
  outlineName: 'SignalOutline',
  completion: CompletionName.RunnerOutlineCompletion,
  format: zodResponseFormat(SignalSchema, 'position_decision'),
  getOutlineHistory: async ({ history, param: messages = [] }) => { await history.push(messages); },
  validations: [{
    validate: ({ data }) => {
      if (data.position === 'long'  && data.price_stop_loss >= data.price_open) throw new Error('LONG: SL must be below entry');
      if (data.position === 'short' && data.price_stop_loss <= data.price_open) throw new Error('SHORT: SL must be above entry');
    },
  }],
});
Raw JSON- schema 大纲( 无 Zod)
import { addOutline, IOutlineFormat } from 'agent-swarm-kit';
import { CompletionName } from '@backtest-kit/ollama';

const format: IOutlineFormat = {
  type: 'object',
  properties: {
    take_profit_price: { type: 'number', description: 'Take profit price in USD' },
    stop_loss_price:   { type: 'number', description: 'Stop-loss price in USD' },
    description:       { type: 'string', description: 'User-friendly risk explanation, min 10 sentences' },
    reasoning:         { type: 'string', description: 'Technical analysis, min 15 sentences' },
  },
  required: ['take_profit_price', 'stop_loss_price', 'description', 'reasoning'],
};

addOutline({
  outlineName: 'SignalOutline', format, completion: CompletionName.RunnerOutlineCompletion,
  prompt: 'Generate crypto trading signals from price & volume indicators in JSON.',
  getOutlineHistory: async ({ history, param }) => {
    const report = await ioc.signalReportService.getSignalReport(param);
    await commitReports(history, report);
    await history.push({ role: 'user', content: 'Generate JSON based on reports.' });
  },
  validations: [
    { docDescription: 'Stop-loss vs max loss %',  validate: ({ data }) => { if (data.action === 'buy' && percentDiff(data.current_price, data.stop_loss_price)   > CC_LADDER_STOP_LOSS)   throw new Error(`SL must not exceed -${CC_LADDER_STOP_LOSS}%`); } },
    { docDescription: 'Take-profit vs max profit %', validate: ({ data }) => { if (data.action === 'buy' && percentDiff(data.current_price, data.take_profit_price) > CC_LADDER_TAKE_PROFIT) throw new Error(`TP must not exceed +${CC_LADDER_TAKE_PROFIT}%`); } },
  ],
});

提示

快速模块自动接收交易上下文 . system 可能是字符串数组或函数 (symbol, strategyName, exchangeName, frameName, backtest)· ; user 同样的.

模块文件, 内置快捷键和承诺Prompt
// config/prompt/signal.prompt.cjs
module.exports = {
  system: (symbol, strategyName, exchangeName, frameName, backtest) => [
    `You are analyzing ${symbol} on ${exchangeName}`,
    `Strategy: ${strategyName}, Timeframe: ${frameName}`,
    backtest ? 'Backtest mode' : 'Live mode',
  ],
  user: (symbol) => `Analyze ${symbol} and return a trading decision`,
};
import { Module, Prompt, commitPrompt, MessageModel } from '@backtest-kit/ollama';

// from a .cjs module (default baseDir: {cwd}/config/prompt/), memoized
const signalModule = Module.fromPath('./signal.prompt.cjs');
// or inline
const inline = Prompt.fromPrompt({ system: ['You are a trading bot'], user: (symbol) => `Trend for ${symbol}?` });

const messages: MessageModel[] = [];
await commitPrompt(signalModule, messages);   // pushes rendered system + user messages with context

完整策略: 注册大纲, 从一个快速, 请求结构化的 JSON , 用一个提供者 HOF 包:

import './outline/signal.outline';
import { deepseek, Module, commitPrompt, MessageModel } from '@backtest-kit/ollama';
import { addStrategy } from 'backtest-kit';
import { json } from 'agent-swarm-kit';

const signalModule = Module.fromPath('./signal.prompt.cjs');
const getSignal = async () => {
  const messages: MessageModel[] = [];
  await commitPrompt(signalModule, messages);
  const { data } = await json('SignalOutline', messages);
  return data;
};
addStrategy({ strategyName: 'llm-signal', interval: '5m',
  getSignal: deepseek(getSignal, 'deepseek-chat', process.env.DEEPSEEK_API_KEY) });

调试——放弃对话

dumpSignalData(signalId, history, signal, outputDir?) 将LLM对话全文存档于信号上,因此不透明的模型决定成为可读记录. 如果目录已经存在( 从未覆盖过先前的运行) 跳过 .

它写的是什么

进 {outputDir}/{signalId}/ (默认) ./dump/strategy: 00_system_prompt.md (系统信息+产出摘要),编号 XX_user_message.md 编号 : XX_assistant_message.md 每转一圈,最后 XX_llm_output.md 信号DTO。 打电话来 getSignal 在返回信号之前.


战略优化器——生成可运行的战略代码

最有威力的作品, 和其余的软件包提供: Optimizer 使用LLM分析跨训练范围的符号,并发出 完整、可执行的战略文件 ——进口,帮助者,策略,行走者,发射者——可以直接用回试-kit来运行.

优化 API + 添加 optimizerSchema + 进度事件
import { Optimizer, addOptimizerSchema, listenOptimizerProgress } from '@backtest-kit/ollama';

// describe sources, training ranges, strategy/template generation (see IOptimizer* interfaces)
addOptimizerSchema({ optimizerName: 'my-optimizer', /* sources, ranges, strategy, template */ });

listenOptimizerProgress((p) => console.log(p)); // ProgressOptimizerContract

const strategies = await Optimizer.getData('BTCUSDT', { optimizerName: 'my-optimizer' }); // metadata + LLM context per range
const code       = await Optimizer.getCode('BTCUSDT', { optimizerName: 'my-optimizer' }); // full TS/JS source as string
await Optimizer.dump('BTCUSDT', { optimizerName: 'my-optimizer' }, './output');           // writes {optimizerName}_{symbol}.mjs

getData 从所有来源获取并构建每个培训范围的LLM对话; getCode 组装可执行战略; dump 写给 {optimizerName}_{symbol}.mjs配套登记功能: getOptimizerSchema, (中文(简体) ), listOptimizerSchema,以及 listenError它背后的发动机是 common/ClientOptimizer.ts 驾驶员: IOptimizer* 接口( e)IOptimizerSchema, (中文(简体) ), IOptimizerSource, (中文(简体) ), IOptimizerStrategy, (中文(简体) ), IOptimizerTemplate, (中文(简体) ), IOptimizerRange, (中文(简体) ), IOptimizerData, (中文(简体) ), IOptimizerFetchArgs, (中文(简体) ), IOptimizerFilterArgs, (中文(简体) ), IOptimizerCallbacks) (中文(简体) ).


API 参考

导出说明
ollama gpt5 claude deepseek grok groq mistral perplexity cohere alibaba hf glm4提供商 (fn, model, apiKey?) => fn
CompletionName补全名称 agent-swarm-kit 大纲(RunnerOutlineCompletion, (...) (中文(简体) )
Module.fromPath(path, baseDir?)装入提示 .cjs 模块(默认基数) {cwd}/config/prompt/(中文(简体) )
Prompt.fromPrompt(source)从内含中构建一个提示 PromptModel
commitPrompt(source, history)将模块/Prompt的系统+用户信息输入 history
dumpSignalData(id, history, signal, dir?)将 LLM 对话存档为一个信号
validate(...)验证大纲结果
Optimizer.getData 编号 : .getCode 编号 : .dump ——LLM战略码生成
addOptimizerSchema • 妇女 getOptimizerSchema • 妇女 listOptimizerSchema优化计程器登记册
listenOptimizerProgress • 妇女 listenError优化进度/ 错误事件
MessageModel MessageRole PromptModel信件提示模式( P)
IOptimizer* • 妇女 ProgressOptimizerContract优化接口和进度合同
lib高级使用的内部发动机(IoC容器)
完整源图
  • function/signal.function.ts ——12家供应商HOF. function/{add,get,list,event,setup,validate,history,dump,signal}.ts 登记、活动、, setLogger, (中文(简体) ), commitPrompt, (中文(简体) ), dumpSignalData。 。 。 .
  • client/*Provider.client.ts (12) – 提供方SDK适配器. config/*.ts ——每个提供者基础URL/段落, ollama.rotate.ts (按键旋转), params.ts, (中文(简体) ), emitters.ts。 。 。 .
  • classes/ —— 说 Module, (中文(简体) ), Prompt, (中文(简体) ), Optimizer。 。 。 . common/ClientOptimizer.ts ——优化引擎.
  • enum/ —— 说 InferenceName (12个), CompletionName。 。 。 . interface/Optimizer.interface.ts, (中文(简体) ), contract/ProgressOptimizer.contract.ts, (中文(简体) ), model/{Message,Prompt}.model.ts。 。 。 .
  • helpers/{toLintMarkdown,toPlainString}.ts, (中文(简体) ), lib/ (IoC: core/{di,provide,types}服务)。 没有 src/ 没有证件.

* 贡献

叉/ PR 打开 GitHub 图像。 。 。 .

许可证

麻省理工学院 特立奥尔斯基平板电脑

版本与发布记录

@backtest-kit/ollama 共发布 183 个版本,首次发布于 2026/01/14;过去 12 个月发布了 183 个版本。

版本发布日期距今
23.7.0latest2026/10/299 天前
23.6.02026/10/299 天前
23.5.02026/10/2612 天前
23.4.02026/10/2613 天前
23.3.02026/10/2514 天前
23.2.02026/10/2414 天前

关于 @backtest-kit/ollama 的常见问题

@backtest-kit/ollama 是什么?

多供应商LLM推论库,用于AI动力交易策略. 支持10+供应商,包括OpenAI,克洛德,DeepSeek,Grok,Mistral 具有统一的API和自动符号旋转.

如何安装 @backtest-kit/ollama?

在项目目录运行 npm install @backtest-kit/ollama,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:ollama(^0.6.0)、openai(^4.97.0)、groq-sdk(^0.37.0)、typescript(^5.0.0)、backtest-kit(^23.7.0)、@langchain/xai(^0.0.2)、@langchain/core(^0.3.57)、@langchain/openai(^0.4.9)、@huggingface/inference(^4.7.1)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@backtest-kit/ollama 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@backtest-kit/ollama 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@backtest-kit/ollama 可以商用吗?

@backtest-kit/ollama 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@backtest-kit/ollama 的下载量有多少?

根据 npm 官方下载统计,@backtest-kit/ollama 在 2026/10/08 – 2026/11/06 这 30 天内被下载 3,172 次,日均约 106 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@backtest-kit/ollama 还在维护吗?

最新版本 23.7.0 发布于 2026/10/29(9 天前);至今共发布 183 个版本,其中过去 12 个月发布了 183 个;首次发布于 2026/01/14。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。