大模型开发之LangChain4j
文章平均质量分 80
通过LangChain4j实现对大模型开发
老任与码
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LangChain4j(20)——调用百度地图MCP服务
MCP Server | 百度地图API SDK地理编码将地址解析为对应的位置坐标输入:address地址信息输出:location逆地理编码将坐标点转换为对应语义化地址输入:location经纬度坐标输出:uid地点检索多种场景的地点以及POI检索, 包括城市检索、圆形区域检索输入:query检索关键词location圆形检索的中心点radius圆形检索的半径region城市检索指定城市输出: POI列表, 包含namelocationaddress等地点详情检索。原创 2025-06-27 21:35:26 · 1138 阅读 · 1 评论 -
LangChain4j(19)——调用SearXNG搜索工具
SearXNG 是一个元搜索引擎,它聚合了其他搜索引擎的结果。原创 2025-06-25 19:13:13 · 554 阅读 · 0 评论 -
LangChain4j(13)——RAG高级之查询压缩
本文介绍RAG的一些高级用法(Advanced RAG),很多语法都需要借助检索增强对象RetrievalAugmentor实现。RetrievalAugmentor是 RAG 管道的入口,它负责对用户提出问题的检索信息进行增强。下面我们通过一些案例介绍下RAG的高级语法。原创 2025-04-23 21:01:01 · 945 阅读 · 0 评论 -
LangChain4j(18)——通过Xinference调用Rerank模型
也称为重排序模型,它从搜索中获取初始结果集,并重新评估它们,以确保它们更紧密地符合用户的意图。它超越了术语的表面匹配,考虑了搜索查询和文档内容之间更深层次的交互。LangChain4j支持的Rerank模型如下:其中通过onnx调用需要将模型转为onnx后调用,占用内存较多。Cohere、Jina等模型需要收费。本例采用Xinference方式调用。原创 2025-06-09 22:38:59 · 959 阅读 · 0 评论 -
LangChain4j(17)——MCP客户端
本例使用的msp服务是server-everything。它是一个 MCP 客户端构建者的测试服务器。echo回显输入消息的简单工具输入:message(string):要回显的消息返回: 带有回声消息的文本内容add将两个数字相加输入:a(number):第一个数字b(number):第二个数字返回: 添加的文本结果演示长时间作的进度通知输入:duration(number,默认值:10):持续时间(以秒为单位)原创 2025-05-28 17:16:45 · 1789 阅读 · 0 评论 -
LangChain4j(16)——使用milvus进行向量存储
非结构化数据(如文本、图像和音频)格式各异,蕴含丰富的潜在语义,因此分析起来极具挑战性。为了处理这种复杂性,Embeddings 被用来将非结构化数据转换成能够捕捉其基本特征的数字向量。然后将这些向量存储在向量数据库中,从而实现快速、可扩展的搜索和分析。Milvus 提供强大的数据建模功能,使您能够将非结构化或多模式数据组织成结构化的 Collections。它支持多种数据类型,适用于不同的属性模型,包括常见的数字和字符类型、各种向量类型、数组、集合和 JSON,为您节省了维护多个数据库系统的精力。原创 2025-05-01 07:50:40 · 1796 阅读 · 0 评论 -
LangChain4j(15)——RAG高级之跳过检索
之前的文章中,我们介绍了RAG的使用,但是,每次提问时,都会通过RAG进行检索。有时,检索是不必要执行的,比如,当用户只是说“你好”时,于是,我们需要有条件的跳过检索过程。原创 2025-04-30 13:42:59 · 511 阅读 · 0 评论 -
LangChain4j(14)——向量存储
Redis Stack是Redis的扩展,它提供了一系列功能的扩展扩展,比如,全文搜索、文档数据库、时间序列数据、图形数据和矢量搜索等。Redis Stack Server,由 Redis,RedisSearch,RedisJSON,RedisGraph,RedisTimeSeries 和 RedisBloom 组成RedisInsight,官方提供的强大的redis客户端工具Redis Stack 客户端 SDK,包括Java、JavaScript、Python。原创 2025-04-26 09:00:00 · 1568 阅读 · 0 评论 -
LangChain4j(12)——Naive RAG
上篇文章,我们介绍了RAG的基本,并且使用的是LangChain4j中提到的Easy RAG,Easy RAG只是提供了对RAG认知的一个基本方式,对外隐藏了很多实现细节。本文讲解LangChain4j中提到的Naive RAG,之所以称为Naive RAG,只是为了和Advanced RAG做个区分,表示其没有使用到Advanced RAG的一些高级语法。原创 2025-04-21 12:00:00 · 1215 阅读 · 0 评论 -
LangChain4j(11)——Easy RAG
RAG (Retrieval-Augmented Generation),内容检索增强生成。通过RAG我们可以构建专有领域的知识库,在向大模型发送问题之前,可以先通过RAG检索相应的内容,然后将我们的问题和检索到的内容一起发给大模型,大模型根据我们给的内容进行回答,可以使回答的内容更准确。RAG 过程分为 2 个不同的阶段:索引和检索。索引阶段在索引阶段,对文档进行预处理。简单来说,会对文档进行分块,并对分块的数据进行嵌入存储(数据存入向量数据库中)。原创 2025-04-17 19:08:15 · 887 阅读 · 0 评论 -
LangChain4j(10)——函数工具调用
Tool("计算字符串的长度")@Tool("计算两个整数的和")@Tool("计算整数的平方根")@Tool用于对函数进行功能描述,这个很重要,描述的越清楚,大模型越容易考虑是否需要使用函数工具。原创 2025-04-16 19:15:32 · 1067 阅读 · 0 评论 -
LangChain4j(9)——AI Services基本使用2
之前的例子中,我们只使用了String作为返回类型。❌✅上表来自。原创 2025-04-14 13:00:00 · 886 阅读 · 0 评论 -
LangChain4j(8)——AI Services基本使用1
之前的文章中,我们的案例使用的是LangChian4j中提供的Low Level API,这种级别的API使用灵活,但是各种对象之间关联起来相对比较麻烦。LangChain4j中还提供了High Level API,AI Services就属于High Level API。AI Services通过实现对自定义接口的代理对象,内部隐藏了诸多实现细节,可以使开发者更多的关注业务细节。AI Service提供了对格式化输入和输出转换的常规操作,而且还支持Chat Memory、工具调用、RAG等。原创 2025-04-12 10:44:57 · 1212 阅读 · 0 评论 -
LangChain4j(7)——输出格式化
很多大模型都支持对输出的内容进行格式化,通常情况下,一般将输出内容格式化为json数据,方便进行对象的转换。需要注意的是,某些类型不支持输出的格式化,比如我们之前案例中使用的GLM-4-Flash模型(GLM-4支持)。LangChain4j中集成了对某些LLM格式化输出的支持,根据官网说明,暂时只对Azure OpenAI、OpenAI、Google AI Gemini、Ollama提供支持。但是,不同的模型对JSON Schema的支持也不一样,比如OpenAI仅支持rootElement为。原创 2025-04-09 15:49:36 · 1007 阅读 · 0 评论 -
LangChain4j(6)——流式响应处理
之前的案例,大模型将生成的内容一次性返回,用户需要等待较长的时间,甚至出现超时的现象。为了提高用户体验,大模型提供了流式响应数据的方式,通过流式响应,可以将生成的token逐一返回。注意:实现流式响应,需要使用针对流式响应的对象。本例使用智谱的大模型,使用的对象为ZhipuAiStreamingChatModel。onCompleteResponse:整个生成结束后,会调用该方法。通过该方法的参数,可以得到所有的响应数据。onPartialResponse:生成下一个响应内容时,会调用该方法。原创 2025-04-08 14:56:36 · 575 阅读 · 1 评论 -
LangChain4j(5)——聊天记忆的多用户支持和持久化存储
上篇文章中,我们使用Chat Memory实现了对聊天内容的储存,但是,其中的代码案例只支持存储一个用户的聊天数据。实际应用中,我们的系统肯定是多用户的,每个用户都需要维护各自的聊天数据。从源码中,我们可以看到,ChatMemoryProvider中仅包含一个get方法,我们可以使用用户id做为该方法的参数。原创 2025-04-08 14:10:25 · 996 阅读 · 0 评论 -
LangChain4j(4)——聊天记忆Chat Memory
比如,设置最多存储10条聊天信息,随着聊天的进行,如果聊天记录超过10条,则会淘汰Chat Memory中最老的记录。有一种比较简单的做法,我们在发送下次的问题时,可以将之前的问题和回答一并发送给大模型,这样,大模型就可以拥有Chat Memory。但是,如果为了回答新的问题,就将之前的提问和回答都发送给大模型,那么每次提问的token会越来越多,我们知道大模型是以token计费的,而更多的token,意味着更多的成本。关键代码是如下语句,其将第一次的提问和回答信息连同第二次的提问一起发送给了大模型。原创 2025-04-05 22:46:19 · 427 阅读 · 0 评论 -
LangChain4j(3)——调用DeepSeek
首先需要在开放平台进行注册,然后申请API key。为了可以正常调用DeepSeek的接口,还需要进行充值。遗憾的是,LangChain4j中暂时没有提供对DeepSeek API的直接支持,同时DeepSeek也没有提供官方SDK。但是,DeepSeek API 使用与 OpenAI 兼容的 API 格式,通过修改配置,可以使用 OpenAI SDK 来访问 DeepSeek API。而LangChain4j中提供了对OpenAi的支持。于是,本例使用OpenAi的对象进行调用。原创 2025-04-02 19:44:54 · 818 阅读 · 0 评论 -
LangChain4j(2)——调用多模态模型
多模态大模型可以处理图像、视频和音频等信息。原创 2025-03-31 19:17:09 · 1003 阅读 · 0 评论 -
LangChain4j(1)——基本使用
采样温度,控制输出的随机性,智谱中,必须为正数,取值范围是:[0.0,1.0], 默认值为 0.95,值越大,会使输出更随机,更具创造性;值越小,输出会更加稳定或确定。这个参数可以告诉机器如何在质量和多样性之间进行权衡。较低的 temperature 意味着更高的质量,而较高的 temperature 意味着更高的多样性。原创 2025-03-30 12:03:08 · 1097 阅读 · 0 评论 -
智谱AI 开放平台使用(4)——函数调用
注意:是否需要提用函数,由大模型决定,所以对函数和函数中参数的描述非常重要。另外,测试代码只是为了证明大模型是否会决定调用函数,但是代码中并没有实现调用函数的逻辑。从响应的内容可以看出,tool_calls部分制定了需要调用函数getInfo,同时显示参数num的值是2234,说明大模型根据我们的输入,决定要调用指定的函数。如果需要将大模型与我们项目中自己的业务结合,就需要设置函数调用工具。原创 2025-03-28 13:45:03 · 236 阅读 · 0 评论 -
DeepSeek本地化部署
现在使用的主要是两个版本:DeepSeek-V3:通用型模型,专注于自然语言处理、知识问答、内容创作等通用任务。DeepSeek-R1:专注于数学、代码生成和复杂逻辑推理任务设计。原创 2025-03-29 17:10:02 · 930 阅读 · 0 评论 -
智谱AI 开放平台使用(3)——增强检索
在上一篇博客中,虽然我们已经可以通过搜索工具得到XXX医院的职工数,但是其给出的数据并不准确。如果我们想要得到准确的数据,该如何处理呢?要想实现上述需求,我们可以借助知识库管理特定领域的数据,这就需要用到RAG(Retrieval Augmented Generation,检索增强生成)。简单来说,借助RAG,我们可以给大模型提供更丰富更准确的上下文信息,我们的问题和检索出的内容作为提示词,会一并发送给大模型,大模型就能返回更准确的结果。原创 2025-03-25 17:59:13 · 357 阅读 · 0 评论 -
智谱AI 开放平台使用(2)——搜索工具
大模型的训练数据,一般是截止到某个时间点,如果想要得到一些实时的信息,就需要使用搜索功能。大模型根据搜索工具搜索到的内容,进行分析处理,输出更具时效性的数据。使用搜索工具后的输出如下,表名内部使用了搜索工具进行查询,但是内容并不唯一。没使用搜索工具的输出如下,AI表示没有相关信息。原创 2025-03-23 19:10:08 · 472 阅读 · 0 评论 -
智谱AI 开放平台使用(1)
智谱 AI 开放平台提供一系列具有不同功能和定价的大模型,包括通用大模型、超拟人大模型、图像大模型、向量大模型等,并且支持使用您的私有数据对模型进行微调。原创 2024-12-06 15:06:14 · 2619 阅读 · 0 评论
分享