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

02 - 第一个 Chat 应用

版本说明

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

学习目标

通过本章节学习,你将能够:
  • 深入理解 ChatModel 的基本概念
  • 掌握创建和配置 ChatModel 实例的方法
  • 学会发送不同类型的消息
  • 理解如何接收和处理 LLM 响应
  • 构建一个完整的聊天应用示例

前置知识

  • 完成《01 - LangChain4j 简介》章节
  • 理解基本的 LLM 概念
  • 已配置好开发环境和 API Key

核心概念

ChatModel 简介

ChatModel 是 LangChain4j 中最核心的接口之一,用于与大语言模型进行交互。它代表了与大语言模型对话的能力。 类比理解: 如果把 LLM 比作一个智能客服人员,那么 ChatModel 就是你的电话——通过它你可以与客服人员(LLM)进行对话。

ChatModel 接口层次

LangChain4j 提供了多个层级的接口,从简单到复杂:
接口选择建议:
  • 初学者:使用 chatModel.chat(String) 最简单
  • 进阶使用:使用 ChatModel 获得更多控制力
  • 高级用户:使用 chatModel.chat(ChatRequest) 完全控制

ChatMessage 类型

在深入了解 ChatModel 之前,先了解 ChatMessage 的类型:

创建 ChatModel 实例

使用 OpenAI 模型

高级配置

使用其他模型提供商

发送消息

方式一:简单的字符串消息

最简单的方式,直接发送字符串:

方式二:使用 ChatMessage

使用 ChatMessage 类型发送消息,获得更多控制:

方式三:多消息对话

发送多个消息,构建完整对话上下文:

方式四:使用 ChatRequest 完全控制

使用 ChatRequest 对象进行完全控制:

接收响应

获取响应文本

最简单的获取响应文本的方式:

获取完整响应信息

获取响应的详细信息,包括元数据:

获取完成原因

了解为什么 LLM 停止生成:

完整示例:简单的聊天应用

示例代码

运行示例

测试代码示例

实践练习

练习 1:统计 Token 使用

修改聊天应用,显示每次对话的 Token 使用情况:

练习 2:添加系统提示

让聊天应用支持自定义系统提示:

练习 3:响应时间对比

对比不同模型的响应时间:

总结

本章要点

  1. ChatModel 接口层次
    • LanguageModel(废弃)
    • ChatModel(推荐初学者)
    • ChatModel(提供完整控制)
  2. 创建 ChatModel
    • 基本配置(API Key、模型名称)
    • 高级配置(参数、超时、日志)
    • 支持多种模型提供商
  3. 发送消息的方式
    • 简单字符串:model.chat(String)
    • ChatMessage:model.chat(ChatMessage)
    • 多消息:model.chat(List<ChatMessage>)
    • ChatRequest:model.chat(ChatRequest)
  4. 接收响应
    • 获取响应文本
    • 获取完整元数据(模型、Token 使用等)
    • 获取完成原因
  5. 完整示例
    • 构建了一个可运行的聊天应用
    • 包含输入输出、命令处理、错误处理

下一步

在下一章节中,我们将深入学习:
  • ChatModel 接口的详细方法
  • StreamingChatModel 流式模型
  • 模型选择策略
  • 异常处理和错误管理

常见问题

Q1:ChatModel 和 ChatModel 有什么区别? A:ChatModel 是简化接口,只接受字符串输入返回字符串输出。ChatModel 是更强大的接口,接受 ChatMessage 对象,返回包含元数据的 ChatResponse Q2:如何选择合适的模型? A:考虑以下因素:
  • 成本:GPT-3.5 更便宜,GPT-4o 更强大
  • 速度:GPT-3.5 更快
  • 任务复杂度:简单任务用便宜的模型,复杂任务用强大模型
  • 下一章我们将详细介绍。
Q3:为什么多轮对话中 AI 不记得之前的内容? A:LLM 本身是无状态的。要实现多轮对话记忆,需要使用 ChatMemory(将在后续章节介绍)。 Q4:如何处理 API 错误? A:可以使用 try-catch 捕获异常,或配置重试机制。我们将在后续章节详细介绍错误处理。 Q5:logRequests 和 logResponses 有什么作用? A:这两个参数会开启请求和响应的日志记录,便于调试和监控。生产环境中可以关闭以提高性能。

参考资料


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