1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452
   | """ 实战应用:完整的链式应用 演示:综合运用各种链技术构建实用应用 """
  from langchain.prompts import ChatPromptTemplate from langchain_openai import ChatOpenAI from langchain.output_parsers import PydanticOutputParser from pydantic import BaseModel, Field from typing import List from dotenv import load_dotenv import os import json
  load_dotenv()
 
  class ProductReview(BaseModel):     """产品评论分析结果"""     sentiment: str = Field(description="情感:正面/负面/中性")     score: int = Field(description="评分1-5分", ge=1, le=5)     keywords: List[str] = Field(description="关键词列表")     summary: str = Field(description="一句话总结")     suggestions: List[str] = Field(description="改进建议")
 
  class EmailResponse(BaseModel):     """邮件回复"""     subject: str = Field(description="邮件主题")     greeting: str = Field(description="问候语")     body: str = Field(description="正文内容")     closing: str = Field(description="结束语")     signature: str = Field(description="签名")
 
  def example1_review_analysis_pipeline() -> None:     """示例1:产品评论分析流水线"""     print("=== 示例1:产品评论分析系统 ===\n")
      llm = ChatOpenAI(         base_url=os.getenv("ALIBABA_BASE_URL"),         api_key=os.getenv("ALIBABA_API_KEY"),         model="qwen-plus",         temperature=0.3,     )
      parser = PydanticOutputParser(pydantic_object=ProductReview)
           analysis_prompt = ChatPromptTemplate.from_template(         """分析以下产品评论。
  评论内容: {review}
  {format_instructions} """     )
      analysis_chain = analysis_prompt | llm | parser
           reviews = [         """         这款手机真的很棒!屏幕清晰,拍照效果好,运行流畅。         唯一的小缺点是电池续航可以再长一点。总体来说非常满意!         """,         """         非常失望。买来第二天就出现死机问题,客服态度也不好。         质量太差了,不推荐购买。         """,         """         还行吧,符合这个价位的水平。没有特别惊艳,也没有明显缺陷。         """     ]
      for i, review in enumerate(reviews, 1):         print(f"📝 评论 {i}:")         print(review.strip())         print("\n🔄 分析中...\n")
          try:             result = analysis_chain.invoke({                 "review": review,                 "format_instructions": parser.get_format_instructions()             })
              print("✅ 分析结果:")             print(f"  情感:{result.sentiment}")             print(f"  评分:{result.score}分")             print(f"  关键词:{', '.join(result.keywords)}")             print(f"  总结:{result.summary}")             print(f"  改进建议:")             for suggestion in result.suggestions:                 print(f"    - {suggestion}")             print("\n" + "="*60 + "\n")         except Exception as e:             print(f"❌ 分析失败:{e}\n")
 
  def example2_email_generator() -> None:     """示例2:智能邮件生成器"""     print("\n=== 示例2:智能邮件生成器 ===\n")
      llm = ChatOpenAI(         base_url=os.getenv("ALIBABA_BASE_URL"),         api_key=os.getenv("ALIBABA_API_KEY"),         model="qwen-plus",         temperature=0.7,     )
      parser = PydanticOutputParser(pydantic_object=EmailResponse)
      email_prompt = ChatPromptTemplate.from_template(         """生成一封专业的商务邮件。
  收件人:{recipient} 目的:{purpose} 要点:{key_points} 语气:{tone}
  {format_instructions} """     )
      email_chain = email_prompt | llm | parser
           scenarios = [         {             "recipient": "张经理",             "purpose": "请假申请",             "key_points": "家中有事,需要请假3天,工作已安排好交接",             "tone": "正式礼貌"         },         {             "recipient": "合作伙伴",             "purpose": "项目合作邀请",             "key_points": "介绍公司项目,邀请合作,强调双赢",             "tone": "专业热情"         }     ]
      for i, scenario in enumerate(scenarios, 1):         print(f"📧 场景 {i}:{scenario['purpose']}")         print(f"收件人:{scenario['recipient']}\n")         print("🔄 生成邮件...\n")
          try:             result = email_chain.invoke({                 **scenario,                 "format_instructions": parser.get_format_instructions()             })
              print("✅ 生成的邮件:")             print(f"\n主题:{result.subject}")             print(f"\n{result.greeting}")             print(f"\n{result.body}")             print(f"\n{result.closing}")             print(f"{result.signature}")             print("\n" + "="*60 + "\n")         except Exception as e:             print(f"❌ 生成失败:{e}\n")
 
  def example3_content_moderation_system() -> None:     """示例3:内容审核系统"""     print("\n=== 示例3:智能内容审核系统 ===\n")
      llm = ChatOpenAI(         base_url=os.getenv("ALIBABA_BASE_URL"),         api_key=os.getenv("ALIBABA_API_KEY"),         model="qwen-plus",         temperature=0.1,     )
           classify_prompt = ChatPromptTemplate.from_template(         """对以下内容进行分类。
  内容:{content}
  分类(只返回一个):正常/广告/敏感/违规
  分类:"""     )
           analyze_prompt = ChatPromptTemplate.from_template(         """详细分析以下内容。
  内容:{content} 初步分类:{category}
  分析要点: 1. 是否包含不当信息 2. 是否有广告性质 3. 语言是否文明 4. 建议处理方式
  分析结果:"""     )
           report_prompt = ChatPromptTemplate.from_template(         """生成审核报告。
  内容:{content} 分类:{category} 详细分析:{analysis}
  生成JSON格式的审核报告,包含: - status: 通过/警告/拒绝 - reason: 原因说明 - action: 处理建议
  报告:"""     )
      def moderate_content(content: str) -> dict:         """完整的审核流程"""         print(f"📄 待审核内容:{content}\n")
                   print("🔄 步骤1:内容分类...")         category_result = (classify_prompt | llm).invoke({"content": content})         category = category_result.content.strip()         print(f"   分类:{category}\n")
                   print("🔄 步骤2:详细分析...")         analysis_result = (analyze_prompt | llm).invoke({             "content": content,             "category": category         })         analysis = analysis_result.content         print(f"   分析:{analysis[:100]}...\n")
                   print("🔄 步骤3:生成审核报告...")         report_result = (report_prompt | llm).invoke({             "content": content,             "category": category,             "analysis": analysis         })
          try:                          report = json.loads(report_result.content)         except:                          report = {                 "status": category,                 "reason": analysis[:50],                 "action": "人工复审"             }
          return report
           test_contents = [         "这是一条正常的评论,产品质量不错",         "超低价!点击链接购买!!!限时优惠!!!",         "你们的服务真是太差了,垃圾!"     ]
      for content in test_contents:         report = moderate_content(content)
          print("✅ 审核报告:")         print(f"   状态:{report.get('status', '未知')}")         print(f"   原因:{report.get('reason', '无')}")         print(f"   处理:{report.get('action', '无')}")         print("\n" + "="*60 + "\n")
 
  def example4_multi_language_translator() -> None:     """示例4:多语言翻译器"""     print("\n=== 示例4:智能多语言翻译器 ===\n")
      llm = ChatOpenAI(         base_url=os.getenv("ALIBABA_BASE_URL"),         api_key=os.getenv("ALIBABA_API_KEY"),         model="qwen-plus",         temperature=0.3,     )
           detect_prompt = ChatPromptTemplate.from_template(         """检测以下文本的语言,只返回语言名称(中文/英文/日文/韩文等)。
  文本:{text}
  语言:"""     )
           translate_prompt = ChatPromptTemplate.from_template(         """将以下{source_lang}文本翻译成{target_lang}。
  原文:{text}
  译文:"""     )
           polish_prompt = ChatPromptTemplate.from_template(         """润色以下翻译,使其更加自然流畅。
  原始翻译:{translation}
  润色后:"""     )
      def translate_pipeline(text: str, target_lang: str) -> dict:         """完整翻译流程"""         print(f"📝 原文:{text}")         print(f"🎯 目标语言:{target_lang}\n")
                   print("🔄 检测语言...")         source_lang_result = (detect_prompt | llm).invoke({"text": text})         source_lang = source_lang_result.content.strip()         print(f"   源语言:{source_lang}\n")
                   print("🔄 翻译中...")         translation_result = (translate_prompt | llm).invoke({             "source_lang": source_lang,             "target_lang": target_lang,             "text": text         })         translation = translation_result.content         print(f"   初步翻译:{translation}\n")
                   print("🔄 润色中...")         polished_result = (polish_prompt | llm).invoke({             "translation": translation         })         polished = polished_result.content
          return {             "source_lang": source_lang,             "target_lang": target_lang,             "original": text,             "translation": translation,             "polished": polished         }
           test_cases = [         ("人工智能正在改变世界", "英文"),         ("I love programming", "中文"),     ]
      for text, target in test_cases:         result = translate_pipeline(text, target)
          print("✅ 翻译结果:")         print(f"   原文({result['source_lang']}):{result['original']}")         print(f"   译文({result['target_lang']}):{result['polished']}")         print("\n" + "="*60 + "\n")
 
  def example5_error_handling() -> None:     """示例5:错误处理和日志"""     print("\n=== 示例5:带错误处理的链 ===\n")
      llm = ChatOpenAI(         base_url=os.getenv("ALIBABA_BASE_URL"),         api_key=os.getenv("ALIBABA_API_KEY"),         model="qwen-plus",         temperature=0.7,     )
      import logging     from datetime import datetime
           logging.basicConfig(level=logging.INFO)     logger = logging.getLogger(__name__)
      def log_step(step_name: str):         """日志装饰器"""         def decorator(func):             def wrapper(*args, **kwargs):                 logger.info(f"[{datetime.now()}] 开始执行:{step_name}")                 try:                     result = func(*args, **kwargs)                     logger.info(f"[{datetime.now()}] 完成:{step_name}")                     return result                 except Exception as e:                     logger.error(f"[{datetime.now()}] 错误:{step_name} - {e}")                     raise             return wrapper         return decorator
      @log_step("文本分析")     def analyze_text(text: str) -> str:         """分析文本"""         prompt = ChatPromptTemplate.from_template(             "分析以下文本的主题:\n{text}"         )         result = (prompt | llm).invoke({"text": text})         return result.content
      @log_step("生成摘要")     def generate_summary(analysis: str) -> str:         """生成摘要"""         prompt = ChatPromptTemplate.from_template(             "基于以下分析生成一句话摘要:\n{analysis}"         )         result = (prompt | llm).invoke({"analysis": analysis})         return result.content
           text = "人工智能技术正在各个领域发挥越来越重要的作用"
      print(f"输入:{text}\n")
      try:         analysis = analyze_text(text)         print(f"分析结果:{analysis}\n")
          summary = generate_summary(analysis)         print(f"摘要:{summary}\n")
      except Exception as e:         print(f"处理失败:{e}")
 
  def main() -> None:     """主函数"""     example1_review_analysis_pipeline()     print("\n" + "="*70 + "\n")
      example2_email_generator()     print("\n" + "="*70 + "\n")
      example3_content_moderation_system()     print("\n" + "="*70 + "\n")
      example4_multi_language_translator()     print("\n" + "="*70 + "\n")
      example5_error_handling()
 
  if __name__ == "__main__":     main()
 
   |