开篇词

从 2008 年开始接触股票投资,到现在已经接近二十年了。 这段时间里,我经历过完整的市场周期:牛市的狂热、熊市的绝望,也经历过从"以为自己懂了",到"承认自己其实什么都不懂"的反复过程。账户数字起起落落,但真正变化更大的,是我对投资这件事的理解方式。 很多年里,我一直有一个模糊的念头:应该把这些经历写下来。不是为了证明自己赚过多少钱,而是想留下些什么——一些关于决策、关于错误、关于长期面对不确定性的记录。 直到最近,这个念头才逐渐变得清晰起来。 我决定开设这个专栏。它会以投资为核心,但并不只谈"买什么、卖什么"。我更关心的是: 投资背后的概念与逻辑 普通人在真实世界中会遇到的情绪、误判与限制 如何借助技术,让这些问题变得更可验证一些 在这个专栏里,我会一边讲自己的投资经历,一边引入相关的基础概念;同时,也会尝试使用 Python、数据分析、以及 AI 大模型,对一些直觉判断进行复盘、辅助和检验。 这并不是一套"成功方法论"。更多时候,它可能是一份带着不确定性的思考记录:哪些想法在长期中站得住脚,哪些只是事后看起来合理。 如果你也经历过市场的起伏,或者正在尝试把理性工具引入投资决策,希望这些文字能对你有所帮助;如果没有,那它至少是我给自己留的一份阶段性注脚。 专栏会慢慢写,不追热点,也不保证结论。 唯一确定的,是我会用心。

2026/1/13
articleCard.readMore

使用大模型有几种方法呢?

1/Web 端 我们最常见的是使用网页端,有个对话框,输入我们想问的问题,点击"发送"按钮,然后就等待大模型给我们返回答案了。 其实,这可以看成一个产品,以大模型为后端的聊天工具。 这是最直观的可以给用户体验到大模型的方式,每个模型厂商都有类似产品。 2/本地部署 有的时候企业出于安全性的考虑,会在自己的内网部署开源的大模型或企业自己训练的大模型,这个时候可以选用类似 ollama 这样的模型部署工具来使用。 # 以命令行的方式和大模型交互 ollama run deepseek-r1 # 以api的方式和大模型交互 curl -s "http://127.0.0.1:11434/api/generate" \ -H "Content-Type: application/json" \ -d '{ "model": "deepseek-r1:latest", "prompt": "请简要介绍一下牛顿第一定律。", "stream": false }' 3/模型中转平台 模型中转平台是类似 openrouter(https://openrouter.ai/)和 模力方舟(https://ai.gitee.com/serverless-api)这样的把市面上主流的大模型放在一个平台上,通过统一的接口供大家使用。 上面两个平台使用的 url 和 key 都是第三方的,除了这种聚合模式外,还有像 liteLLM 这样的平台,它是一个开源的库,也可以对外提供统一的接口供大家使用,但是使用的 url 和 key 都是模型厂商自己的。 from openai import OpenAI client = OpenAI( base_url="https://ai.gitee.com/v1", api_key="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", ) response = client.chat.completions.create( messages=[ { "role": "system", "content": "You are a helpful and harmless assistant. You should think step-by-step." }, { "role": "user", "content": "Can you please let us know more details about your " } ], model="DeepSeek-V3", stream=True, max_tokens=1024, temperature=0.6, top_p=0.8, extra_body={ "top_k": 20, }, frequency_penalty=1.1, ) 4/模型SDK 每家模型厂商一般除了 web 端的产品外,也提供 SDK 的方式对外提供使用,一般需要在模型厂商的官网新建 key,并且需要充值才能使用。 # deepseek的python 版本 sdk使用方法,也有 nodejs 版本和 bash 脚本的 import os from openai import OpenAI client = OpenAI( api_key=os.environ.get('DEEPSEEK_API_KEY'), base_url="https://api.deepseek.com") response = client.chat.completions.create( model="deepseek-chat", messages=[ {"role": "system", "content": "You are a helpful assistant"}, {"role": "user", "content": "Hello"}, ], stream=False ) print(response.choices[0].message.content) 5/框架 除了上面几种偏底层的模型的使用方法外,还有更偏向于应用侧的模型使用方式,那就是使用 Langchain 或者 openai agent sdk 这样的框架,这些框架是把大模型做了进一步的抽象,方便编写各种业务应用。 # 使用langchain调用 DeepSeek 模型 from langchain_deepseek import ChatDeepSeek llm = ChatDeepSeek( api_key=env_settings.DS_API_KEY, model="deepseek-ai/DeepSeek-R1", temperature=0, max_tokens=None, timeout=None, max_retries=2, api_base='https://api.siliconflow.cn' ) messages = [ ("system", "You are a helpful translator. Translate the user sentence to French."), ("human", "I love programming."), ] # print(llm.invoke(messages)) # print(llm.invoke("hello").content) ai_message = llm.invoke([ SystemMessage(content="please speak in chinese"), HumanMessage(content="hello"), ]) print(ai_message.content)

