QuickBot 多剧本对话应用前端:基于 Angular 15 的生成式 AI 聊天界面开发与工程化指南
【免费下载链接】generative-aiSample code and notebooks for Generative AI on Google Cloud, with Gemini Enterprise Agent Platform项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai
本指南以 conversational-app-multi-playbook/frontend/README.md 为核心,系统讲解 QuickBot 多剧本对话应用前端工程(Angular 15 + TypeScript)的本地开发、代码脚手架、构建、测试与代码规范落地方法。文中将结合仓库内真实源码与配置,说明该前端如何对接后端 FastAPI 服务与 Vertex AI Conversation Agent,帮助读者掌握一套可直接复用的 AI 聊天前端开发与质量保障实践。
一、项目背景:QuickBot 前端在整体架构中的位置
QuickBot 是一个基于 Google Cloud 的对话式应用模板:后端使用自定义 Cloud Function 提供 RAG(检索增强生成)能力,并与 Google Cloud Agent Builder(Vertex AI Conversation)协同,跨多个可配置 playbook(剧本)管理对话流程。其整体结构见 项目根 README,包含:
backend/:Python 后端(FastAPI/Uvicorn),负责对话路由与 Agent 交互;frontend/:TypeScript 前端(Angular),即本文主体;functions/:Google Cloud Functions 源码(如create-intent);docker-compose.yml:一键编排前后端服务的容器配置。
前端由 Angular CLI:Angular 15.x 全家桶、Angular Material、Angular Flex-Layout、ngx-markdown(渲染对话中的 Markdown)、marked、prismjs(代码高亮)、clipboard(复制代码)、Firebase 认证集成以及 Ionic 组件库。
二、环境准备与依赖安装
在进入具体命令之前,先确认本机具备以下环境(依据项目根 README 的前置条件):
- Node.js 与 npm(或 yarn):Angular CLI 15 需 Node.js 版本与 npm 配合使用;
- Python 3.x:后端开发(非 Docker 方式)时使用;
- Docker 与 Docker Compose v2:容器化部署(可通过
docker compose version验证版本); - Google Cloud SDK(gcloud CLI):用于认证与云服务交互。
安装前端依赖(在frontend/目录下):
cd frontend npm install该工程的package.json中定义了postinstall: "ngcc"钩子,npm install完成时会自动执行 Angular 的兼容性编译(ngcc),因此安装后即可直接启动开发服务器,无需额外手工步骤。
三、开发服务器:ng serve
在frontend/目录下运行:
ng serve- 开发服务器默认地址为
http://localhost:4200/; - 修改任何源文件后应用会自动热重载(live reload);
- 若使用代理或需指定端口,可用
ng serve --port <port>等参数。
package.json中对应的快捷命令为:
"start": "ng serve"所以也可直接运行npm start。
工程中配置了
src/environments/environment.ts,其中backendURL: 'http://localhost:8080/api'指向本机后端 API 根路径,chatbotName: 'My New Agent'等字段用于界面展示。启动前端前请确保后端(uvicorn main:app --reload --port 8080,参见 根 README)已运行,或按需修改此环境文件。
四、代码脚手架:ng generate
使用 Angular CLI 生成新代码:
ng generate component component-name也可以生成其他类型:
ng generate directive|pipe|service|class|guard|interface|enum|module本仓库src/app/下的模块组织即是很好的脚手架范例(见 src/app 目录结构):
components/:按elements/、footer/、header/、login/、main/chat/chatbar/、manage-intent/、shared/等拆分 UI 组件,每个组件均含.ts/.html/.scss/.spec.ts四件套;dialogue-box/:对话气泡展示组件;models/:TypeScript 数据模型(chat.model.ts、messegeType.model.ts);services/:业务服务层,如chat.service.ts、intent.service.ts、speech-to-text.ts等。
这种“组件四件套 + 模型 + 服务”的规范组织,便于团队并行开发与后续维护,建议新生成的组件遵循同样的目录约定。
五、构建:ng build
运行:
ng build构建产物默认输出到dist/目录(本工程为dist/quick-bot-app-frontend,见 angular.json 中outputPath配置)。
工程在 package.json 中预置了多套构建脚本:
"build:prod": "ng build --configuration production --aot --output-hashing=all", "build:dev": "ng build --configuration development", "build:staging": "ng build --configuration staging", "build": "ng build", "watch": "ng build --watch --configuration development"其中production配置(angular.json中configurations.production)默认开启 AOT 编译、outputHashing: all,并设置资源体积预算(initial 警告 4mb / 报错 10mb,任意组件样式警告 20kb / 报错 50kb);development配置则关闭优化、开启 sourceMap 与 namedChunks,便于调试。
该前端还内置了生产构建后的静态服务能力:Dockerfile 采用两阶段构建——先在node:18.17.1中执行npm ci与npm run build:prod,再将产物复制进nginx:alpine,配合 nginx.conf 中try_files $uri $uri/ /index.html的 SPA 回退配置,监听 8080 端口对外提供服务。
六、单元测试:ng test
运行:
ng test单元测试通过 Karma 执行(angular.json中testbuilder 为@angular-devkit/build-angular:karma,配 Jasmine + Karma 全家桶:karma-chrome-launcher、karma-coverage、karma-jasmine、karma-jasmine-html-reporter)。工程在package.json中把测试与质量检查串成流水线:
"pretest": "npm run compile", "test": "ng test", "posttest": "npm run lint"即每次测试前先执行tsc编译,测试后自动执行 lint 检查。仓库内所有组件与服务都配套了*.spec.ts测试文件,例如 chat.service.spec.ts、auth.guard.spec.ts 等,可作为编写新测试时的参考。
七、端到端测试:ng e2e
运行:
ng e2e端到端测试通过你选择的平台执行(如 Cypress 等)。在使用此命令之前,你需要先添加一个实现了端到端测试能力的 npm 包(当前工程的package.json未内置 e2e runner,Angular CLI 默认不再捆绑 Protractor,因此需要按提示自行接入)。
八、进一步帮助:ng help
如需查看 Angular CLI 的全部命令与参数:
ng help或查阅 Angular CLI 官方 Overview 与 Command Reference 文档。
九、代码规范与提交约定(Code Styling & Commit Guidelines)
为保证代码质量与一致性,工程制定了如下规范(与根 README 保持一致):
- TypeScript(前端):遵循 Angular 编码风格指南,借助 Google 的 TypeScript 风格指南工具
gts(Google TypeScript Style),内置格式化、lint 与自动修复能力; - Python(后端):遵循 Google Python 风格指南,使用
pylint与black做 lint 与格式化; - 提交信息:建议遵循 Angular 的 Commit Message Guidelines,写出清晰、可描述性的提交信息。
9.1 前端:TypeScript 使用gts
gts已作为 devDependency 引入("gts": "^5.3.1"),并在 package.json 中注册了lint、fix、clean、compile等脚本。
步骤 1:初始化gts(若工程中尚未配置)
在frontend/目录下运行:
npx gts init它会完成gts的初始化并生成必要的配置文件(如tsconfig.json)。务必确保tsconfig.json(或相关的gts配置文件如.gtsrc)包含对gts默认配置的扩展,典型写法为:
{ "extends": "./node_modules/gts/tsconfig-google.json" }仓库的 tsconfig.json 正是采用此写法,并在此基础上开启了strictTemplates、strictInjectionParameters等 Angular 严格模板检查,以及noImplicitOverride、noPropertyAccessFromIndexSignature等 TypeScript 严格选项。
步骤 2:检查 lint 问题
npm run lint即gts lint(package.json中"lint": "gts lint")。
步骤 3:自动修复 lint 问题
npm run fix即gts fix,可自动修复大部分可机械修正的风格问题。
9.2 后端:Python 使用pylint与black
步骤 1:安装依赖
在backend/requirements.txt中追加:
pylint black然后在虚拟环境中安装:
pip install pylint black # 或 pip install -r requirements.txt步骤 2:配置pylint
建议在backend/目录放置.pylintrc以配置规则,可通过生成标准配置后按需修改:
pylint --generate-rcfile > .pylintrc步骤 3:用pylint检查
在backend/目录下运行:
pylint . # 或指定模块:pylint your_module_name步骤 4:用black格式化
python -m black . --line-length=80即对当前目录及子目录下所有 Python 文件按 Google Python Style 风格、行宽 80 进行自动格式化。
十、源码级细节:前端如何与 AI 后端交互
为便于读者理解前端工程的实战价值,这里补充几处可直接验证的源码要点(均来自本仓库):
- 对话请求:
ChatService.postChat()在发送前会执行query.replace(/\s+/g, ' ').trim()清洗用户输入,然后 POST 到${environment.backendURL}/chats,请求体为{text: query}(见 chat.service.ts); - 语音输入:
SpeechToTextService.transcribeAudio()将录音 Blob 以audio.wav字段封装为FormData,POST 到${environment.backendURL}/audio_chat实现语音转文字(见 speech-to-text.ts); - 意图管理:
manage-intent/模块提供了多剧本场景下的意图创建/编辑界面(create-intent-form、intent-form组件),对应functions/create-intent云函数,用于动态扩展对话剧本; - Markdown 渲染与代码高亮:构建配置中注入了
marked.min.js、prism.js及prism-csharp、prism-css语言组件与clipboard.min.js(见 angular.json 的scripts数组),使 AI 返回的 Markdown 与代码块能在对话气泡中友好呈现并一键复制; - 会话与登录:
services/login/(auth.service.ts、auth.guard.ts)与services/user/(session.service.ts)负责认证与会话管理,environment.ts中的requiredLogin字段可控制是否需要登录。
这些实现共同构成了“输入清洗 → 后端 /chats 或 /audio_chat → 多剧本 Agent 路由 → RAG 检索生成 → Markdown 渲染展示”的完整链路,与 项目根 README 描述的架构一一对应。
十一、容器化运行方式(前端视角)
若想以最快方式体验完整应用,可使用项目根目录的 docker-compose.yml:
# 首次部署自动创建 Agent 与示例 playbook docker compose build --build-arg IS_FIRST_DEPLOYMENT="True" docker compose up- 前端容器将宿主机
4200端口映射到容器内8080(nginx 服务端口),访问http://localhost:4200即可; - 前端环境变量通过
src/environments/environment.ts修改(compose 文件中注释也指明“To change the env variables in the frontend, change the environment.ts file”); - 前端目录以 volume 挂载,且使用匿名卷隔离
node_modules,避免宿主机 node_modules 干扰镜像构建。
若需修改前端环境配置(如后端地址、机器人名称、是否要求登录),编辑 environment.ts 后按需重新构建即可。
十二、小结
本文完整继承了 frontend/README.md 的全部操作要点(开发服务器、脚手架、构建、单元/端到端测试、gts与pylint/black代码规范),并结合仓库源码补充了环境配置、多环境构建脚本、容器化部署、SPA 回退配置与前后端交互链路等纵深细节。按此流程,读者可以快速在本地启动 QuickBot 前端、规范地扩展新组件,并将工程质量控制(lint、单测、格式化)无缝纳入日常开发。
【免费下载链接】generative-aiSample code and notebooks for Generative AI on Google Cloud, with Gemini Enterprise Agent Platform项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考