百度智能云模型接入

快速使用

  1. 创建应用
  2. 创建API Key
  3. 文档

创建应用 / 创建 API Key

文档

java文档地址

大模型接入

SpringBoot 版本 2.7.10 可以使用

xml 复制代码
<dependency>
    <groupId>com.openai</groupId>
    <artifactId>openai-java</artifactId>
    <version>4.19.0</version>
    <scope>compile</scope>
</dependency>

入门案例/参数讲解

官方文档 cloud.baidu.com/doc/qianfan...

java 复制代码
public static void main(String[] args) {

    OpenAIClient client = OpenAIOkHttpClient.builder()
            .apiKey("bce-v3/8")
            //千帆ModelBuilder平台地址
            .baseUrl("https://qianfan.baidubce.com/v2/").build();

    ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
            .addUserMessage("你好")
            .model("ernie-5.0-thinking-preview")
            // 输出格式设置为JSON输出
            .responseFormat(ChatCompletionCreateParams.ResponseFormat
                    .ofJsonObject(ResponseFormatJsonObject.builder().build()))
            // https://cloud.baidu.com/doc/qianfan-docs/s/7m95lyy43
            .build();

    ChatCompletion chatCompletion = client.chat().completions().create(params);
    System.out.println(chatCompletion.choices().get(0).message().content());
}

包含一些参数

java 复制代码
ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
            // 单个对话
            .addUserMessage(msg)
            // 多轮对话
            .model("ernie-5.0-thinking-preview")
            // 值越小,每次回答越相同,值越大,每次回答越随机
            .temperature(1.9)
            // 值越大,回答的越大胆,越小越谨慎
            .topP(1.0)
//                .penalty() 非原方法,一般不指定,控制惩罚系数
            // 控制最大token,一般不需要,模型是有的
//                .maxCompletionTokens(1024)
            // 输出格式设置为JSON输出,就算设置了,也有可能不生效
            .responseFormat(ChatCompletionCreateParams.ResponseFormat
                    .ofJsonObject(ResponseFormatJsonObject.builder().build()))
            .build();

设计Prompt

  • 角色:给 AI 定义一个最匹配任务的角色,比如:「你是一位软件工程师」「你是一位小学老师」
  • 指示:对任务进行描述
  • 上下文:给出与任务相关的其它背景信息(尤其在多轮交互中)
  • 例子:必要时给出举例,[实践证明例子对输出正确性有帮助]
  • 输入:任务的输入信息;在提示词中明确的标识出输入
  • 输出:输出的格式描述,以便后继模块自动解析模型的输出结果,比如(JSON、Java)

设计之后的Prompt提示词,这里涉及了大量的专业名词和健康指标,实际开发中需要找产品经理协助

提示词如下

txt 复制代码
请以一个专业医生的视角来分析这份体检报告,报告中包含了一些异常数据,我需要您对这些数据进行解读,并给出相应的健康建议。
体检内容如下:
    内容略....

