Video 4- Phase A Demos and Walkthrough
来源:AI时代学习营 · AI Builder 课程 · 在学习书房阅读原版(含图)
面部识别学习
fastapi写代码
FastAPI问答功能增加
- API安全配置

- 环境变量存储:使用.env文件存储API密钥,避免硬编码在代码中,防止密钥随代码上传至版本控制系统
- gitignore配置:将.env文件添加到.gitignore中,确保不会被提交到代码仓库
- 配置检查:在代码中添加检查逻辑,如果API token未设置会报错提示”AI_BUILDER_API_TOKEN未设置,请在.env文件中设置”
- 接口开发流程

- OpenAPI规范:从AI Builder Space下载OpenAPI JSON文件,该文件定义了API的使用规范
- 兼容性设计:接口设计保持与OpenAI SDK兼容,方便未来直接调用
- 请求转发:构建chat接口将用户请求转发到AI Builder的chat completion API
- 接口测试验证

- 测试方法:通过Swagger UI的”Try it out”功能直接测试接口
- JSON格式:注意删除最后一个逗号保持合法的JSON格式
- 示例请求:用户输入”法国的首都在哪里”,接口成功返回”法国的首都是巴黎”
- Agentic AI系统特征核心特征:
- 工具使用:AI能够判断何时需要使用工具(如搜索引擎)
- 多步决策:AI可以自主决定处理流程的轮次,形成决策循环实现步骤:
- 为AI提供可用工具定义
- 编写代码构建决策循环机制工作流程:
- 用户请求进入系统
- AI判断是否需要使用工具
- 系统执行工具调用(如搜索)
- 将工具结果返回给AI进行下一步决策
- 最终形成响应返回用户
FastAPI搜索功能实现
- 环境配置管理

- 安全存储:使用.env文件存储API token等敏感信息,避免直接写在代码中
- 配置读取:通过load_dotenv()加载环境变量,使用os.getenv()获取配置
- 版本控制:将.env文件添加到.gitignore,同时创建.env.example供开发者参考
- 错误处理:未设置API token时会抛出明确错误提示”AI_BUILDER_API_TOKEN未设置”
- 搜索API实现

- 功能设计:新增/search端点接收搜索关键字,调用AI Builder Space的搜索API
- 参数说明:
- keyword:必需参数,搜索关键词
- max_results:可选参数,默认6,范围1-20返回内容:包含搜索结果列表、综合答案和可能的错误信息
- 测试验证:已测试”Python FastAPI”搜索,返回5个结果包含标题、URL等内容
- 实际应用测试

