Skip to main content
版权归属于 LangChat Team
官网:https://langchat.cn

03 - ChatModel 深入理解

版本说明

本文档基于 LangChain4j 1.10.0 版本编写。

学习目标

通过本章节学习,你将能够:
  • 深入理解 ChatModel 接口的所有方法
  • 区分 ChatModel 和 ChatModel 的使用场景
  • 掌握 StreamingChatModel 流式模型的使用
  • 学会选择合适的模型
  • 理解异常处理和错误管理

前置知识

  • 完成《01 - LangChain4j 简介》章节
  • 完成《02 - 第一个 Chat 应用》章节
  • 了解基本的 Java 接口和异常处理

核心概念

ChatModel 接口层次结构

LangChain4j 提供了多个层级的模型接口,让我们深入了解它们的关系和使用场景:

接口对比

ChatModel 详细使用

接口定义

使用示例

适用场景

使用 ChatModel 的最佳时机:
  1. 快速原型开发 - 需要快速验证想法
  2. 简单文本处理 - 只需要文本输入输出
  3. 学习阶段 - 刚开始学习 LangChain4j
  4. 脚本任务 - 批处理或自动化脚本
不推荐使用的场景:
  1. 需要访问响应元数据(Token 使用、模型信息等)
  2. 需要使用系统消息或消息历史
  3. 需要流式输出
  4. 生产环境中的复杂应用

ChatModel 详细使用

接口定义

方法详解

1. chat(String userMessage) - 便捷方法

特点:
  • 最简单快捷
  • 直接返回字符串
  • 适合快速测试

2. chat(ChatMessage message) - 单消息

特点:
  • 可以使用不同类型的消息
  • 返回完整的 ChatResponse 对象
  • 可以访问元数据

3. chat(ChatMessage… messages) - 多消息

特点:
  • 支持完整对话历史
  • 可以包含系统消息
  • LLM 可以理解上下文

4. chat(ChatRequest chatRequest) - 完全控制

特点:
  • 完全控制请求
  • 可以设置所有参数
  • 最灵活的方式

ChatResponse 详细解析

StreamingChatModel 流式响应

什么是流式响应?

流式响应(Streaming)允许你在 LLM 生成内容的同时,逐个 Token 地接收输出,而不是等待整个响应生成完成。 类比理解:
  • 非流式:等待一封信完整写好才送给你
  • 流式响应:看着对方写信,每写一个字就能看到一个字

为什么使用流式响应?

  1. 更好的用户体验 - 用户看到内容逐步出现,感觉更快
  2. 实时反馈 - 可以提前展示部分内容
  3. 长时间生成 - 对于生成长文本的场景特别有用
  4. 取消能力 - 可以中途取消生成

StreamingChatModel 接口定义

基本使用

TokenStream 高级流式响应

使用 TokenStream 获得更灵活的控制:

流式响应的回调

取消流式响应

模型选择策略

OpenAI 模型对比

选择建议

选择 gpt-4o:
  • 需要最高质量和推理能力
  • 复杂的代码生成和分析
  • 多步推理任务
  • 预算充足
选择 gpt-4o-mini(推荐):
  • 平衡性能和成本
  • 通用聊天应用
  • 大多数生产环境
  • 性价比最高
选择 gpt-3.5-turbo:
  • 简单文本处理
  • 批量任务
  • 成本敏感
  • 不需要复杂推理

其他模型提供商

异常处理

常见异常类型

重试机制

自定义异常处理

完整示例:智能聊天服务

测试代码示例

实践练习

练习 1:对比不同接口

创建一个对比程序,比较三种接口的使用:

练习 2:实现智能重试

实现一个带指数退避的重试机制:

练习 3:流式响应进度条

创建一个带进度条的流式响应示例:

总结

本章要点

  1. ChatModel 接口层次
    • LanguageModel(废弃)
    • ChatModel(简单场景)
    • ChatModel(进阶场景)
    • StreamingChatModel(流式响应)
  2. ChatModel
    • 最简单的接口
    • 只接受 String,返回 String
    • 适合快速原型开发
  3. ChatModel
    • 提供多种 generate 方法
    • 返回 ChatResponse 对象
    • 可以访问元数据和完整信息
  4. StreamingChatModel
    • 支持流式输出
    • 提供 TokenStream 和响应处理器
    • 可以中途取消
  5. 模型选择
    • gpt-4o:最高能力
    • gpt-4o-mini:平衡选择(推荐)
    • gpt-3.5-turbo:低成本
  6. 异常处理
    • 常见异常类型
    • 内置重试机制
    • 自定义重试策略

下一步

在下一章节中,我们将学习:
  • 模型参数的详细配置
  • temperature、topP、topK 等参数的含义
  • 参数调优技巧

常见问题

Q1:什么时候应该使用 StreamingChatModel? A:当用户需要实时看到生成内容时,比如:
  • 聊天机器人
  • 长文本生成
  • 需要提前展示结果的场景
Q2:ChatModel 的 generate 方法有什么区别? A:
  • chat(String) - 最简单
  • chat(ChatMessage) - 单消息
  • chat(ChatMessage...) - 多消息
  • chat(ChatRequest) - 完全控制
Q3:如何选择合适的模型? A:考虑成本、速度、能力三个因素:
  • 高要求用 gpt-4o
  • 平衡用 gpt-4o-mini(推荐)
  • 低成本用 gpt-3.5-turbo
Q4:流式响应会增加成本吗? A:不会,Token 使用量相同,只是接收方式不同。但可能需要处理更多的网络小包。 Q5:如何处理网络不稳定? A:使用重试机制和超时设置,参考本文档的异常处理部分。

参考资料


版权归属于 LangChat Team
官网:https://langchat.cn