本章你将完成的事学会安全、稳健地调用大模型 API含错误处理理解不同模型的差异掌握模型选型的方法用 Streamlit 把 AI 能力封装成可演示的界面体验一个 DemoAIX 多模型对比工具5.1 为什么是这三个关键第 4 章我们走完了 Vibe Coding 的完整工作流搭环境、写提示词、迭代调试、代码审查。但很多同学到这一步会遇到一个新问题——TRAE 生成的代码看起来都对为什么跑起来总是出错复盘一下常见的报错HTTP 401 UnauthorizedAPI Key 没配对KeyError: choices返回的 JSON 结构不对ConnectionError网络不通界面打开了但点按钮没反应同样的问题换一个模型就跑通了把这些报错归类一下其实就三个根源API 调用没做对——Key、URL、请求体、超时、错误处理模型选错了——不同模型擅长的事情不一样免费额度也不一样界面没搭好——AI 返回的结果没正确地呈现给用户这三个关键就是本章的主题。掌握了它们你做任何 AIX 项目都能跑起来。为了让你边学边练本章配了一个综合 DemoAIX 多模型对比工具。它一次解决三个关键——安全调用 API、对比多个模型、用 Streamlit 展示结果。我们会一边讲原理一边对照这个 Demo 讲实现。5.2 第一个关键API 调用——安全 错误处理5.2.1 调用 API 的四件套不管用哪个国内大模型DeepSeek、Qwen、Kimi……硅基流动的调用方式都是一样的就是一次普通的 HTTP POST 请求。你只需要准备好四件套件内容说明1URLhttps://api.siliconflow.cn/v1/chat/completions2HeadersAuthorization: Bearer 你的KeyContent-Type: application/json3Bodymodel、messages、temperature、max_tokens等字段4Timeout网络请求超时时间建议 60-90 秒其中 Body 的核心结构是messages它是一个对话历史列表messages[{role:system,content:你是一位专业的文本分析助手。},# 系统提示{role:user,content:分析以下古诗的风格...}# 用户输入]role: system告诉模型它扮演什么角色role: user用户输入的问题或任务这套结构来自 OpenAI 的 Chat Completions 协议硅基流动、智谱、阿里云百炼、Kimi 都遵循这套协议。学会这一套国内所有大模型你都会调用。5.2.2 安全第一API Key 不要硬编码最容易踩的坑就是把 API Key 直接写在代码里# ❌ 错误写法Key 硬编码API_KEYsk-yfmgvsyjrkfmbebzazktoedxaspbfhomjliujbwvufopdhmu这样做有三个风险泄露风险把代码分享给别人、传到 GitHubKey 就泄露了管理麻烦换 Key 要改代码多个文件要改多处教学场景不友好教材里出现真实 Key读者复制就会用到你的额度正确做法用.env文件 python-dotenv库。第一步在项目根目录创建.env文件注意文件名就是.env没有前缀SILICONFLOW_API_KEYsk-你的真实Key第二步在代码里读取importosfromdotenvimportload_dotenv load_dotenv()# 加载 .env 文件API_KEYos.getenv(SILICONFLOW_API_KEY)# 从环境变量读取第三步把.env加到.gitignore避免上传到 Git 仓库# .gitignore .env教材里的 Key 怎么处理本书所有示例代码中出现的 API Key 都用your_siliconflow_api_key这种占位符代替不会出现真实 Key。你拿到代码后把.env.example复制为.env填入你自己的 Key 即可。5.2.3 错误处理让代码摔不坏API 调用最容易出错原因有很多错误类型原因典型报错网络错误网络断开、DNS 解析失败ConnectionError超时错误模型推理太久Timeout认证错误API Key 错误HTTP 401限流错误请求太频繁HTTP 429参数错误模型名拼错、消息格式错HTTP 400服务错误硅基流动服务异常HTTP 500如果不做错误处理任何一个错误都会让程序崩溃。好的代码必须摔不坏——出错也要给用户一个友好提示。Demo 里的做法是用try-except包裹整个调用过程defcall_model(prompt:str,model:str,system_prompt:str你是一位专业的文本分析助手。)-dict:headers{Authorization:fBearer{API_KEY},Content-Type:application/json,}payload{model:model,messages:[{role:system,content:system_prompt},{role:user,content:prompt}],temperature:0.7,max_tokens:1500,}start_timetime.time()responserequests.post(API_URL,jsonpayload,headersheaders,timeout90)elapsedtime.time()-start_time response.raise_for_status()# HTTP 错误401、429 等会在这里抛出resultresponse.json()contentresult[choices][0][message][content]tokensresult.get(usage,{}).get(total_tokens,未知)return{content:content,elapsed:elapsed,tokens:tokens}调用方再包一层异常处理针对不同错误给出不同提示try:resultcall_model(task_input,model_id,system_prompt)exceptrequests.exceptions.HTTPErrorase:results[model_id]{error:fAPI 错误{e}}exceptrequests.exceptions.RequestExceptionase:results[model_id]{error:f网络错误{e}}exceptExceptionase:results[model_id]{error:f未知错误{e}}这样即使某个模型调用失败程序也不会崩溃只会显示具体错误其他模型的对比还能继续。⚠️常见坑超时设置默认requests.post没有超时模型推理慢时会一直等。一定要加timeout90秒避免界面卡死。5.2.4 API 调用检查清单每次写 API 调用代码对照这份清单检查项怎么检查Key 不硬编码搜索代码里有没有sk-开头的字符串Key 从 .env 读os.getenv(SILICONFLOW_API_KEY)URL 正确必须是https://api.siliconflow.cn/v1/chat/completionsHeaders 完整AuthorizationContent-TypeBody 结构对modelmessages必须有设置超时timeout90有错误处理try-except包裹requests.post区分错误类型HTTP 错误、网络错误、未知错误分别处理5.3 第二个关键模型选择——对比 选优5.3.1 国内免费模型怎么选硅基流动上有几十个模型新手容易挑花眼。本书推荐三个免费、稳定、有代表性的模型模型模型 ID特点适用场景Qwen2.5-7BQwen/Qwen2.5-7B-Instruct速度快、回答简洁入门项目、快速演示Qwen3-8BQwen/Qwen3-8B推理强、回答细致分析类任务、需要详细输出DeepSeek-R1deepseek-ai/DeepSeek-R1-0528-Qwen3-8B深度思考、推理链复杂分析、需要多步推理新手误区不是模型越大越好。7B 模型虽然参数少但回答简洁快速做演示足够了R1 推理深但慢做实时交互不合适。5.3.2 模型选型的三个维度选模型不能只看好不好用要从三个维度综合考量维度一质量回答是否准确、是否有结构、是否覆盖要点。比如分析古诗风格要看模型有没有分析用词、句式、情感等多个维度。维度二速度响应时间多少秒做实时交互聊天机器人的话超过 10 秒用户就受不了做后台分析一次跑批的话1 分钟也能接受。维度三成本消耗多少 Token免费额度有限Token 越少越省钱。同样一个任务A 模型消耗 300 TokenB 模型消耗 1500 Token长期用差别很大。什么是 TokenToken 是大模型计费的最小单位。中文大约 1 个字 1-2 个 Token英文大约 1 个单词 1 个 Token。usage.total_tokens字段会返回本次调用消耗的总 Token 数输入 输出。5.3.3 为什么需要对比工具光看文档介绍很难判断哪个模型适合你的项目。最好的办法是拿你自己的真实任务同时调用多个模型看结果对比。这就是本章 Demo 的设计初衷——AIX 多模型对比工具。你输入一个分析任务它同时调用三个模型把回答、耗时、Token 消耗并排展示让你一眼看出差异。看一个真实的对比结果输入“分析以下古诗的风格特点《静夜思》床前明月光疑是地上霜。举头望明月低头思故乡。”模型耗时Token 消耗状态Qwen2.5-7B9.6s339✅ 成功Qwen3-8B—0❌ 网络超时DeepSeek-R142.0s1,141✅ 成功可以看出Qwen2.5-7B 最快但回答相对简短DeepSeek-R1 最慢但思考最深Token 消耗也最大Qwen3-8B 偶尔会因为网络波动超时——这正是 5.2 节错误处理的价值这种看结果说话的对比比看任何文档介绍都直观。5.3.4 模型选型决策表做完对比后怎么决策参考这张表你的需求推荐模型理由快速演示、界面交互Qwen2.5-7B速度快用户体验好文本分析、需要详细输出Qwen3-8B回答细致结构清晰复杂推理、多步骤任务DeepSeek-R1推理深准确率高不确定选哪个都用对比工具跑一遍用数据说话教学建议本书实战篇的案例默认用 Qwen2.5-7B因为它速度快、免费额度足、回答质量也够用。如果你做的是分析类项目如文本风格分析可以试试 Qwen3-8B如果项目需要复杂推理如多步骤决策可以试 DeepSeek-R1。5.4 第三个关键界面部署——Streamlit 快速原型5.4.1 为什么是 StreamlitAIX 项目做完 API 调用只完成了一半——用户没法用。总不能让别人打开命令行、写 Python 代码来用你的工具。需要一个能快速做界面的工具。常见选择有三个框架上手难度适合场景是否需要前端知识Streamlit⭐ 最简单数据应用、AI Demo不需要Gradio⭐⭐ 简单模型演示、表单类不需要Flask 前端⭐⭐⭐⭐ 难复杂 Web 应用需要本书所有 Demo 都用 Streamlit原因有三零 HTML/CSS/JS 基础纯 Python 写界面AI 友好内置按钮、文本框、表格、图表、文件上传等组件组合即可免费开源pip install streamlit就能用无需注册5.4.2 Streamlit 的四件套写一个 Streamlit 应用只需要四类代码importstreamlitasst# 1. 页面配置st.set_page_config(page_title我的应用,page_icon⚡,layoutwide)# 2. 标题与说明st.title(⚡ 我的应用)st.caption(一句话说明这个应用做什么)# 3. 输入组件user_inputst.text_area(输入你的文本,height100)ifst.button(开始,typeprimary):# 4. 输出结果st.markdown(处理结果)st.markdown(user_input)把这四件套组合起来就能做出 90% 的 AI 应用界面。本章 Demo 用的就是这套结构。5.4.3 Demo 界面拆解我们对照 Demo 代码看 Streamlit 怎么用。第一部分页面配置与标题st.set_page_config(page_titleAIX 多模型对比工具,page_icon⚡,layoutwide)st.title(⚡ AIX 多模型对比工具)st.caption(同一个问题不同模型回答有什么区别一键对比帮你选出最适合的模型)set_page_config设置浏览器标签页标题、图标、布局wide宽屏centered居中title大标题caption副标题灰色小字第二部分输入区用 columns 做并排布局col1,col2st.columns([2,1])# 左边占 2 份右边占 1 份withcol1:task_inputst.text_area(你要分析的文本或问题,height100)withcol2:selected_models[]forlabel,model_idinAVAILABLE_MODELS.items():ifst.checkbox(label,valueTrue):selected_models.append(model_id)st.columns([2, 1])把页面分成左右两栏宽度比例 2:1st.text_area多行文本输入框st.checkbox复选框返回 True/False第三部分按钮与结果展示ifst.button( 开始对比,typeprimary):# 调用模型results{}formodel_idinselected_models:try:resultcall_model(task_input,model_id,system_prompt)results[model_id]resultexceptExceptionase:results[model_id]{error:str(e)}# 性能对比表格st.markdown(### 性能对比)st.table(table_data)# 各模型回答用 columns 并排展示colsst.columns(len(results))forcol,(model_id,result)inzip(cols,results.items()):withcol:st.markdown(f####{result[label]})st.markdown(result[content])st.button按钮点击返回 True进入 if 分支st.table表格传字典列表即可st.columnszip动态分栏有几个结果就分几栏5.4.4 Streamlit 上手清单想做什么用什么组件标题st.title/st.header/st.subheader说明文字st.markdown/st.caption单行输入st.text_input多行输入st.text_area数字输入st.number_input下拉选择st.selectbox多选框st.checkbox/st.multiselect按钮st.button显示文本st.markdown/st.write显示表格st.table/st.dataframe显示图片st.image进度条st.progress加载提示st.spinner成功/警告/错误st.success/st.warning/st.error分栏st.columns分隔线st.divider学习建议不用一次记住所有组件用到的时候查表就行。本书所有案例都会用到的核心组件text_input、text_area、button、markdown、columns、selectbox。掌握这 6 个就能做出 80% 的 AI 应用界面。5.5 实战体验AIX 多模型对比工具5.5.1 Demo 是什么AIX 多模型对比工具输入一个分析任务同时调用多个国内大模型把回答、耗时、Token 消耗并排展示帮你直观对比不同模型的差异。这个 Demo 一次性解决了本章的三个关键API 调用封装call_model函数安全读 Key、设置超时、做错误处理模型选择三个模型并排调用展示耗时与 Token方便对比界面部署用 Streamlit 搭建可演示的界面包含输入、按钮、表格、分栏展示5.5.2 获取代码代码保存在chapter5code/文件夹里chapter5code/ ├── app.py # 主程序多模型对比工具 ├── requirements.txt # 依赖清单 └── .env.example # API Key 配置模板5.5.3 配置并运行第一步安装依赖cdchapter5code pipinstall-rrequirements.txt第二步配置 API Key把.env.example复制为.env把里面的your_siliconflow_api_key换成你自己的真实 KeySILICONFLOW_API_KEYsk-你的真实Key第三步启动应用streamlit run app.py浏览器会自动打开http://localhost:8501看到应用界面。5.5.4 体验流程第一步填写分析任务在左侧文本框输入一个分析任务比如分析以下古诗的风格特点《静夜思》床前明月光疑是地上霜。举头望明月低头思故乡。右侧默认勾选三个模型系统提示词保持默认即可。第二步点击开始对比点击 开始对比按钮工具会逐个调用三个模型并显示进度条。第三步查看对比结果调用完成后页面会展示三部分内容性能对比表格列出每个模型的耗时、Token 消耗、成功/失败状态各模型回答三个模型并排展示方便横向对比选模型建议根据结果给出选择建议第四步根据结果做决策看结果对比结合你的项目需求做选择。比如想要快速演示 → 选 Qwen2.5-7B想要详细分析 → 选 Qwen3-8B 或 DeepSeek-R1想要稳定可靠 → 避开容易超时的模型5.5.5 代码走读三个关键在代码里的位置打开app.py对照本章讲的三个关键看代码是怎么实现的关键对应代码看什么API 调用call_model函数Key 怎么读、超时怎么设、错误怎么处理模型选择AVAILABLE_MODELS字典怎么定义可选模型、怎么让用户勾选界面部署st.set_page_config之后部分怎么用 Streamlit 组件搭界面这是学习 Vibe Coding 的重要方法拿到一段能跑的代码对照它解决了什么问题来读比抽象地学语法高效得多。5.5.6 用 TRAE 改造这个 Demo学会本章三个关键后你可以用 TRAE 改造这个 Demo做成自己的项目。下面是几个改造方向改造方向一换成你专业的分析任务请把 chapter5code/app.py 的默认输入框文字换成我专业的示例任务。 我的专业是 [你的专业]一个典型的分析任务是 [描述任务]。 另外把系统提示词改成更符合我专业场景的描述。改造方向二增加模型选项请在 AVAILABLE_MODELS 里增加更多硅基流动上的免费模型 比如 GLM-4-9B、Yi-1.5-9B 等让用户可以勾选更多模型做对比。改造方向三增加结果导出功能请帮我添加一个导出对比报告按钮点击后把对比结果表格 各模型回答 保存为 Markdown 文件让用户下载。改造方向四支持图片输入多模态请把工具改造成支持图片输入用户上传一张图片 调用硅基流动上的视觉模型如 Qwen2.5-VL分析图片内容。 对比文本模型和视觉模型的差异。每个改造方向都能让你更深入地理解三个关键。Vibe Coding 的精髓就是先跑通一个能用的再一点点改造、扩展、深化。本章小结本章你学会了让 AIX 项目跑起来的三个关键API 调用四件套URL、Headers、Body、Timeout 安全.env 读 Key 错误处理try-except 区分错误类型。掌握这套国内所有大模型你都会调用。模型选择从质量、速度、成本三个维度对比模型用对比工具拿数据说话。新手默认用 Qwen2.5-7B分析类用 Qwen3-8B推理类用 DeepSeek-R1。界面部署用 Streamlit 把 AI 能力封装成可演示的界面。四件套页面配置 标题 输入组件 输出结果就能做出 80% 的 AI 应用。这三个关键是后续所有实战案例的基础。从第 6 章开始我们将进入实战篇——按工科、经管、人文、艺术、医农、教育法律六大类每类 2 个案例带你做真正的 AIX 项目。每个案例都会用到本章的三个关键你会越来越熟练。课后练习基础题按照 5.5 节的步骤运行 AIX 多模型对比工具输入一段你专业的文本对比三个模型的回答差异。记录下三个模型的耗时、Token 消耗思考为什么会有这种差异。把 Demo 的系统提示词改成你专业场景的描述例如你是一位专业的古诗风格分析师再次运行同一个任务看看回答有什么不同。进阶题用 TRAE 给 Demo 增加一个导出 Markdown 报告按钮把对比结果保存为.md文件下载。提示词参考 5.5.6 节的改造方向三。用对比工具跑你专业的 5 个不同任务记录每次三个模型的耗时和 Token 消耗形成一张模型性能对比表。基于这张表给你专业的项目推荐一个默认模型。挑战题把 Demo 改造成双模型对话对比器——用户输入一句问题两个模型同时回答但让一个模型扮演老师、一个模型扮演学生对比两者的回答视角差异。这种角色对比是人文社科类项目常用的研究方法。本章代码清单文件路径说明主程序chapter5code/app.py多模型对比工具完整代码依赖清单chapter5code/requirements.txtPython 依赖包列表配置模板chapter5code/.env.exampleAPI Key 配置模板运行环境要求Python 3.10pipPython 包管理器TRAEAI 编程工具硅基流动 API Key免费注册获取常见报错报错信息可能原因解决方法ModuleNotFoundError: No module named streamlit依赖未安装运行pip install -r requirements.txtSILICONFLOW_API_KEY为 None.env文件未创建在chapter5code/目录下创建.env文件HTTP 401 错误API Key 错误检查.env中的 Key 是否正确有没有多余空格HTTP 429 错误请求太频繁等几秒重试或减少同时调用的模型数量某个模型超时失败网络波动或模型负载高重新点击开始对比重试错误处理会让其他模型继续跑页面打不开Streamlit 服务未启动在终端运行streamlit run app.py中文乱码终端编码问题Windows 用 PowerShell运行chcp 65001切换 UTF-8 编码