Mirascope
用统一接口调用不同前沿模型,并构建带工具和结构化输出的智能体。
- Star 数
- ★ 1.5k
- 最近更新
- 1 天前
- License
- MIT
- 主语言
- Python
- FA 评分
- 55/100 · 缺口较多
30 秒速览
- 运行形态
- 可在哪里用
- 通用 · 跨平台Claude API
- 费用
- 软件免费,模型调用费用自付
- 上手难度
- 低 · 几分钟可跑通
- 开始前需要
- 典型场景
- Python 应用开发者需要用同一种装饰器接口调用不同模型,而不想让业务函数直接绑定某个供应商 SDK。
- 不适合
- 希望开箱即用聊天界面而非自己写代码的用户
- 需要现成权限隔离与工具沙箱的生产团队
这个 Agent 能做什么,适合哪些场景?
Mirascope 是一个采用 MIT 许可证的 Python 与 TypeScript 单体仓库,定位为连接不同前沿大语言模型的统一编程接口。Python API 通过 @llm.call 把普通函数变成模型调用,并可用 Pydantic 模型约束和解析结构化结果。开发者可用 @llm.tool 注册函数工具,再通过 response.tool_calls、execute_tools() 和 resume() 驱动工具调用循环。项目还说明支持流式处理、异步执行和多轮对话,但相关用法未在所给快速入门中展开。它是供应用程序嵌入的开发库,而非独立托管的聊天产品;仓库同时包含 Python、TypeScript、网站和跨语言文档。
应用先定义一个由 @llm.call("provider/model") 装饰的 Python 函数,函数返回的字符串成为模型请求内容;调用该函数后,Mirascope 向所选模型服务发起请求并返回响应对象。设置 format=Book 等 Pydantic 类型后,可调用 .parse() 得到经过类型化的结构化对象。通过 @llm.tool 声明工具并将其传入 tools=[...] 后,代码检查 response.tool_calls,以 response.execute_tools() 执行本地工具,再用 response.resume(...) 将结果交还模型,循环至没有待处理工具。仓库还提供 Python 与 TypeScript 实现及示例;文档网站可用 bun run website:dev 启动,根目录的 bun run ci 会运行拼写检查、Python/TypeScript lint 与类型检查以及文档构建。
- Python 应用开发者需要用同一种装饰器接口调用不同模型,而不想让业务函数直接绑定某个供应商 SDK。
- 后端团队需要让模型返回符合 Pydantic 模型的对象,例如书籍、工单或领域实体,而不是自行解析自由文本。
- 智能体开发者需要把现有 Python 函数暴露为模型工具,并在应用代码中明确控制工具执行与恢复循环。
- 需要流式、异步或多轮模型交互的团队,可将 Mirascope 作为应用内库进一步评估其完整文档。
- 同时维护 Python 与 TypeScript 服务的工程团队,可评估该仓库提供的两种语言实现和统一跨语言文档。
如何安装或部署这个 Agent?
在 Python 项目中运行:
uv add "mirascope[all]"该命令需要 Python 和 uv。模型调用还需要对应供应商的 API 凭证和网络连接,但所给材料没有说明凭证名称、环境变量或支持的 Python 版本,因此需按所选模型供应商补充配置。只有开发文档网站时才明确需要 Bun。
如何使用这个 Agent?
最小调用示例:
from mirascope import llm@llm.call("anthropic/claude-sonnet-4-5")
def recommend_book(genre: str):
return f"Recommend a {genre} book."response = recommend_book("fantasy")
print(response.text())如需结构化结果,定义 Pydantic BaseModel,将其传给 format,然后调用 .parse()。如需工具,使用 @llm.tool 装饰函数,通过 tools=[get_available_books] 注册,并在 while response.tool_calls: 循环中执行 response.resume(response.execute_tools())。所选 Anthropic 模型的具体凭证配置没有在材料中给出。
这个 Agent 有哪些优点和局限?
- 以
@llm.call提供统一模型调用入口,仓库明确宣称可用于任意前沿大语言模型。 - 结构化输出直接结合 Pydantic 模型,并提供
.parse()获取类型化结果。 - 工具执行循环由应用代码显式控制,可检查
tool_calls、执行工具并恢复模型响应。 - 同时包含 Python 和 TypeScript 实现,以及统一的跨语言文档。
- 除基础调用外,项目明确列出流式、异步和多轮对话支持。
- 快速入门只展示了 Anthropic 模型标识,未列出其他供应商、模型适配器或各自的配置方式。
- 材料没有给出 API 凭证的环境变量名称、错误处理、重试、超时或速率限制策略。
- 示例中的工具由应用进程本地执行,采用者仍需自行处理工具权限、隔离和副作用。
- Python 安装命令使用
[all]可选依赖集合,但材料没有说明其包含内容或最小安装方式。 - TypeScript 实现存在,但所给材料没有提供对应的安装命令或首个可运行示例。
这个 Agent 与同类方案有什么区别?
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| Mirascope 当前 | 55 · 缺口较多 | 代码库 / SDK免费 + 模型费 | ★ 1.5k | 1 天前 | Python | Claude API |
| TanStack AI | 76 · 存在缺口 | 代码库 / SDK免费 + 模型费 | ★ 3.2k | 4 天前 | TypeScript | OpenAI API · Claude API |
| Strands Agents | 30 · 缺口较多 | 代码库 / SDK免费 + 模型费 | ★ 8.9k | 2 天前 | Python | OpenAI API · Claude API |
| Composio | 51 · 缺口较多 | 代码库 / SDK免费 + 模型费 | ★ 31k | 2 天前 | TypeScript | Claude Code · OpenAI API · Claude API |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
CI 工作流将默认权限限制为 contents: read,发布任务仅单独授予 id-token: write;测试录像还会过滤授权头、API 密钥、Cookie 和组织标识,因此依赖权限与敏感信息处理有明确证据。扣分在于产品层没有展示工具权限隔离、调用前用户确认、数据保留或供应商传输说明;execute_tools 可执行用户注册工具,但没有副作用分级、恢复或回滚机制。仓库、站点、版权主体和许可证归属清楚,但没有可核实的个人维护者身份,且给定出版者身份仍属未知。
README、包脚本、CI 和测试配置共同呈现了统一调用、结构化输出及工具循环,并覆盖 Python 3.10–3.13、TypeScript 和多个运行时。锁文件检查、冻结安装和录像回放提高依赖可用性,但实际模型服务仍依赖外部供应商和凭据。可见 ToolExecutionError、ToolNotFoundError 等错误类型,不过没有提供面向用户的错误消息实现或恢复指导;README 所称四个 CI 作业也与工作流中的更多作业不完全一致。
示例覆盖普通调用、Pydantic 结构化结果、工具型代理、异步及流式能力入口,并显示 Python、TypeScript、Node、Bun、Deno 与 macOS 特例,适配面较广。装饰器、显式 tools 列表和 tool_calls 循环使触发路径较清楚。扣分在于“任何前沿 LLM”的边界没有由所给文件充分限定,供应商差异、支持矩阵、网络要求及不适用场景也未系统说明。
README 清晰划分 python、typescript、website 和 docs,并指向结构文档;快速安装、开发命令、CI 命令、语义化版本和 MIT 全文都很明确。示例质量良好,但没有所给范围内的 FAQ。已知限制仅零散提到 Bun 和 Apple Silicon;有版本号、语义化版本声明和发布流程,却没有变更日志。Mirascope, Inc.、仓库工作流和发布路径表明组织层维护责任,但没有明确联系人、支持渠道或安全报告路径。
统一模型调用、类型化结构输出、工具注册和响应恢复循环能产生可直接消费的对象与文本,具有明显的集成价值。扣分在于更高级能力主要通过外部文档声明,所给材料没有展示复杂代理编排、治理优势或与替代方案的比较;也没有令牌、延迟、供应商费用或运维成本说明,因此成本收益只能得到有限支持。
安装、示例、版本、许可和 CI 主张大多能在 package.json、工作流与测试配置之间相互核对,尤其跨来源佐证很强。扣分在于“任何前沿 LLM”等宽泛主张没有完整支持矩阵,流式、异步和多轮能力仅被指向外部文档;README 的 CI 作业数量与实际工作流不一致,使部分事实陈述和概括没有完全分离。
- 源码中未见:执行前用户确认开启或自行加上执行前确认;先在沙箱或测试环境跑通,确认行为后再接入真实数据。
- 源码中未见:回滚或恢复路径运行前先备份,或在 git 分支、快照上操作,确保改动可以撤销。
- 工具函数由应用代码定义并通过 execute_tools 执行;在接入具有写入、删除、支付或消息发送能力的工具前,应自行增加权限隔离、参数审查和逐次确认。
- 调用会依赖外部模型供应商和 API 密钥,但所给材料没有说明各供应商的数据保留、地域、遥测或隐私策略。
- VCR 过滤敏感请求头是积极措施,但请求体和 URI 也可能含有敏感数据;现有配置仍以 URI 和 body 匹配并可能将其写入录像。
- 不要仅凭 README 徽章推断当前修订的 CI 或覆盖率已经通过;本评估没有执行测试。
- 安装 all extra 可能扩大依赖面;部署前应审查语言子包的锁文件、传递依赖和实际需要的供应商额外项。
最近版本
来自该项目 GitHub Releases 的最新发布记录,说明为上游原文摘录,未经本站改写或测试。
-
发布说明摘录
What's Changed * feat(providers): add XAIProvider for Grok via Responses API by @NishchayMahor in https://github.com/Mirascope/mirascope/pull/2865 * chore: bump minor version number by @willbakst in https://github.com/Mirascope/mirascope/pull/2867 New Contributors * @NishchayMahor made their first contribution in https://github.com/Mirascope/mirascope/pull/2865 Full Changelog: https://github.com/Mirascope/mirascope/compare/v2.4.0...v2.5.0在 GitHub 查看 ↗ -
发布说明摘录
BREAKING We're unfortunately discontinuing Mirascope Cloud. The api module and anything else related to our cloud backend has been ripped out in this version so that it's a pure LLM SDK from now on. We will continue to build and maintain Mirascope the Python/TypeScript LLM library, but please find an alternative for your OTEL backend. What's Changed * chore: discontinue cloud by @willbakst in https://github.com/Mirascope/mirascope/pull/2856 Full Changelog: https://github.com/Mirascope/mirascope/compare/v2.3.0...v2.4.0在 GitHub 查看 ↗ -
发布说明摘录
What's Changed * fix: resolve dark mode styling for span signatures (#2164) by @vnkaralkar in https://github.com/Mirascope/mirascope/pull/2844 New Contributors * @sazed-verity made their first contribution in https://github.com/Mirascope/mirascope/pull/2751 * @vnkaralkar made their first contribution in https://github.com/Mirascope/mirascope/pull/2844 Full Changelog: https://github.com/Mirascope/mirascope/compare/v2.2.2...v2.3.0在 GitHub 查看 ↗
常见问题
Mirascope 是否包含模型使用费用?
运行示例需要哪些密钥?
anthropic/claude-sonnet-4-5,但材料没有给出凭证变量名或配置步骤。工具调用会自动完成吗?
response.tool_calls,调用 execute_tools(),再以 resume() 继续,直到工具调用结束。能否直接部署成聊天服务?
是否支持 TypeScript?
typescript/ 实现和示例,但材料没有展示 TypeScript 的安装及调用代码。