
1. Visual Studio 预览版 Agent 模式到底能做什么Visual Studio 17.14 把 Agent 模式放进了公开预览这个功能和你熟悉的 Copilot Chat、Copilot Edits 不是一回事。Chat 是问答Edits 是单次改文件而 Agent 模式是让 Copilot 自己规划、自己找文件、自己调工具、自己跑构建和测试然后根据报错继续改直到任务完成。你只需要给一句自然语言比如「把这个项目里的 HttpClient 全部换成 IHttpClientFactory」它会自己搜索代码库、列出要改的文件、逐个编辑、再跑一遍编译确认没坏。适合谁用已经装了 Visual Studio 17.14 及以上版本、并且已经登录过 GitHub Copilot 的开发者。如果你平时写 C#、做 ASP.NET 项目、或者维护一个多项目的解决方案Agent 模式在多文件重构、补测试、加日志这类任务上省的时间最明显。它不适合的场景也很清楚单行改个变量名、问一个语法问题用 Chat 更快Agent 模式反而因为要规划多步而变慢。这里有个关键点Agent 模式会从单个提示向后端发出多个请求。它先规划、再读文件、再编辑、再验证每一步都是一次模型调用。如果你用的是默认的 Copilot 通道这些请求都走官方 endpoint。而很多团队希望把这些请求统一收口到自己的 API 通道上用一个 Key 管理、统一看用量、统一换模型。这篇就是讲怎么把 Visual Studio 里 Copilot 的 endpoint 改到 TaoToken 的通道上并且验证 Agent 模式的请求能正常返回。我试过在 17.14 上把 endpoint 指过去Agent 模式跑一个「给这个类写测试并修复失败用例」的任务整个迭代过程是通的。下面把配置和验证拆开讲你照着做就行。2. 接入前的准备TaoToken 通道与 Key 的获取在动 Visual Studio 的设置之前先把通道侧的东西准备好。TaoToken 提供的是统一的 API 通道官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 。你需要拿到两样东西一个 API Key和一个你要用的 Model ID。先注册并登录然后进控制台。控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 。在控制台里创建 API Key地址是 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。创建的时候给它起个能认出来的名字比如vs-agent-dev方便以后按项目区分用量。Key 只在创建时完整显示一次复制下来存到你的密码管理器或者本地环境变量里别直接写进会提交到 Git 的文件。Model ID 这块要注意Agent 模式对模型的工具调用能力有要求因为它要调终端命令、要读文件、要迭代。选一个支持 function calling / tool use 的模型。你在控制台的模型列表里能看到可用的 Model ID把它记下来后面配置里要用。如果你不确定选哪个先用一个通用能力强的对话模型试通链路再换成更适合编码的。关于鉴权方式TaoToken 的 API 走的是标准的 Bearer Token也就是在请求头里带Authorization: Bearer 你的Key。这一点和 OpenAI 兼容接口一致所以 Visual Studio 里凡是能填自定义 endpoint 和 API Key 的地方都能对接上。这里提醒一句不要把 Key 硬编码进任何会进版本库的配置文件。Visual Studio 的 Copilot 配置有些是存在用户目录下的有些是解决方案级的解决方案级的那个尤其要注意别提交。你可以用环境变量TAOTOKEN_API_KEY来存配置里引用变量名。准备好 Key 和 Model ID 之后先别急着开 Visual Studio用一条 curl 确认通道本身是通的。这一步能帮你把「通道问题」和「VS 配置问题」分开后面排障会省很多事。curl -s https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -d { model: 你的ModelID, messages: [{role: user, content: ping}], max_tokens: 16 }如果这条命令返回了正常的 JSON里面有choices字段说明 Key 和通道都没问题。如果返回 401那是 Key 的问题如果返回模型不存在的错误那是 Model ID 写错了。把这两个错误在通道层解决掉再去配 Visual Studio。3. 在 Visual Studio 里改 Copilot endpoint 的可复制配置Visual Studio 的 Copilot 配置分几层Agent 模式的开关和模型通道的指向不在同一个地方。先把 Agent 模式打开按Ctrl Q打开 Feature Search搜copilot-chat.agent找到Copilot Chat: Agent Enabled这一项勾上。然后在 Copilot 聊天窗口顶部把模式切到 Agent。这一步是官方文档里的标准流程17.14 上默认是关的。接下来是重点把请求指向 TaoToken 的通道。Visual Studio 里 Copilot 的自定义 endpoint 配置通常落在用户级的配置文件里。不同版本路径略有差异常见的位置是用户目录下的.copilot或者 Visual Studio 的配置目录。你要找的是一个能填 Base URL、API Key、Model ID 三件套的地方。下面给一份可复制的 JSON 配置片段字段名按你实际版本里的为准值换成你自己的{ copilot: { chat: { endpoint: https://taotoken.net/api/v1, apiKey: ${TAOTOKEN_API_KEY}, model: 你的ModelID, provider: openai-compatible }, agent: { enabled: true, endpoint: https://taotoken.net/api/v1, apiKey: ${TAOTOKEN_API_KEY}, model: 你的ModelID, maxIterations: 12, autoApproveTerminal: false } } }几个字段解释一下。endpoint填https://taotoken.net/api/v1注意带/v1因为后面拼的是/chat/completions。apiKey用${TAOTOKEN_API_KEY}引用环境变量这样配置文件本身可以安全地放进版本库或者分享给同事。model填你在控制台看到的 Model ID。provider填openai-compatible因为 TaoToken 的接口是 OpenAI 兼容格式。maxIterations控制 Agent 最多迭代多少轮默认给 12 够用任务特别复杂可以调大但别无限大不然一个跑偏的任务会烧掉很多请求。autoApproveTerminal建议先设false让 Agent 每次要跑终端命令时都问你一下确认它没在乱跑命令等信任了再考虑放开。如果你用的是解决方案级的配置路径通常在解决方案根目录的.vs或者一个专门的配置文件里。这种文件一定要加进.gitignore因为里面虽然有环境变量引用但路径和模型选择是团队相关的不该强制同步给所有人。配置改完重启 Visual Studio。Copilot 的配置很多是启动时读的不重启不生效。重启后在 Copilot 聊天窗口切到 Agent 模式随便发一句「列出当前解决方案里的所有项目」看它能不能正常返回。如果这一步就报错先看下一节的排障。4. 验证 Agent 模式请求正常返回的完整步骤配置改完不算完得验证 Agent 模式的请求真的走到了 TaoToken 的通道上而且能完成一次完整的迭代。验证分三步先验证单次对话再验证工具调用最后验证完整迭代。第一步单次对话验证。在 Agent 模式下发一句不需要改代码的提示比如「这个解决方案用的是什么 .NET 版本」。如果返回正常说明 endpoint、Key、Model ID 三件套都对。这一步走的是普通的 chat completions和 curl 那条命令等价。第二步工具调用验证。发一句需要读文件的提示比如「读一下 Program.cs 的前 20 行告诉我入口点在哪」。Agent 模式会去调文件读取工具。如果它能正确读出内容说明模型支持 tool use而且通道把工具调用的请求也正常转发了。这一步很关键因为 Agent 模式和普通 Chat 最大的区别就是工具调用如果模型不支持 function callingAgent 模式会退化成只能聊天改不了代码。第三步完整迭代验证。发一个会触发「编辑-构建-修复」循环的任务比如「给这个类写单元测试然后跑一遍把失败的修掉」。观察 Copilot 的输出面板你会看到它先规划、再创建测试文件、再调用终端跑dotnet test、再根据报错改代码、再跑一遍。整个过程如果能在几轮内收敛到测试通过说明 Agent 模式的完整链路是通的。验证的时候建议开着 TaoToken 控制台的用量页面地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 。Agent 模式一个任务会发多个请求你在用量页面上能看到请求数在涨这能反过来确认请求确实走了 TaoToken 的通道而不是偷偷走了别的路。如果 VS 里显示在跑但用量页面一动不动那说明配置没生效请求还在走默认通道。还有一个验证点模型返回的choices结构。如果你在 VS 的输出日志里能看到原始响应确认里面有choices[0].message和可能的tool_calls字段。如果看到的是reading choices之类的解析错误说明返回格式和 VS 期望的不一致通常是 endpoint 少了/v1或者多了路径。验证通过之后你就可以正常用 Agent 模式干活了。建议先从小的重构任务开始比如「把这个文件里的字符串拼接改成插值字符串」确认行为符合预期再上大任务。5. 常见报错排查401、local proxy failed、reading choices配自定义通道最容易踩的坑就那么几个我把真实遇到过的报错和对应解法列出来你对着查。401 Unauthorized。这个最常见意思是 Key 没被认出来。三种可能Key 复制的时候带了空格或者换行环境变量TAOTOKEN_API_KEY没设上配置文件里引用了个空值Key 被删了或者过期了。排查方法先在终端里echo $TAOTOKEN_API_KEY看有没有值再用第 2 节那条 curl 直接测。curl 通了但 VS 里 401那就是 VS 读环境变量的方式和终端不一样VS 是图形化启动的可能没继承你 shell 里的环境变量。解法是在系统级设置环境变量或者干脆在 VS 的配置里直接填 Key但这样就不能提交配置文件了。local proxy failed。这个报错通常出现在 VS 尝试通过本地代理转发请求的时候。如果你机器上配了什么本地代理工具VS 可能会试图走它。解法是检查 VS 的代理设置把自定义 endpoint 加到不走代理的列表里或者确认你的网络环境能直连taotoken.net。注意这里说的是本地开发环境的网络配置不是让你去搞什么网络工具就是把直连通道确认好。reading choices 失败 / 解析响应出错。这个报错说明请求发出去了也回来了但返回的 JSON 结构 VS 解析不了。最常见的原因是 endpoint 路径不对。TaoToken 的基址是https://taotoken.net/apichat completions 的完整路径是https://taotoken.net/api/v1/chat/completions。如果你在配置里填的 endpoint 是https://taotoken.net/apiVS 可能会拼成https://taotoken.net/api/chat/completions少了/v1就会 404 或者返回非预期结构。解法是把 endpoint 填成https://taotoken.net/api/v1。另一个可能是 Model ID 写错了返回了一个错误对象而不是正常的 choices 数组。OAuth 相关报错。如果你之前登录过 GitHub Copilot 的官方账号VS 里可能还留着 OAuth token配置改到自定义通道后某些请求可能还在尝试用旧的 OAuth 流程。解法是在 VS 里退出 Copilot 账号登录或者清除 Copilot 的缓存目录让它重新按配置文件走。具体位置在用户目录下的 Copilot 缓存文件夹清掉之后重启 VS。Agent 模式开关找不到。Ctrl Q搜copilot-chat.agent搜不到通常是 VS 版本不够。Agent 模式要 17.14 及以上而且要是预览版通道。检查你的 VS 更新通道切到预览版再更新。请求发出去了但 Agent 不迭代。任务发下去Copilot 只回了一句话就停了没有去改文件。这通常是模型不支持 tool use或者maxIterations设成了 0 或 1。确认你选的 Model ID 支持 function calling把maxIterations调到 12 以上。排查的时候有个通用思路先用 curl 确认通道再用 VS 的单次对话确认配置最后用工具调用确认模型能力。一层一层往下查别一上来就怀疑最复杂的地方。6. 把 Agent 模式用顺手的几个实操建议配置通了之后怎么用得好是另一回事。Agent 模式的能力边界和普通 Chat 不一样提示词的写法也要跟着变。第一提示词要给目标不要给步骤。你写「先打开 A 文件再改第 10 行再打开 B 文件」这是把 Agent 当脚本用浪费了它的规划能力。你应该写「把项目里所有同步的 HTTP 调用改成异步」让它自己去规划改哪些文件、怎么改。目标越清晰它的规划越准。第二善用自定义指令。Agent 模式每次任务都会读你的自定义指令你可以把团队的编码规范、偏好的库、命名约定写进去这样它生成的代码不用你反复纠正。自定义指令的配置入口在 Copilot 的设置里把常用的规则写进去比如「所有公开方法必须有 XML 注释」「日志统一用 Serilog」「不要用 var 声明公共变量」。第三控制任务粒度。Agent 模式适合中等复杂度的任务太简单浪费请求太复杂容易跑偏。一个任务控制在「一个可验证的目标」比较合适比如「给这个服务类补全单元测试并跑通」而不是「重构整个项目」。任务太大它迭代到一半可能就迷失方向了maxIterations用完还没收敛。第四盯着终端命令。autoApproveTerminal设成false的时候Agent 每次要跑命令都会问你。别嫌烦这是你的安全阀。确认它跑的是dotnet build、dotnet test这类正常命令再批准。如果它要跑什么奇怪的命令直接拒绝然后调整你的提示词。第五用 Coding Plan 管理长期用量。如果你打算把 Agent 模式作为日常开发的主力请求量会不小因为一个任务多个请求。TaoToken 的 Coding Plan 页面在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 可以按长期编码场景来规划用量比按次零散调用更划算。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有完整的接口说明和参数列表遇到不确定的字段去那里查。最后说一个我踩过的坑Agent 模式在跑长任务的时候如果你中途改了配置文件它不会重新读得重启 VS 才生效。所以配置一次调好别在任务跑到一半的时候去动它。另外Agent 模式的输出面板会显示每一步的请求你可以对着 TaoToken 控制台的用量记录看两边对得上说明链路是干净的。