要求:
1. 提取体检报告中的"总检日期";
2. 通过临床医学、疾病风险评估模型和数据智能分析,给该用户的风险等级和健康指数给出结果。风险等级分为:健康、提示、风险、危险、严重危险。健康指数范围为0至100分;
3. 根据用户身体各项指标数据,详细说明该用户各项风险等级的占比是多少,最多保留两位小数。结论格式:该用户健康占比20.00%,提示占比20.00%,风险占比20%,危险占比20%,严重危险占比20%;
4. 对于体检报告中的异常数据,请列出(异常数据的结论、体检项目名称、检查结果、参考值、单位、异常解读、建议)这7字段。解读异常数据,解决这些数据可能代表的健康问题或风险。分析可能的原因,包括但不限于生活习惯、饮食习惯、遗传因素等。基于这些异常数据和可能的原因,请给出具体的健康建议,包括饮食调整、运动建议、生活方式改变以及是否需要进一步检查或治疗等。
结论格式:异常数据的结论:肥胖,体检项目名称:体重指数BMI,检查结果:29.2,参考值>24,单位:-。异常解读:体重超标包括超重与肥胖。体重指数(BMI)=体重(kg)/身⾼(m)的平⽅,BMI≥24为超重,BMI≥28为肥胖;男性腰围≥90cm和⼥性腰围≥85cm为腹型肥胖。体重超标是⼀种由多因素(如遗传、进⻝油脂较多、运动少、疾病等)引起的慢性代谢性疾病,尤其是肥胖,已经被世界卫⽣组织列为导致疾病负担的⼗⼤危险因素之⼀。AI建议:采取综合措施预防和控制体重,积极改变⽣活⽅式,宜低脂、低糖、⾼纤维素膳⻝,多⻝果蔬及菌藻类⻝物,增加有氧运动。若有相关疾病(如⾎脂异常、⾼⾎压、糖尿病等)应积极治疗。
5. 根据这个体检报告的内容,分别给人体的8大系统打分,每项满分为100分,8大系统分别为:呼吸系统、消化系统、内分泌系统、免疫系统、循环系统、泌尿系统、运动系统、感官系统
6. 给体检报告做一个总结,总结格式:体检报告中尿蛋⽩、癌胚抗原、⾎沉、空腹⾎糖、总胆固醇、⽢油三酯、低密度脂蛋⽩胆固醇、⾎清载脂蛋⽩B、动脉硬化指数、⽩细胞、平均红细胞体积、平均⾎红蛋⽩共12项指标提示异常,尿液常规共1项指标处于临界值,⾎脂、⾎液常规、尿液常规、糖类抗原、⾎清酶类等共43项指标提示正常,综合这些临床指标和数据分析:肾脏、肝胆、⼼脑⾎管存在隐患,其中⼼脑⾎管有"⾼危"⻛险;肾脏部位有"中危"⻛险;肝胆部位有"低危"⻛险。

输出要求:
最后,将以上结果输出为纯JSON格式,不要包含其他的文字说明,也不要出现Markdown语法相关的文字,所有的返回结果都是json,详细格式如下:

{
  "totalCheckDate": "YYYY-MM-DD",
  "healthAssessment": {
    "riskLevel": "healthy/caution/risk/danger/severeDanger",
    "healthIndex": XX.XX
  },
  "riskDistribution": {
    "healthy": XX.XX,
    "caution": XX.XX,
    "risk": XX.XX,
    "danger": XX.XX,
    "severeDanger": XX.XX
  },
  "abnormalData": [
    {
      "conclusion": "异常数据的结论",
      "examinationItem": "体检项目名称",
      "result": "检查结果",
      "referenceValue": "参考值",
      "unit": "单位",
      "interpret":"对于异常的结论进一步详细的说明",
      "advice":"针对于这一项的异常,给出一些健康的建议"
    }
  ],
  "systemScore": {
    "breathingSystem": XX,
    "digestiveSystem": XX,
    "endocrineSystem": XX,
    "immuneSystem": XX,
    "circulatorySystem": XX,
    "urinarySystem": XX,
    "motionSystem": XX,
    "senseSystem": XX
  },
  "summarize": "体检报告的总结"
}

完整代码

