
fantasy
一套 Go 代码,切换多家大模型跑 Agent
项目预览
项目数据
项目介绍
Star 增长趋势
本站每日记录该项目 GitHub 星标变化,观测越久曲线越完整
数据来源:GitHub API 逐日快照 · 收录于 2026-10-01 · 当前星标 ★ 1061
使用教程
⚠ 该项目 README 未提供完整安装说明,以下步骤为通用流程,请以官方文档为准。
环境要求
- 已安装 Go 工具链,go 命令可用
- 准备一个支持的模型供应商账号(README 示例用 OpenRouter)及其 API Key
- 一个可执行的 Go 项目(含 go.mod,用于引入 charm.land/fantasy)
安装与启动步骤
-
1初始化 Go 项目
新建目录并初始化 Go 模块,模块名随意。已有 Go 项目可跳过此步;这几步是按 Go 模块惯例推断,README 未给正式安装章节。
go mod init myagent -
2引入 fantasy 依赖
按 README 中的导入路径拉取框架本体;若使用 OpenRouter 供应商,一并拉取其子包。
go get charm.land/fantasy go get charm.land/fantasy/providers/openrouter -
3准备 API Key
到所选供应商处申请 API Key,后续以 openrouter.WithAPIKey(myHotKey) 的形式传入。建议从环境变量读取,不要硬编码。
-
4创建 provider 与模型
在 main.go 中导入 fantasy 和 providers/openrouter,先创建 provider,再用 LanguageModel 选定模型 ID。
import "charm.land/fantasy" import "charm.land/fantasy/providers/openrouter" provider, err := openrouter.New(openrouter.WithAPIKey(myHotKey)) if err != nil { fmt.Fprintln(os.Stderr, "Whoops:", err) os.Exit(1) } ctx := context.Background() model, err := provider.LanguageModel(ctx, "moonshotai/kimi-k2") if err != nil { fmt.Fprintln(os.Stderr, "Dang:", err) os.Exit(1) } -
5装配 Agent 与工具
用 fantasy.NewAgentTool 定义工具,再用 fantasy.NewAgent 组合模型、系统提示和工具。示例中的 fetchCuteDogInfoFunc 需自己实现。
cuteDogTool := fantasy.NewAgentTool( "cute_dog_tool", "Provide up-to-date info on cute dogs.", fetchCuteDogInfoFunc, ) agent := fantasy.NewAgent( model, fantasy.WithSystemPrompt("You are a moderately helpful, dog-centric assistant."), fantasy.WithTools(cuteDogTool), ) -
6编译并运行
补全 prompt 与工具函数后运行程序,检查是否能正常拿到模型回复。Go 会编译为原生机器码,可直接部署单个二进制。
go run .
关键配置
| 配置项 | 必填 | 说明 | 示例 |
|---|---|---|---|
API Key(openrouter.WithAPIKey) | 是 | 供应商鉴权密钥,用于初始化 provider | sk-xxxxxxxx |
模型 ID(LanguageModel 第二参数) | 是 | 指定调用的具体模型名称 | moonshotai/kimi-k2 |
系统提示词(WithSystemPrompt) | 否 | 设定 Agent 的角色与行为风格 | You are a moderately helpful, dog-centric assistant. |
工具名(NewAgentTool 首参) | 否 | 暴露给 Agent 调用的工具标识 | cute_dog_tool |
如何确认成功
go run . 编译无报错,openrouter.New 与 provider.LanguageModel 均未返回 err,Agent 能正常输出回复。
常见问题
Q:支持哪些模型供应商?
A:README 示例使用 OpenRouter,项目定位是多供应商、多模型统一 API,切换供应商只需换 provider 与模型 ID,具体支持列表请查阅项目文档。
Q:fetchCuteDogInfoFunc 报未定义怎么办?
A:README 只给了调用位置,没有给出函数实现。你需要按框架要求的签名自行编写该函数,或换成自己的业务函数传入 NewAgentTool。
Q:API Key 写在哪里比较安全?
A:README 示例是 openrouter.WithAPIKey(myHotKey) 直接传值。实际使用建议从环境变量读取后传入,避免把密钥提交到代码仓库。
Q:没有 Go 环境能运行吗?
A:不能。fantasy 是 Go 开发框架,需要本地安装 Go 工具链,最终编译成原生二进制文件运行,不提供 Python/Node 调用方式。
注意事项
- README 节选未包含正式安装章节,go mod init / go get 命令是按 Go 模块惯例推断,请以官方文档为准。
- README 代码片段不完整,结尾的 prompt 内容与 fetchCuteDogInfoFunc 均未给出,需自行补全。
- API Key 属于敏感信息,不要硬编码或提交到版本库。
核心亮点
- 统一多供应商 API,切换模型只需改配置,不用重写调用层
- 原生 Go 实现,类型安全、并发友好,可编译为单二进制部署
- 内置 Agent 编排与工具调用能力,覆盖流式输出和结构化返回
不足之处
- 生态和周边工具相比 Python 方案仍偏薄,示例与集成较少
- 项目处于成长阶段,API 可能随版本迭代发生变动
适用场景
- 在 Go 后端服务中嵌入 AI 客服或问答机器人
- 构建需要调用外部工具的多步骤自动化 Agent
- 为已有 Go 系统快速接入多家大模型并做成本/效果对比
替代项目
langchaingo、eino
上一篇:LAP
同类项目推荐
让 Cursor 的 AI 对话不丢上下文,项目状态一目了然
A repository that provides a structured system for maintaining context and tracking ···
lazy-starter-kit
开源
一条命令,把电脑变成 AI 开发环境,先预览再执行
One safe command (or a signed GUI) to set up Claude Code, Codex and a dev environmen···
FastQL
开源
一行 Python 代码,快速启动 Rust 驱动的 GraphQL API
Spin up a super fast Rust powered GraphQL API to prototype your ML model in one line···
openharness
开源
一个命令中心,管住你所有机器上的编码智能体
The ultimate harness for coding agents and beyond. All your agents. All your machine···
实时盯紧 AI 编程 token 消耗,省钱又省心
Claude Code & Codex 本地 token 追踪 — 状态栏(Codex 业界首创伪 statusline)、GitHub···
dotagents
开源
用 .agents/ 目录给 AI 代理减负,让复杂代码库推理更准。
A proposed convention for the .agents/ directory to prevent context bloat and improv···
mcp-server-bash-sdk
开源
纯 Bash 写 MCP 服务器,零依赖跑通 AI 工具调用
MCP server SDK/example implemented entirely in bash — build a Model Context Protoco···
framework
开源
用 PHP 写一套代码,轻松对接多个聊天平台
Chatbot framework
ontogpt
开源
用大模型从文本中自动抽取结构化知识,构建本体图谱
LLM-based ontological extraction tools, including SPIRES