Langchain4j 实战 【AI代码生成平台】:接入deepseek,开发AI服务并实现结构化输出

大模型接入

大模型有很多种类,Langchain4j也支持了市面上比较出名的大模型,如ChatGPT,Deepseek,Claude等。虽然国外的AI可能会有更好的效果,但因操作的不便性和较高的消费没有必要在学习阶段使用这些大模型,这篇文章将以deepseek大模型为例子演示如何接入大模型。

图为官网上对不同大模型的支持程度。

ProviderStreamingTools (sync/streaming/partial/complete)JSON SchemaJSON ModeThinking (Reasoning)Supported Modalities (Input)ObservabilityCustomizable HTTP ClientLocal DeploymentSupports Native ImageComments
Amazon Bedrock✅/✅/❌/✅text, image, PDF
Anthropic✅/✅/✅/✅text, image
Azure OpenAI✅/✅/✅/✅text, image
ChatGLMtext
DashScope✅/✅text, image, audio
GitHub Models✅/✅/🆘/🆘🔜 #1911text, image
Google AI Gemini✅/✅/❌/✅text, image, audio, video, PDF
Google Vertex AI Gemini✅/✅/❌/✅text, image, audio, video, PDF
Google Vertex AI PaLM 2text
Hugging Facetext
Jlama✅/✅/🆘/🆘text
GPULlama3.javatext
LocalAI✅/✅text, image, audio
Mistral AI✅/✅/❌/✅text, image
Ollama✅/✅/❌/✅text, image
OpenAI✅/✅/✅/✅✅ (DeepSeek)text, image, audio, PDFSee OpenAI-Compatible Language Models (Ollama, LM Studio, GPT4All, Docker Model Runner, etc.)See OpenAI-Compatible Language Models(Groq, ...)
OpenAI Official✅/✅/✅/✅text, image, audio, PDFSee OpenAI-Compatible Language ModelsSee OpenAI-Compatible Language Models
Oracle Cloud Infrastructure GenAI✅/✅text, image
Qianfan✅/✅text
Cloudflare Workers AItext
Zhipu AI✅/✅text, image
watsonx.ai✅/✅/✅/✅✅ (Granite)text, image

首先要进入deepseek开放平台来注册账号,获取到自己的API key。接下来要进入Java程序引入依赖,编写yml文件。

在pom中添加文件

<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j</artifactId>
    <version>1.1.0</version>
</dependency>
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
    <version>1.1.0-beta7</version>
</dependency>

在yml文件中编写配置

# AI
langchain4j:
  open-ai:
    chat-model:
      base-url: https://api.deepseek.com
      api-key: 你先前注册的APIkey
      model-name: deepseek-chat
      log-requests: true
      log-responses: true

这样大模型就已经介入了,接下来进入Java代码开发AI Service。

Java开发

首先创建AiCodeGeneratorService接口,里面直接写两个生成代码的方法,对应两个生成代码的方式。HtmlCodeResult 与 MultiFileCodeResult 为结构化输出返回的格式,将在下文详细讲解。@SystemMessage即指定系统提示词存放的位置,使用户的prompt结合系统提示词输入。

接着编写工厂类初始化AI服务。

工厂需要@Configuration来标记其为配置类,将 AiCodeGeneratorService 设为Bean使其被Spring注册。上文的ChatModel已经在yml文件中配置好了。

这样基本的会话功能就已经成型了,但如果直接返回输出的字符串的话不方便保存,因此要将大模型返回的输出结构化。

结构化输出

这就是上文接口返回的对象的内容,即LLM结构化输出后的内容拆分后分别对应的部分。

但如果只是将返回值从String改为结构化的对象,结构化输出的结果依旧是不准确的,因此为了让Langchain4j更方便地结构化输出,必须采取一些优化措施。

优化

1)设置max_tokens:

需要合理设置 max_tokens 参数,防止 JSON 字符串被中途截断。并在yml文件中配置。

langchain4j:
  open-ai:
    chat-model:
      max-tokens: 8192

2)添加字段描述

就如我上文写的返回对象一样,在对象和字段上加@Description注解,在其中说明对象及其字段对应的含义,使LLM更方便地理解。

3)配置:

可以添加这个配置选项

langchain4j:
  open-ai:
    chat-model:
      strict-json-schema: true
      response-format: json_object

4)系统提示词

在系统提示词中明确说明输出的是JSON格式。

以上AI服务的基本功能就已经开发完成,可以对其进行对话测试。

评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值