尧图精选

【三个月 AI Agent 实战学习】Day 7 :阶段总结 —— 命令行翻译软件实战

🕒 发布时间:2026/9/15 7:51:12 📁 来源:尧图网络
Day 7阶段总结 —— 命令行翻译软件实战欢迎来到第一阶段的最后一天今天我们将不再学习新概念而是整合前六天所学完成一个完整的命令行翻译软件。这个项目将覆盖 API 调用、Prompt 设计含 JSON 输出、Few-shot 思维、JSON 解析与重试机制是一次全面的实战检验。一、今日学习目标综合运用前六天知识API 调用、结构化输出、错误处理。实现一个命令行交互程序用户输入中文或英文程序自动识别语言并翻译成另一种语言。强制模型输出 JSON并在代码中可靠解析。添加重试机制确保翻译服务的稳定性。通过实战加深对 Prompt 工程的理解并体会“模型输出结构化数据”在真实应用中的价值。二、详细实现步骤步骤 1设计系统架构我们的命令行翻译软件包含以下模块translate(text)核心翻译函数接收用户输入调用大模型返回解析后的翻译结果字典。extract_json(raw)从模型原始输出中提取并解析 JSON 对象复用 Day 6 的逻辑。主循环不断读取用户输入调用translate打印结果直到用户输入“退出”。系统流程用户输入 → 调用 APIPrompt 要求输出 JSON→ 获取原始响应 → 清洗并解析 JSON → 提取翻译结果 → 显示给用户。步骤 2编写 Prompt 模板Prompt 设计如下System Prompt你是一个专业的翻译助手。你会收到用户输入的一段文本请自动判断其语言中文或英文。如果输入是中文请将其翻译成英文如果输入是英文请将其翻译成中文。如果输入包含其他语言或无法识别请在 translation 字段中返回错误提示。你必须只输出一个 JSON 对象格式如下{“detected_language”: “zh” 或 “en”, “target_language”: “en” 或 “zh”, “translation”: “翻译后的文本”}不要输出任何其他文字。User Prompt请翻译以下文本{user_input}我们将user_input插入到 User Prompt 中。注意如果用户输入包含特殊字符我们使用 f-string 直接插入即可。步骤 3实现核心函数新建translator.py首先导入依赖importosimportjsonimportreimporttimefromdotenvimportload_dotenvfromopenaiimportOpenAI加载环境变量和初始化客户端同前load_dotenv()clientOpenAI(api_keyos.getenv(DEEPSEEK_API_KEY),base_urlhttps://api.deepseek.com)定义 JSON 提取函数复用 Day 6 代码可稍作优化defextract_json(text:str):从模型输出中提取并解析 JSON 对象texttext.strip()# 去除 Markdown 代码块iftext.startswith():texttext.strip()iftext.startswith(json):texttext[4:]texttext.strip()# 直接解析try:returnjson.loads(text)exceptjson.JSONDecodeError:pass# 正则提取第一个 {...}matchre.search(r\{.*\},text,re.DOTALL)ifmatch:try:returnjson.loads(match.group(0))exceptjson.JSONDecodeError:pass# 替换单引号尝试try:cleanedtext.replace(,)returnjson.loads(cleaned)exceptjson.JSONDecodeError:returnNone定义翻译函数包含重试deftranslate(user_input:str,max_retries:int2)-dict:翻译用户输入返回解析后的字典包含 detected_language, target_language, translationsystem_prompt(你是一个专业的翻译助手。你会收到用户输入的一段文本请自动判断其语言中文或英文。如果输入是中文请将其翻译成英文如果输入是英文请将其翻译成中文。如果输入包含其他语言或无法识别请在 translation 字段中返回错误提示。你必须只输出一个 JSON 对象格式如下{detected_language: zh 或 en, target_language: en 或 zh, translation: 翻译后的文本}不要输出任何其他文字。)user_promptf请翻译以下文本\n{user_input}forattemptinrange(max_retries1):try:responseclient.chat.completions.create(modeldeepseek-chat,messages[{role:system,content:system_prompt},{role:user,content:user_prompt}],temperature0.1,# 低温度保证格式稳定max_tokens500)raw_outputresponse.choices[0].message.content parsedextract_json(raw_output)ifparsedandtranslationinparsed:returnparsed# 如果解析失败或缺少字段记录并重试print(f[警告] 第{attempt1}次尝试解析失败原始输出{raw_output[:100]}...)exceptExceptionase:print(f[错误] API调用异常{e})time.sleep(1)# 简单等待# 所有重试失败return{detected_language:unknown,target_language:unknown,translation:翻译失败请稍后重试。}步骤 4构建命令行交互循环defmain():print(欢迎使用中英互译命令行工具)print(输入中文自动翻译成英文输入英文自动翻译成中文。)print(输入 退出 或 quit 结束程序。\n)whileTrue:user_inputinput(请输入).strip()ifnotuser_input:continueifuser_input.lower()in[退出,quit,exit]:print(感谢使用再见)breakresulttranslate(user_input)# 展示结果print(-*40)print(f检测语言{result.get(detected_language)})print(f目标语言{result.get(target_language)})print(f翻译结果{result.get(translation)})print(-*40)运行入口if__name____main__:main()步骤 5测试与调试保存文件并运行python translator.py测试用例输入“你好世界” → 期望输出英文翻译。输入“Hello, how are you?” → 期望输出中文翻译。输入“12345” 或纯符号 → 可能返回错误提示但模型可能仍会输出某种结果注意观察。输入混合语言“你好world” → 观察模型如何处理。观察点模型是否稳定输出 JSON解析成功率如何重试机制是否触发翻译质量是否满意如果发现 JSON 解析失败频繁可以调整 Prompt比如增加“严格禁止任何额外的文字”或者优化extract_json函数。如果翻译质量不佳可以考虑在 System Prompt 中加入 Few-shot 示例例如在 System Prompt 中添加一个示例展示输入“你好”时输出{detected_language:zh,target_language:en,translation:Hello}。步骤 6代码整理与版本管理可选将代码拆分为多个文件llm_client.py客户端初始化、utils.pyJSON 提取、translator.py主逻辑。添加requirements.txt文件记录依赖。初始化 Git 仓库提交代码并创建.gitignore忽略.env和__pycache__。在 GitHub 上创建仓库推送代码。三、常见问题与调试Q1模型总是返回额外的解释文字导致 JSON 解析失败。→ 在 System Prompt 中加强语气例如“你只能输出 JSON 对象绝对禁止输出任何其他文字包括解释、提示、代码块标记。不要使用 Markdown。” 同时降低 temperature 至 0。Q2输入长文本时翻译被截断。→ 检查max_tokens设置翻译通常不需要太长但若输入较长可适当增大max_tokens例如 1000。同时确保不超过模型的上下文窗口DeepSeek 为 64K一般不会超。Q3有时模型检测语言错误比如把中文拼音判断成英文。→ 可以在 Prompt 中加入更明确的判断规则例如“如果输入包含中文字符则判定为中文否则判定为英文。” 或者干脆不依赖模型判断用代码检测如if any(\u4e00 ch \u9fff for ch in text)然后明确告诉模型翻译方向。这样可以提高稳定性和速度。我们今天的实现让模型判断是为了练习 Prompt 设计实际项目中你可能更倾向于代码判断。Q4重试机制是否必要如果一直失败怎么办→ 重试是必要的因为模型有随机性。如果连续失败可以返回友好错误信息让用户稍后再试。实际项目中还可加入指数退避等待。Q5如何改进翻译质量→ 可以加入 Few-shot 示例或者使用专门的翻译 Prompt 技巧比如要求“忠实原文保持风格”。如果有领域要求可在 System Prompt 中说明。四、今日总结与作业今天你完成了✅ 构建了一个可用的命令行翻译软件整合了 API 调用、Prompt 设计、JSON 解析、重试机制。✅ 通过实战巩固了对结构化输出的理解并学习了如何让程序稳定地与模型协作。✅ 体验了从零到一搭建一个小型 LLM 应用的过程。今日作业必做运行你的翻译软件测试 10 个不同的句子5 个中文、5 个英文记录翻译质量和解析成功率。尝试优化 Prompt 或代码提高 JSON 解析成功率比如加入 Few-shot 示例或改用代码判断语言。记录优化前后的对比。将今天和本周的代码整理到一个 GitHub 仓库中确保 README 描述清楚项目结构和运行方法。这是你 AI 学习之旅的第一个里程碑明日预告我们将进入第二周深入学习提示词工程的进阶技巧如何防范模型幻觉、角色扮演、长文本摘要等。请保持好奇心和耐心我们继续前进有任何问题欢迎随时提问
上一篇/下一篇内容由系统自动关联 返回资讯列表 →