langchain4j实战:AiServices(@SystemMessage、@UserMessage、Tools)的使用

AiServices服务提供了一种更简单、更灵活的替代链。您可以定义自己的API(带有一个或多个方法的Java接口),AiServices将为其提供实现(我们称之为“AI服务”)。底层则是使用Jdk动态代理方式增强定义的接口,让其具备和LLM交互的功能。

AiServices重要属性

  • ChatLanguageModel:需要使用的LLM模型
  • ModerationModel:可以用来过滤敏感词等
  • ChatMemory:会话上下文聊天内存
  • Tools:用户自定义的工具
  • ContentRetriever:内容检索器,用于从向量中查询匹配的数据
  • @SystemMessage系统提示词,@UserMessage用户信息,@V输入参数

@SystemMessage、@UserMessage使用

示例场景:扮演一名学生、写一篇作文

  • @SystemMessage 指定系统提示词,给定身份并写一篇指定字数的作文
  • @UserMessage 用户信息则为作文题目,用户可以根据需要变更不同的题目
  • @V指定的参数,在@UserMessage用户信息中通过{{}}符号使用
public interface Student {
    @SystemMessage("请扮演一名小学生,根据输入的文章题目写一篇100字以内的作文")
    String write(String title);
    @SystemMessage("请扮演一名高中生,根据输入的文章题目写一篇{{num}}字以内的作文")
    String write1(@UserMessage String title, @V("num") int num);
    
    static Student create() {
        ChatLanguageModel model = OpenAiChatModel.builder().baseUrl(OPEN_AI_BASE_URL).apiKey(OPEN_AI_API_KEY).build();
        return AiServices.create(Student.class, model);
    }
}

public class Demo2 {
    public static void main(String[] args) {
        Student student = Student.create();
        String result1 = student.write("我的梦想");
        String result2 = student.write1("我的梦想", 100);
        System.out.println(result1);
        System.out.println("--------------------------------------------------------");
        System.out.println(result2);
    }
}

输出结果如下
在这里插入图片描述

Tools使用

看下面示例,问今天是几月几号,回答的日期不对,并且多问几次,每次结果都不一样。这是因为大模型数据都是基于过往历史数据的,对于最新的信息是无法识别。需要让他识别出最新日期,则就要用到Tools工具了。

    public static void main(String[] args) {
        ChatLanguageModel model = OpenAiChatModel.builder().baseUrl(OPEN_AI_BASE_URL)
                .apiKey(OPEN_AI_API_KEY).build();
        String result = model.generate("今天是几月几号");
        System.out.println(result);
    }

在这里插入图片描述
定义ToolUtil 工具类,通过@Tool注解指定这是一个工具方法,实现获取当前日期的逻辑。
UserService为我们定义的AI服务,用与和LLM交互。执行后看到日期为当前自然日期,

public class ToolUtil {
    @Tool("获取当前日期")
    public static String nowDate() {
        return LocalDateTime.now().toString();
    }
}

public interface UserService {
    String sendMessage(String desc);
}

public class Demo2 {
    public static void main(String[] args) {
        ChatLanguageModel model = OpenAiChatModel.builder().baseUrl(OPEN_AI_BASE_URL)
                .apiKey(OPEN_AI_API_KEY).build();
        UserService userService = AiServices.builder(UserService.class)
                .chatLanguageModel(model)
                .chatMemory(MessageWindowChatMemory.withMaxMessages(10))
                .tools(new ToolUtil())
                .build();
        String result = userService.sendMessage("今天是几月几号");
        System.out.println(result);
    }
}

在这里插入图片描述

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值