ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

将 Claude Code 项目改造为 Windows 独立运行工具——以 ai-berkshire 为例

将 Claude Code 项目改造为 Windows 独立运行工具——以 ai-berkshire 为例

一、背景

ai-berkshire是一套基于巴菲特/段永平/费雪/格雷厄姆四大投资流派的 AI 投研工具集,原本依赖 Claude Code 作为运行时环境(Claude Code 负责读取 skill prompt → 调用 LLM → 执行工具 → 管理多 Agent 编排)。

开源链接:GitHub - xbtlin/ai-berkshire: AI 时代的伯克希尔:基于 Claude Code / Codex 的价值投资研究框架。巴菲特·芒格·段永平·李录四大师方法论 + 多Agent并行研究。| AI-era Berkshire: a value investing research framework built for Claude Code / Codex. 4 masters' methodologies + multi-agent adversarial analysis. · GitHub

这种依赖带来两个问题:

  1. 必须安装 Claude Code,且需要 Anthropic API(国内访问不便、账号余额管理麻烦);
  2. 无法脱离 Claude Code 运行,不能打包成分发工具,也不能用国内大模型 API。

目标:改造为一套在 Windows 上可独立运行的 Python 工具,支持国内 AI 库(DeepSeek、通义千问、Moonshot 等),不依赖 Claude Code。

二、改造思路

核心是用 Python 替代 Claude Code 的运行时职责:

用户输入 → main.py 解析参数 ↓ skill_loader 加载 skills/*.md 并替换 $ARGUMENTS ↓ llm_client 发送给 LLM API ←→ tools.py 执行工具 ↓ (run_command / read_file / write_file LLM 返回文本或工具调用 / web_search / web_fetch / spawn_agent) ↓ (循环直到完成) 输出报告

关键设计

模块职责
main.pyCLI 入口,解析命令行参数,启动技能执行
config.py.env加载配置(API key、模型、provider)
skill_loader.py加载skills/*.md,替换$ARGUMENTS,构造 system prompt
tools.py6 个工具定义与执行器
llm_client.pyLLM 客户端,支持 Anthropic 和 OpenAI 兼容 API,实现 function calling 循环

双 API 支持

通过.env中的LLM_PROVIDER切换:

  • anthropic→ 走 Anthropic Claude 官方接口
  • openai→ 走 OpenAI 兼容接口(DeepSeek、通义千问、Moonshot、本地 Ollama 等都兼容)

国内模型通过 OpenAI 兼容接口接入,无需改动业务代码。

三、安装验证过程(踩坑记录)

阶段 1:一键安装脚本的中中文乱码

最初用install.bat做一键安装,但批处理文件保存为 GBK 编码、终端是 UTF-8 时,中文注释会被解析成命令,报'AI' 不是内部或外部命令这类错误。

解决:把 install.bat 的所有输出改成纯 ASCII,避免编码问题。

阶段 2:依赖安装

python -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

注意:cmd.exe 里 URL不能加反引号或引号,否则会被当作 URL 的一部分传给 pip。

验证:

python -c "import openai, anthropic; from duckduckgo_search import DDGS; print('OK')"

阶段 3:冒烟测试的 f-string 语法错误(Python 3.13)

_setup_helper.py里在 f-string 内部用了{\"version\"}转义,Python 3.13 对 f-string 语法更严格,直接报SyntaxError: unexpected character after line continuation character

解决:重写_setup_helper.py,把内联的测试代码改为写入临时 .py 文件再执行,彻底避开引号转义地狱。

阶段 4:config.py 空文件导致 ImportError

运行时报:

ImportError: cannot import name 'load_config' from 'config'

排查发现config.py是空文件(之前写入被静默拦截),其他 3 个模块(skill_loader / tools / llm_client)都正常。

解决:重新写入config.py,实现.env加载 + 配置 dataclass。

阶段 5:API 余额与配置错配

第一次运行报402 Insufficient Balance,且诊断信息显示配置错配:

模型: deepseek-v4-pro ← 模型名是 DeepSeek 的 Provider: anthropic ← 但 Provider 却是 anthropic

两个问题:

  1. Provider 与模型不匹配:DeepSeek 用 OpenAI 兼容接口,LLM_PROVIDER必须是openai,不是anthropic
  2. 模型名不存在deepseek-v4-pro不是 DeepSeek 官方型号,正确的是deepseek-chat
  3. 余额不足:报错格式不是 DeepSeek 官方格式,疑似走了第三方中转账号。

解决.env四项必须配套一致:

LLM_PROVIDER=openai LLM_API_KEY=sk-你的deepseek密钥 LLM_BASE_URL=https://api.deepseek.com/v1 LLM_MODEL=deepseek-chat

阶段 6:端到端验证通过

python main.py dyp-ask "用一句话解释什么是好生意"

输出:

✅ 整个链路跑通:环境安装 → config 加载 → skill prompt 组装 → LLM API 调用 → 中文输出正常。

四、使用方法

1. 安装

cd E:\Code\Open\ai-berkshire-main\standalone python -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

2. 配置 .env

copy .env.example .env notepad .env

三个国内选项任选其一:

DeepSeek(推荐)

LLM_PROVIDER=openai LLM_API_KEY=sk-xxxx LLM_BASE_URL=https://api.deepseek.com/v1 LLM_MODEL=deepseek-chat

通义千问

LLM_PROVIDER=openai LLM_API_KEY=sk-xxxx LLM_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1 LLM_MODEL=qwen-plus

Moonshot(Kimi)

LLM_PROVIDER=openai LLM_API_KEY=sk-xxxx LLM_BASE_URL=https://api.moonshot.cn/v1 LLM_MODEL=moonshot-v1-128k

3. 运行技能

:: 列出所有技能 python main.py --list :: 巴菲特买入前 Checklist python main.py investment-checklist 腾讯 :: 股价异动快速归因 python main.py news-pulse 拼多多 :: 四大师综合深度研究 python main.py investment-research 美团 :: 段永平问答(最轻量) python main.py dyp-ask "拼多多护城河在哪"

五、总结

成果

  • 成功将ai-berkshire从 Claude Code 依赖改造为 Windows 独立运行工具;
  • 支持国内 AI 库(DeepSeek / 通义千问 / Moonshot),通过 OpenAI 兼容接口接入,无需改动业务代码;
  • 保留原项目全部 20 个技能功能,包括需要 function calling 的复杂技能(investment-checklist、news-pulse 等)。

踩坑总结

根因解决
install.bat 中文乱码GBK/UTF-8 编码不一致批处理输出改纯 ASCII
pip install 无输出cmd 不识别反引号URL 不加任何引号
f-string 语法错误Python 3.13 更严格测试代码写临时文件执行
ImportError load_configconfig.py 空文件重新写入 config.py
402 Insufficient BalanceProvider 与模型错配 + 余额不足.env四项配套配置

关于国内模型的注意事项

国内模型的 function calling 能力整体弱于 Claude/GPT-4o:

  • DeepSeek / 通义千问:支持 function calling,能正常跑需要工具调用的技能;
  • Moonshot:支持但稳定性略差;
  • 如果某个 skill 跑起来 LLM 不调工具只给文本,换 DeepSeek 或 Qwen 试试。

适用场景

  • 想用原项目投研技能但不想装 Claude Code 的用户;
  • 想用国内大模型 API(成本更低、访问更稳)的用户;
  • 想把工具打包分发给他人使用的场景。
返回列表