
人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习【免费下载链接】agent-coreopenJiuwen agent-core可提供AI Agent开发、运行、调优与演进相关的全套SDK能力项目地址https://gitcode.com/openJiuwen/agent-core点击查看免费下载本指南以 openJiuwen agent-core 的openjiuwen.dev_tools.tune.optimizer模块为切入点系统讲解三类提示词优化器InstructionOptimizer、ExampleOptimizer、JointOptimizer的定位、参数语义、调用流程与底层实现原理。读者将掌握如何基于 Agent 在测试用例上的错误反馈error cases自动修正系统提示词、自动补充少样本示例并与DefaultEvaluator、Trainer组合成一条完整的数据评估 → 文本梯度反传 → 提示词更新的提示词自优化流水线。一、优化器在 openJiuwen tune 工具链中的位置openjiuwen.dev_tools.tune是 openJiuwen agent-core 提供的提示词调优prompt tuning工具集核心模块包括数据层base.py 定义Case输入 期望输出、EvaluatedCase评测结果case_loader.py 提供CaseLoader数据装载、打乱与切分评测层evaluator.py 提供DefaultEvaluator用 LLM 判定模型输出与标准答案的一致性并给出score与reason优化层本指南主角 —— optimizer/instruction_optimizer.py、optimizer/example_optimizer.py、optimizer/joint_optimizer.py训练层trainer/trainer.py 提供Trainer把优化器与评测器绑定后执行多轮迭代训练。这些类统一由 tune/init.py 导出Case、EvaluatedCase、CaseLoader、InstructionOptimizer、ExampleOptimizer、JointOptimizer、DefaultEvaluator、Trainer等因此可以直接from openjiuwen.dev_tools.tune import JointOptimizer使用。三类优化器共享同一个抽象基类BaseOptimizer定义于 optimizer/base.py统一对外暴露三个关键方法bind_parameter(parameters)—— 绑定待优化参数backward(evaluated_cases)—— 基于评测结果做文本梯度反传即让 LLM 分析错误 case 并生成对提示词的修改意见textual gradientupdate()—— 根据梯度真正改写 Agent 的提示词内容。BaseOptimizer内部将每个LLMCall包装为TextualParameter持有llm_call、gradients字典与description并维护OptimizeHistory记录每个 case 的执行轨迹TraceNode。backward/update在基类中做参数校验与异常兜底对应TOOLCHAIN_OPTIMIZER_BACKWARD_EXECUTION_ERROR等状态码真正的策略实现由子类的_backward/_update完成。二、InstructionOptimizer基于错误 case 修正指令型提示词2.1 类签名与参数openjiuwen.dev_tools.tune.optimizer.instruction_optimizer.InstructionOptimizer( model_config: ModelRequestConfig, model_client_config: ModelClientConfig, parameters: Optional[Dict[str, LLMCall]] None, **kwargs )InstructionOptimizer通过分析 Agent 输入输出错误 case 生成的反馈修正内部提示词模板从而提升 Agent 在错误样本上的准确率。参数类型说明model_configModelRequestConfig执行优化时使用的大模型请求配置模型名、temperature 等model_client_configModelClientConfig大模型服务配置client_provider、api_base、api_key等parametersDict[str, LLMCall]可选待优化的 Agent 提示词参数列表可为空为空时需在后续通过bind_parameter绑定。默认None。该参数可通过get_llm_calls()接口获得目前仅ChatAgent支持关于ModelRequestConfig/ModelClientConfig的字段语义可参考 llm.md 的 API 文档ModelRequestConfig含model_name别名model、temperature[0,1]默认 0.95、top_p默认 0.95、max_tokens、stopModelClientConfig含client_provider内置枚举OpenAI/OpenAIAccount/SiliconFlow、api_key、api_base、timeout默认 60.0 秒、max_retries默认 3、verify_ssl默认 True等。注意api_base对所有内置 provider 都是必填、不会自动填充默认值。2.2 构造示例绑定一个 ChatAgent 的可优化参数import os from openjiuwen.core.foundation.llm import ModelRequestConfig, ModelClientConfig from openjiuwen.dev_tools.tune.optimizer.instruction_optimizer import InstructionOptimizer from openjiuwen.dev_tools.tune.chat_agent import create_chat_agent_config, create_chat_agent from openjiuwen.core.single_agent.legacy import LLMCallConfig API_BASE os.getenv(API_BASE, your api base) API_KEY os.getenv(API_KEY, your api key) MODEL_NAME os.getenv(MODEL_NAME, ) MODEL_PROVIDER os.getenv(MODEL_PROVIDER, ) model_config ModelRequestConfig( modelMODEL_NAME, ) model_client_config ModelClientConfig( client_providerMODEL_PROVIDER, api_baseAPI_BASE, api_keyAPI_KEY, ) # 1. 创建待优化的 ChatAgent config create_chat_agent_config( agent_idchat_agent, agent_version1.0.0, modelLLMCallConfig( modelmodel_config, model_clientmodel_client_config, # 可优化的提示词内容 system_prompt[{role: system, content: 你是一个信息抽取助手}], ), description ) agent create_chat_agent(config, None) # 2. 创建指令优化器并绑定 Agent 参数 optimizer InstructionOptimizer(model_config, model_client_config, agent.get_llm_calls())几点说明create_chat_agent/create_chat_agent_config定义于 chat_agent.pyChatAgent是最简的 LLM 对话单 Agent其get_llm_calls()返回形如{llm_call: LLMCall对象}的字典这正是优化器要绑定的参数表。LLMCallConfig定义于 legacy/config.py中freeze_system_prompt默认False、freeze_user_prompt默认True。对应地LLMCallbase.py在构造时会用PromptTemplate包装 system/user 提示词且update_system_prompt/update_user_prompt只有在对应 freeze 开关为False时才会真正更新 —— 优化器能否改到某段提示词完全受这两个开关控制。2.3 bind_parameter手动绑定 / 更新待优化参数bind_parameter(parameters: Dict[str, LLMCall])手动绑定或更新待优化参数。基类BaseOptimizer.bind_parameter会拒绝None参数抛出TOOLCHAIN_OPTIMIZER_PARAM_ERROR并将每个LLMCall包装成TextualParameter存入内部_parameters。optimizer.bind_parameter(agent.get_llm_calls())2.4 backward基于评测结果做文本梯度反传backward(evaluated_cases: List[EvaluatedCase])根据评测完成的 case 执行文本梯度更新。EvaluatedCase由Case含inputs、label与模型输出answer、score[0,1]、reason组成定义于 tune/base.py。from openjiuwen.dev_tools.tune.base import Case, EvaluatedCase case Case(inputs{query: strawberry有几个r}, label{output: 3}) evaluated_cases [ EvaluatedCase(casecase, answer{output: 2}, score0.0, reasonstrawberry有3个r但模型回答为2数量对应不上) ] optimizer.backward(evaluated_cases)实现要点对应 instruction_optimizer.py 与 base.py基类先调用_get_bad_cases只保留score 0的错误 case并随机采样至多TuneConstant.DEFAULT_MAX_SAMPLED_EXAMPLE_NUM10个InstructionOptimizer._backward遍历每个参数用CREATE_PROMPT_TEXTUAL_GRADIENT_TEMPLATE模板让 LLM 针对错误 case 输出逐条INS反馈哪些指令导致误解、如何让指令更清晰精确若 system/user 提示词未冻结则把该反馈写入对应TextualParameter.gradients。2.5 update将优化后的提示词写回 Agentupdate()基于 backward 生成的梯度真正更新 Agent 中的提示词内容因此必须在调用backward之后执行。optimizer.update() # 此时 agent 的提示词已经完成更新例如 # 你是一个聊天小助手请仔细分析用户的问题例如数学问题并给出答案实现要点instruction_optimizer.py若 system 与 user 提示词都可优化则走PROMPT_INSTRUCTION_OPTIMIZE_BOTH_TEMPLATE一次同时产出SYSTEM_PROMPT_OPTIMIZED与USER_PROMPT_OPTIMIZED两段结果若仅其一可优化则走PROMPT_INSTRUCTION_OPTIMIZE_TEMPLATE从响应中用正则提取PROMPT_OPTIMIZED标签内的内容更新前会做占位符校验与恢复用PromptAssemblerassembler.py对比原始提示词与优化结果的{{占位符}}集合若 LLM 在改写时删掉了占位符会调用PLACEHOLDER_RESTORE_TEMPLATE让模型补回兜底时直接在末尾追加缺失占位符保证优化不破坏模板的可渲染性PromptTemplate的渲染逻辑见 template.py。三、ExampleOptimizer归纳错误 case 生成代表性示例3.1 类签名与参数openjiuwen.dev_tools.tune.optimizer.example_optimizer.ExampleOptimizer( model_config: ModelConfig, parameters: Optional[Dict[str, LLMCall]] None, num_examples: int 1 )ExampleOptimizer通过对错误 case 做归纳式分析将最具代表性的示例追加进提示词优化 Agent 在错误实例上的表现。与InstructionOptimizer相比它不改写指令文本而是往提示词里附加 few-shot 示例。参数类型说明model_configModelRequestConfig执行优化的大模型请求配置model_client_configModelClientConfig大模型服务配置parametersOptional[Dict[str, LLMCall]]待优化参数列表可为空后续经bind_parameter绑定默认Nonenum_examplesint可选允许添加到提示词中的示例数量取值范围[0, 20]默认1num_examples的合法性由 TuneConstant 中的MIN_EXAMPLE_NUM0与MAX_EXAMPLE_NUM20约束构造时若超出范围会抛出TOOLCHAIN_OPTIMIZER_PARAM_ERROR。当num_examples 0时backward 会直接跳过示例优化源码中会记录一条AGENT_RESPONSE日志。3.2 构造示例import os from openjiuwen.core.foundation.llm import ModelRequestConfig, ModelClientConfig from openjiuwen.dev_tools.tune.optimizer.example_optimizer import ExampleOptimizer from openjiuwen.dev_tools.tune.chat_agent import create_chat_agent_config, create_chat_agent from openjiuwen.core.single_agent.legacy import LLMCallConfig API_BASE os.getenv(API_BASE, your api base) API_KEY os.getenv(API_KEY, your api key) MODEL_NAME os.getenv(MODEL_NAME, ) MODEL_PROVIDER os.getenv(MODEL_PROVIDER, ) model_config ModelRequestConfig( modelMODEL_NAME, ) model_client_config ModelClientConfig( client_providerMODEL_PROVIDER, api_baseAPI_BASE, api_keyAPI_KEY, ) # 1. 创建待优化的 ChatAgent config create_chat_agent_config( agent_idchat_agent, agent_version1.0.0, modelLLMCallConfig( modelmodel_config, model_clientmodel_client_config, # 可优化的提示词内容 system_prompt[{role: system, content: 你是一个信息抽取助手}], ), description ) agent create_chat_agent(config, None) # 2. 创建示例优化器绑定 Agent 参数允许加入 1 个示例 optimizer ExampleOptimizer(model_config, model_client_config, agent.get_llm_calls(), 1)3.3 bind_parameter / backward / updatebind_parameter语义与InstructionOptimizer完全一致optimizer.bind_parameter(agent.get_llm_calls())backward接收List[EvaluatedCase]from openjiuwen.dev_tools.tune.base import Case, EvaluatedCase case Case(inputs{query: strawberry有几个r}, label{output: 3}) evaluated_cases [ EvaluatedCase(casecase, answer{output: 2}, score0.0, reasonstrawberry有3个r但模型回答为2数量对应不上) ] optimizer.backward(evaluated_cases)update在 backward 之后执行optimizer.update() # 此时 agent 的提示词已经完成更新例如 # 你是一个聊天小助手。example-1:\n[question]: query: strawberry有几个r\n[expected answer]: output: 3实现要点example_optimizer.py_backward用EXAMPLE_SELECTION_TEMPLATE让 LLM 从候选集中选出num_examples个最具代表性的示例模型以list包裹的索引列表输出如[0, 2, 4]源码用TuneUtils.parse_list_from_llm_response解析若索引不足则通过_fill_missing_example从剩余 case 中随机补齐若 LLM 调用失败则回退到纯随机采样选中示例经TuneUtils.convert_cases_to_examplesutils.py格式化为example N:\n[question]: ...\n[expected answer]: ...的字符串作为梯度写入对应提示词槽位_update优先把示例追加到user prompt末尾若未冻结否则追加到 system prompt追加方式为\n.join([原提示词, 示例])属于增量叠加而非重写因此不会触碰模板占位符另外还提供init_examples用于在正式开始优化前预先随机采样若干示例供JointOptimizer等场景初始化 few-shot 基线。四、JointOptimizer指令优化与示例优化的联合优化器4.1 类签名与参数openjiuwen.dev_tools.tune.optimizer.joint_optimizer.JointOptimizer( model_config: ModelConfig, parameters: Optional[Dict[str, LLMCall]] None, num_examples: int 1 )JointOptimizer是提示词指令与示例的联合优化器它同时优化提示词内容并挑选有效示例从而提升 Agent 整体表现。参数语义与前两者一致num_examples范围[0, 20]默认1。实现要点joint_optimizer.py构造时内部同时创建InstructionOptimizer与ExampleOptimizer两者均持有parameters的深拷贝互不污染backward阶段先调用self._example_optimizer.init_examples(evaluated_cases)准备示例基线再通过_select_optimize_strategy()随机决定本轮走指令优化还是示例优化当num_examples 0时二者随机二选一否则只做指令优化随后把对应子优化器的梯度透传到主参数表update阶段若本轮为指令优化先执行_instruction_optimizer.update()拿到改写后的 system prompt然后不管是否做指令优化都会把示例梯度追加到未冻结的 user prompt若 user prompt 冻结则追加到未冻结的 system prompt实现指令改写 示例附加两种能力在同一 Agent 上的融合。4.2 构造示例import os from openjiuwen.core.foundation.llm import ModelRequestConfig, ModelClientConfig from openjiuwen.dev_tools.tune.optimizer.joint_optimizer import JointOptimizer from openjiuwen.dev_tools.tune.chat_agent import create_chat_agent_config, create_chat_agent from openjiuwen.core.single_agent.legacy import LLMCallConfig API_BASE os.getenv(API_BASE, your api base) API_KEY os.getenv(API_KEY, your api key) MODEL_NAME os.getenv(MODEL_NAME, ) MODEL_PROVIDER os.getenv(MODEL_PROVIDER, ) model_config ModelRequestConfig( modelMODEL_NAME, ) model_client_config ModelClientConfig( client_providerMODEL_PROVIDER, api_baseAPI_BASE, api_keyAPI_KEY, ) config create_chat_agent_config( agent_idchat_agent, agent_version1.0.0, modelLLMCallConfig( modelmodel_config, model_clientmodel_client_config, system_prompt[{role: system, content: 你是一个信息抽取助手}], ), description ) agent create_chat_agent(config, None) # 创建联合优化器绑定 Agent 参数允许加入 1 个示例 optimizer JointOptimizer(model_config, model_client_config, agent.get_llm_calls(), 1)4.3 bind_parameter / backward / updateoptimizer.bind_parameter(agent.get_llm_calls())case Case(inputs{query: strawberry有几个r}, label{output: 3}) evaluated_cases [ EvaluatedCase(casecase, answer{output: 2}, score0.0, reasonstrawberry有3个r但模型回答为2数量对应不上) ] optimizer.backward(evaluated_cases)optimizer.update() # 此时 agent 的提示词已经完成更新例如 # 你是一个聊天小助手请仔细分析用户的问题例如数学问题并给出答案。example-1:\n[question]: query: strawberry有几个r\n[expected answer]: output: 3五、完整实践把优化器接入评测与训练流水线5.1 手动三步走评估 → backward → update以下是端到端的最小用法与 evaluator.md 中DefaultEvaluator的示例逻辑一致import asyncio from openjiuwen.dev_tools.tune import ( create_chat_agent_config, create_chat_agent, Case, DefaultEvaluator, JointOptimizer, ) from openjiuwen.core.single_agent.legacy import LLMCallConfig from openjiuwen.core.foundation.llm import ModelRequestConfig, ModelClientConfig # ……model_config / model_client_config 同上文…… # 1. 创建 Agent 与测试 case config create_chat_agent_config( agent_idchat_agent, agent_version1.0.0, modelLLMCallConfig( modelmodel_config, model_clientmodel_client_config, system_prompt[{role: system, content: 你是一个信息抽取助手}], ), description ) agent create_chat_agent(config, None) case Case( inputs{query: 潘之恒约1536—1621字景升号鸾啸生冰华生安徽歙县、岩寺人侨寓金陵今江苏南京}, label{output: [潘之恒]} ) # 2. 前向推理得到预测 async def forward(agent, case): return await agent.invoke(case.inputs) predict asyncio.run(forward(agent, case)) # 3. 创建评测器可自定义 metric 规则 evaluator DefaultEvaluator( model_config, model_client_config, metric如果是非工具调用两个回答需要完全一致包括数量和名字如果是工具调用只需关注tool_calls字段中插件名称和参数是否一致 ) # 4. 评测得到 EvaluatedCase eval_result evaluator.evaluate(case, predict) # 5. 创建优化器并执行优化 optimizer JointOptimizer(model_config, model_client_config, agent.get_llm_calls(), num_examples1) optimizer.backward([eval_result]) optimizer.update() # 6. 再次前向推理并评测对比优化前后 score predict asyncio.run(forward(agent, case)) eval_result evaluator.evaluate(case, predict) print(fscore: {eval_result.score}, reason: {eval_result.reason})5.2 接入 Trainer 一键迭代训练如果不想手动编排 backward/update 循环可直接使用 Trainerfrom openjiuwen.dev_tools.tune import ( Trainer, CaseLoader, JointOptimizer, DefaultEvaluator, ) # 1. 构造优化器num_examples0 表示只做指令优化 optimizer JointOptimizer(model_config, model_client_config, num_examples0) # 2. 构造评测器 evaluator DefaultEvaluator( model_config, model_client_config, metric两个回答需要一致。注意可以忽略引号格式问题 ) # 3. 构造训练器num_parallel 控制并发 [1, 20]默认 1 trainer Trainer(optimizeroptimizer, evaluatorevaluator, num_parallel5) # 4. 加载训练数据并训练 case_loader CaseLoader(cases[case1, case2, ...]) agent trainer.train(agent, case_loader) # num_iterations 默认 3 轮范围 [1, 20] # 5. 评估优化后效果 score, evaluated_cases trainer.evaluate(agent, case_loader)Trainer的工作机制trainer.py训练前先评估验证集得到基线分数若已超过early_stop_score默认 1.0则跳过优化每轮 epoch 先记录当前参数进入with self._optimizer:上下文该上下文会临时把trace_callback挂到所有LLMCall上以便记录每个 case 的逐节点执行轨迹执行backwardupdate后由ParameterSearcher从候选参数组合中随机采样上限 6 组逐一评估只保留验证集分数更优的参数若本轮没有提升则回滚到 epoch 前的参数防止优化退化。六、可优化参数的边界freeze 开关与 get_llm_calls需要特别强调的是优化器并非对任意提示词都生效可优化性由LLMCall的冻结开关决定LLMCallConfig.freeze_system_prompt默认Falsesystem 提示词可被优化器改写LLMCallConfig.freeze_user_prompt默认Trueuser 提示词默认冻结需显式置为False才允许更新。对应实现见 legacy/config.py 与 llm_call/base.pyupdate_system_prompt/update_user_prompt内部均以对应 freeze 开关为门卫。因此在实际调优时将希望优化的提示词段放入system_prompt字段或同时打开freeze_user_promptFalse并放入user_prompt将不希望被改写的固定约束通过freeze_system_promptTrue/freeze_user_promptTrue保护起来若提示词中含有{{占位符}}如{{query}}InstructionOptimizer的占位符恢复机制会尽力保留它们而ExampleOptimizer只在末尾追加示例天然不影响占位符。此外BaseOptimizer支持with optimizer:上下文管理以及异步async with进入上下文时自动把trace_callback挂到所有绑定参数上、退出时卸载从而在训练期间记录每个 LLM 节点的输入输出轨迹OptimizeHistory供需要轨迹级梯度的场景如 AdoptOptimizer 对多阶段工作流做全局梯度分解使用。七、底层提示词模板速览三类优化器的文本梯度与提示词改写本质上都是用 LLM 调用预先设计好的模板完成的核心模板源码内直接定义包括优化器模板作用InstructionOptimizerCREATE_PROMPT_TEXTUAL_GRADIENT_TEMPLATE输入 system/user 提示词 错误 case输出逐条INS修改建议文本梯度InstructionOptimizerPROMPT_INSTRUCTION_OPTIMIZE_TEMPLATE基于梯度与错误 case 改写单个提示词输出PROMPT_OPTIMIZEDInstructionOptimizerPROMPT_INSTRUCTION_OPTIMIZE_BOTH_TEMPLATE同时改写 system 与 user 提示词输出SYSTEM_PROMPT_OPTIMIZED/USER_PROMPT_OPTIMIZEDInstructionOptimizerPLACEHOLDER_RESTORE_TEMPLATE把优化过程中丢失的占位符补回提示词ExampleOptimizerEXAMPLE_SELECTION_TEMPLATE让 LLM 从候选示例中选出最具有代表性的num_examples个以索引列表形式输出这些模板对 LLM 的约束比较严格例如优化内容不得照搬示例中的具体信息输出必须被指定标签包裹目的是让模型输出可被正则稳定解析_extract_optimized_prompt_from_response用tag(.*?)/tag提取从而形成可靠的自动化闭环。若主题涉及多阶段工作流/多 LLM 节点还可参考 adopt/utils.py 中的OUTPUT_CHANGE_*、DEEP_OUTPUT_ANALYSIS_*、EXPECTED_OUTPUT_*、GRADIENT_*、PROMPT_UPDATE_*等模板了解全局梯度 → 逐节点局部梯度 → 逐节点提示词更新的进阶路线。八、周边配套数据与评测类快速参考优化器需要与以下配套组件协同工作Caseinputs输入参数字典、label期望输出字典、tools可选工具列表、case_id默认 UUID定义于 base.pyEvaluatedCase在Case基础上增加answer模型输出、score[0,1] 浮点默认 0、reason评分理由见 base.pyCaseLoader管理 case 列表提供shuffle(random_seed0)、size()、get_cases()、split(ratio0.5)等方法见 case_loader.pyDefaultEvaluator基于 LLM 的默认评测器构造参数model_config/model_client_config/metric自定义评测规则描述为空时按语义一致性打分提供evaluate(case, predict)与batch_evaluate(cases, predicts, num_parallel1)评测输出不合规 JSON 时还会用LLM_METRIC_RETRY_TEMPLATE自动修复重试见 evaluator.py。一个典型调优项目的标准流程为准备Case数据集 →CaseLoader装载 →DefaultEvaluator评测基线 → 选择三类优化器之一或直接用Trainer编排多轮→ 收集错误 case 反馈 → backward 生成文本梯度 → update 写回提示词 → 重新评测对比分数。九、小结与选型建议需求场景推荐优化器提示词表述不清、缺少细节约束希望直接改写指令文本InstructionOptimizer指令已经够清晰但 Agent 缺少规范输出的参考模式希望追加 few-shot 示例ExampleOptimizer不确定问题出在指令还是示例希望两者同时兼顾JointOptimizer内部随机在两种策略间切换需要多轮迭代、自动回滚坏参数、对比优化前后分数组合Trainer使用使用时的三个关键约束待优化提示词必须通过bind_parameter或构造时传入agent.get_llm_calls()绑定且未被 freeze 开关锁定update()必须在backward()之后调用num_examples取值范围为[0, 20]超出会直接抛参数错误。openJiuwen agent-core 的这套优化器把LLM 反馈即梯度的思想落地为工程可复用的BaseOptimizer抽象配合DefaultEvaluator与Trainer即可在不改动模型权重的前提下仅通过自动改写提示词与追加示例来系统性提升 Agent 在错误样本上的表现。赞分享人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习【免费下载链接】agent-coreopenJiuwen agent-core可提供AI Agent开发、运行、调优与演进相关的全套SDK能力项目地址https://gitcode.com/openJiuwen/agent-core点击查看免费下载相关推荐openJiuwen agent-core 优化器体系深度解析BaseOptimizer、InstructionOptimizer 与 SkillExperienceOptimizer 的实现与实战openJiuwen agent core 优化器体系深度解析BaseOptimizer、InstructionOptimizer 与 SkillExperi人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习openJiuwen agent-core 系统提示词工程实战openjiuwen.harness.prompts 模块全解openJiuwen agent core 系统提示词工程实战openjiuwen.harness.prompts 模块全解 导读 本指南以 prompts.人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习DLSS Swapper 完全上手指南免费切换游戏内 DLSS 版本换崩一键回滚DLSS Swapper 完全上手指南免费切换游戏内 DLSS 版本换崩一键回滚 上个月我手动换过一款老 3A 的 DLSS DLL换完原文件找不着了。现桌面应用上一篇5分钟上手Audio Annotator免费开源音频标注工具完整指南下一篇4 步跑通 Deep-Live-Cam 实时换脸从模型下载到第一帧出图创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考