跳转至

LLM 包

github.com/ktsoator/or/llm 是面向 Go 应用的无状态 LLM 调用层。它让应用以一致的方式组织请求和读取响应,包括消息、模型选择、工具调用、推理内容与流式输出;再通过协议适配器连接不同的模型服务。

阅读路径

当前目标 从这里开始
第一次调用模型 快速开始
查找功能对应的接口 功能总览
完成一个具体应用场景 场景手册
理解模块协作和生命周期 开发者指南
确认协议或模型能否运行 协议与提供方状态
按名称查询公开接口 API 索引
查看仓库中的可运行程序 示例索引

定位

每次请求由 ModelContextStreamOptions 组成。llm 根据 Model.Protocol 选择协议适配器,把统一消息转换成模型服务请求,再把响应流转换为 Event 和最终的 AssistantMessage

flowchart LR
    app["应用<br/><small>Model · Context · StreamOptions</small>"]
    entry["Complete / Stream"]
    adapter["ProtocolAdapter<br/><small>转换历史与线格式</small>"]
    provider["兼容的模型服务"]
    result["Event / AssistantMessage"]

    app --> entry --> adapter --> provider
    provider --> adapter --> result --> app

请求入口只有两个:

  • Complete 消费完整流并返回最终 AssistantMessage
  • Stream 返回类型化事件通道,用于增量处理文本、推理和工具调用。

第一个完整可运行程序、凭证配置和运行命令见快速开始。不要只根据内置模型清单判断能否调用;运行时选择模型时使用 GetRunnableModels,或同时检查 LookupModelSupportsProtocol

职责边界

llm 负责单次请求的协议转换、流式事件统一、工具参数解析和消息转换。它还会统一模型服务返回的 Token 用量,并根据内置模型清单中的价格估算成本。它不负责:

  • 保存会话或自动管理历史;
  • 压缩、摘要或裁剪上下文;
  • 执行工具或控制工具权限;
  • 自动运行多轮工具循环;
  • 智能体规划、任务调度、检索增强生成或向量检索;
  • 提供方故障转移、负载均衡或多模型竞速。

这些职责由调用方或更上层模块实现。当前协议和提供方状态只在协议与提供方状态维护。

参考文档

源码层面的实现说明位于源码解析。完整导出符号也可在 pkg.go.dev 查询。