Skip to content

feat(agent): 新增 提示词优化器#1356

Open
cyfung1031 wants to merge 7 commits intorelease/v1.4-agentfrom
v1.4-agent-optimize-prompt-button
Open

feat(agent): 新增 提示词优化器#1356
cyfung1031 wants to merge 7 commits intorelease/v1.4-agentfrom
v1.4-agent-optimize-prompt-button

Conversation

@cyfung1031
Copy link
Copy Markdown
Collaborator

功能:为 ChatInput 添加 Prompt 优化按钮

描述

在 ChatInput 组件中新增一个“Optimize Prompt”按钮,允许用户使用 LLM 提供商 作为提示工程专家来改进他们的提示词。优化通过一次临时的无状态调用完成,不会持久化到对话历史中。

变更内容

后端服务层

  • src/app/service/agent/service_worker/agent.ts

    • init() 中注册新的消息处理器 optimizePrompt

    • 新增私有方法 handleOptimizePrompt()

      • 路由到 ChatService.handleConversationChat(),并设置 ephemeral: true
      • 使用专用的提示工程系统提示词
      • 继承所有 LLMClient 功能:提供商分发、重试机制、所有已注册的提供商
      • 无持久化,不影响对话历史

UI / Hook 层

  • src/pages/options/routes/AgentChat/hooks.ts

    • 新增 useOptimizePrompt() Hook:

      • 连接到 serviceWorker/agent/optimizePrompt 处理器
      • 管理 isOptimizing 状态和流式数据收集
      • 返回 { isOptimizing, optimize, cancel }
      • 支持通过 AbortController 取消

前端组件

  • src/pages/options/routes/AgentChat/ChatInput.tsx

    • 从 hooks 中引入 useOptimizePrompt

    • 在组件中调用:const { isOptimizing, optimize } = useOptimizePrompt()

    • 新增 handleOptimizePrompt() 处理函数:

      • 校验输入和所选模型
      • 调用 optimize(modelId, userInput)
      • 成功后更新文本输入框
      • 显示成功/错误提示(toast)
    • 添加工具栏按钮(⚙️ 图标):

      • 输入为空或正在优化时禁用
      • 优化过程中显示旋转图标
      • Tooltip 显示当前状态

架构优势

无 UI 层提供商处理:按钮委托给服务层,无需在 UI 层重复实现 LLM 流程
自动支持多提供商:继承 providerRegistry,无需硬编码即可支持所有已注册提供商(OpenAI、Anthropic、智谱等)
内置重试机制:使用 LLMClient.callLLM(),支持 5 次指数退避重试
清晰分层:UI 仅管理状态,临时处理器负责 LLM 调用逻辑
支持取消:用户可中途取消优化,连接会被正确清理
不污染对话历史:临时模式不会将优化记录写入聊天历史

技术细节

  • 系统提示引导 LLM 提供商 作为提示工程专家
  • 仅输出优化结果(无解释、无前言、无 Markdown 代码块)
  • 通过系统提示遵循用户输入语言
  • 复用现有 conversationChat 处理路径(ephemeral: true + 自定义系统提示)
  • 所有错误处理和提供商逻辑复用现有 LLMClient 实现

修改文件

  • src/app/service/agent/service_worker/agent.ts(+15 行)
  • src/pages/options/routes/AgentChat/hooks.ts(+40 行)
  • src/pages/options/routes/AgentChat/ChatInput.tsx(+60 行)
  • src/pages/options/routes/AgentChat/styles.css(+4 行)

测试建议

  • 按钮在 ChatInput 工具栏中正确显示
  • 输入为空或正在优化时按钮被禁用
  • 点击按钮可优化 Prompt 并更新输入框
  • 可在处理中途取消优化
  • 支持所有已配置的 LLM 提供商
  • 成功/失败提示正确显示
  • 不会在对话历史中生成记录
  • 多语言下 i18n 文案显示正确

cyfung1031 and others added 7 commits April 8, 2026 10:07
* 删除 uint8Array 重复封装

* 添加 ResourceService.loadByUrl 单元测试

---------

Co-authored-by: 王一之 <yz@ggnb.top>
…避免 supply chain 攻击) (#1341)

* pnpm cooldown: 不抓取一星期内最新版

* pnpm: 提升至 10.33.0 以使用 minimumReleaseAge 避免 supply chain 攻击

* minimumReleaseAge 延长至 30 天(43200 分钟)

---------

Co-authored-by: 王一之 <yz@ggnb.top>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant