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

11 - AI Services

版本说明

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

学习目标

通过本章节学习,你将能够:
  • 理解 AI Services 的核心概念和优势
  • 掌握如何使用 @AiService 注解定义服务
  • 学会配置系统消息和 ChatMemory
  • 掌握多轮对话和流式输出的使用
  • 理解 AI Services 高级特性(工具调用、RAG 等)
  • 实现一个完整的 AI Service

前置知识

  • 完成《01 - LangChain4j 简介》章节
  • 完成《02 - 你的第一个 Chat 应用》章节
  • 完成《03 - 深入理解 ChatModel》章节
  • 完成《06 - ChatMemory 对话记忆管理》章节
  • 完成《09 - Tools 工具调用》章节(可选)

核心概念

什么是 AI Services?

AI Services 是 LangChain4j 提供的高级抽象层,它通过简单的接口将 LLM 的复杂性隐藏在底层。 类比理解: 如果把 ChatModel 比作手动挡位车(需要你自己操作离合器、油门、方向盘),那么 AI Services 就像是自动挡汽车(自动处理所有细节,你只需要告诉它去哪)。 为什么需要 AI Services?
  1. 简化开发 - 无需手动管理消息列表和对话历史
  2. 类型安全 - 通过 Java 接口和注解定义行为
  3. 声明式 - 使用注解配置,代码更清晰
  4. 易于测试 - 接口独立,可以轻松 mock
  5. 功能丰富 - 自动集成工具、记忆、流式输出等

AI Services vs 手动调用

基础 AI Service

定义服务接口

创建 Service 实例

系统消息配置

使用 @SystemMessage 注解

创建 Service(带系统消息)

ChatMemory 集成

自动记忆管理

流式输出

使用 @V 注解

工具集成

自动工具调用

完整 AI Service 示例

测试代码示例

实践练习

练习 1:创建角色扮演服务

实现一个支持多种角色的 AI Service:

练习 2:实现流式对话服务

实现一个支持流式输出和记忆的对话服务:

练习 3:实现多模态服务

实现一个支持图像输入的服务:

总结

本章要点

  1. AI Services 优势
    • 简化开发,隐藏复杂性
    • 类型安全,声明式编程
    • 自动集成记忆、工具、流式输出
  2. 基础用法
    • 定义服务接口
    • 使用 @AiServices.builder() 创建实例
    • 注解驱动配置
  3. 高级特性
    • @SystemMessage - 配置系统提示
    • @MemoryId + ChatMemoryProvider - 多用户记忆
    • @V - 流式输出支持
    • 工具集成 - 自动工具调用
  4. 最佳实践
    • 接口设计要清晰明确
    • 合理配置记忆窗口大小
    • 选择合适的模型和参数
    • 实现错误处理和重试
  5. 应用场景
    • 对话机器人
    • 角色扮演助手
    • 代码审查工具
    • 多模态应用

下一步

在下一章节中,我们将学习:
  • 流式输出详细实现
  • 请求拦截器和中间件
  • 自定义响应处理器
  • AI Services 测试策略
  • 性能优化建议

常见问题

Q1:AI Services 和直接调用 ChatModel 有什么区别? A:
  • AI Services:自动管理消息历史、记忆、工具调用,代码更简洁
  • 直接调用:需要手动管理消息列表,更多控制但代码更复杂
Q2:如何实现多用户隔离? A:
  • 使用 @MemoryId 注解标记用户 ID
  • 创建 ChatMemoryProvider 为每个用户返回独立的记忆
  • LangChain4j 会自动处理隔离
Q3:流式输出对性能有什么影响? A:
  • 优点:用户体验更好,可以实时显示响应
  • 缺点:需要更多网络往返,整体完成时间可能略长
  • 建议:在用户体验要求高的场景使用流式输出
Q4:如何测试 AI Services? A:
  • 接口独立,可以轻松 mock
  • 使用 JUnit 或其他测试框架
  • 可以针对特定场景编写单元测试
  • 可以使用模拟模型进行测试
Q5:如何选择合适的记忆窗口大小? A:考虑因素:
  • 对话历史长度需求
  • 模型上下文窗口限制
  • Token 使用量和成本
  • 具体应用场景(如客服 vs 长文档助手)

参考资料


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