许多网上都是python的操作,但是java也能够操作大模型,列如LangChina4j。如果你国内无法科学上网的话,可以用智谱提供的大模型服务,直接去注册一个账号,然后新建一个key即可使用。
智谱AI开放平台:https://open.bigmodel.cn/

后续直接用我给的demo跑一跑langChain练练,看看为什么那么简单,demo里面包含4个简单的方法。包括目前典型的大模型应用场景。
1、简单的大模型调用
2、带history的大模型调用
3、RAG
4、调用方法的demo
package com.example.demo.test;
import java.util.ArrayList;
import java.util.List;
import dev.langchain4j.agent.tool.Tool;
import dev.langchain4j.data.embedding.Embedding;
import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.data.message.SystemMessage;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.memory.ChatMemory;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.embedding.AllMiniLmL6V2EmbeddingModel;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.model.zhipu.ZhipuAiChatModel;
import dev.langchain4j.service.AiServices;
import dev.langchain4j.store.embedding.EmbeddingMatch;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
public class LangChinaDemo {
private static final String ZHIPU_API_KEY = "7b8c906235a24a3fa73aa5637fb793ca.t0xHFFBzyFlzufPv"; // 替换为你的token
public static void main(String[] args) {
System.out.println("=== LangChain4j Java Demo ===");
// 1. 基础聊天功能演示
demonstrateBasicChat();
// 2. 带记忆的聊天演示
demonstrateChatWithMemory();
// 3. 简单的RAG演示
demonstrateSimpleRAG();
// 4. 函数调用模拟演示
demonstrateFunctionCalling();
}
/**
* 演示基础聊天功能
*/
private static void demonstrateBasicChat() {
System.out.println("
--- 1. 基础聊天演示 ---");
ChatLanguageModel model = ZhipuAiChatModel.builder()
.apiKey(ZHIPU_API_KEY)
.model("glm-4")
.maxToken(500)
.temperature(0.7)
.build();
String response = model.generate("请用中文简单介绍一下人工智能");
System.out.println("AI回复: " + response);
}
/**
* 演示带记忆的聊天
*/
private static void demonstrateChatWithMemory() {
System.out.println("
--- 2. 带记忆的聊天演示 ---");
ChatLanguageModel model = ZhipuAiChatModel.builder()
.apiKey(ZHIPU_API_KEY)
.model("glm-4-plus")
.build();
// 创建带记忆的聊天
ChatMemory chatMemory = MessageWindowChatMemory.withMaxMessages(10);
// 添加系统提示
chatMemory.add(SystemMessage.from("你是一个有用的AI助手,请用中文回答"));
chatMemory.add(UserMessage.from("请问我叫什么名字?"));
String response1 = model.generate(chatMemory.messages()).content().text();
// 第一轮对话
chatMemory.add(AiMessage.from(response1));
System.out.println("第一轮: " + response1);
chatMemory.add(UserMessage.from("我的名字是凡月"));
// 第二轮对话(模型应该记得名字)
chatMemory.add(UserMessage.from("我刚才说我叫什么名字?"));
String response2 = model.generate(chatMemory.messages()).content().text();
System.out.println("第二轮: " + response2);
}
/**
* 演示简单的RAG(检索增强生成)
*/
private static void demonstrateSimpleRAG() {
System.out.println("
--- 3. 简单RAG演示 ---");
// 使用本地嵌入模型(无需API key)
EmbeddingModel embeddingModel = new AllMiniLmL6V2EmbeddingModel();
// 创建内存向量存储
EmbeddingStore<TextSegment> embeddingStore = new InMemoryEmbeddingStore<>();
// 添加一些知识文档
List<String> knowledgeBase = new ArrayList<>();
knowledgeBase.add("Java是一种面向对象的编程语言,由Sun Microsystems公司于1995年发布。");
knowledgeBase.add("Spring Boot是一个基于Spring框架的快速开发脚手架,可以轻松创建独立的、生产级的Spring应用程序。");
knowledgeBase.add("LangChain是一个用于开发大语言模型应用的框架,支持多种编程语言包括Java和Python。");
knowledgeBase.add("向量数据库用于存储和检索高维向量,常用于类似性搜索和推荐系统。");
// 将知识库转换为向量并存储
for (String text : knowledgeBase) {
Embedding embedding = embeddingModel.embed(text).content();
TextSegment segment = TextSegment.from(text);
embeddingStore.add(embedding, segment);
}
System.out.println("知识库已加载到向量存储中");
// 用户查询
String userQuery = "Spring Boot是什么?";
System.out.println("用户查询: " + userQuery);
// 将查询转换为向量
Embedding queryEmbedding = embeddingModel.embed(userQuery).content();
// 在向量库中搜索最相关的内容
List<EmbeddingMatch<TextSegment>> relevantMatches = embeddingStore.findRelevant(queryEmbedding, 2);
// 构建上下文
StringBuilder context = new StringBuilder();
context.append("请根据以下上下文回答问题:
");
for (EmbeddingMatch<TextSegment> match : relevantMatches) {
context.append("- ").append(match.embedded().text()).append("
");
}
context.append("
问题:").append(userQuery);
System.out.println("content:"+ context.toString());
// 使用LLM基于上下文生成回答
ChatLanguageModel model = ZhipuAiChatModel.builder()
.apiKey(ZHIPU_API_KEY)
.model("glm-4")
.build();
String response = model.generate(context.toString());
System.out.println("RAG回答: " + response);
}
/**
* 演示函数调用模拟
*/
private static void demonstrateFunctionCalling() {
System.out.println("
--- 4. 函数调用模拟演示 ---");
// 1. 创建工具实例
ToolsCollection tools = new ToolsCollection();
// 创建Agent
Agent assistant = AiServices.builder(Agent.class)
.chatLanguageModel(ZhipuAiChatModel.builder()
.apiKey(ZHIPU_API_KEY)
.model("glm-4")
.build())
.tools(tools)
.build();
// 3. 测试第一个问题(计算价格)
String userRequest = "请帮我计算如果买3件商品,每件价格是25.5元,总价是多少?";
System.out.println("用户提问: " + userRequest);
String response1 = assistant.chat(userRequest);
System.out.println("AI回复: " + response1);
System.out.println("++++++++++++++++++++++++++++++++++++++");
// 4. 测试第二个问题(查询天气)
String userRequest2 = "北京的天气是多少?";
System.out.println("用户提问: " + userRequest2);
String response2 = assistant.chat(userRequest2);
System.out.println("AI回复: " + response2);
}
}
// 定义AI助手接口
interface Agent {
String chat(String userMessage);
}
//工具集
class ToolsCollection{
// 模拟工具函数,使用注解将方法注入进去
@Tool("计算总价的函数方法")
public double calculatePrice(int quantity, double unitPrice) {
System.out.println("调用求和计算方法 个数:"+quantity+" 价钱:"+unitPrice);
return quantity * unitPrice;
}
@Tool("查询天气")
public String checkWeather(String city) {
System.out.println("调用天气查询: " + city);
return city + ": 晴天,25°C";
}
}
上面的pom引用:
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>0.31.0</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-zhipu-ai</artifactId>
<version>0.31.0</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-embeddings-all-minilm-l6-v2</artifactId>
<version>0.31.0</version>
</dependency>
直接运行即可。
尤其是第四个demo就是agent的雏形。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...