langchain4j 学习系列(9)-AIService与可观测性
一、基本用法
1.1 定义业务接口

View Code
注:{{it}}是langchain4j内部约定的默认占位符名。当只有1个参数时,{{it}}在运行时,会自动替换成用户的prompt. 当然也可以强制指定参数名,就本示例而言,注释的二种写法,完全等效。
1.2 使用AiServices创建实例

View Code
是不是很简单?运行效果:

二、结构化输出
AIService还可以将输出结果,以结构化输出(即:直接输出强类型的POJO对象),继续将上述示例改造一下:
2.1 定义POJO对象

View Code
2.2 定义1个extrator接口

View Code
2.3 使用示例

View Code
运行效果:


三、流式响应

View Code

四、可观测性(trace跟踪)
LLM应用中,trace跟踪是很重要,比如:每次请求消耗了多少token,哪个环节耗时最大,每次请求LLM的输入/输出是什么...
4.1 model级别的监听器

View Code
自定义1个listener,可以把LLM的输入、输出、错误信息都拿到,按实际业务需求做相应处理(比如:记日志,或存储便于离线分析),在注入model时,加上这个监听器

View Code
4.2 AiService监听器

langchain4j内置这几种AiService的监听器,这里我们挑2个做为示例

View Code

View Code
顾名思义,1个是start(开始)的监听器,1个是complete(完成)的监听器

View Code
加入以上listener后,我们来看看运行时的控制台输出

View Code
其中:
行1 - 是CustomAiServiceStartedListener的输出
行57 - 是CustomAiServiceCompletedListener的输出
行31,54,56等是CustomChatModelListener的输出,其中要注意的是:
CustomChatModelListener.onRequest中, 上下文中示例放了1个自定义属性 my-attribute -> my-value

然后在onResponse中, 在输出结果中,尝试获取这个属性

更多推荐



所有评论(0)