这周的工作主要是技术栈的选型,框架的搭建以及springboot调用deepseek的快速上手。
经过小组成员协商后端暂定用springboot完成主要业务,而大模型调用相关的功能仍然使用python语言完成,因此需要用flask把python脚本暴露给springboot去调用。
1.编写调用deepseek api的python脚本,并将其注册到flask中
import os
from openai import OpenAI
from flask import Flask
# 从环境变量中读取 API 密钥
key = os.getenv("API_KEY")
# 检查是否成功获取 API 密钥
if key is None:
raise ValueError("API key is not set in environment variables!")
client = OpenAI(base_url="http://10.2.8.77:3000/v1", api_key=key)
app = Flask(__name__)
@app.route('/')
def index():
response = client.chat.completions.create(
model="DeepSeek-R1",
messages=[
{"role": "system", "content": "You are a helpful assistant"},
{"role": "user", "content": "Hello"},
],
stream=False
)
return response.choices[0].message.content
上面这段代码从环境变量中获取api key,再启动flask之前记得设置环境变量。在windows powershell中的命令是$env:API_KEY="********"
app = Flask(name)这行代码是初始化一个flask对象,并将其赋值给app这个变量。
最后我们写了一个函数,这个函数去调用了deepseek api,并返回deepseek响应的内容。并且在函数上方添加上@app.route('/'),它的作用是使得你访问'/',也就是根目录时,就会调用这个index函数,并将这个函数的返回值传给你调用的client。
app是我们定义的flask对象,route是flask对象的一个函数,这个函数是一个装饰器,所谓装饰器就是接收一个函数作为其参数的函数。最后再前面加上@,表明这个函数作为一个装饰器调用,这样我们下面写的这个index函数就会作为参数被传给app变量的route方法,这个方法内部会将传入的函数注册为事件处理程序,这样就实现了当你访问对应路径的时候自动调用对应的函数。
2.使用openFeign来调用flask应用
openFeign是springcloud的一个远程调用组件,我们使用这个组件来帮我们访问flask应用接口
在springboot项目中,我创建了名为feign的包,这个包用来统一存放所有feign接口文件。然后我创建了一个名为flaskApiClient的接口文件,它的代码如下:
@FeignClient(name = "flask-api", url = "http://localhost:5000")
public interface FlaskApiClient {
@GetMapping("/")
String hello();
}
第一行的@FeignClient注解指明这个client将会去访问http://localhost:5000
hello方法被@GetMapping("/")注解修饰,组合起来就是当你调用这个接口的hello方法时,openFeign组件就会去访问"http://localhost:5000/" 这个地址。而flask默认是运行在本机的5000端口上的,再加上我们上面把index方法注册到根目录'/'下了,于是这就是一个调用我们刚刚写的python脚本的方法。
3.大功告成,来测试一下
我们首先启动一下flask(再次注意启动之前先设置一下api key的环境变量),在我们使用flask run这个命令启动flask之前,我们还需要将FLASK_APP这个环境变量设置为当前要运行的py文件,在windows powershell中的命令为$env:FLASK_APP="chat.py"。设置好之后我们就可以用flask run命令启动flask了!
(.venv) PS F:\LawyerHelper\deepseek> flask run
* Serving Flask app 'chat.py'
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
这个warning是提示我们flask集成的这个服务器仅适用于开发,不适用于生产。我们后面部署上线的时候将会使用其他服务器。
这样flask应用就启动好了,可以看到它正在监听本机的5000端口。
然后我们编写一个testController(注意controller统一放到controller包下)来测试。
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
FlaskApiClient flaskApiClient;
@GetMapping("/hello")
public String hello() {
// return "Hello World";
return flaskApiClient.hello();
}
}
有了这个controller之后,我们就可以运行springboot应用,然后访问http://localhost:8080/test/hello
一切顺利的话,我们能从浏览器中看到deepseek发来的回答!

4. 最后在gitee项目的wiki上编写开发文档,帮助小组开发成员理解开发步骤,在需要的时候扩展新的调用。


1739

被折叠的 条评论
为什么被折叠?



