|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。3 I8 G$ v( r+ f% u% p9 P7 v# h
) K" ]& ^+ M8 J* @' w4 C, [% m, `
我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。5 Y* j' x" s) F! h+ G4 n2 \% j
( W9 ]4 `) [, M) ~0 Z% ]2 f
---# H l6 |, ?! f3 v! G
- F, |4 J+ G D9 U" i' [### **1. 环境准备**$ O$ i6 S) Z* n4 L5 n9 y m
#### 1.1 服务器要求
, F* G# v- p2 g0 }6 o z" I7 r- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。
, [! Y5 U2 U4 i; k- **Node.js**:安装 Node.js v16.x 或更高版本。% l: M# G9 i( ]6 J/ S& p1 }* p( r' R
- **数据库**:PostgreSQL(推荐)或 MySQL。
# l# S( A& G$ }. S1 J( N. n- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。
0 q! l0 G4 W; u/ ?1 x- Q4 I# ^) W4 {9 C4 [2 j0 X# C3 R# R3 N
#### 1.2 安装依赖
7 g! F4 z' ~) @7 ^! _; D" t- 安装 Node.js 和 npm:8 g. _* }" ?. \' O3 s. E, ~
```bash
1 V. d5 w5 w- g curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -) W2 B0 i8 u& [/ ^: b( U
sudo apt-get install -y nodejs
5 V6 F. R0 D( \- P/ ^, q5 x ```
% H7 n f; G* @' Z% F' a. p3 ?, I- 安装 PostgreSQL:
9 U5 @) U) c/ V3 j( L5 a ```bash
. [5 G! o# R5 K4 j s sudo apt-get install postgresql postgresql-contrib
% q' L# C# D/ ]$ b t5 k8 _5 J9 J" c sudo systemctl start postgresql
; c/ Y, [" r% K+ O' g/ D# a: `3 F& Z sudo systemctl enable postgresql% Z* V! H9 Y; p/ p3 y* `8 _
```
7 w& b: h, N, H% \" n. q7 o
$ z. O* s/ K' v---0 ?. d; W2 U: O% u* V# b, M
' Z H( _2 S1 w+ X
### **2. 安装 NocoBase**
! H' m1 n: |6 s, _; ^#### 2.1 下载 NocoBase" ^2 |6 E2 i( z6 V) F" H$ U" Z' W
- 从 GitHub 克隆 NocoBase 仓库:
* ^3 O( G j% ^9 |( c ```bash
# w4 E& T' l4 h- E0 m' w/ q git clone https://github.com/nocobase/nocobase.git
& F* K1 S8 R- F. ?* s& v+ f cd nocobase
2 a# n7 _/ o( y2 @ ```" G' F$ x% @- Q- X2 B% K
2 r. ?% b$ M# v5 X; \#### 2.2 安装依赖
5 W$ M/ `% A6 Z* C! j8 d- 安装项目依赖:7 B8 R7 J! ]: w& b
```bash
2 C* W. p& e8 k/ f$ E npm install
, z( P- R7 B9 U5 W# ~$ ~$ N7 @8 P ```2 s8 ~ k! _8 m
' v" e e; w9 V. u( V
#### 2.3 配置数据库
; ^* T: l: y: s+ |! g- 创建 PostgreSQL 数据库: F" A& N R0 o! Y
```bash
) P0 Y8 @# z) z) f: _7 _ sudo -u postgres psql
3 B7 \- e8 g; h" E- w CREATE DATABASE nocobase;
) ^$ j+ _- D& @$ h7 z8 i CREATE USER nocobase_user WITH PASSWORD 'your_password';
, X7 [! F# ]1 F( s! h3 u' y4 P GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;9 L+ h6 m$ k# k) d; N& S9 x
\q
1 Z0 M( z# J) A. ^# d0 ~ ```& s# D4 U/ Y( S
- 修改 NocoBase 配置文件:
- G. U* K5 B) J) \( u4 n 编辑 `config/config.json`,配置数据库连接信息:, v3 C9 S; g6 D+ R. ]* @
```json
- H, D4 t3 |* b7 l4 m4 N {" L5 P Q s: H, v0 p, k$ A
"database": {& @/ X) I S5 _# b
"dialect": "postgres",
! v' ]- [9 }% q" o4 _" y "host": "localhost",
6 b/ J R+ Y9 l2 H8 x4 @% } "port": 5432,- ~) F. K9 y; e) l. w) H7 |- W
"username": "nocobase_user",
+ }* e' D( r1 J$ C( [ "password": "your_password",3 \# M, Y3 z$ r& H- Q& z$ E5 m* q
"database": "nocobase"+ x/ [ A# r3 k/ U% { m
}
' R B' B8 ~4 O2 O1 S$ y1 C2 V }
p: W$ m: h7 C8 n. L9 L# P6 C4 | ```" C* D: V; |+ E' h8 b
, C7 M" }- u0 [" j1 G
#### 2.4 初始化数据库% A5 H8 ^2 S% n# D! k: k
- 运行数据库迁移脚本:" e# L$ `$ q; ]2 c' h
```bash
" C3 ] j i8 q1 @. M9 O npm run db:migrate! u+ _ O, x. d( h) x5 B
```6 e4 e! ^/ z% ^/ Z5 f4 `0 @
* C: N$ d# m8 V! ~#### 2.5 启动 NocoBase9 ?& N# C9 m4 n f
- 启动开发服务器:
' E6 Q9 v) L' c6 Y: @, L ```bash7 j/ C6 y$ C: a8 e$ M `" S' o
npm run start
" c0 g' ]6 e; Y" {0 U& O ``` E$ |# K2 J' A) h8 V" r. a* e# o1 I
- 访问 NocoBase:
& `5 p: f% P" g# b. x 打开浏览器,访问 `http://localhost:3000`,完成初始设置。
$ j- T P+ }/ e7 g2 x+ y$ ?% c/ L# }% P
---
% W1 A$ h' i! P4 [+ F- H; B/ ~
1 w2 ]# |% |. b; n- F7 n### **3. 集成 DeepSeek**# o/ j9 [2 j% M3 C; Y
#### 3.1 创建 NocoBase 插件- C2 X+ T0 a: @0 B
- 使用 NocoBase CLI 创建插件:
' [: e" U4 w$ C ```bash
; P' @2 P b; t" Z npm run cli plugin:create deepseek-integration0 h g9 Z% u! S* |( x: j! u! R/ u6 y
cd plugins/deepseek-integration
( \; m2 [! V7 X) E ```) p" v3 }$ _0 F* U
1 v. M2 c( [1 t. l#### 3.2 安装 DeepSeek SDK
( C9 r' c! Q6 T. ~/ D _- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):" I8 [; Z( z; D) }6 b8 E
```bash
1 K0 ]5 [( X2 t# L- d4 V( g npm install deepseek-sdk$ Q& z4 x& u5 ?/ q1 b/ L* z
```+ l! L2 M0 V! g# C
( L" y! s) {1 W3 Q. K#### 3.3 配置 DeepSeek API 密钥
_5 L& q7 O) A% A: ^- 在插件配置文件中添加 DeepSeek API 密钥:1 A$ ]8 k# m: t8 N E
编辑 `plugins/deepseek-integration/config/config.json`:& ^8 q) U9 o" T8 g% |
```json
9 w1 b: I9 v2 \1 _6 P {0 T8 V0 r. x+ Q" Q7 L
"deepseek": {# p7 n3 s) U- ~) w) \
"apiKey": "your_deepseek_api_key"
# [9 z# K6 Z; d" W0 d" @1 e }: k0 ~$ H* o: [# ?- y# D& j; v
}
0 i2 Y0 O; m3 H ```5 A# v H/ v9 h8 x+ @2 B* [7 {
. O; ^: l% i3 f# J7 _/ c; L- F) E
#### 3.4 实现 DeepSeek 服务( f3 g8 v% @( {2 d: E+ U, |0 q- s& @3 w
- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:% s0 O/ q( f0 S
```javascript$ {7 Q$ v$ J4 i& B3 Q6 g, m
const DeepSeek = require('deepseek-sdk');
# d, ^8 g; {( U0 I, A1 T
7 j" _/ h+ w& x8 a% q class DeepSeekService {
( d9 g' _/ `7 ^; K: m3 `8 l/ C constructor(apiKey) {
1 M4 I2 u2 G: _4 Y) h$ C this.deepseek = new DeepSeek(apiKey);
% J7 i* o. l& C5 \1 M( I/ {7 h1 Y }
- L6 J" \. K! U; V, E5 e& `8 q% ], [6 h5 R! Z
async query(prompt) {
0 m; z- u5 B, K+ {8 H' _) Y" M- f const response = await this.deepseek.complete({
( v5 o- K7 a. b6 k: A- N0 P# j prompt: prompt,
$ e2 I/ {8 v& o( |- D max_tokens: 1509 U# I/ R) |! b1 d6 L
});
4 X1 i* _* h* s/ h* C3 C return response.choices[0].text.trim();
% I* p: Q7 P; c3 ~3 C3 Y } i5 E4 \! d8 Q9 T- C
}
0 e6 C4 t/ |- t. x$ F
: K; z5 E# U: k module.exports = DeepSeekService;
0 D* {, w' X2 I- i ```9 T$ F$ y) K! b% j, y" S; I% V
* B; j2 H4 B$ W+ y. j#### 3.5 创建 API 路由
/ n, _, b3 Q z$ w' v- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:
0 u( b4 z) {5 ?, \: n& V: n8 Y6 N+ O" ^ ```javascript
8 H# a; h, G0 W* D8 X const express = require('express'); W: N; d2 u! q j0 `7 T5 l) }( k7 Y
const DeepSeekService = require('../services/deepseekService');' `0 r( F7 z4 G \5 N" ~3 [
const router = express.Router();% _! ~. D6 _3 h# ?- ~0 p& M$ J' Q; J
const config = require('config');6 f% j5 Z* V" j) E& M5 I, c* O
8 ^/ i Y% U' ^4 b const deepseekService = new DeepSeekService(config.deepseek.apiKey);
6 r6 y* B6 c) q9 K5 _' g
3 v7 U' b4 f( H, {/ t* r router.post('/query', async (req, res) => {
' i2 N, X3 C! U) H const { prompt } = req.body;
; E# u" `2 Q" M# [4 T try {% S; q% a% t/ ?' e4 d( t3 u
const result = await deepseekService.query(prompt);
) b, a( _, Q5 w* X res.json({ success: true, result });
3 m+ T4 X/ d! S Z } catch (error) {- y$ m* t. O$ {$ x5 |7 @
res.status(500).json({ success: false, error: error.message });! K; S& U! i" C) F* b
}
) P6 n2 @ O0 m `/ c) j });
0 v) t/ L2 F* ]: J3 T; F% i0 C% k1 i
module.exports = router;
3 J1 \6 [7 j1 r5 K* ~ ```! O1 J+ q/ X* t9 C1 U/ r" f
+ c" w0 N- ^8 A( G' y. |
#### 3.6 注册插件
+ A% |0 e) K" p8 b3 ? `# R" k- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:
+ c4 Y+ @& T3 {% H& U4 b2 ` ```javascript
7 q. b0 c+ c. m const deepseekRoutes = require('./routes/deepseekRoutes');7 |! x9 c, o6 H4 K* ]) b3 B
8 U8 H2 X1 J2 Y$ z3 h; y- a3 i, ` module.exports = function(app) {
5 C; V; i5 J' t0 ?1 A% A app.use('/api/deepseek', deepseekRoutes);
X; w! n4 k2 B+ y };/ V, U% @) C4 J, w# ]3 k4 Q- u+ Q
```
, a+ ?9 s$ t8 |. \ O
* _5 r4 E+ B3 w9 Q& v6 p5 A c& m# {---
$ o7 P4 `/ D+ J6 Q5 y9 J; ?5 H I1 f3 L) ]
### **4. 测试集成**8 k: w. f3 I( h( u
#### 4.1 启动 NocoBase
6 G+ w$ {! q& P( Z5 r5 d- 启动 NocoBase:
% X+ {# Y3 k2 C- Y8 I! Q- T" ~; J ```bash
- D- W ?% N- J npm run start" K7 n2 l8 o! ^
```) @, E5 V+ W7 b1 x/ Q9 {
3 l8 H3 g- I4 P i. b( i4 A. j
#### 4.2 测试 DeepSeek API
7 ~( i0 e3 R5 S: B% ?- 使用 `curl` 或 Postman 测试 API:
) H; v% t2 t' R1 x) X+ T ```bash" J: _7 V: R8 K) G* q
curl -X POST http://localhost:3000/api/deepseek/query \+ F2 V: V# J4 o7 w" `% `
-H "Content-Type: application/json" \
2 g" f* O& `, p! q -d '{"prompt": "显示最近三个月联系过的客户"}'
+ X" @; ]* h( a" L n ```
2 r; h+ S9 _+ v; i& n3 H8 S2 Q. a: B% f, p% L$ c
---
1 k0 ]" U K$ {- O9 X3 f9 D5 |, `4 m; _
" t! q+ i) x" b### **5. 部署到生产环境**
& @% O8 G( N% Q) H! h#### 5.1 使用 Docker 部署" N Y( z# A$ `) C7 k; ]
- 创建 `docker-compose.yml` 文件:
6 |8 r z/ F5 N1 |0 ^# v ```yaml! l; k6 N4 w2 u7 y1 U' \+ M7 ?
version: '3'
$ C; p, S$ O1 `% ^' G2 Q* Q# U7 j services:
7 U, U' z1 y/ b: R$ |# |. r app:& i2 ^& g5 D( i' }6 f# V8 ~
image: node:166 d" L2 i5 S7 {! O6 E
container_name: nocobase2 Z X* S+ W& `; S1 s7 F
working_dir: /app* N1 N/ o, v* f) P+ ?
volumes:: H% w8 f3 x" U. d/ m
- .:/app. d8 g9 K& i% a* A( b8 h/ F7 K9 q9 l
ports:
2 \, K- I1 W3 e! n+ R - "3000:3000"
" u5 M: Q: E6 t5 Z. O environment:; ` d* a7 L) t: X
- NODE_ENV=production; Z1 C$ I3 P& w# X
command: npm run start1 C( Z- w: k; p1 g' ^
db:' }% R& q( S1 {' z8 I* l+ s
image: postgres:13
- F0 A. R1 T+ ?$ U container_name: nocobase_db
# ]3 \% v5 ^( i& x# E( N environment:0 `* g3 h. s' `6 q: T" t; d* C6 s/ `
POSTGRES_USER: nocobase_user; {' V/ Q1 ~! ]" |& J
POSTGRES_PASSWORD: your_password
1 ~( q- H: w7 A0 x/ W* h POSTGRES_DB: nocobase
9 C- u. O, s) _' R& r ports:
% Z; Q3 ~7 e. K - "5432:5432"" N- h8 e5 N* B
```8 N: }# N& _# ?/ J4 O' l- s
- 启动 Docker 容器:# V5 `/ G7 A' g) I; A" u0 r
```bash$ q# V" f3 u1 r6 C
docker-compose up -d
" F x; b7 z) K3 ~2 W0 N4 A ```7 ]0 O( F/ X1 n j' ]8 ?( e
( i \8 E5 U2 l. K" e
#### 5.2 配置 HTTPS1 k n; u- N) N" ?# v
- 使用 Nginx 反向代理并配置 HTTPS:
: q, }5 W# @% C/ b# z ```nginx) J3 U$ @7 v8 B3 {+ c) U, A1 |
server {
, g: U+ i x. X Y& u listen 80;
/ p: c/ F6 a, O2 R server_name yourdomain.com;
2 l5 w* R- `# r return 301 https://$host$request_uri;8 u% q3 M8 a6 @9 Y; s2 O
}0 p: r! p/ V9 p5 M9 r
2 J8 }% h: x1 y5 S, N
server {9 A9 N: g- z) y+ d8 ]
listen 443 ssl;# G' d) c( ^- y
server_name yourdomain.com;
- ?$ S9 y7 ]2 s5 q4 T
- E2 I( G, E7 q( T$ v ssl_certificate /path/to/your/certificate.crt;
4 {4 Q8 f' _% p1 i/ J& r1 a ssl_certificate_key /path/to/your/private.key;
3 T8 E: @: j7 O1 b8 j: g7 C" }; S/ P' M, s4 }2 D1 @
location / {1 E! K4 h* a8 Q4 e5 O7 I3 k
proxy_pass http://localhost:3000;2 H( F; f3 }/ r9 }, I/ [( q0 S
proxy_set_header Host $host;
$ K) e% q$ n7 Y+ z6 s9 N( l* c proxy_set_header X-Real-IP $remote_addr;
# k/ N. ^* q; A+ h9 D$ f }
$ h Z% J# t3 o. F: H& x$ j }
6 [& Y3 m, ~3 ]* W9 B9 A ```& |( x* {0 U0 R& r* V: t
/ j; s. b. s, s" g---
# o6 |: Y9 L- K! B8 @6 Y
5 O# o8 k* y/ j+ |7 E### **6. 总结**
0 U% Y: b0 s/ A4 P通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|