最近肯定有小伙伴想说ai这么强大我想做一个属于自己的ai但是本地部署又太麻烦了还吃配置有没有简单一点的实现,博主在这里说有的兄弟,有的,像这么强大的自定义ai配置一共有好几种:阿里百炼、火山引擎等等。。。。
准备环节
我们以阿里云百炼大模型为例来实现,可以自己训练数据、添加Prompt来实现自定义配置ai。
首先配置好阿里云API通常需要AccessKey才可以实现接下来的操作。
打开阿里云百炼平台的控制台,在我的应用中新增应用
可以按照业务需求来自己实现其他的创建,我们直接创建
1、模型的话可以自己选择模型,我的这里选择的是通义千问-max,目前阿里云也是出了挺多的模型可以免费调用送100w token。
2、可以编写Prompt,自定义实现个人ai智能体
# 角色
你是智能小俊,一个专注于编程领域的专家。
## 技能
### 技能 1: 解答编程问题
- 确定用户的问题意图和内容。
- 详细解答用户的编程疑问,解释关键代码和逻辑。
- 指导用户如何解决编程问题。
### 技能 2: 编写代码
- 根据用户需求编写相应的代码。
- 确保代码编写考虑到可读性、运行效率以及异常处理。
- 解释代码中的关键部分,以及如何配置和调用。
### 技能 3: 代码审查与优化
- 审查用户提供的代码,并提出改进建议。
- 优化代码以提高性能、可读性和可维护性。
- 提供详细的代码审查报告,指出潜在的问题和改进点。
### 技能 4: 技术文档撰写
- 为编写的代码提供清晰的技术文档。
- 包括代码的功能说明、使用方法、配置要求等。
- 确保文档易于理解和使用。
## 限制
- 只解答与编程相关的问题,如用户问到其他问题,不做回答。
- 在编写代码时,假设你有完整的类库和框架支持。
- 保证代码易读,运行高效,且处理了可能出现的异常情况。
- 提供代码的详细注释,解释关键逻辑部分,以及要求时如何配置和调用该代码片段。
- 代码审查和优化建议应基于当前最佳实践和技术标准。
3、阿里云百炼也是支持知识库检索功能,可以上传和自己智能体相关的文件来进行检索,使智能体更准确化回答问题,选择配置知识库创建新的知识库上传文件就可以,这里挺简单不过多描述。
另外的话还有插件功能,可以添加一些有趣的插件比如天气、计算器、python代码
4、最后可以自己在右侧的体验框调试自己的智能体了,如果没有问题然后点击发布,发布的话官方也是提供了文档。根据文档配置相关代码的api调用。
开发环节
一、环境准备
-
依赖项
在pom.xml
中添加以下依赖:<!-- HTTP客户端 --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency> <!-- JSON处理 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.0</version> </dependency>
二、核心工具类封装
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class AliyunAIClient {
private static final String ACCESS_KEY = "your_access_key";
private static final String SECRET_KEY = "your_secret_key";
private static final String APP_ID = "你发布后的应用id";
private static final String ENDPOINT = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation";
// 签名生成方法(简化版)
private static String generateSignature(String timestamp) {
// 实际需按阿里云签名算法V3实现
return HmacSHA256.sign(SECRET_KEY, "text-generation:" + timestamp);
}
// 流式文本生成
public static void streamGenerate(String prompt, String sessionId) throws Exception {
CloseableHttpClient client = HttpClients.createDefault();
HttpPost post = new HttpPost(ENDPOINT);
// 构建请求头
String timestamp = String.valueOf(System.currentTimeMillis());
post.setHeader("Authorization", "Bearer " + ACCESS_KEY);
post.setHeader("X-DashScope-Signature", generateSignature(timestamp));
post.setHeader("Content-Type", "application/json");
// 构建请求体(含历史上下文)
String jsonBody = String.format(
"{ \"model\": \"max\", \"input\": { \"messages\": [{\"role\": \"user\", \"content\": \"%s\"}] }, \"parameters\": { \"stream\": true, \"session_id\": \"%s\" } }",
prompt, sessionId
);
post.setEntity(new StringEntity(jsonBody));
// 执行流式请求
try (CloseableHttpResponse response = client.execute(post)) {
InputStream stream = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
String line;
while ((line = reader.readLine()) != null) {
if (!line.isEmpty()) {
JsonNode node = new ObjectMapper().readTree(line);
System.out.print(node.get("output").asText());
}
}
}
}
}
应用发布之后,配置了应用id可以像我这样来进行添加到代码里
三、功能扩展实现
1. 网络搜索集成(示例:阿里云OpenSearch)
public class SearchService {
private static final String OPENSEARCH_ENDPOINT = "https://opensearch-cn-hangzhou.aliyuncs.com";
public static String webSearch(String query) {
// 调用OpenSearch API(需单独配置)
// 返回结构化搜索结果(JSON)
return "[搜索结果]:关于 " + query + " 的相关信息...";
}
// 将搜索结果作为上下文注入AI请求
public static void aiWithSearch(String question, String sessionId) throws Exception {
String searchResult = webSearch(question);
String enhancedPrompt = "根据以下信息回答问题:\n" + searchResult + "\n问题:" + question;
AliyunAIClient.streamGenerate(enhancedPrompt, sessionId);
}
}
2. 上下文历史记忆管理
import java.util.HashMap;
import java.util.Map;
public class SessionManager {
private static Map<String, String> sessionHistory = new HashMap<>();
// 获取或创建会话
public static String getSession(String sessionId) {
return sessionHistory.computeIfAbsent(sessionId, k -> "[]");
}
// 更新历史记录(JSON格式)
public static void updateHistory(String sessionId, String newMessage) {
String history = sessionHistory.get(sessionId);
String updated = history.substring(0, history.length()-1) + ", " + newMessage + "]";
sessionHistory.put(sessionId, updated);
}
}
3. 自定义提示模板
public class CustomPrompt {
// 加载训练数据(示例从文件读取)
private static String trainingData = FileUtils.readFile("data/custom_knowledge.txt");
// 构建增强提示
public static String buildPrompt(String userInput) {
return String.format(
"你是一个专业助手,请基于以下知识库回答问题:\n%s\n用户问题:%s",
trainingData, userInput
);
}
}
四、完整调用示例
public class MainApplication {
public static void main(String[] args) {
try {
// 初始化会话
String sessionId = "user_123";
SessionManager.getSession(sessionId);
// 场景1:流式问答
AliyunAIClient.streamGenerate("Java如何实现多线程?", sessionId);
// 场景2:联网搜索增强
SearchService.aiWithSearch("2024年人工智能趋势", sessionId);
// 场景3:自定义知识库问答
String customPrompt = CustomPrompt.buildPrompt("我们公司的产品优势是什么?");
AliyunAIClient.streamGenerate(customPrompt, sessionId);
} catch (Exception e) {
e.printStackTrace();
}
}
}
五、关键配置说明
-
签名算法
需完整实现阿里云签名算法V3,包含CanonicalizedHeaders和签名计算。 -
流式响应处理
-
通过
parameters.stream=true
开启流式输出 -
每条响应包含
output
字段的增量内容
-
-
模型微调
-
在百炼控制台上传训练数据(JSONL格式)
-
创建专属模型版本后,替换API请求中的
model
参数
-
六、性能优化建议
-
连接池配置
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); cm.setMaxTotal(200); // 最大连接数 cm.setDefaultMaxPerRoute(50); // 单路由最大连接 CloseableHttpClient client = HttpClients.custom().setConnectionManager(cm).build();
-
异步非阻塞调用
使用CompletableFuture
实现并行请求:
CompletableFuture.runAsync(() -> {
AliyunAIClient.streamGenerate(prompt, sessionId);
});
部署效果验证
• 流式输出:观察控制台逐字打印效果
• 上下文记忆:在后续请求中携带相同session_id测试历史连贯性
• 网络搜索:验证回答是否包含实时搜索结果关键词
常见问题排查
• Q403错误:检查AccessKey和签名算法
• 流中断:增加网络超时设置(http.socket.timeout=30000)
• 响应延迟:启用模型量化(在请求参数中添加"quantization": "4bit")
大家如果用的时候有问题的话私信我,给大家帮助,希望大家多多喜欢!!点点关注点点赞!!