LLMs(语言模型)
LLMs模块用于对大语言模型API的适配封装,提供统一的接口快速地调用盘古、开源模型等模型API。
- 初始化:根据相应模型定义LLM类。例如,使用盘古LLM为: LLMs.of(LLMs.PANGU)。
import com.huaweicloud.pangu.dev.sdk.api.llms.LLM; import com.huaweicloud.pangu.dev.sdk.api.llms.LLMs; // 初始化盘古LLM LLM llm = LLMs.of(LLMs.PANGU);
- 基础问答:基础的模型文本问答,temperature等参数采用模型默认的设置。
llm.ask("你是谁?").getAnswer();
- 同时调用多个不同的LLM。
final LLMConfig config = LLMConfig.builder() .llmModuleConfig( LLMModuleConfig.builder().url(ConfigLoadUtil.getStringConf(null, "custom.llm.url")).build()) .llmParamConfig(LLMParamConfig.builder().temperature(0.9).build()) .build(); // 使用custom.llm.url final LLM llm1 = LLMs.of(LLMs.PANGU, config); log.info(llm1.ask("你好").getAnswer()); // 使用sdk.llm.pangu.url final LLM llm2 = LLMs.of(LLMs.PANGU); log.info(llm2.ask("你好").getAnswer());
上述代码中custom.llm.url为自定义的url地址(名字由开发者任意指定,或直接传入url地址),可以指向不同的模型,因此llm1为一个大模型;而llm2没有指定config,默认使用sdk.llm.pangu.url,若地址与custom.llm.url,则为另外一个大模型。
- 自定义参数问答:自定义设置如temperature等参数,获得对应的效果。
import com.huaweicloud.pangu.dev.sdk.api.llms.LLM; import com.huaweicloud.pangu.dev.sdk.api.llms.LLMs; import com.huaweicloud.pangu.dev.sdk.api.llms.config.LLMConfig; import com.huaweicloud.pangu.dev.sdk.api.llms.config.LLMConfigGallery; import com.huaweicloud.pangu.dev.sdk.api.llms.config.LLMParamConfig; // 设置模型参数,temperature为0.9 LLMConfig llmConfig = LLMConfig.builder().llmParamConfig(LLMParamConfig.builder().temperature(0.9).build()).build(); // 如使用Gallery三方模型,使用以下配置 // LLMConfig llmConfig = LLMConfigGallery.builder().llmParamConfig(LLMParamConfig.builder().temperature(0.9).build()).build(); // 初始化带参数的盘古LLM LLM pangu = LLMs.of(LLMs.PANGU, llmConfig); pangu.ask("写一篇五言律诗").getAnswer();
支持调整的参数解释。
private int maxTokens; // 完成时要生成的令牌的最大数量 private double temperature; // 调整随机抽样的程度,温度值越高,随机性越大 private double topP; // 核采样值, 和temperature不同时配置 private double presencePenalty; // 存在惩罚,增加模型谈论新主题的可能性 private double frequencyPenalty; // 频率惩罚,降低模型重复的可能性,提高文本多样性、创造型 private int bestOf; // 服务侧生成优选的回答数 private boolean stream; // 是否开启流式调用
- 流式问答:模型问答,开启流式效果,响应消息流式打印。
import com.huaweicloud.pangu.dev.sdk.api.callback.StreamCallBack; import com.huaweicloud.pangu.dev.sdk.api.callback.StreamResult; import com.huaweicloud.pangu.dev.sdk.api.llms.LLM; import com.huaweicloud.pangu.dev.sdk.api.llms.LLMs; import com.huaweicloud.pangu.dev.sdk.api.llms.config.LLMConfig; import com.huaweicloud.pangu.dev.sdk.api.llms.config.LLMParamConfig; import com.huaweicloud.pangu.dev.sdk.api.llms.response.LLMResp; import lombok.extern.slf4j.Slf4j; // 设置模型参数,stream为true final LLMConfig llmConfig = LLMConfig.builder().llmParamConfig(LLMParamConfig.builder().stream(true).build()).build(); // 盘古LLM LLM pangu = LLMs.of(LLMs.PANGU, llmConfig); // 设置回调处理逻辑 pangu.setStreamCallback(new StreamCallBackImp()); pangu.ask("写一篇200字的散文").getAnswer(); // 构造回调函数(以log打印为例,业务可自定义) @Slf4j public class StreamCallBackImp implements StreamCallBack { @Override public void onStart(String callBackId) { log.info("StreamCallBack onStart: callBackId ----> {}", callBackId); } @Override public void onEnd(String callBackId, StreamResult streamResult, LLMResp llmResp) { log.info("StreamCallBack onEnd: callBackId ----> {} || llmResp ----> {}", callBackId, llmResp); } @Override public void onError(String callBackId, StreamResult streamResult) { log.error("StreamCallBack onError: callBackId ----> {}", callBackId); } @Override public void onNewToken(String callBackId, LLMResp llmResp) { log.info("StreamCallBack onNewToken: callBackId ----> {} || llmResp ----> {}", callBackId, llmResp); } }
- 多轮对话问答:传递历史问答记录,实现多轮对话问答能力,同时支持自定义参数问答、流式问答。
import com.huaweicloud.pangu.dev.sdk.api.llms.LLM; import com.huaweicloud.pangu.dev.sdk.api.llms.LLMs; import com.huaweicloud.pangu.dev.sdk.api.llms.request.ConversationMessage; import com.huaweicloud.pangu.dev.sdk.api.llms.request.Role; import java.util.ArrayList; import java.util.List; // 构造多轮对话:历史问答记录 + 最新问题 private List<ConversationMessage> buildMultiTurnChatMessages() { List<ConversationMessage> messages = new ArrayList<>(); messages.add(ConversationMessage.builder().role(Role.SYSTEM).content("You are a helpful assistant.").build()); messages.add(ConversationMessage.builder().role(Role.USER).content("Who won the world series in 2020?").build()); messages.add(ConversationMessage.builder() .role(Role.ASSISTANT) .content("The Los Angeles Dodgers won the World Series in 2020.") .build()); messages.add(ConversationMessage.builder().role(Role.USER).content("Where was it played?").build()); return messages; } // 初始化盘古LLM,开启问答 LLM llm = LLMs.of(LLMs.PANGU); llm.ask(buildMultiTurnChatMessages()).getAnswer();
- 带人设的问答:支持在LLM配置项中设置人设,在LLM问答时系统会自动加上该人设,同时支持以上问答功能(暂不支持GALLERY三方模型)。
import com.huaweicloud.pangu.dev.sdk.api.llms.LLM; import com.huaweicloud.pangu.dev.sdk.api.llms.LLMs; import com.huaweicloud.pangu.dev.sdk.api.llms.config.LLMConfig; import com.huaweicloud.pangu.dev.sdk.api.llms.config.LLMModuleConfig; // 设置模型系统人设 LLMConfig llmConfig = LLMConfig.builder() .llmModuleConfig(LLMModuleConfig.builder().systemPrompt("You are a helpful assistant.").build()) .build(); // 初始化盘古LLM,开启问答 LLM llm = LLMs.of(LLMs.PANGU, llmConfig); llm.ask("写一首五言律诗").getAnswer();