标签 AI SDK 下的文章

现在有了 ai 我遇到不懂的方法直接让 ai 分析输入输出和调用关系直接就出来了
例如:opencode 的源代码

用户发送消息
      ↓
┌─────────────────────────────────────────────────────────────┐
│  Server (routes/session.ts:733)                             │
│  SessionPrompt.prompt({ ...body, sessionID })               │
└─────────────────────┬───────────────────────────────────────┘
                      ↓
┌─────────────────────────────────────────────────────────────┐
│  SessionPrompt.prompt (prompt.ts:151)                       │
│  1. 创建用户消息                                             │
│  2. 调用 loop(sessionID)                                    │
└─────────────────────┬───────────────────────────────────────┘
                      ↓
┌─────────────────────────────────────────────────────────────┐
│  SessionPrompt.loop (prompt.ts:258)                         │
│  while (true) {                                             │
│    1. 获取 Agent 配置: Agent.get(lastUser.agent)            │
│    2. 解析工具: resolveTools({ agent, session, ... })       │
│    3. 创建处理器: SessionProcessor.create(...)              │
│    4. 调用处理器: processor.process({ user, agent, ... })   │
│  }                                                          │
└─────────────────────┬───────────────────────────────────────┘
                      ↓
┌─────────────────────────────────────────────────────────────┐
│  SessionProcessor.process (processor.ts:45)                 │
│  while (true) {                                             │
│    1. 调用 LLM: LLM.stream(streamInput)                     │
│    2. 处理流式响应:                                          │
│       - reasoning-delta → 更新推理部分                       │
│       - text-delta → 更新文本部分                            │
│       - tool-call → 执行工具                                 │
│    3. 工具执行完成后继续循环                                  │
│  }                                                          │
└─────────────────────┬───────────────────────────────────────┘
                      ↓
┌─────────────────────────────────────────────────────────────┐
│  LLM.stream (llm.ts)                                        │
│  1. 构建系统提示词                                           │
│  2. 调用 AI SDK: streamText({ model, messages, tools })     │
│  3. 返回流式响应                                             │
└─────────────────────────────────────────────────────────────┘

TUI ↔ Server 通信机制

架构图

┌─────────────────────────────────────────────────────────────┐
│  主线程 (thread.ts)                                         │
│  - 运行 TUI 界面                                            │
│  - 创建 RPC 客户端                                          │
└─────────────────────┬───────────────────────────────────────┘
                      │ RPC 通信
                      ▼
┌─────────────────────────────────────────────────────────────┐
│  Worker 线程 (worker.ts)                                    │
│  - 运行 Server.App()                                        │
│  - 处理 fetch 请求                                          │
│  - 转发事件                                                 │
└─────────────────────────────────────────────────────────────┘

Worker 启动流程

用户运行 `opencode`
         ↓
index.ts 解析命令 → TuiThreadCommand ($0 默认命令)
         ↓
thread.ts handler 执行:
         ↓
第 79-85 行:确定 worker 文件路径
         ↓
第 93 行:创建 Worker 线程
   const worker = new Worker(workerPath, { env: ... })
         ↓
第 101 行:创建 RPC 客户端与 Worker 通信
   const client = Rpc.client<typeof rpc>(worker)
         ↓
第 143 行:启动 TUI 界面
   const tuiPromise = tui({ url, fetch: customFetch, ... })

之前没有 ai 的时候经常一个方法看半天看不懂

demo-interactive-flow


交互式提示词生成流程

支持带附件(图,docx,pdf)对话优化提示词


多轮问题导向优化提示词
demo-template-management

Question

无论是复杂任务,如论文精度,汇报 PPT 大纲制作,深度搜索调研,还是 agent.md
还是简单任务,比如 linux 命令生成,旅游规划,text2img 绘图
我都体验过很多万能的模板,也体验了生成提示词的提示词优化器,然而他们都无法满足我的需求
这并不是这些提示词不行,而是并不适合我
我想,只有一个模板,他能通过交互式的方式适配到我的业务或需求上,这种方式的模板才真正万能
然而据我所知,市面上并没有这样的一款工具,因此,我开发了这样一款纯前端项目

