|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。* Y' e: c6 s! I0 V h+ E9 t
5 W6 f* Q6 i" J! f: k" u9 k) L4 F7 y我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。7 F0 {# P) u4 Y6 m" h3 l1 z- ]
u6 I. P$ r( k! d/ e---
7 H, u" C4 Q/ K6 q
8 g1 c2 d9 H4 J) |. u### **1. 环境准备**
$ k+ {! {7 d; o! n) v5 F#### 1.1 服务器要求
, [( R* T5 c0 P8 E: ^- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。
; \6 g* ^) H1 u- **Node.js**:安装 Node.js v16.x 或更高版本。3 A: O' s' b- u( I! e
- **数据库**:PostgreSQL(推荐)或 MySQL。
& x6 ^2 A8 V. u6 \4 D L4 N: k- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。+ D, t$ e' {$ ?8 X
, b$ v K8 j) {/ J5 q* m
#### 1.2 安装依赖4 k" h, H! T. s L6 _% J. |. z
- 安装 Node.js 和 npm:
+ y/ Y& j9 ~7 g$ |- S; q! K6 t ```bash
$ F$ U& ~/ q' X curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -; S6 D+ g& @3 P, Z1 k8 T# \
sudo apt-get install -y nodejs+ G2 O, j! w6 f! L
```
1 N1 y6 {. p6 a& ?' G- 安装 PostgreSQL:
9 U3 j: z: X5 i$ y% s ```bash
1 d6 C" s# d' ~1 r+ j sudo apt-get install postgresql postgresql-contrib
) q$ l' l: J: L" T sudo systemctl start postgresql. R/ R1 p# L$ g l* }4 k
sudo systemctl enable postgresql4 g G/ H% j! `2 \" ~: T9 ^6 H7 K
```/ h. C) T& @/ |
' g6 F' ?0 s6 H+ J) j---
% [( R& Y! O5 `# X' R! c4 O$ X' {) K: e# ~
### **2. 安装 NocoBase**
( Z3 ~* |7 A5 N% L6 ?* N#### 2.1 下载 NocoBase( k. {) X1 L0 A. |5 v8 D: U5 b5 y
- 从 GitHub 克隆 NocoBase 仓库:; `. M; C& U2 w: t, k. }
```bash
$ U: [/ e0 \" @- A git clone https://github.com/nocobase/nocobase.git' C$ J% k9 `8 R1 M5 r6 y
cd nocobase
q) a& Q. ?# u' ]7 C ``` c' E) ^) t+ Y7 ?
y9 k7 k' `: C#### 2.2 安装依赖6 n @( G9 H2 N+ Z- e* \% F+ z
- 安装项目依赖:- K5 D1 G0 c' j- X
```bash
1 O8 @7 b, x: _' ^4 Q+ R% o npm install. F* C& i. b# [- o2 o9 ~
```
# O) e/ c% M, @ C: _! j+ E
+ @% F9 g P$ _# `9 S* k! N$ H# \3 [ @7 {#### 2.3 配置数据库
) S* q' c/ i) R/ o- 创建 PostgreSQL 数据库:6 S) K# K/ E" c ^& Q
```bash) _, J% b1 Y' g1 `& v
sudo -u postgres psql
% M7 I0 o, w% a. p, t CREATE DATABASE nocobase;
+ m( V$ r5 }+ M4 G CREATE USER nocobase_user WITH PASSWORD 'your_password';
4 [ Z7 | h, V1 _7 K GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user; q& ~4 {9 W" F; i o- x
\q5 `" ]8 @# C- T3 `; n9 @
```
: p. {* T( _0 ~8 J6 `& S7 ~- 修改 NocoBase 配置文件:
5 E& Z3 Z8 c. a: X 编辑 `config/config.json`,配置数据库连接信息:/ j- C. s9 c' e
```json' M* X; K7 ]+ ?. A7 G* F) @
{
" q& s/ t- Z" A C. J "database": {4 G- N8 v5 A8 ~0 ^% v: f8 E
"dialect": "postgres",+ z1 g6 ]7 ^( Q4 Y
"host": "localhost",# q* Y+ |5 Q$ g
"port": 5432,
1 C$ G, k& s$ F' i b5 f u, { "username": "nocobase_user",
- D2 b' X g6 b, p a4 h' N( P# ]0 W "password": "your_password",
6 a5 j; P. k ]9 N: J% c "database": "nocobase"
# E) Y6 E3 o0 F) i3 q+ v/ T }* g7 O: o- Y- x$ U& f# |5 F
}
0 X% u) I! V8 P" K ```
1 i+ V5 r5 \2 r3 q2 B( E) w9 L. W, v2 i8 r
#### 2.4 初始化数据库
: |- H, \" y7 D* X% R3 ~' ]; o. x- 运行数据库迁移脚本:
8 n; d8 C& s8 @9 p! q r ```bash
7 l$ l0 G4 j* T( ?! R8 [; H7 m% E; O7 e npm run db:migrate) F! b# x5 |2 q5 F+ q: o. m
```
/ w6 u O; H/ {) K. P- G
5 [" w5 ]2 E# u& `; s! R# `#### 2.5 启动 NocoBase! d# o9 h0 Q! m9 k
- 启动开发服务器:$ T: r; d1 H/ F* G( f' a/ h
```bash% j ?: b$ W$ s- |" C2 Y# K& B* @
npm run start5 s8 P1 C- {' ~+ Y |
```. J2 L: f, d( E1 u+ \/ z( ^
- 访问 NocoBase:0 I1 g% ]" p0 c) J4 s* ]% N g3 X: W
打开浏览器,访问 `http://localhost:3000`,完成初始设置。& M4 V; Y" R* w8 o$ g1 M
1 t1 i, q; w; S R3 |) A. h, K: j---* ?$ B" b0 m) e9 c6 {& h, [3 E5 y6 y# A
8 V$ Q v% S! a7 z8 ]: ~
### **3. 集成 DeepSeek**
7 v5 e! U V9 E3 c' M1 z#### 3.1 创建 NocoBase 插件. j( E% a6 v3 T& R7 w
- 使用 NocoBase CLI 创建插件:: i/ A* |$ w" e
```bash
) W1 a) V+ p3 S% B4 ]: Y# i6 \ npm run cli plugin:create deepseek-integration
! w) v/ b1 m m, S5 o0 B cd plugins/deepseek-integration
5 ]$ _9 l' M; h+ v. Y ```
4 P0 V$ E% n: [. M0 N- z
! R/ b! c) _6 s* M; t5 b#### 3.2 安装 DeepSeek SDK
9 a' F6 z: \4 Z/ u4 O7 R- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):. c' I' ], E! _3 E1 a, w& T
```bash
9 V% v2 _2 m7 h: F) s; s1 O npm install deepseek-sdk& ]' q! [- Q% Q2 v4 i2 g
```
8 k5 p8 o. q7 F0 x7 ^6 @& @7 k1 ^* k3 f) \ v8 M0 _7 C; q& J0 c
#### 3.3 配置 DeepSeek API 密钥
4 W$ q5 ?7 O/ F# F2 C- 在插件配置文件中添加 DeepSeek API 密钥:0 S$ } @& _& e
编辑 `plugins/deepseek-integration/config/config.json`:
' }2 i7 ` h. C" r( J" \7 N+ [4 d% r ```json5 Q2 l; L- f L
{' C$ ^) j8 e) L+ ~
"deepseek": { O" @6 A( c7 L G) h3 Y
"apiKey": "your_deepseek_api_key"8 {+ a# O4 M; q! n& b) V( ]
}6 [6 f9 ~$ X$ s! s: w$ T( R
}
* C8 \7 R) P! M) [2 N9 D% X j7 X7 z) E ```8 n. u) \2 d/ m4 I: q2 H. [& t
" D) H7 E* G2 {1 Y
#### 3.4 实现 DeepSeek 服务# C7 Z4 V' O7 Y
- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:6 c% G0 R1 u: J/ ~1 j( K
```javascript; y2 d0 _- s4 k: A/ w9 y8 _
const DeepSeek = require('deepseek-sdk');
- E& P( T1 \ h7 h" X' O' l( k7 U& @
class DeepSeekService {2 t# m2 V( ~9 K
constructor(apiKey) {
! f5 I* K% ?4 h) |7 X) i! A1 a9 i. x$ O this.deepseek = new DeepSeek(apiKey);% F1 T7 {1 F( D& [8 u" N/ u7 ~
}# f3 U) b2 `. P- o/ b- u' t
+ ^! B8 m8 h" N$ M; d async query(prompt) {6 s# q6 u( R6 |0 g8 u% w
const response = await this.deepseek.complete({
7 S' Y2 J* K& F- R2 ?, }! A$ W prompt: prompt, W/ \' c6 w% i3 n/ V- g. j' n7 j
max_tokens: 150+ |- k+ z, ?' K$ T" W
});
) r; m" x5 S1 G$ ~: h1 Q return response.choices[0].text.trim();( L; Q. c* \+ m1 O3 V# l4 Q4 X
}& i0 B( R* a9 n$ s
}6 b3 d& R' G, f% l
- g6 W u1 J- b: @1 U4 p5 H9 K N module.exports = DeepSeekService;! p' R8 v" C( e0 E0 ], p1 }: [9 e/ ~
```6 @9 k! R5 p8 o* Y2 |6 N
5 f9 `5 n6 U3 E6 O4 \& N# o( c
#### 3.5 创建 API 路由
/ I. Z, J* P! N& @- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:1 M, d4 q0 J5 w% I
```javascript
: N+ p" ?! _, r+ S- e4 R const express = require('express');% S, i+ t W* a2 {
const DeepSeekService = require('../services/deepseekService');7 |: ?1 p) {6 Q0 L5 e1 E( b
const router = express.Router();
. a8 w, l$ b' b" V; c const config = require('config');
' O% k) y& X5 D ~6 _0 V" u, ~; \) f% g" {5 l
const deepseekService = new DeepSeekService(config.deepseek.apiKey);
: ]9 c1 S8 a; r, x* u
: C% @$ j' B7 j* o; \# m" Y router.post('/query', async (req, res) => {
& N. z/ [# d2 M9 D% J# q, Y const { prompt } = req.body;
{% A ~, c2 r+ \ try {
2 [ X7 ]! s# q& h, b const result = await deepseekService.query(prompt);
: m" X7 M0 u$ S) f" t8 n res.json({ success: true, result }); j- j3 n% {5 `) V2 u
} catch (error) {0 |7 |1 p l2 O* M) U1 j# C
res.status(500).json({ success: false, error: error.message });
7 H$ p8 f9 T2 _; U4 x }
7 E# K9 ]( m+ E( V! s });
5 l* s* p: F% W6 U6 Y4 a" W
8 b1 ?! j: K& O/ E! I module.exports = router;
& q V( ^) F! H2 _7 g p8 v ```
( k/ A" R0 c8 I8 w1 Y& j
' |8 w% U9 V% H* t9 |#### 3.6 注册插件
1 n( G* y2 t) Q& Y ~- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:
2 R0 k- y1 \/ ` ```javascript7 R1 t+ L. F7 ?2 P3 ~
const deepseekRoutes = require('./routes/deepseekRoutes');
3 Y7 `& m+ T8 c+ I
% \2 y T+ A L- P module.exports = function(app) {+ G0 U* U6 X, x" t. ]! H) L
app.use('/api/deepseek', deepseekRoutes);
. h. h0 d, N7 } A# E };
# g$ ^# E2 Q( g' u5 H ```
8 L0 g2 |5 Y$ |. x# x7 G" D- [
2 Y' e2 D2 Q7 t; p- \+ s* K- g---% {* A) P4 W# w" o/ g
2 A i( \' o1 c, D+ F i0 f: q8 \### **4. 测试集成**
: @; C/ O: x' L- c1 M0 h#### 4.1 启动 NocoBase
5 O I0 I3 ^4 q; ^0 _5 X4 ]9 q2 P- 启动 NocoBase:
* F% ?2 r$ s7 a' y8 W ```bash* X& [6 h1 r" [3 D( k
npm run start. E$ R- Z, j( k4 X- \& G. K
```
0 d# A, o7 E {' W5 d K+ e$ Q! S& R( @
#### 4.2 测试 DeepSeek API6 Q- z* k: Z% z2 k( X- Q9 F
- 使用 `curl` 或 Postman 测试 API:
4 n! q. S9 d! N5 o k ```bash
* S( Y, q4 J9 e/ J. C# f curl -X POST http://localhost:3000/api/deepseek/query \
4 f3 V+ j& a6 }; t$ e6 j -H "Content-Type: application/json" \
) M( x7 T! K: M8 | -d '{"prompt": "显示最近三个月联系过的客户"}'
6 e% E5 }2 t. l9 F0 \7 R9 X; T ```
3 a n; I3 N+ |7 D8 ?( o2 z9 n* c& n: a
---
( u4 y q4 O" ~, n- n# T k4 J1 ]! v) v% P
### **5. 部署到生产环境**
# S& C/ W2 B t* K- J5 w3 o#### 5.1 使用 Docker 部署
' Y s; M; E! F' H- 创建 `docker-compose.yml` 文件:) U, p* k* f2 q+ ?
```yaml1 J" b" ~2 C" p5 [5 _$ R$ t% Z
version: '3'
% G& V5 I6 b2 E/ ]; Z" F* V9 J services:
$ P- {4 Q; {; @5 P |& _ app:
6 O) J: A& G+ I6 S4 b$ @9 Q image: node:166 v. N3 y5 V" Q
container_name: nocobase
: p% }( c$ M3 A2 p7 k- I working_dir: /app
- X$ l2 I l, P- J" J2 g volumes:
( t4 p# Q9 I {0 j' V$ V - .:/app9 k. O0 I7 v+ b9 w
ports:
7 _- w Z& m% S9 K3 w" H - "3000:3000"
' @3 ^# y- T( H# r1 N; j environment:4 e6 o$ _8 [" l9 n* R3 O
- NODE_ENV=production! V7 L% F( d: e/ W& E3 H
command: npm run start' \+ C/ ?' T6 w. _/ D/ d3 o
db:
) r$ ?1 o/ w# W. Z! o image: postgres:13- v2 [1 n5 L* ~/ t$ I
container_name: nocobase_db' r6 ?7 e8 _+ D+ S* N J& y5 E
environment:2 m$ r5 J% z/ Z x
POSTGRES_USER: nocobase_user; i& K; m) D+ l# a9 m/ q# Z2 f- u
POSTGRES_PASSWORD: your_password
" H8 a0 Q8 r- T4 y- E# j POSTGRES_DB: nocobase
1 f) H. p4 z% a! Q. J Q N ports:
9 Y& I$ E4 z: v. R - "5432:5432"; n' |! S9 i* v D t' j) l* j. f
```
" H* D+ [' B1 |; d& n- 启动 Docker 容器:6 k' x8 `0 f+ K: q! X- l
```bash5 R2 w) ]; m! \: m: U
docker-compose up -d, [" E+ ?( L: _8 y1 r* _$ m
```
: V! z2 K4 j {9 H3 d( ~
$ t' J- t% \/ G#### 5.2 配置 HTTPS9 ~0 Q* w* N# b/ k
- 使用 Nginx 反向代理并配置 HTTPS:" y o; h/ q6 t( r6 B0 P
```nginx4 K" {5 X0 L9 j% ]& h" D
server {
+ m1 n4 I9 ~6 P listen 80;
) l1 {- t7 i }# J8 Z* T7 x5 h, E$ I server_name yourdomain.com;
" z2 K: }- b+ _& I$ S return 301 https://$host$request_uri;/ p5 P& M7 Q \% n
}
1 ^* W# {" w+ I. _, A; d0 N V5 F B" `5 ], x- f
server {7 C4 r/ x9 a* F; z6 l9 C* [2 s
listen 443 ssl; F4 ` }/ g( S
server_name yourdomain.com;0 \1 j/ w$ D* b! [4 x/ Y; X) R
/ c% j1 B7 R" z( s3 k
ssl_certificate /path/to/your/certificate.crt;; B5 y, z; I! Y6 n+ M6 P
ssl_certificate_key /path/to/your/private.key;
0 h3 `# J$ ~8 d9 \6 [
# b: i8 p! s5 u, J& M/ w; o location / {$ `6 W3 b- N+ \1 _' i
proxy_pass http://localhost:3000;
9 x9 T) A3 ^4 C% _ proxy_set_header Host $host;* z2 ], ~7 q: f# X, v, \
proxy_set_header X-Real-IP $remote_addr;+ L( S) o/ D# Z: E, x, ]2 t% h
}
8 o% R3 r+ Z. U/ n1 q4 U }! |0 e* Y7 S9 u# p
```
3 ~& B2 J- l" ]
( G" [' ~0 L7 E8 h% l---& l$ X1 O, V9 W: K* L2 Z
5 d* ^8 g' m1 B2 e0 J* f### **6. 总结**
& v5 r0 @" N0 I& r8 C- J, f$ q% s: ]通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|