- 测试案例:搜索”西雅图天气”成功返回结果
- 结果验证:
- 包含天气网站(weather.com)的实时数据
- 同时返回相关图片结果
- 结果按相关性排序接口访问:可通过Swagger UI(http://localhost:8000/docs)查看和测试
- 使用示例:curl -X POST http://localhost:8000/search \ -H “Content-Type: application/json” \ -d ’{“keyword”: “Python FastAPI”, “max_results”: 5}’
- 文档更新README补充:
- 添加环境配置说明
- 包含搜索API使用示例
- 注明必需配置项版本控制:确保敏感配置不会提交到代码仓库
- 启动检查:应用启动时自动验证配置完整性
FastAPI聊天API改造为Agentic Loop
- 搜索API实现与测试

- 接口功能:在FastAPI中添加/search端点,接收关键词搜索请求
- 参数说明:
- keyword:必需参数,搜索关键词(如”Python FastAPI”)
- max_results:可选参数,默认返回6条结果,范围1-20返回内容:包含搜索结果列表、综合答案(如有)和错误信息(如有)
- 测试验证:
- 已测试搜索”Python FastAPI”返回5条结果
- 结果包含标题、URL、内容和评分等信息
- 可通过Swagger UI访问:http://localhost:8001/docs
- Agentic Loop初步实现

- 核心机制:
- 第一轮提供search工具,由LLM决定是否调用
- 若调用工具则执行搜索,强制生成最终回复
- 第二轮不再提供工具,直接生成最终结果实现特点:
- 采用单轮工具调用策略,避免复杂度
- 自动测试机制确保功能正确性
- 示例问题:“西雅图地区最近水灾情况如何,有决堤吗?”
- 调试与优化

- 常见问题:
- 回复被截断:需增加max_tokens参数(测试值1880)
- 工具多次调用:需处理LLM可能发起的多个工具调用调试方法:
- 添加详细日志记录工具调用参数和结果
- 观察prompt_tokens大小判断工具调用情况
- 示例:当输入token>1880时说明使用了search工具
- 多轮工具调用扩展

- 升级方案:
- 支持最多三轮工具调用
- 前两轮提供工具,第三轮强制生成最终回复
- 重构代码增加round_request.update(base_params)调试增强:
- 打印完整消息历史:包括初始消息、工具调用、原始结果和最终回复
- 终端日志显示执行进度,解决”黑盒”问题
- 实际应用测试

- 测试结果:
- 成功搜索到西雅图历史性暴雨和堤坝溃决新闻
- 验证了多轮工具调用的可行性
- 日志系统有效展示执行流程开发建议:
- 避免在调试时使用—reload参数
- 对于复杂查询可分阶段测试
- 注意处理LLM可能发起的并行工具请求
用户界面设计

- 产品架构:构建类似ChatGPT的网页界面,用户输入内容后,后台调用API进行新闻调研和搜索,最终返回结果形成完整产品闭环
- 开发要点:前端通过FastAPI服务网页
- 主页直接渲染聊天界面
- 需包含输入框和发送按钮的交互设计
日志记录机制

- 实现方法:使用Python的logging模块记录关键信息
- 需记录工具调用过程、参数传递和返回结果
- 示例日志内容包含:URL、请求数据、响应状态等
- 调试优势:当API调用出现问题时,可通过日志快速定位
- 能清晰追踪工具调用链(如搜索工具调用3次)
- 可验证参数传递正确性(如keyword参数值)
前端功能实现
- 交互流程:用户输入文本后触发API调用
- 显示”正在思考”动画提升用户体验
- 后台调用chat completion API获取响应
- 渲染处理:需要支持Markdown转HTML的渲染器
- 处理可能包含的多媒体内容(如图片、链接)
- 保持聊天记录的历史上下文
- 异常处理:端口冲突时需自动清理占用进程(如8881端口)
- 实现服务自动重启机制(使用uvicorn reload)
- 错误信息需友好提示前端用户
FastAPI聊天应用
FastAPI网站添加GUI

- 静态网页服务:通过GET/根路径配置静态网页服务,使FastAPI能够直接serve类似ChatGPT的交互界面
- 界面元素:包含输入框和消息展示区域,支持Markdown渲染和自动滚动到最新消息
- 启动方式:使用命令uvicorn main:app —reload —port 8881启动服务后,访问http://localhost:8001/即可使用
提问与后台分析

- 用户提问示例:如”西雅图最近水灾情况如何?“会触发后台的思考和分析过程
- 工具调用策略:多关键词搜索:自动生成多个搜索关键词组合(如”seattle flooding recent news December 2025”)
- 智能决策:像秘书一样判断需要调用哪些工具,避免单一关键词搜索的不准确性
- 状态反馈:前端显示”正在思考”动画,后台日志记录完整的API调用过程
第二轮工具调用
- 历史记录整合:将第一轮工具调用的结果自动添加到对话历史中
- 异常处理:当LLM返回空content时,需要检查是否为工具调用未正确处理的情况
- 强制生成机制:在适当轮次后强制LLM生成最终回复,避免无限循环
用户体验优化
- 调试关键:需要向AI准确描述问题现象(如将完整对话日志和错误信息提供给AI分析)
- 可视化改进:建议将工具调用过程和中间结果也显示给用户,提升交互透明度
- 痛点转化:通过实际使用发现体验问题,再用自然语言描述给AI进行优化
针对工具调用逻辑的debug
- 常见问题:第二轮回复content为空可能是工具调用逻辑未正确处理
- 检查要点:是否遗漏了对工具调用返回值的处理
- 是否设置了强制生成最终回复的机制
- 解决方法:提醒AI检查工具调用后的结果整合逻辑
并行调用工具的debug
- 性能优化:将多个工具调用改为并行执行,显著减少等待时间
- 实现方式:修改代码使AI返回多个工具调用时可以同时执行
- 效果对比:优化后第二轮处理速度明显快于串行调用方式
优化后的效果
- 响应速度:并行调用使整体响应时间缩短约50%
- 结果质量:通过多关键词组合搜索获得更全面的信息
- 典型输出:如返回”截止12月21日,12月上旬至中旬有很多降水…”等结构化信息
工具调用体验
- 与传统AI区别:支持主动调用外部工具获取实时信息
- 可进行多轮工具调用和结果整合
- 应用场景:特别适合需要调研最新信息的任务,比仅能翻译/润色的传统AI更实用
- 交互特点:保持类ChatGPT的自然对话体验,同时具备工具调用能力
FastAPI项目总结

- 项目构建流程:从零构建了一个最简单的FastAPI项目,逐步添加了AI功能对接、搜索引擎集成和网页界面开发等模块。
- 核心功能:AI对接:实现了与AI模型的API对接,使系统具备智能对话能力
- 工具调用:支持多种工具调用,包括搜索引擎等功能
- 前端界面:开发了交互式网页应用,包含聊天历史面板等功能
并行工具调用优化

- 实现方法:并行执行:使用asyncio.gather()同时执行所有工具调用
- 顺序保持:asyncio.gather()会保持结果的顺序与输入顺序一致
- 错误处理:每个工具调用独立处理错误,不会影响其他调用
- 性能对比:串行执行:5个搜索调用,每个约6秒,总计约30秒
- 并行执行:5个搜索调用同时执行,总计约6秒(取决于最慢的那个)
后端测试要点

- 测试策略:全面测试:在构建UI前使用Swagger UI进行全面的后端测试
- 测试场景:验证直接答案和工具使用两种场景
- 文档驱动:将API文档作为测试依据,遵循”文档优先”的工作流程
- 日志监控:重启服务后,多个工具调用会并行执行
- 日志会显示”开始并行执行X个工具调用”和”所有工具调用完成”状态
前端开发指导

- 开发步骤:从Swagger UI复制openapi.json的URL
- 使用Cursor的聊天功能提供详细的前端构建提示
- 创建包含聊天历史面板的网页应用
- 用户体验:区分显示用户消息和助手消息
- 在等待响应时显示”思考”动画
- 测试时可通过输入任意消息进行端到端体验