|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。# i7 L4 {0 ?( X1 H. r. H
4 z/ _# C- h2 z0 n) |
我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。5 h# V: l9 ^3 F; _5 ^- j
! V' F& D7 S3 ^6 K% }---
7 t5 L- n# C+ d3 B7 ?% G2 B/ z# i% h8 o* Z- ~- {
### **1. 环境准备**6 u% z1 z) \% z, @
#### 1.1 服务器要求
' \: A" y% A7 w- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。
" R+ O4 y& D( t) B- F: B; p- **Node.js**:安装 Node.js v16.x 或更高版本。
4 a9 j; l( o8 y- **数据库**:PostgreSQL(推荐)或 MySQL。; D B1 p* H# L8 K. ~+ ]
- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。
( P9 }& F: Z/ ]5 n6 a" B$ l
5 ^ ]5 ~/ P5 Y/ b7 b; ]#### 1.2 安装依赖# J* f8 p) Q5 n# ?& E" f6 b0 b
- 安装 Node.js 和 npm:
1 m, b# l% x% B/ z ```bash
4 O1 \* g u- L4 j+ \* \ curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -0 x2 s4 E9 h# f! r& c) y g6 O
sudo apt-get install -y nodejs
; G0 X3 u R! S3 r4 [2 U ```& D* D. R7 L) _( l$ B- N
- 安装 PostgreSQL:
* B& i/ b# [- u ```bash
- m5 x0 J% Z& L, ~1 |$ n& J sudo apt-get install postgresql postgresql-contrib
( L) @+ z9 ~ m0 | sudo systemctl start postgresql
5 U! d7 h# t2 V( j9 I sudo systemctl enable postgresql% z, \' K' i- y5 p
```
; I: p7 O* ?- ?. V4 y" q" d+ H P, v/ r; ~# k1 M
--- _* t, h Z2 R% F j
+ N s7 x7 W8 }# U### **2. 安装 NocoBase**& G9 Z+ |; i- g
#### 2.1 下载 NocoBase
3 V# m( m, F" f z- 从 GitHub 克隆 NocoBase 仓库:
% U) e+ u E7 r; H9 r0 v. }1 M ```bash
; U+ g4 L* }$ h3 A8 P/ t4 N git clone https://github.com/nocobase/nocobase.git0 G9 C5 i* ]9 |2 s+ O
cd nocobase
9 _' }4 ]+ M/ ~/ L0 W1 v9 b ```
4 H: w, o I! F8 {, B Z
. Y2 I2 e+ E" j9 p' s% e$ k/ |% C#### 2.2 安装依赖' u9 |7 H3 M6 i9 ^( V. n: ^
- 安装项目依赖:
; s% r; m5 A; u4 {. L: [3 G1 t ```bash1 u5 y {6 |$ S$ l* W9 ?# a% A; K
npm install
) d. B, {! t4 K. @3 C, A4 A ```
! O. }: U5 e- h/ G& `
* w# E3 m' v0 D! s#### 2.3 配置数据库
" J8 ^+ i$ K) ^5 Q4 Y: V5 D- 创建 PostgreSQL 数据库:
$ W; Z* \' j( w! x. c ```bash$ [& [, r% L+ n
sudo -u postgres psql6 C( w) i- m7 c+ d3 E
CREATE DATABASE nocobase;% X+ u" g3 ]* w4 b' Q1 v
CREATE USER nocobase_user WITH PASSWORD 'your_password';, D1 z( Q/ }7 g8 u( A5 |# f. C
GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;
. J! I' p( I0 U0 K+ J" k \q ?: f3 ]9 D- f% ?) Z' h
```
5 k' \% H; C- r2 |; Q3 R- 修改 NocoBase 配置文件:
. X8 M- ?( \ C/ Q0 }5 y W5 W 编辑 `config/config.json`,配置数据库连接信息:8 ^7 H" [. b1 h2 S# [' @
```json
# A+ a/ s/ a$ ]! s" Z {
+ B F' u$ u, O9 L. N6 b$ g "database": {" z, f( n6 Z/ ~! _6 y
"dialect": "postgres",
5 b$ n2 F3 W0 `) Z8 b. n "host": "localhost",7 Z* z( o9 b( D
"port": 5432,2 u1 K+ A# d2 {! b
"username": "nocobase_user",
, T4 l" n- S) t& c% e0 r% |! b# J5 q/ l "password": "your_password",* s) a) m1 I0 H. d2 H2 N0 e
"database": "nocobase"
1 a# X+ v% i( j2 n! ^* I8 Z }! E5 E# V$ | Y. n
}% V! Q0 G4 @5 M' u0 k+ F4 w
```4 Z( L# w- C* P0 `; i6 U2 O
: K4 Y7 P8 f. d7 C. I
#### 2.4 初始化数据库
& T& q# L& A7 d- 运行数据库迁移脚本:
9 ^ t! S7 e0 j) c* M" S5 h ```bash: U4 n- N! ?7 ~
npm run db:migrate
8 _' F2 U! ~& E# O; F# S( C% a ```6 Q" N" t; ^4 ~. X, C
8 @" g4 N! J" C. F, t' D% k#### 2.5 启动 NocoBase2 b3 N p2 ^( i2 w6 t; e
- 启动开发服务器:, u& q, K5 @3 K5 Z5 p1 q2 o/ b8 Y
```bash
7 k8 r" [- Q2 P6 k6 j npm run start
" J" z' h+ B( b+ J0 B6 } ```& |' d$ w7 ]: z3 t5 z6 g4 o/ {% }
- 访问 NocoBase:; U( b7 D5 M X( T \, Z) Z
打开浏览器,访问 `http://localhost:3000`,完成初始设置。1 J0 o; x; \ {( y
5 z! ~& X5 A, d2 j2 d2 ^+ E---
3 `) z6 p% _* F7 N+ z& _1 U# {: J: j, E, z, Z7 \0 G* x! N
### **3. 集成 DeepSeek**
! J, l! {4 a! [" P#### 3.1 创建 NocoBase 插件
: e# a. t- A( E! b- 使用 NocoBase CLI 创建插件:, Y+ ? H! ^2 x: ?4 Y1 a
```bash+ P( n- n0 ^0 N5 V: z
npm run cli plugin:create deepseek-integration1 k0 N5 L9 x# }, G& o
cd plugins/deepseek-integration
( T4 w2 L7 D% ]/ u8 o& f$ Y ```
3 Y( ]9 ?- a0 N( G& x6 P# D9 [( M3 R, J& \+ T, ^
#### 3.2 安装 DeepSeek SDK
, D) Q3 b4 {' x9 y6 M$ f- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):. X3 F; X; _5 W, Y' ^( n) B2 k& V
```bash) J1 ?$ j) ^0 B( L
npm install deepseek-sdk
2 E6 j4 U! L) p' k( L ```
0 V, D7 M3 }5 [- s: `! |& v, a5 C. T4 d8 V! B0 \9 |2 i6 r, P# H
#### 3.3 配置 DeepSeek API 密钥
$ O* ]4 i) x1 b2 k) M- 在插件配置文件中添加 DeepSeek API 密钥:$ s. d0 N, ?5 P# o$ v: H
编辑 `plugins/deepseek-integration/config/config.json`:1 X7 o$ j x2 R# j/ s' O" a
```json
2 J4 a* d) T1 H, `9 H/ y {- v3 e0 |3 U ?* b* t, J% K
"deepseek": {
: g8 v2 [8 s* m. o "apiKey": "your_deepseek_api_key"
" I$ \" w% ?+ y2 ^0 j0 l4 N8 _' @ }
, W1 W1 v2 Q% w% b+ W6 ^2 ^) ? }; _2 z2 k6 ^0 l! @8 y8 @9 W: p
```! b3 c* d& H' y! u# B0 @$ B
& f9 O0 y+ N8 t& p2 X- K' u' r; V
#### 3.4 实现 DeepSeek 服务
: g( @9 P3 E, I4 T" V5 A4 p- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:
" T* L$ a! m, q ```javascript' I7 g; s: ]5 ?% w& w( C6 \4 }
const DeepSeek = require('deepseek-sdk');
q# |" h0 h! l) Y, O- q, C# c9 W* q g, l O9 z
class DeepSeekService {! V$ h0 \/ G1 X2 {0 h
constructor(apiKey) {
: A/ g" E3 G2 y2 A) J1 ^ this.deepseek = new DeepSeek(apiKey);, c+ ]: g1 X$ m0 }3 Q
}. ]# p2 ^3 B6 [( t/ s1 }* [; q
* d/ ?* @% \! ?6 @% `+ a async query(prompt) {, i4 ]) v& U5 b4 Z2 _8 l9 o9 G8 o
const response = await this.deepseek.complete({
H U+ C* d- g2 E) R1 l. ]: s prompt: prompt,
- {: \. R! S( N- u$ ?; _) o) s max_tokens: 1503 G% C4 P$ D! T/ {+ {3 w% `. R
});
/ v5 y8 G! d: h2 V0 @0 `& ]* t return response.choices[0].text.trim();
/ ]. A# E$ j4 } ] }7 A: D+ ~ Q$ R2 o; Y4 ]
}: _0 P) Y6 ~2 ~: W+ d
9 l' O8 q* |3 R- G3 _7 E: V5 G module.exports = DeepSeekService;, z* c- Y, j% W% t& _8 r
```
; m, P( O+ M9 f0 c9 d! D! ?9 N# c3 m+ b0 h- e7 X$ ^
#### 3.5 创建 API 路由
" Q' M: i1 j8 R6 w* i- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:$ H4 D8 j0 n6 k" v* z3 S
```javascript) D q4 ]+ ?2 p- R/ x3 ]# Y0 J
const express = require('express');
! \2 g, k' t+ E* F const DeepSeekService = require('../services/deepseekService');7 v$ s& ^: \# C# Y
const router = express.Router();
) @3 Y7 n& B$ N! B const config = require('config');
7 J' {$ s+ H+ L( ~% C; Z; i, \( o+ i0 Z* n( ?
const deepseekService = new DeepSeekService(config.deepseek.apiKey);
' \* [3 d( H+ C& G+ ?8 x
( L3 M2 V: f9 @, W9 y router.post('/query', async (req, res) => {
, j- w; p& C/ E* g: j' F/ O- p. V" G const { prompt } = req.body;
0 J; l) p' o9 x3 F9 G2 H- j try {! m2 r3 O- y4 n {* J! Z; q. o
const result = await deepseekService.query(prompt);
0 B2 R" q2 H5 {3 T/ N0 \$ y, R res.json({ success: true, result });; I7 a' y0 S) t8 x' j/ t, p
} catch (error) {1 U+ F8 [. C7 I; k
res.status(500).json({ success: false, error: error.message });
/ A8 H2 ?2 J ~: j R }' U/ C1 p9 w. L/ w. T% }
});
8 _# N# {' K0 q& u$ {5 D3 H" A; T/ C( b# H
module.exports = router;8 Q' K' {' ~8 R/ b/ s8 K
```5 b2 R; Z: o6 N4 q7 B3 S' {, B
1 X. K% k; ]6 V, {; N: {# ?3 ~. r2 V
#### 3.6 注册插件
8 c. c8 g6 O. _( O" i- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:
( g2 w' ?# q" [8 [* a# M5 \ ```javascript/ P: i, P# f# l5 i: Q1 N
const deepseekRoutes = require('./routes/deepseekRoutes');
5 a w+ _$ X# e4 Y5 b- e) h: Y* G6 a( `
module.exports = function(app) {" W! \( k% E! P5 I
app.use('/api/deepseek', deepseekRoutes);" v5 h; \# J3 I
};% z( E9 [4 u0 G; M! |/ L) Y1 l9 @4 Q4 n$ @
```- P% ]' f+ m& c# D6 s
' \; p7 O. W9 s% e
---
4 U! |6 i9 T- w, L1 Q
# i5 J( K9 O1 n' a* m### **4. 测试集成**
+ T `9 a1 q0 `1 i5 `- O#### 4.1 启动 NocoBase5 \( |6 x' y" d1 X
- 启动 NocoBase:
9 }9 G. S/ Y% o8 @( |, T/ Z) ]7 h' b ```bash) d2 X. w- | O/ e$ S3 ?- N
npm run start
* h7 U+ W7 r4 R3 P1 ^# s# p/ b2 _4 E ```
( H+ }' {, e7 j& w" S. S' C2 } p; L, ]9 W9 W; |1 i
#### 4.2 测试 DeepSeek API
( x5 L" }" l6 @7 X5 r- 使用 `curl` 或 Postman 测试 API:$ |) ^# g$ A8 O1 U r" ^ p
```bash
: `2 d; H5 e4 q# f, M* q8 \ curl -X POST http://localhost:3000/api/deepseek/query \
) u0 D! S- K0 g L5 `% C* _/ v -H "Content-Type: application/json" \) o- ?! u1 x0 I
-d '{"prompt": "显示最近三个月联系过的客户"}'
8 X! z0 h) p; |3 } ```
3 [$ D3 N3 b4 W) n; X" f: P3 x- l v+ T6 B& G7 z* L2 N3 a$ |* |
---* r3 }2 M# z9 S+ S- q& f- Z
- {/ h6 K( d. @# F### **5. 部署到生产环境**
^& R# [: T' `+ s4 n#### 5.1 使用 Docker 部署
: \# g+ H+ ~, }2 H- W! x- 创建 `docker-compose.yml` 文件:! D/ }2 q9 `8 S0 [7 x9 z6 J
```yaml
: ~6 E& O8 t K) ?9 v. o1 o& _ version: '3'7 m4 I. K( `6 U. c; P. q! t! l
services:
3 A' s0 w1 m$ D M app:
- f( Z, N- f7 X% F+ l! a" p image: node:16$ R* f4 N. G8 s# o5 ~8 M
container_name: nocobase
9 Y' ?# F- c, K1 J# H6 N$ y6 g working_dir: /app
5 d+ F0 B# S' \. e9 S" Z volumes:
( B: P4 [( T6 ], o. [+ m( B - .:/app
; H) p: I4 U+ d; w9 | ports:
* z% B! D% L/ L% r - "3000:3000"0 |" N C/ L7 |& Z" i
environment:" a& l- g3 Y; M/ @- l5 R. p4 B
- NODE_ENV=production
, t7 X5 ~7 y( O5 Z6 C) O/ h command: npm run start
2 b: K, q: }& ]' } db:) ]2 ^8 q; U7 S4 d. C( {8 R
image: postgres:13
' B! v" [& k+ Y5 I" j container_name: nocobase_db8 m; \1 H) F9 |) E/ x% r4 v$ I
environment:
+ P9 Q1 \, B# X& Y POSTGRES_USER: nocobase_user
+ M( S) u9 y; F& M6 s* q POSTGRES_PASSWORD: your_password- d0 `3 a$ ^. S( {- x
POSTGRES_DB: nocobase* B% U2 v7 D/ A
ports:
: n" H) {$ w, H& M& n m - "5432:5432"
8 c0 B* t' h/ v* e& f ```
% |6 P6 j5 r/ K0 Q5 s, |- 启动 Docker 容器:
3 h3 d! L j$ \- i1 a) V" Z ```bash
6 |2 d# Q$ U* z docker-compose up -d6 z. \9 ~$ R; \. R2 m- h
```
- S: b" E- L: m( M6 i; X$ e& m& N% G* n ~
#### 5.2 配置 HTTPS6 |& Z6 c: q! C) |
- 使用 Nginx 反向代理并配置 HTTPS:/ i W8 j- ?* x$ g$ @
```nginx
, V& X/ @+ I. \* X/ _0 |; v) m) ` server {
# W# g+ R3 u E. p1 b' M" ~ listen 80;
' N# |' p% ]9 u( P4 k: J server_name yourdomain.com;1 Q+ _% b# l1 o' G1 y% \. E
return 301 https://$host$request_uri;/ H/ |% z" c' I, q$ q) @
}* C( p/ t. b7 q
; S9 f- Z: t9 m' @9 f9 [
server {
" M0 V$ k0 Y% C( R+ ?8 V! ~ listen 443 ssl;
( C' A% f4 r0 J: b server_name yourdomain.com;. X0 s% ]0 o6 E: y1 _# b
: Z' ]8 G4 d2 c7 n* y. T ssl_certificate /path/to/your/certificate.crt;9 C( T- w/ Y& y8 z9 J) |5 L
ssl_certificate_key /path/to/your/private.key;
% |0 {1 z7 _+ X( b0 U
8 D" U0 ~7 l5 T; r& A6 j1 j location / {
: u2 ]& z. n4 y proxy_pass http://localhost:3000;% g) o2 n6 c) v! Q- B- q. ^7 }3 n
proxy_set_header Host $host;
( m+ ?. A3 R' p6 q5 x proxy_set_header X-Real-IP $remote_addr;1 N' c9 C% ~" ^* D/ w8 M
}" {8 L8 g* n- p# f
}
N# C4 @. o1 p+ o ```
+ F; j6 f2 v5 G3 B
3 e0 a( K6 I' m5 u% S---- r! x4 @/ {9 b8 q" G9 \! Q
6 H# Y) W+ `# ?- ] ?! n
### **6. 总结**' j' M/ a' w; S! _$ R2 X
通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|