Embabel-1-连接私有化模型
如果你使用的是主流大模型,例如open ai,deepseek,或者Anthropic等厂商的大模型,那么完全没必要看本文,直接照官网配置个名称就可以了,特别简单
本文演示了如何使用公司内部私有化模型且该模型兼容open ai API来创建一个最最最最简单的一问一答对话(本文使用的是智谱大模型)
本文相对于官网示例,要简单很多,就是用户说了个"杭州天气怎么样",大模型回答"对不起我不知道,因为我无法调用天气接口"
步骤
生成1个空的spring boot项目
去https://start.spring.io/,选择java21,maven必须3.9版本,然后右侧不选择任何依赖,点击GENERATE生成一个空的spring boot项目,之后用集成工具(IDEA或者Eclipse)打开该maven项目
修改刚刚的spring boot项目spring boot版本
embabe的每个版本和spring boot的版本都是有兼容差异的,我们使用官网给出的版本,所以需要将pom.xml文件的内容改成如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.13</version><!-- 这里我们使用spring boot-3.5.13以支持embabel-0.3.5 -->
<relativePath/>
</parent>
添加embabel依赖,我们使用embabel-0.3.5
<!-- spring boot自己的 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- embabel的,用来和程序交互的,模拟用户输入自然语言-->
<dependency>
<groupId>com.embabel.agent</groupId>
<artifactId>embabel-agent-starter-shell</artifactId>
<version>0.3.5</version>
</dependency>
<!-- embabel连接大模型的,任何兼容open ai api的大模型都可以-->
<dependency>
<groupId>com.embabel.agent</groupId>
<artifactId>embabel-agent-starter-openai</artifactId>
<version>0.3.5</version>
</dependency>
创建一个.env文件,这个文件和src文件夹平级
这个文件里的内容也可以在application.yml中写,但是我最早是使用的.env文件,所以就用的env文件,evn文件是业界标准配置文件,用来配置密钥等敏感信息的,敏感程度高于application.yml,当然,其实我们可以把所有内容都写在yml里也是没问题的
# 由于智谱大模型属于兼容open ai模型,所以此处必须用OPENAI_API_KEY
OPENAI_API_KEY=你的大模型KEY
# 由于智谱大模型属于兼容open ai模型,所以此处必须用OPENAI_BASE_URL
# 大模型基础地址类似http://xxx.xxx.com这种,注意不是ttp://xxx.xxx.com/其他,
# 没有后面的斜杠+其他(servlet path)
OPENAI_BASE_URL=http://xxx.xxx.com
创建application.yml文件,这个文件在resource文件夹下面
spring:
config:
# 加载项上面的.env文件,spring boot优先走yml,如果不特殊声明,不会加载env文件
import: optional:file:.env[.properties]
embabel:
models:
# 公司内部私有化模型型号(模型ID),我们公司使用的是智谱大模型的glm-4.7-no-think型号
default-llm: glm-4.7-no-think
创建一个类,这个类就是查询天气agent
后续你们可以自己创建其他agent
import com.embabel.agent.api.annotation.AchievesGoal;
import com.embabel.agent.api.annotation.Action;
import com.embabel.agent.api.annotation.Agent;
import com.embabel.agent.api.common.OperationContext;
import com.embabel.agent.domain.io.UserInput;
import com.embabel.common.ai.model.LlmOptions;
import com.embabel.common.ai.model.ModelSelectionCriteria;
@Agent(description = "处理一对一问答,闲聊")
public class TestController {
@AchievesGoal(description = "返回大模型回答的话")
@Action
public String qa(UserInput userInput, OperationContext operationContext){
System.out.println("用户录入:" + userInput.getContent());
LlmOptions llm = LlmOptions.fromCriteria(ModelSelectionCriteria.getAuto());
String llmAnswer= operationContext.ai().withLlm(llm).generateText(userInput.getContent());
System.out.println("大模型回答:" + llmAnswer);
return llmAnswer;
}
}
启动spring boot项目(运行下面这个类)
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
运行之后发现控制台可以输入内容,我们随便输入点东西,会返回
使用小写x参数输入文本语言
下面是控制台打印出的内容
此时表示服务搭建成功,后续我们会写代码,如何调用天气接口,查询天气
相关源码与笔记
官网的示例中,似乎将open ai端点路径写错了,它说默认是/v1/completions,官网第2.2.2章节,这明显是GPT3.5版本的老API,是不支持对话的,如果它是这样实现的,那么大模型一定调不通且会返回404,但是我这里调通了,说明源码没问题,而官网应该是写错了,继续跟源码,找到org.springframework.ai.openai.api.OpenAiApi类,搜索"/v1/chat/completions",发现源码中确实使用的是GPT-4和5端点路径,说明官网写错了,写的是3.5路径
更多推荐


所有评论(0)