分类: 32

  • AI接口教程:用JSON结构化输出和函数调用连接业务系统

    一句话结论:让 AI 接入业务系统时,应把“回答问题”和“调用工具”分开设计:结构化输出负责稳定传递数据,函数调用负责请求外部系统执行动作,最终结果必须由程序校验。

    本文参考 OpenAI 的 Structured Outputs 与 Function Calling 官方文档,适合做客服分流、内容发布、订单查询等原型。工具调用不是让模型直接操作服务器,而是由应用定义工具、校验参数并执行。

    两种能力的区别

    能力 用途 程序要做什么
    结构化输出 把回答变成固定 JSON 按 Schema 校验字段和类型
    函数调用 让模型请求查询或动作 校验参数、执行函数、返回结果

    结构化输出示例

    请把用户问题分类为 JSON:
    {
      "intent": "article_search | article_feedback | human_help",
      "keywords": ["关键词"],
      "needs_human": true,
      "reason": "不超过 50 字"
    }
    规则:只能使用列出的 intent;无法判断时使用 human_help。

    生产接口中不要只依靠提示词约束格式,应使用当前 SDK 支持的 JSON Schema,并处理拒答、截断、解析失败和字段缺失。Schema 的键名和描述要有业务含义,不能把所有可能情况都塞成一个字符串。

    函数调用的闭环

    1. 应用把工具名称、参数 Schema 和用户问题交给模型。
    2. 模型返回工具调用请求,而不是直接执行。
    3. 应用验证参数、权限和资源范围,再调用真实函数。
    4. 应用把工具结果回传给模型,让它生成用户可读的答复。
    5. 记录调用日志,并对写入、删除、付款等高风险动作增加人工确认。

    安全设计要点

    工具参数不能绕过权限检查;用户输入不能直接拼接 SQL、Shell 或文件路径;写操作要做幂等、审计和超时;外部结果也要当作不可信数据处理。模型说“已发布”不等于系统真的发布,界面应以工具实际返回的状态为准。

    常见问题

    结构化输出等于函数调用吗?

    不等于。前者约束数据格式,后者建立模型与应用函数之间的交互流程。

    模型会自动执行函数吗?

    不会。应用需要接收调用请求、校验并执行,之后再把结果返回给模型。

    为什么还要做 Schema 校验?

    提示词不是程序级约束,Schema 和代码校验能更早发现类型、枚举和字段问题。

    哪些工具需要人工确认?

    发布、删除、付款、改权限和发送外部消息等不可逆或高影响动作,建议确认后执行。

    如何开始做第一个原型?

    先做只读查询,固定 3 个测试问题,记录成功和失败,再逐步加入写操作。

    \n

    信息来源与说明

    本文参考 OpenAI Structured Outputs 指南和 OpenAI Function Calling 指南整理。接口参数和 SDK 写法应以当前官方文档为准。

  • GitHub Copilot编程教程:从需求拆分到测试验证的提示词方法

    一句话结论:使用 GitHub Copilot 编程时,先给目标和相关文件,再把复杂需求拆成小任务,并要求测试和验证,比只输入一句“帮我写代码”更可靠。

    本文根据 GitHub 官方提示工程建议整理,适用于 Copilot Chat、代码解释和重构场景。代码建议必须经过本地测试、代码审查和安全检查,不能把模型输出直接当成可上线代码。

    一条可复用的编程提示词

    目标:为用户列表增加按邮箱搜索功能。
    项目背景:这是一个已有的 TypeScript Web 项目,搜索结果需要分页。
    相关文件:请先阅读 src/users、src/api/users.ts 和现有测试目录。
    要求:
    1. 先说明修改计划,不立即改动无关文件。
    2. 保持现有 API 返回格式兼容。
    3. 为空输入、大小写和分页边界增加测试。
    4. 完成后列出修改文件、运行的测试和仍需人工确认的风险。

    推荐工作流

    1. 先问项目:让 Copilot 解释目录、入口和现有约定。
    2. 再拆需求:把接口、数据层、界面和测试分成独立任务。
    3. 限定范围:明确允许修改的文件,避免无关重构。
    4. 边写边测:每完成一个小任务就运行对应测试。
    5. 最后审查:检查鉴权、输入校验、错误处理和依赖变化。

    如何减少歧义

    告诉 Copilot 现有框架、语言版本、命名约定和不能破坏的兼容性。遇到报错时,附上完整错误、触发步骤和相关代码片段,不要只说“它坏了”。如果模型给出多个方案,先让它比较取舍,再选择一个实现。

    测试提示词示例

    请为刚才的搜索函数补充测试:
    - 正常匹配一条和多条结果;
    - 无匹配结果;
    - 大小写差异;
    - 空字符串和超长输入;
    - 第 1 页、第 0 页和超出总页数。
    只修改测试文件,并说明每个用例验证的行为。

    常见问题

    Copilot 能替代代码审查吗?

    不能。它可以辅助解释和生成测试,但安全、权限、性能和业务正确性仍需开发者审查。

    提示词要把整个项目都贴进去吗?

    不需要。先指定相关目录和文件,提供完成任务所需的最小上下文。

    遇到连续错误怎么办?

    停止重复生成,回到最小复现,提供错误日志和当前实现,让模型先定位原因。

    如何避免无关重构?

    明确“只修改这些文件”“保持公共接口不变”,并要求先输出计划。

    AI 写的依赖能直接安装吗?

    不能直接信任。检查许可证、版本、漏洞和是否真的解决问题。

    信息来源与说明

    本文参考 GitHub Copilot 官方提示工程文档整理。具体快捷键和产品能力会随 IDE 与版本变化。