96SEO 2026-08-09 08:26 0
使用者痛点:上一次我们只实现了一个 get_wear mock 工具。功能极其单一,无法满足实际编码场景的需求。怎么说呢,
在本篇中。我们将把通用 Agent 升级为 Coding Agent让它能够:
每个 Feature 均提供独立可运行的 Demo。链接放在对应章节末尾,读者可直接体验。
使用者痛点:
让 typo 难以捕获。
我们通过 defineTool 工厂一次性解决上述三大问题:
import { z } from "zod";interface ToolContext {
signal?: AbortSignal;}
interface FunctionTool
{
至于name,string;description: string;parameters: P;说起来,invoke: => Promise;}
function defineTool
(opts的观点是。{
至于name,string;description: string;parameters: P;invoke: => Promise;}): FunctionTool
{
return opts;}
关键点:
Zod 用于声明 schema。Zod.infer 自动推导函数参数类型,实现“schema 改动即类型同步”。ctx 参数预留了 abort 信号还有后续可能的运行时上下文,不污染输入 schema。
const getWearTool = defineTool({
name这方面,"get_wear"。description: "查询某个城市的天气",parameters: z.object({
再看city,z.string.describe,}),invoke: async => {
await new Promise => setTimeout);if throw signal.reason;return `${city} 今天 °C 晴`;},}),
LLM 网站要求的是 JSON Schema。按理说,使用 Zod 内置的 .toJSONSchema 就可以完成转换。无需手动维护两套描述,
const resp = await this.client.chat.completions.create({
说到model,"deepseek-chat",messages: this.messages。tools: tools.map => ({
至于type,"function" as const,function: {
name这方面,t.name,description: t.description,parameters: z.toJSONSchema as Record,},})),});
If using Anthropic Provider,same .toJSONSchema result is placed into input_schema field—no extra changes required.
const tool = tools.find => t.name === call.function.name);const input = tool.parameters.parse);const result = await tool.invoke;
User Pain Point: LLM 有时会返回缺失字段或错误类型的数据。通过 Zod 的 .parse。可以立即捕获异常并在后续错误隔离机制中处理,避免脏数据进入业务逻辑。
User Pain Point: 仅有单一工具无法完成真实开发任务—— 需要能读取源码文件。
import { readFile } from "node:fs/promises";const readFileTool = defineTool({
name的观点是。"read_file",description:
"读取指定方法的文这篇文章件。其实,文件超过 MAX_FILE_CHARS 时会自动截断",parameters: z.object({
从path来看。z.string.describe,}),invoke: async => {
const content = await readFile;if return "";if {
const headChars = Math.floor;const tailChars = Math.floor;const head = content.slice;
老实说,const tail = content.slice;const omitted = content.length - headChars - tailChars;return `${head}
${tail}`;}
return content;},}),
User Pain Points:
import { writeFile } from "node:fs/promises";const writeFileTool = defineTool({
再看name。"write_file",description:
"覆盖写入文件。仅在新建或全量重写时使用。",parameters: z.object({
说到path,z.string.describe。content: z.string.describe,}),invoke: async => {
await writeFile;return `wrote ${content.length} chars to ${path}`;},}),
const strReplaceTool = defineTool({
至于name。"str_replace",description:
"在文件里把 old_str 替换成 new_str。默认只换第一处出现,传 replace_all=true 才会全部替换。",parameters:z.object({
path这方面,z.string.describe,old_str:z.string.describe,new_str:z.string.describe。replace_all:z.boolean.optional.describe,}),invoke:auto async=>{
let content=await readFile;if) throw new Error;content=replace_all?content.replaceAll:content.replace;await writeFile;return"OK",},});
The default “first‑only” behavior matches most small‑scale edits a developer would ask an LLM to perform . For bulk refactoring LLM can explicitly set {replace_all:true}.
import{exec}from"node:/child_process";import{promisify}from"noderutil";constexecAsync=promisify;constbashTool=defineTool.describe })。invoke :async=>{ const{stdout,stderr}=awaitexecAsync;constout= +,returnout.trim||"";},}),
This design works for short‑lived commands but not for long‑running processes such as dev servers.
consttoolMsgs=awaitPromise.all=>{letresult:string;try{consttool=tools.find;ifthrownewError;constinput=tool.parameters.parse);const r=awaittool.invoke;result=typeof r==='string ',r :JSON.stringify;}catch{result= Error:${err instanceof Error?err.message :String};}return{role:"tool & quotasConst。toolcallid :call.id,content :result};})),话说回来,
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback