|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。
* G: P$ u; ?+ t4 ~7 q; p3 l, C. p1 E% Z0 f( A: b/ g
我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。5 z: J2 y; u8 }0 ?, `9 ?( {
7 _* {/ {8 a+ w" {* f2 M/ J3 M
---
7 \6 l5 R& b( h6 O7 r: o, u8 a& b% N- _. m% \$ l7 E! _
### **1. 环境准备**
2 [, y4 j1 q- Z5 f0 ~#### 1.1 服务器要求2 w9 L: S! }8 o6 J; O1 g1 h9 E
- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。
) G% C4 C& h# _- **Node.js**:安装 Node.js v16.x 或更高版本。6 A9 C" D5 |4 a2 {; e
- **数据库**:PostgreSQL(推荐)或 MySQL。2 D; p5 s; C7 p7 Y1 G3 c, w5 [
- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。
9 t/ p8 e. R' t4 p- h& g) E4 Y0 w0 t9 M
#### 1.2 安装依赖
. K* W) h4 n& O: c- 安装 Node.js 和 npm:4 Y' q) {8 Q- a# t% Z1 G8 o: i# k- t
```bash; |" N* j7 Q3 Y. w( K
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -# ~4 H3 j. f( d: s+ h, b1 f
sudo apt-get install -y nodejs
$ Y% S9 O8 o% v$ W ```
\! `5 N/ I2 b- Q2 @/ [4 I- 安装 PostgreSQL:
/ y3 l5 Q: Q: B# f; z& N" R ```bash
) C9 x. R" ~) n+ v l sudo apt-get install postgresql postgresql-contrib
5 w( p) ]% Z# H" x1 k! r sudo systemctl start postgresql7 e2 v5 v9 j( y. R- J3 s
sudo systemctl enable postgresql9 ]. r- c" {8 I# A9 Q) r* r/ R
```
6 x9 I' `9 t( s5 E" T6 e
$ g5 W4 s4 [+ k, c" K---
1 E8 f" \6 h: Q U" h
& E4 w; a2 J* Z; M4 ^ f( K### **2. 安装 NocoBase**
& F- P' a5 i- |) [& Q* T#### 2.1 下载 NocoBase
. F( i1 b4 p' k& ?& e- 从 GitHub 克隆 NocoBase 仓库:$ k- b: m; L+ A) g
```bash
) S4 ?! T% T. T. N git clone https://github.com/nocobase/nocobase.git
' u; g- a$ g1 l$ h cd nocobase
, T& a. Y5 ]+ p2 P ```0 q, Y4 _& d( h4 U# W
, K0 g+ C, Y( Y2 Z/ @; z( X#### 2.2 安装依赖
% s$ F# t* w; S2 z$ B# ]( P! ^9 h- 安装项目依赖:* s/ n+ ^# d" m9 \7 H
```bash& k W" @1 x5 {3 I# }) X4 g" \
npm install
$ E9 d5 s \6 g3 y% | ```/ q! v O9 g7 S* _" s0 M
9 Z2 q6 E1 k) E#### 2.3 配置数据库1 ~- A7 Y; R3 y# ~. F4 ?
- 创建 PostgreSQL 数据库:: E H: p) U4 g+ F$ v# d" [ j
```bash6 ]/ T( S0 R7 y$ [5 F& W& K% I; p9 R
sudo -u postgres psql
" P0 v% m7 r& |2 n CREATE DATABASE nocobase;. \$ B9 N. G7 \ _6 m
CREATE USER nocobase_user WITH PASSWORD 'your_password';! b) f- B: {0 u3 p9 x
GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;
9 S8 h; E3 Z' l( {5 y Z: z \q; @2 f$ Z$ Y8 I6 v4 g" ~
```
9 U& a0 q' r7 P% `) ?; V5 c- 修改 NocoBase 配置文件:
% A% f* K; S" H) R 编辑 `config/config.json`,配置数据库连接信息:
* {! n, m4 n' I ```json
$ K( u& [; _% @4 W) ~, V# w {2 ?7 K: o8 p( b8 B
"database": {
: ^1 e* p( l4 Y# N- o$ I7 u "dialect": "postgres",
# ~3 t& T+ E4 L1 P5 z "host": "localhost",
6 S. J% k, p+ @% ] "port": 5432,
, l) E/ f" b ^* I" x7 X "username": "nocobase_user", y: A: B- x/ R! N$ F
"password": "your_password",
' g% b. ]# }, b; A( |4 U1 p "database": "nocobase"' W* H: G+ n) Z: m) K0 k; f H4 _
}
+ N- b! R( M' \! e0 O/ D }/ o0 `0 c' Z$ [0 O) [
```
' Z9 o2 W/ r. ^9 @' ]) b, W% |) J) B2 U% A3 u3 z* `
#### 2.4 初始化数据库
. r- O8 l! |" ]* `* a) f) Z# g- 运行数据库迁移脚本:
9 t E3 i+ C8 h7 ~: V ```bash
1 }3 x) g4 m( q npm run db:migrate! V6 B: G# Z; x" g% S5 e
```
- F W$ Q$ G3 T; C' F" I ^8 ^# u& F9 a
#### 2.5 启动 NocoBase9 K% T1 n2 N1 Q5 |
- 启动开发服务器:
i) ]+ J9 u8 E6 w" ] ```bash
9 c# X2 `$ n6 J npm run start4 [, \% Z0 N! z5 A$ A0 E
```
3 z6 `0 L: e1 Q/ j' t9 m- 访问 NocoBase:
) ^/ X$ c+ c/ p: d4 N# D 打开浏览器,访问 `http://localhost:3000`,完成初始设置。
- A1 U/ y7 z' {+ |0 ~! {% U5 O) a2 V8 v# O: ~8 n
---
/ [: y# Y2 x9 x$ N2 i3 Y) p( D7 [0 h. Y1 A! S
### **3. 集成 DeepSeek**+ K$ w: y5 f6 X* ]$ L1 i8 @( [& W
#### 3.1 创建 NocoBase 插件
# U0 r6 S6 E3 ~0 O0 O$ I+ U2 n- 使用 NocoBase CLI 创建插件:
9 }1 t: h( l, a- M& f& ]+ Y ```bash' C! J/ X4 Z9 g8 R' U9 e
npm run cli plugin:create deepseek-integration
. E" h+ a1 ~. `9 B3 B5 u cd plugins/deepseek-integration9 Y( a [+ i+ K' h5 r9 M
```( q0 O" x- h2 O
: C' F& a" W; m3 J
#### 3.2 安装 DeepSeek SDK
& a0 K W, t `0 c m0 Q- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):
! Q& h) x9 S& l( {' L% m6 } ```bash
( x% d% A: J% D# \ T/ t npm install deepseek-sdk/ T B h v7 y0 u
```
% S1 l, @: K! ?1 v. @
7 p4 T- g2 A7 Z" @/ I#### 3.3 配置 DeepSeek API 密钥4 w- K4 b& x( s/ \5 ^) M$ F
- 在插件配置文件中添加 DeepSeek API 密钥:
9 H( B7 U* f1 @ 编辑 `plugins/deepseek-integration/config/config.json`:/ [' T |# Z s2 w
```json5 t1 [2 P8 D( S* q ]
{
) F9 o$ {) b( b/ `( m5 t" K' L9 c "deepseek": {
7 J8 x; k+ `8 F: {, W n! x "apiKey": "your_deepseek_api_key"
( f/ V/ m/ y' c6 e# W3 Q }
, X' W, u3 S' ~5 G; G' s1 N' W- ` }
( l% A6 E- n7 s5 v4 n ```' [5 V9 w+ T% ]2 S2 W
( p/ G6 S, A6 p+ l1 x* ~
#### 3.4 实现 DeepSeek 服务6 a# y/ c: z! q0 b r7 Q
- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:1 W" R4 Y& T. n4 \1 j
```javascript, C% @+ J7 |, g; u6 z
const DeepSeek = require('deepseek-sdk');
s* k* q3 L) q* F" C
9 q- w) o) Y9 O+ Q class DeepSeekService {* l( z9 f6 F% p& _2 K! o
constructor(apiKey) {' y2 x1 B; s% q1 E& w p: F
this.deepseek = new DeepSeek(apiKey);" @: @- Q9 X- A" y
}/ [2 ~% o+ e0 `4 X% z
3 u+ Z5 w( y# U* u% b$ Y! U
async query(prompt) {
2 j8 |$ R# b I3 k! h const response = await this.deepseek.complete({
9 L5 @% B; b& Q# a* @ prompt: prompt,
1 `+ z9 E( L/ v' ? max_tokens: 150
2 Y- G T8 Y5 ?. Y1 ^ });6 M7 M$ q2 c3 M- \1 Q) q6 h; M
return response.choices[0].text.trim();
V1 _8 m/ m8 |2 Q6 T( C1 S }2 I2 g, @" q5 R. G3 }
}& C" D9 j3 J- }/ ]2 L$ N% u7 m3 e' _7 {/ @
/ U% P, _7 G% K module.exports = DeepSeekService;; r/ \( p9 r% O; f+ I
```0 ^" f: ^+ f9 ~1 }% V& e6 s
2 P& {( B' [' b9 z% d( K! t5 J#### 3.5 创建 API 路由
& G* n9 n% G9 R O: r- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:8 Q, ^) d& D2 F+ T0 l! o
```javascript9 Y8 V( _ M* P, m' `4 R
const express = require('express');2 m2 ~; s+ E& A' ?
const DeepSeekService = require('../services/deepseekService');
3 E+ L# R6 k6 u" v const router = express.Router();+ i x+ n Y( k! }9 n4 }
const config = require('config');; \, O# r. H+ b/ [1 z% }
% o' ]. n3 j3 s
const deepseekService = new DeepSeekService(config.deepseek.apiKey);
0 H' o. H P0 c6 v0 e9 o% d$ Z+ U3 v' M. s/ {
router.post('/query', async (req, res) => {
& S- R; a J0 N/ l5 h2 J const { prompt } = req.body;: \' l0 v: y) g1 e+ b, k
try {
, K7 s7 C" ^) o const result = await deepseekService.query(prompt);+ R8 n; q) D: N
res.json({ success: true, result });
" e1 t8 `% E, M } catch (error) {
$ X% I, X$ [! ]. b# N! J: B res.status(500).json({ success: false, error: error.message });& K0 v4 i' S1 O+ `9 S
}
: I. T V2 P; R. U6 l4 j! I });3 [+ R& n" }, z" D0 x, ^0 `
2 P5 P0 N6 M0 K module.exports = router;
g' d, D' }8 L+ m) B- ? ```3 ~; `/ |% m* Z! A) m
1 A1 g S3 u3 o, n
#### 3.6 注册插件
/ t9 Y6 X' { q) d* I G1 t$ r; L' K- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:
! c$ b& h/ z% v0 R3 W- \9 [) N ```javascript
D" w7 ~& V1 }) M5 T8 \5 b5 [ const deepseekRoutes = require('./routes/deepseekRoutes');
; `: e( y0 o9 o k
k% u( u# J& ? ?6 U+ K9 S# U module.exports = function(app) {1 \% M2 H+ W$ _$ A/ d: e2 i4 u
app.use('/api/deepseek', deepseekRoutes);) Y7 u, A. H t) ~, Z( B/ o" j" W
};
5 M( a; T2 C4 J) d/ h+ s% a# e& i ```
$ _5 A+ g( g& M- {/ n( Y( K$ Y) Y( S8 A8 w9 x9 p6 y0 T0 O
---& w5 l& Q( M7 Z( ?& o
: J* M* E5 B; @' ]; H; k### **4. 测试集成**# {$ y2 N- j0 C# n5 V! R. x+ T
#### 4.1 启动 NocoBase
9 H6 J. Y! r q% [ w5 ]! A- 启动 NocoBase:
) L9 c; G) ^8 E* T- M0 T ```bash0 {2 `# N y- O6 o. N( L
npm run start3 l9 p" S3 ^/ u: L5 C% b! o
```
" e7 f, q Q5 D; ]" v' c8 D" G1 r, N+ R+ C, p! x
#### 4.2 测试 DeepSeek API
6 V4 M- g! N. i- 使用 `curl` 或 Postman 测试 API:
# a0 U% p3 E* d9 K: T7 Z ```bash
) h* f# R( o6 x2 u5 ]9 l9 p curl -X POST http://localhost:3000/api/deepseek/query \
2 ]* g) L, ]* [2 \! v -H "Content-Type: application/json" \3 V' T7 V0 m/ D# p: B4 G6 s
-d '{"prompt": "显示最近三个月联系过的客户"}'
/ G$ K7 o( J2 ^& [ v2 o& N ```
! r' ^, I; [% L7 Z0 u9 c+ m q) J; O$ Y5 n# T1 y( F3 Q, x
---
# ]$ U* N! K; o1 n" y3 m
5 g: b) S/ F2 G. T### **5. 部署到生产环境**! X3 `8 r0 E0 y. V/ @
#### 5.1 使用 Docker 部署! Z* l7 e: z# I% y3 G
- 创建 `docker-compose.yml` 文件:8 J: G# ~/ n; P# T9 L& t0 Y
```yaml' A9 ^9 }+ B/ M
version: '3'( A6 |* q' L8 I9 F7 r
services:
. B$ ~7 g6 a7 U. i, ], y) k app:
, Z4 C4 y7 c/ ]' }9 Q6 H% g image: node:16) d( m8 c$ F1 r0 P5 m. x9 d7 q
container_name: nocobase
5 }! c y' c& H% e1 E: V, W working_dir: /app H: A" p J6 C4 }5 L( c; w
volumes:9 G1 D/ p4 X n& }
- .:/app
6 M/ o! C1 o2 c$ D" N: T ports:" C( [/ f. l9 V# \' F+ A
- "3000:3000", j: }, s+ O+ ]: B o
environment:8 V n, L5 G1 v7 v& F. ]) P
- NODE_ENV=production
_& y& H, q0 |9 Q: ?2 ?, x9 R command: npm run start) C; `8 @* t+ E9 w
db:
- X& T6 c& A+ E: T image: postgres:139 d- A+ A( |" @) ^
container_name: nocobase_db
3 `9 \' D& H: D% |! S environment:
! L; E% T( o6 r. s: N4 X# m U POSTGRES_USER: nocobase_user
8 B1 A$ R6 ?! a; B2 C" R POSTGRES_PASSWORD: your_password
" `$ x( I5 D/ X* ~2 B& } POSTGRES_DB: nocobase
( g" r8 }8 _( j0 F& I+ I ports:
3 w a- _. c" _% B+ r - "5432:5432"
e! p, [/ @- f; l! P' G ```; r4 c% P/ j3 @
- 启动 Docker 容器:% j! t% z: h) o9 y& k: W y/ N
```bash
6 {9 l: g. {3 Y% R8 c0 E5 s- _ docker-compose up -d
& a7 d# F2 v( `) W1 D* F. L ```9 D4 U3 t" c- w% v7 ]% ]
8 D' \ |/ [8 K% ?$ B7 W#### 5.2 配置 HTTPS
7 U( @; Q0 r! d0 t7 v+ d+ ]+ S- 使用 Nginx 反向代理并配置 HTTPS:# c x# N# r1 k2 E0 V/ E; I
```nginx" e7 n8 }3 ~- z7 B
server {1 O0 X6 u" ?- I
listen 80;
! b/ `" L/ {# X- O server_name yourdomain.com;4 Z+ d3 [8 N# [/ B8 J$ ~3 {
return 301 https://$host$request_uri;
( X8 E: K' i3 g0 H; G* S- z, O1 B }( P) F* D* v1 n
1 ^+ x8 O9 u5 _" ?& T8 v. e% X* X' C server {
1 X, h, i& e" r8 P* B listen 443 ssl; j( i4 r4 _2 s( B% x3 m$ `! Y
server_name yourdomain.com;
' v! y" l4 S3 L4 ]4 {( C
7 Z$ ?( q6 e- j" x9 V/ X) g ssl_certificate /path/to/your/certificate.crt;6 ]7 U5 K: x4 z* a' p
ssl_certificate_key /path/to/your/private.key;, L. b% h* q4 y: b& ?
, ~: [+ L6 ?. L$ {7 V
location / {
: g* y$ X' F1 ~# |" K proxy_pass http://localhost:3000;
2 E( g( v1 ^8 B) Y8 k& {6 R proxy_set_header Host $host;) X; z4 c2 Q$ ?$ ~, `% Q7 @
proxy_set_header X-Real-IP $remote_addr;; o' i, s2 m) O; Y& n
}% J* l/ W$ m( C7 b) F- V4 a
}" b1 I+ G) T, d: H2 q
```
. T( T. k) \" x6 \. g) m% r0 q1 U" p
---: R* `9 p) Z% q6 K' j, s% D- `2 F
3 N8 j6 x2 j$ R9 s9 m### **6. 总结**8 ]+ c! n; |! I$ k. U% C K
通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|