java 复制代码
public static void main(String[] args) throws FileNotFoundException {
    String content = PDFUtil.pdfToString(new FileInputStream("E:\\BaiduNetdiskDownload\\Heima\\25年8月AI智能应用开发(Java)\\课件 源码 资料\\4.阶段四 企业级智能物联网项目(中州养老)\\09. 智能评估-集成AI大模型\\资料\\体检报告样例\\体检报告-刘爱国-男-69岁.pdf"));
    String msg = "请以一个专业医生的视角来分析这份体检报告,报告中包含了一些异常数据,我需要您对这些数据进行解读,并给出相应的健康建议。\n" +
            "体检内容如下:\n" +
            content +
            "\n" +
            "要求:\n" +
            "1. 提取体检报告中的"总检日期";\n" +
            "2. 通过临床医学、疾病风险评估模型和数据智能分析,给该用户的风险等级和健康指数给出结果。风险等级分为:健康、提示、风险、危险、严重危险。健康指数范围为0至100分;\n" +
            "3. 根据用户身体各项指标数据,详细说明该用户各项风险等级的占比是多少,最多保留两位小数。结论格式:该用户健康占比20.00%,提示占比20.00%,风险占比20%,危险占比20%,严重危险占比20%;\n" +
            "4. 对于体检报告中的异常数据,请列出(异常数据的结论、体检项目名称、检查结果、参考值、单位、异常解读、建议)这7字段。解读异常数据,解决这些数据可能代表的健康问题或风险。分析可能的原因,包括但不限于生活习惯、饮食习惯、遗传因素等。基于这些异常数据和可能的原因,请给出具体的健康建议,包括饮食调整、运动建议、生活方式改变以及是否需要进一步检查或治疗等。\n" +
            "结论格式:异常数据的结论:肥胖,体检项目名称:体重指数BMI,检查结果:29.2,参考值>24,单位:-。异常解读:体重超标包括超重与肥胖。体重指数(BMI)=体重(kg)/身⾼(m)的平⽅,BMI≥24为超重,BMI≥28为肥胖;男性腰围≥90cm和⼥性腰围≥85cm为腹型肥胖。体重超标是⼀种由多因素(如遗传、进⻝油脂较多、运动少、疾病等)引起的慢性代谢性疾病,尤其是肥胖,已经被世界卫⽣组织列为导致疾病负担的⼗⼤危险因素之⼀。AI建议:采取综合措施预防和控制体重,积极改变⽣活⽅式,宜低脂、低糖、⾼纤维素膳⻝,多⻝果蔬及菌藻类⻝物,增加有氧运动。若有相关疾病(如⾎脂异常、⾼⾎压、糖尿病等)应积极治疗。\n" +
            "5. 根据这个体检报告的内容,分别给人体的8大系统打分,每项满分为100分,8大系统分别为:呼吸系统、消化系统、内分泌系统、免疫系统、循环系统、泌尿系统、运动系统、感官系统\n" +
            "6. 给体检报告做一个总结,总结格式:体检报告中尿蛋⽩、癌胚抗原、⾎沉、空腹⾎糖、总胆固醇、⽢油三酯、低密度脂蛋⽩胆固醇、⾎清载脂蛋⽩B、动脉硬化指数、⽩细胞、平均红细胞体积、平均⾎红蛋⽩共12项指标提示异常,尿液常规共1项指标处于临界值,⾎脂、⾎液常规、尿液常规、糖类抗原、⾎清酶类等共43项指标提示正常,综合这些临床指标和数据分析:肾脏、肝胆、⼼脑⾎管存在隐患,其中⼼脑⾎管有"⾼危"⻛险;肾脏部位有"中危"⻛险;肝胆部位有"低危"⻛险。\n" +
            "\n" +
            "输出要求:\n" +
            "最后,将以上结果输出为纯JSON格式,不要包含其他的文字说明,也不要出现Markdown语法相关的文字,所有的返回结果都是json,详细格式如下:\n" +
            "\n" +
            "{\n" +
            "  \"totalCheckDate\": \"YYYY-MM-DD\",\n" +
            "  \"healthAssessment\": {\n" +
            "    \"riskLevel\": \"healthy/caution/risk/danger/severeDanger\",\n" +
            "    \"healthIndex\": XX.XX\n" +
            "  },\n" +
            "  \"riskDistribution\": {\n" +
            "    \"healthy\": XX.XX,\n" +
            "    \"caution\": XX.XX,\n" +
            "    \"risk\": XX.XX,\n" +
            "    \"danger\": XX.XX,\n" +
            "    \"severeDanger\": XX.XX\n" +
            "  },\n" +
            "  \"abnormalData\": [\n" +
            "    {\n" +
            "      \"conclusion\": \"异常数据的结论\",\n" +
            "      \"examinationItem\": \"体检项目名称\",\n" +
            "      \"result\": \"检查结果\",\n" +
            "      \"referenceValue\": \"参考值\",\n" +
            "      \"unit\": \"单位\",\n" +
            "      \"interpret\":\"对于异常的结论进一步详细的说明\",\n" +
            "      \"advice\":\"针对于这一项的异常,给出一些健康的建议\"\n" +
            "    }\n" +
            "  ],\n" +
            "  \"systemScore\": {\n" +
            "    \"breathingSystem\": XX,\n" +
            "    \"digestiveSystem\": XX,\n" +
            "    \"endocrineSystem\": XX,\n" +
            "    \"immuneSystem\": XX,\n" +
            "    \"circulatorySystem\": XX,\n" +
            "    \"urinarySystem\": XX,\n" +
            "    \"motionSystem\": XX,\n" +
            "    \"senseSystem\": XX\n" +
            "  },\n" +
            "  \"summarize\": \"体检报告的总结\"\n" +
            "}";

    OpenAIClient client = OpenAIOkHttpClient.builder()
            .apiKey("bce-v3448")
            .baseUrl("https://qianfan.baidubce.com/v2/").build();

    ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
            // 单个对话
            .addUserMessage(msg)
            // 多轮对话
            .model("ernie-4.5-turbo-128k")
//                .penalty() 非原方法,一般不指定,控制惩罚系数
            // 控制最大token,一般不需要,模型是有的
//                .maxCompletionTokens(1024)
            // 输出格式设置为JSON输出,就算设置了,也有可能不生效
            .responseFormat(ChatCompletionCreateParams.ResponseFormat
                    .ofJsonObject(ResponseFormatJsonObject.builder().build()))
            .build();

    ChatCompletion chatCompletion = client.chat().completions().create(params);
    System.out.println(chatCompletion.choices().get(0).message().content());
}