Quote

一句话介绍: 通过多轮交互式对话,将模糊想法转化为结构化、高质量的 AI 提示词

在线体验

【免费免部署免配置体验】一个更贴近日常使用的交互式提示词优化器1 【免费免部署免配置体验】一个更贴近日常使用的交互式提示词优化器2

目前配置了免费的 apikey,欢迎测试,感谢 @huan 焕佬的支持,额度有限,大家轻点用
项目地址
如果这个项目对你有帮助,欢迎给个 Star!

核心亮点

1. 智能交互引导

不需要你是提示词专家,AI 会主动询问:

  • 你的角色定位是什么?
  • 目标受众是谁?
  • 需要什么深度的内容?
  • 期望的输出格式?

通过交互式表单,几次点击就能明确需求!

2. 多模态文件支持

  • 上传 PDF 论文,AI 自动解析内容
  • 粘贴图片截图,AI 理解视觉信息
  • 支持 DOCX、TXT 等多种格式

3. 本地优先 (Local-First)

  • API Key 仅存储在浏览器本地
  • 对话历史使用 IndexedDB 离线存储
  • 无需担心隐私泄露

4. 现代化体验

  • 深色模式支持
  • 响应式设计(移动端友好)
  • 基于 Shadcn/UI 的精美界面

案例展示

案例 1:模糊命令

Example




案例 2:复杂任务

Example

dog food example




对比生成后


然后我有点想选前者

todo

Todo

接入之前看的一个佬的 gemini 网页 2api 项目,实现免配使用
接入 CC/CODEX/ 寸止,进行交互式 Vibe Coding 提示词增强
▢ 提示词收藏与管理
▢ 目前元提示词不是很好,还要优化,一些指令遵从不好的模型,如 grok,会偏离流程
▢ 有些交互 bug
▢ 动画不是很好看
▢ icon 很丑,UI 太大众

碎碎念

其实用别人项目的时候我屁事都比较多,之前用过一个佬的优化提示词,后面用一直没能力也没时间弄出自己的想法,这次总算心一狠弄了出来,项目本身我还是挺喜欢的,至少满足了我的需求

这个项目从前天想到到今天上线弄了三天,中间被老板因课题没进度批了一顿,还差点放弃开发,没想到前端项目还开发这么久,可能还是没有前端基础导致,连一个 AI chat ui 的 AI 返回一直白屏都让 cld 用 playwright 和反重力的 gemini 3 pro high 改了一天,不过做出来还是成就感满满,毕竟站在 AI 的肩膀上很快从想法到实现了个稍微复杂的项目,并且自我感觉比较完善

技术细节

一共花费挺少的,反重力 0 成本,cld 这边大概花了 10 块吧



目前用的 ccg 工作流,但是一直没成功调用 codex,gemini,以及寸止,playwright 等 7 个 mcp,由于是纯前端项目,需要不断交互,主要用到前两个,ace 相关 mcp 也偶尔用到,anycode 不怎么用,之前以为跟 ccg 有冲突就没用,一般用开箱未配置的 wezterm


