Skip to content

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

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

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

Conversation

@cyfung1031
Copy link
Copy Markdown
Collaborator

@cyfung1031 cyfung1031 commented Apr 18, 2026

功能:为 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>
@cyfung1031 cyfung1031 marked this pull request as draft April 19, 2026 02:44
@cyfung1031 cyfung1031 marked this pull request as ready for review April 19, 2026 03:44
@CodFrm
Copy link
Copy Markdown
Member

CodFrm commented Apr 20, 2026

这个提示词优化器我觉得是一个很奇怪的东西,优化应该也是由用户/开发者自定义去优化系统层面的提示词,而不是用户的输入

用户层面应该很少说提示词工程了,都是口述需求,不用这个,我会close它,我觉得有点还停留在之前的chat时代

@cyfung1031
Copy link
Copy Markdown
Collaborator Author

这个提示词优化器我觉得是一个很奇怪的东西,优化应该也是由用户/开发者自定义去优化系统层面的提示词,而不是用户的输入

用户层面应该很少说提示词工程了,都是口述需求,不用这个,我会close它,我觉得有点还停留在之前的chat时代

如果用戶不清楚怎麼寫prompt
只是一句:我要封鎖facebook廣告

這樣的prompt會不清晰,LLM會不理解

因此要有這個工具
它會幫你整理出一個較好的prompt

有一些使用LLM的網站也會有這個工具
不明白你堅持拒絕的原因
又不是一個像summarize自動執行的工具
有需要才自行點擊

你用一些有思考能力的model的話
它還會幫你整理出一些做法想法
例如要用什麼library, 用taiwindcss或是vue或是react

在它的建議上可以再改一下,例如刪去vue和react

@CodFrm
Copy link
Copy Markdown
Member

CodFrm commented Apr 20, 2026

这个提示词优化器我觉得是一个很奇怪的东西,优化应该也是由用户/开发者自定义去优化系统层面的提示词,而不是用户的输入
用户层面应该很少说提示词工程了,都是口述需求,不用这个,我会close它,我觉得有点还停留在之前的chat时代

如果用戶不清楚怎麼寫prompt 只是一句:我要封鎖facebook廣告

這樣的prompt會不清晰,LLM會不理解

因此要有這個工具 它會幫你整理出一個較好的prompt

有一些使用LLM的網站也會有這個工具 不明白你堅持拒絕的原因 又不是一個像summarize自動執行的工具 有需要才自行點擊

你用一些有思考能力的model的話 它還會幫你整理出一些做法想法 例如要用什麼library, 用taiwindcss或是vue或是react

在它的建議上可以再改一下,例如刪去vue和react

那为什么不是agent通过上下文引导出用户的需求,agent如果觉得用户的prompt不明确的话,应该再继续追问用户

如果还来一个提示词优化器,体验非常的割裂了

我认为这应该是agent的一部分,而不是独立的功能,我觉得你的提示词优化器非常的奇怪

@CodFrm
Copy link
Copy Markdown
Member

CodFrm commented Apr 20, 2026

另外还有一点,用户为什么会输入简单的提示词,而不是详细的提示词,有没有可能用户本来就比较懒输入?

我反正没怎么用过这种功能,不清楚你怎么样的,我一般直接口述需求,或者非常简单的提示词,如果缺失了上下文agent会继续追问/确定

@cyfung1031
Copy link
Copy Markdown
Collaborator Author

这个提示词优化器我觉得是一个很奇怪的东西,优化应该也是由用户/开发者自定义去优化系统层面的提示词,而不是用户的输入
用户层面应该很少说提示词工程了,都是口述需求,不用这个,我会close它,我觉得有点还停留在之前的chat时代

如果用戶不清楚怎麼寫prompt 只是一句:我要封鎖facebook廣告
這樣的prompt會不清晰,LLM會不理解
因此要有這個工具 它會幫你整理出一個較好的prompt
有一些使用LLM的網站也會有這個工具 不明白你堅持拒絕的原因 又不是一個像summarize自動執行的工具 有需要才自行點擊
你用一些有思考能力的model的話 它還會幫你整理出一些做法想法 例如要用什麼library, 用taiwindcss或是vue或是react
在它的建議上可以再改一下,例如刪去vue和react

那为什么不是agent通过上下文引导出用户的需求,agent如果觉得用户的prompt不明确的话,应该再继续追问用户

如果还来一个提示词优化器,体验非常的割裂了

我认为这应该是agent的一部分,而不是独立的功能,我觉得你的提示词优化器非常的奇怪

Model不一定有這樣的思考能力呀
有哪裡怪呀。。 這工具一直都存在

每個conversation最初的prompt影響很大

Agent看完不懂再思考的話,token也燒得快
你假設大家都用聰明的LLM

@CodFrm
Copy link
Copy Markdown
Member

CodFrm commented Apr 20, 2026

确实,我假设大家都用聰明的LLM了

但是我认为这个功能使用的人应该是极少数,至于有没有需要,等有真的用户反馈了再说吧,现阶段不想加入,而且也有替代的方案(新开另外一个会话)

而且这样的体验我感觉十分割裂,这只是一个妥协的方案,加功能容易,删功能难

而且确定这是不是一个伪需求吧,我从来没看见过agent系统会有这种东西,我也从来没有用过,顶多是一个完整的提示词去优化,而不是一个模糊的提示词去优化


而且你的提示词不明确的话,再怎么优化也没有用,这只能靠agent继续去追问

@CodFrm CodFrm marked this pull request as draft April 20, 2026 05:36
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.

2 participants