需对通义千问相关代码进行系统性重构与逻辑优化,具体包括:一、提取重复逻辑为函数并规范文档;二、统一命名与添加类型提示;三、拆分长函数明确职责;四、引入prompttemplate和llmclient抽象层;五、注入结构化日志与可观测断点。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

如果您在使用通义千问AI辅助编写或理解代码时,发现程序逻辑冗余、可读性差、命名不规范或存在潜在性能瓶颈,则需要对现有代码进行系统性重构与逻辑优化。以下是针对通义千问相关程序(如调用SDK、构建Agent流程、Prompt工程集成等场景)开展代码重构与逻辑规范化的具体操作步骤:
一、识别重复逻辑并提取函数
当同一段处理逻辑(如参数校验、JSON解析、异常日志封装)在多个位置重复出现时,应将其抽象为独立函数,降低耦合度并提升可维护性。
1、扫描项目中所有Python文件,定位三处及以上重复出现的5行以上相似代码块。
2、新建utils.py文件,在其中定义新函数,函数名采用snake_case格式,首行添加Google风格docstring说明输入、输出与异常。
3、将原调用位置的重复代码替换为函数调用,传入对应变量,确保返回值类型与原逻辑一致。
4、运行pytest覆盖所有修改点,验证函数行为未引入副作用。
二、统一命名规范与类型提示
变量、函数、类的命名若缺乏语义或混用缩写,会显著阻碍他人(及未来自己)快速理解通义千问API交互意图;添加类型提示可提前暴露参数错配问题。
1、使用pylint --enable=invalid-name,missing-type-doc,missing-param-doc检查命名与文档缺失项。
2、将所有形如resp、qwen_res、tmp_data的变量重命名为qwen_api_response、qwen_completion_result、normalized_input_payload等具备完整语义的名称。
3、在所有函数定义中补充->返回类型及:参数类型,例如将def call_qwen(model, prompt)改为def call_qwen(model: str, prompt: str) -> Dict[str, Any]。
4、执行mypy --strict对模块进行静态类型检查,修正全部error级别报错。
三、拆分长函数并明确职责边界
单个函数若超过40行或承担请求构造、模型调用、结果解析、错误重试、缓存写入等多个职责,将难以测试与调试;应按关注点分离原则进行垂直切分。
1、定位含有多重try-except嵌套、超过3个if-elif分支、或调用超2个外部API的函数。
2、将其拆分为build_request_payload()、execute_qwen_call()、parse_qwen_response()、handle_qwen_failure()四个独立函数。
3、每个子函数仅接收必要参数,不依赖闭包变量或全局状态,输入输出均通过参数与返回值显式传递。
4、为每个子函数单独编写单元测试,覆盖正常响应、空响应、HTTP 429、JSONDecodeError等典型路径。
四、引入领域专用抽象层
直接拼接字符串构造Prompt、硬编码system_message内容、手动管理temperature/top_p参数,会导致业务逻辑与大模型交互细节高度耦合;需建立PromptTemplate、LLMClient等抽象。
1、创建prompt_template.py,定义PromptTemplate类,支持format()方法注入变量,并内置get_system_message()与get_user_message()接口。
2、创建llm_client.py,封装QwenClient类,隐藏requests.Session配置、超时设置、重试策略,对外仅暴露generate()与chat()方法。
3、在业务代码中移除所有原始requests.post()调用,改用QwenClient().chat(prompt_template.format(...))。
4、验证重构后代码可无缝切换至Qwen1.5、Qwen2或Qwen2.5不同版本客户端,仅需替换实例化语句。
五、注入结构化日志与可观测断点
缺乏上下文标识的日志(如仅打印“调用失败”)无法支撑线上问题快速归因;应在关键决策点插入带trace_id、model_name、prompt_hash的日志标记。
1、在LLM调用前生成唯一trace_id = str(uuid.uuid4()),并绑定至当前线程local对象。
2、使用structlog替代print/ logging.info,在每次call_qwen()入口记录{"event": "qwen_call_start", "trace_id": ..., "model": ..., "prompt_length": len(prompt)}。
3、在响应解析完成后记录{"event": "qwen_call_success", "response_length": ..., "latency_ms": ...},失败时记录{"event": "qwen_call_error", "error_type": type(e).__name__}。
4、部署时配置日志采集器,确保所有event字段可被ELK或OpenTelemetry后端按trace_id聚合追踪。










