Langchain4j 实战 【AI代码生成平台】:接入deepseek,开发AI服务并实现结构化输出
大模型接入
大模型有很多种类,Langchain4j也支持了市面上比较出名的大模型,如ChatGPT,Deepseek,Claude等。虽然国外的AI可能会有更好的效果,但因操作的不便性和较高的消费没有必要在学习阶段使用这些大模型,这篇文章将以deepseek大模型为例子演示如何接入大模型。
图为官网上对不同大模型的支持程度。
Provider Streaming Tools (sync/streaming/partial/complete) JSON Schema JSON Mode Thinking (Reasoning) Supported Modalities (Input) Observability Customizable HTTP Client Local Deployment Supports Native Image Comments Amazon Bedrock ✅ ✅/✅/❌/✅ ✅ text, image, PDF ✅ Anthropic ✅ ✅/✅/✅/✅ ✅ text, image ✅ ✅ ✅ Azure OpenAI ✅ ✅/✅/✅/✅ ✅ ✅ text, image ✅ ChatGLM text DashScope ✅ ✅/✅ text, image, audio ✅ GitHub Models ✅ ✅/✅/🆘/🆘 🔜 #1911 ✅ text, image ✅ Google AI Gemini ✅ ✅/✅/❌/✅ ✅ ✅ ✅ text, image, audio, video, PDF ✅ ✅ Google Vertex AI Gemini ✅ ✅/✅/❌/✅ ✅ ✅ text, image, audio, video, PDF ✅ Google Vertex AI PaLM 2 text ✅ Hugging Face text Jlama ✅ ✅/✅/🆘/🆘 text ✅ ✅ GPULlama3.java ✅ text ✅ ✅ LocalAI ✅ ✅/✅ text, image, audio ✅ Mistral AI ✅ ✅/✅/❌/✅ ✅ ✅ text, image ✅ ✅ Ollama ✅ ✅/✅/❌/✅ ✅ ✅ ✅ text, image ✅ ✅ ✅ OpenAI ✅ ✅/✅/✅/✅ ✅ ✅ ✅ (DeepSeek) text, image, audio, PDF ✅ ✅ See OpenAI-Compatible Language Models (Ollama, LM Studio, GPT4All, Docker Model Runner, etc.) ✅ See OpenAI-Compatible Language Models(Groq, ...) OpenAI Official ✅ ✅/✅/✅/✅ ✅ ✅ ✅ text, image, audio, PDF ✅ ✅ See OpenAI-Compatible Language Models ✅ See OpenAI-Compatible Language Models Oracle Cloud Infrastructure GenAI ✅ ✅/✅ text, image ✅ Qianfan ✅ ✅/✅ text Cloudflare Workers AI text 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.comapi-key: 你先前注册的APIkeymodel-name: deepseek-chatlog-requests: truelog-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: trueresponse-format: json_object
4)系统提示词:
在系统提示词中明确说明输出的是JSON格式。
以上AI服务的基本功能就已经开发完成,可以对其进行对话测试。