封装工具类

yml

yml 复制代码
baidu:
  qianfan:
    api-key: bce-v3448
    base-url: https://qianfan.baidubce.com/v2/
    model: ernie-4.5-turbo-128k
java 复制代码
@Component
public class AIModelInvoker {

    private final OpenAIClient client;
    private final String model;

    public AIModelInvoker(BaiDuProperties baiDuProperties) {
        client = OpenAIOkHttpClient.builder()
                .apiKey(baiDuProperties.getApiKey())
                .baseUrl(baiDuProperties.getBaseUrl()).build();
        model = baiDuProperties.getModel();
    }

    /**
     * 单轮对话
     */
    public String chat(String prompt) {
        ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
                .model(model).addUserMessage(prompt)
                .responseFormat(ChatCompletionCreateParams.ResponseFormat
                        .ofJsonObject(ResponseFormatJsonObject.builder().build()))
                .build();
        ChatCompletion chatCompletion = client.chat().completions().create(params);
        return chatCompletion.choices().get(0).message().content().orElse("");
    }
}
相关推荐
独自破碎E1 小时前
BISHI73 【模板】欧拉函数计算Ⅰ ‖ 朴素求值:试除法
java·开发语言
独自破碎E2 小时前
BISHI66 子数列求积
android·java·开发语言
爱学习的小可爱卢2 小时前
JavaSE基础-Java String不可变性深度解析
java·javase
君爱学习2 小时前
Spring Boot JWT Token 认证
java
程序员清风2 小时前
2026年必学:Vibe Coding几个实用技巧,老手都在偷偷用!
java·后端·面试
夕除2 小时前
js--24
java
AC赳赳老秦2 小时前
多模态 AI 驱动办公智能化变革:DeepSeek 赋能图文转写与视频摘要的高效实践
java·ide·人工智能·python·prometheus·ai-native·deepseek
iambooo2 小时前
系统健康巡检脚本的设计思路与落地实践
java·大数据·linux
blockrock2 小时前
Tomcat
java·tomcat