参考项目

  1. smkalami/prompt-decorators: Prompt Decorators are structured prefixes, such as +++Reasoning and +++StepByStep, designed to enhance AI responses. Inspired by Python decorators, they make AI outputs more logical, accurate, and well-organized without requiring lengthy instructions, simplifying interactions for users.
  2. GitHub - anthropics/prompt-eng-interactive-tutorial: Anthropic's Interactive Prompt Engineering Tutorial
  3. GitHub - tranzwalle/prompt_builder: 基于 [Anthropic 的 Interactive Prompt Engineering Tutorial](https://github.com/anthropics/prompt-eng-interactive-tutorial) 构建的智能 Prompt 优化工具。
  4. GitHub - xavierchoi/Prompt-Enhancer
  5. GitHub - lwh8915/PromptX: PromptX 不仅仅是一个提示词存储工具,它是专为 AI 时代打造的生产力神器。采用 UI/UX Pro Max 设计标准,结合强大的 版本管理 和 智能分类,让你的 AI 工作流效率提升 10x。
  6. GitHub - Hunyuan-PromptEnhancer/PromptEnhancer: PromptEnhancer is a prompt-rewriting tool, refining prompts into clearer, structured versions for better image generation.
  7. GitHub - songtingze/prompt-optimizer: 大模型提示词优化器,让大模型根据测试结果进行反思生成优化建议,并结合用户要求进行提示词优化。
  8. GitHub - linshenkx/prompt-optimizer: 一款提示词优化器,助力于编写高质量的提示词

参考帖子

  1. 新人水帖,一个提示词优化器项目 - 开发调优 - LINUX DO
  2. 提示词优化分享 - 递归自优化生成系统 - 开发调优 - LINUX DO
  3. 「SSRPrompt」为了方便内部项目的 prompt 管理,产品经理设计了这款开源软件 - 开发调优 - LINUX DO
  4. 【提示词工程】分享那些我认为好用的, 我在用的, 我愿意推荐的提示词 - 文档共建 - LINUX DO

📌 转载信息
原作者:
systemoutprintlnhell
转载时间:
2026/1/16 18:50:38

众所周知,OpenAI、Anthropic 和 Google 三家的模型格式各不相同。目前主流是使用 基于 NewAPI 的中转站,在 OpenCode 的配置文件中通过自定义类型进行接入。

常见的配置如下:

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "new-api": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "NewAPI",
      "options": {
        "baseURL": "https://xxx/v1"
      },
      "models": {
        "gemini-2.0-flash": { "name": "gemini-2.0-flash" }
      }
    }
  }
}

这里存在一个潜在问题: 在这种配置下,程序实际上是在调用 /v1/chat/completions 接口。对于 Gemini 渠道的模型,请求会经过 NewAPI 的一层或多层格式转换逻辑。这不仅增加了延迟,还可能导致参数缺失或兼容性报错。

更优的解决方案: 既然部分中转站支持 Gemini 原生格式,且 OpenCode 底层基于 Vercel AI SDK,我们完全可以绕过 OpenAI 兼容层。

通过查阅 AI SDK Provider 列表,我们可以直接将 npm 包替换为原生的 @ai-sdk/google

优化后的配置:

  • 修改 npm 字段:@ai-sdk/openai-compatible 改为 @ai-sdk/google
  • 保持 baseURL 依然指向你的中转地址。
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "google-native": {
      "npm": "@ai-sdk/google",
      "name": "Google Native",
      "options": {
        "baseURL": "https://your-proxy.com/v1"
      },
      "models": {
        "gemini-2.5-flash": { "name": "gemini-2.5-flash" }
    },
    "anthropic-native": {
      "npm": "@ai-sdk/anthropic",
      "name": "Anthropic Native",
      "options": {
        "baseURL": "https://your-proxy.com/v1"
      },
      "models": {
        "claude-3-5-sonnet-20241022": { "name": "claude-3-5-sonnet-20241022" }
      }
    }
  }
}

这样,调用将直接走 Google 原生协议,省去了中间的转换逻辑,响应更迅速且功能支持更完整。针对 Claude 渠道,替换为 @ai-sdk/anthropic 也是同理。


📌 转载信息
转载时间:
2026/1/15 18:21:51

OpenCode 使用 CLIProxyAPI 作为模型提供商的步骤

写在前面:不要质疑我的某些操作,虽然繁琐,但自有深意。例如为什么我要将 CPA 的提供商分为 4 个,以及为什么要这样配置常用模型。如果存在意见不合,那就是你对。