2025/12/23
articleCard.readMore

当我使用Claude Code时我在想什么

使用 Claude Code(又名 cc) 作为编程工具已经有一段时间了,claude code 也陆陆续续迭代了好几个版本,在编程上的体验可以说是越来越好,对我来说唯一还能吐槽的点就是由于网络的原因,速度上还是有些慢。 使用 claude code 这一段时间,其实还改变了我一个坏毛病:接到需求直接编码。其实,不管使用哪款 AI 工具,都不能上来直接编码,其实你可以把 AI 当成一个普通员工,初次见面,你头脑里的很多想法不可能一次让对方全部理解。 我总结出来的黄金工作流程是:Research → Plan →Code 不论让 Claude 开始编写一个新需求,还是修改任何代码之前,先探索你的代码库并收集上下文信息,都是最重要的事,也是整个流程的核心要义,具体来说: 研究 (Research):研究一下 xx 系统是如何工作的。 找到所有相关的文件,并解释当前的流程。 计划 (Plan):现在请制定一个关于添加 xx功能 的详细方案。 将其拆分为具体步骤,并识别可能出现的问题。 编码 (Code):根据你的方案实现 xx 解决方案。 在执行过程中逐步验证每个步骤,并在完成时提交。 初始设置 无论我们用哪个工具(更准确的应该叫 AI Agent)去协助我们编程,claude code、gemini 或者 cursor,他们都需要一份"说明书"来了解这个项目的背景和规则,否则每次它都要猜你的意图。在 Claude Code 中这份初始设置文件名是 CLAUDE.md。 注意:各家 AI Agent 的初始设置文件的名字和位置不同,创建文件的时候一定要注意。 初始设置文件的优先级顺序由高到低如下: 1.对话指令 2.项目中的设置文件 3.系统级的设置文件 如果团队使用多种 AI 工具,可以试一下下面的结构: 接下来,初始设置文件的内容该写些什么呢? 1.项目基本背景、技术栈 2.代码风格 3.安全规范 4.测试要求 5.特殊规则 举个例子, claude.md 项目背景(Project Context) 本项目是一个基于 Node.js / TypeScript 的 API 服务,使用 Express 作为 Web 框架,并采用 Prisma ORM 进行数据库操作。 代码风格(Code Style) - 使用函数式组件与 hooks 风格 - 优先使用 async/await,避免直接使用 promise 链 - 单行最大长度限制为 100 字符 测试要求(Testing Requirements) - 每个新功能都必须包含 单元测试 - API 接口需撰写 集成测试 - 使用 Jest 作为测试框架 常见问题与注意事项(Common Pitfalls) - 始终对用户输入进行验证 - 使用参数化查询,绝不拼接字符串 - 在访问数据前必须进行身份验证 - 记录错误日志,但不要向客户端暴露堆栈信息 - 列名使用 snake_case - 表名使用复数形式 - 每张表必须包含 created_at 与 updated_at 字段 - 使用 deleted_at 字段进行软删除 指令技巧 有了初始设置文件作为"规范"后,我们还需要了解和 AI 沟通协作的技巧: @指定特定的文件:让 AI 聚焦于相关代码。 使用 plan mode 先做规划(shift+tab):强制 AI 思考(对应我们的 Plan 步骤)。 / 自定义命令:自动化重复性任务。 举个例子, 每次提交代码都要思考如何撰写 commit message,能否自动生成提交信息? 在项目根目录下建立文件:.claude/commands/commit.md 输入以下内容: --- description: Generate commit message and commit --- 请执行以下步骤: 1. 执行 `git status` 和 `git diff` 查看变更 2. 分析变更内容,生成符合 Conventional Commits 规范的 commit message 3. 格式:`type(scope): description` - type: feat/fix/refactor/docs/test - 描述需要清楚说明「做了什么」以及「为什么」 4. 询问我是否要执行 commit 请不要直接 commit,先让我确认 message。 下次提交代码的时候在命令行中,直接输入/commit 就可以了。 MCP 其实 mcp 也算是一种使用技巧,和上面介绍的通用技巧比需要提前安装一些插件。Claude Code 的 mcp 默认安装路径是在全局设置中,这一点要格外注意,默认路径在/Users/xxxx/.claude.json 这里以常用的 pgsql 和 cotext7为例,介绍一下安装和使用的方法。 #安装 claude mcp add postgres npx -- -y @modelcontextprotocol/server-postgres postgresql://localhost:5432 claude mcp add --transport http context7 https://mcp.context7.com/mcp --header "CONTEXT7_API_KEY:去官网申请" 记得在 claude.md 中增加下面内容,不然以后每次输入需求后,还要在最后加一句 use context7,特别麻烦。 Always use context7 when I need code generation, setup or configuration steps, or library/API documentation. This means you should automatically use the Context7 MCP tools to resolve library id and get library docs without me having to explicitly ask. # 查看 mcp,只针对本项目,不是全局的 claude mcp list # 使用 mcp claude "Query the users table" 关于需求 最后我还想回归到最开始的需求,明晰清楚需求的内涵和外延是做好一个项目最终的事情,在使用 Claude Code 来构建项目之前,花 15-20 分钟进行研究: 最佳实践:其他人是如何解决类似问题的?在网上搜索博客文章、Stack Overflow 讨论和文档。 自己的模式:你是如何解决类似问题的?在现有的代码库中搜索类似的功能。 库的功能:你的项目会使用外部库吗?如果你正在使用特定的代码库,让人工智能阅读其文档或源代码。 让人工智能将这些研究综合成一个计划,内容包括: 要解决的问题(一个清晰的句子) 两到三种解决方案(每种方案都要诚实地列出其优缺点) 任何边缘情况或安全考虑 审查该计划并留意自己的反应。你的想法和反应很重要。当你认为 “这太复杂了” 或 “我们已经有更好的方法来做这件事” 时,不要只是修改这个计划,还要记录下你为什么会这么想。把它写下来。 最后根据该计划开发这个功能。 完成整个项目后,将最终的实现与原始计划进行比较。你在哪些地方偏离了计划?为什么?怎样才能让这个计划更好?将自己的反思记录下来,用于下一个项目的开发。 在下一个项目中,把自己的反思添加到你的 CLAUDE.md 文件中。写下一条规则,比如 “在做 X 类型的工作时,记得检查 Y”,或者 “我更喜欢方法 A 而不是方法 B,因为原因 C”。 另外,对于一些需求很模糊,甚至是只有一句话的需求,可以试试下面的提示词,让 AI 帮忙。 需求的确认: 你是一位资深产品顾问(C - Capacity) 背景:我在做一个电商平台,客户反应「结帐流程太慢」(I - Insight) 请用苏格拉底提问法,帮我厘清这个需求背后的真实问题(S - Statement) 请用反向提问的方式引导我思考,不要直接给答案(P - Personality) 最后提供 3 种可能的理解方向让我选择(E - Experiment)

2025/12/11
articleCard.readMore