opencode 作为开源的终端代理,配合 ohmyopencode 使用,是目前十分推荐且前沿的玩法,核心是异步子代理协作(也就是十分烧钱),虽然官方提供了免费的 minimax2.1 和其他几个模型,但使用高级子代理完成前端设计、审查时,仍然需要用高级模型,为此特意写了这个教程,供佬们参考。
难点:opencode 将 key 和 Provider 配置分离储存,且需要自行选择对应的 sdk,避免格式问题,以下配置中已包含推荐用法。

1. 绑定 API 密钥

在 OpenCode 终端执行以下操作,为四个自定义 ID 注册凭据:

  1. 终端执行命令:opencode auth login 注意不是在 opencode 里执行
  2. 选择 Other(这里不需要手动滚动,很累,直接输入 other,会自动列出)
  3. 依次创建以下 ID 并粘贴 API Key:
  • cpa
  • cpa-oai
  • cpa-claude
  • cpa-gemini


2. 修改配置文件

编辑全局的 opencode.json( macOS / Linux: ~/.config/opencode/ Windows: Users\你的用户名\ .config\opencode),将以下内容整合进 provider 字段,我给出的仅供参考,不会就直接复制,删掉自己不要的模型即可。所有模型已开启 thinking 模式 (未来官方可能会弃用该字段) ,并按协议类型匹配了 SDK。

{ "$schema": "https://opencode.ai/config.json", "plugin": [ "oh-my-opencode"], "provider": { "cpa": { "npm": "@ai-sdk/openai-compatible", "name": "cpa", "options": { "baseURL": "https://<YOUR_ENDPOINT>/v1" }, "models": { "kimi-k2-thinking": { "name": "kimi-k2-thinking", "thinking": true }, "glm-4.7": { "name": "glm-4.7", "thinking": true } } }, "cpa-oai": { "npm": "@ai-sdk/openai", "name": "cpa-oai", "options": { "baseURL": "https://<YOUR_ENDPOINT>/v1" }, "models": { "gpt-5.2": { "name": "gpt-5.2", "thinking": true }, "gpt-5.1-codex-max": { "name": "gpt-5.1-codex-max", "thinking": true } } }, "cpa-claude": { "npm": "@ai-sdk/anthropic", "name": "cpa-claude", "options": { "baseURL": "https://<YOUR_ENDPOINT>/v1" }, "models": { "gemini-claude-opus-4-5-thinking": { "name": "gemini-claude-opus-4-5-thinking", "thinking": true }, "gemini-claude-sonnet-4-5-thinking": { "name": "gemini-claude-sonnet-4-5-thinking", "thinking": true }, "claude-opus-4-5-20251101": { "name": "claude-opus-4-5-20251101", "thinking": true }, "claude-sonnet-4-5-20250929": { "name": "claude-sonnet-4-5-20250929", "thinking": true }, "claude-haiku-4-5-20251001": { "name": "claude-haiku-4-5-20251001", "thinking": true }, "claude-kimi": { "name": "claude-kimi", "thinking": true } } }, "cpa-gemini": { "npm": "@ai-sdk/google", "name": "cpa-gemini", "options": { "baseURL": "https://<YOUR_ENDPOINT>/v1beta" }, "models": { "gemini-3-pro-preview": { "name": "gemini-3-pro-preview", "thinking": true }, "gemini-3-flash-preview": { "name": "gemini-3-flash-preview", "thinking": true }, "gemini-2.5-flash-lite": { "name": "gemini-2.5-flash-lite", "thinking": true } } } } } 


3. 切换模型

  1. 重载:保存文件,OpenCode 自动生效。
  2. 选择:输入 /models 弹出列表。
  3. 识别:根据 cpa-* 前缀找到对应模型,回车确认。


(PS:模型回复为 3.7 模型,是因为 CPA 内置了一部分提示词的干扰,无影响)

额外补充

不建议通过 cpa 反代 codex 再接入 opencode,当前版本的 cpa 和 opencode 似乎有兼容性问题,会导致模型列表消失,需要重新登录凭证。(多个群友复现)
建议使用 ohmyopencode 直接 oauth 登录 codex


📌 转载信息
原作者:
moxiyan
转载时间:
2026/1/5 16:19:05