|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。
9 r' r/ K. @8 F' ]4 J6 i! F
. p3 ]7 C1 @. K2 D我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。* ?. `8 ~' g/ V4 A- K& R/ \* c# R
: `" k/ m- @" M1 v. u---
- ]; Y5 b+ W$ Z4 B+ l: C3 M, ~
S$ O7 ?0 f1 ~### **1. 环境准备**) ]3 F& j% Y8 ?6 ]0 M" }/ Z
#### 1.1 服务器要求
1 ^* s, I; g, I+ |! T# _( ]/ X- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。+ F! X( e! ~6 r8 y+ S
- **Node.js**:安装 Node.js v16.x 或更高版本。
, m$ R5 U% Z- s5 Z8 j* F) c- **数据库**:PostgreSQL(推荐)或 MySQL。
8 ~7 e, x& Z# m4 V9 S4 l9 t- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。3 i; R2 a! h+ e, E$ Z& x9 S
: b/ V i0 B" ?6 z8 j9 y* Z2 A#### 1.2 安装依赖$ d& E) n+ G& C; i/ A9 L! K6 _
- 安装 Node.js 和 npm:; g& J/ f. O6 q: O% l
```bash
$ M6 ]% l, L! |- Y curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - Z* z/ D# v2 x- _, J) ?
sudo apt-get install -y nodejs/ Z; D1 b( G" {+ p& V4 ?
```
: m3 F$ L# J3 g5 E- 安装 PostgreSQL:/ u [( u0 ?, a& i7 ?
```bash
* h: ?- S1 R$ ^% ?! u, a! | sudo apt-get install postgresql postgresql-contrib. [$ R2 t! p$ F+ |% h( x
sudo systemctl start postgresql8 |! A. m" ]+ ?% y0 r. O ]5 g: G
sudo systemctl enable postgresql" ^" {3 w$ c8 r2 r @% m
```4 X& H' F1 n* R$ z- n
- W; `1 t) }$ W% P0 H* F---
2 H/ P. D" D D) k. x* z4 q$ U' r; i: S; d% E5 ]# h) Y. ^/ j0 Q
### **2. 安装 NocoBase**: l0 z8 w* |. Y. L4 E8 D
#### 2.1 下载 NocoBase
6 a& X Q7 z) p; t5 Q' d$ G- 从 GitHub 克隆 NocoBase 仓库:& K$ w( r/ n. H7 L v" h
```bash# o& m* v$ `1 y. |* h, p$ V2 G
git clone https://github.com/nocobase/nocobase.git( L4 v' i) d9 W) p" O( J/ c
cd nocobase
" \- J' R; q' }9 I ```0 g$ F' i/ o" m. H1 @& Y Q
; V8 \# h0 T$ B$ v1 l#### 2.2 安装依赖) U7 Q. ?* k- h: p' s
- 安装项目依赖:
# X' _( |& P% D; _# m2 f9 ^ ```bash {8 `* y# N) W. K
npm install
9 ^, M; ]- V9 R+ q6 y% V ```1 k$ v v. z) N# I$ ~) R
) Z; ~$ c7 P2 R" K% ~! v3 V#### 2.3 配置数据库
k+ f {3 [5 T! H( q; a- 创建 PostgreSQL 数据库:0 H& a: `! y( B% R
```bash
3 \7 E) L# V t% Q+ r sudo -u postgres psql, O# \) @* }% [9 b8 U2 z5 S
CREATE DATABASE nocobase;
% ^! Y4 P- F6 r. i6 ~2 U$ D CREATE USER nocobase_user WITH PASSWORD 'your_password';" P5 _3 I% Q" ?# M8 b" Y
GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;# _$ M8 B/ M( s* p, n
\q/ ~" G- c( H/ S) Y
```
# A6 N5 C/ v9 b/ F8 b" I! p; H( ~- 修改 NocoBase 配置文件:
' C5 Z, F4 U$ ] 编辑 `config/config.json`,配置数据库连接信息:1 R' M8 `1 a8 \1 ]% ]) a
```json7 `; s8 g- B" k3 w
{0 V/ q- K" m1 ~6 ?& L% |/ F. q" S
"database": {3 ]: B% |& A6 ?
"dialect": "postgres",
: C! Z3 t. o8 m4 S' A$ k, T "host": "localhost",
) M2 V+ Y0 x9 z "port": 5432,2 x: B, Z2 T: j; _: I# r
"username": "nocobase_user",/ R) O$ f$ Z* @9 f3 u0 p) U, G9 u
"password": "your_password",
5 F. u/ N1 Y- ?5 o I9 S4 R$ } "database": "nocobase"% I) {3 C6 K z1 e: y" y
}0 v2 Y5 O# g* L, d% ]/ S
}
}: S' G0 Y: N; I( a# x& d ```
; N( W1 N0 t6 R4 P. M/ I' t6 }) j% F+ ?' h
#### 2.4 初始化数据库
6 o# l- G _. h1 y- 运行数据库迁移脚本:
w; s2 V2 H& M+ x2 A# o& d ```bash+ A7 d+ U; n( h& l% B
npm run db:migrate
) Z8 m0 F" A# h" } V ```4 s) p$ L, G# H: N0 p3 D) d2 H
2 U9 _7 U- G9 n3 U$ m! K
#### 2.5 启动 NocoBase! o \4 L4 O0 J( C. W* L
- 启动开发服务器:
! m* K* E7 q; E7 W7 u% N- z ```bash" e9 O8 ` j' n1 J( b1 l
npm run start3 T# C, Q& [& j$ Z. H+ p
```
1 D; }( E: L0 [) ~6 F- 访问 NocoBase:
/ v1 |0 r0 A5 `# v 打开浏览器,访问 `http://localhost:3000`,完成初始设置。: W( \; x( b3 H9 D" h: t
& G- [/ H3 U* h--- k( v, M8 ?6 F8 Z0 k
% ]8 H4 c- Y5 g### **3. 集成 DeepSeek**' j% E! d, V6 q4 x0 v6 p0 W
#### 3.1 创建 NocoBase 插件* ]! g9 b9 I. Y! W3 @5 U
- 使用 NocoBase CLI 创建插件:1 ]* m' e: ?7 A, f- K: o4 p0 V
```bash
! K& T+ X* b% y" z6 l8 p npm run cli plugin:create deepseek-integration/ x3 v, N7 u- Y4 Y4 a5 e! P/ M
cd plugins/deepseek-integration& T7 ^2 Z" x; f* Q) }5 k
```
5 f, f6 Q+ p$ D$ V o
1 d8 P D9 L0 l0 S9 i1 H; b* t#### 3.2 安装 DeepSeek SDK$ w7 q* F2 M* p9 w6 N- d/ O d
- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):$ a3 {# k. u& d# S
```bash% v' [& D. v1 M
npm install deepseek-sdk
* O0 l" F" a+ p3 N6 N$ Z ```3 G5 m2 l9 C1 t+ x! K
- V5 V1 Q5 {( @9 _5 D, f0 e/ ^
#### 3.3 配置 DeepSeek API 密钥1 k2 S& W( }* d9 d% @ V, N/ I b. K
- 在插件配置文件中添加 DeepSeek API 密钥:
6 U b/ D- K9 m V) |! R U- Y) i& i4 q 编辑 `plugins/deepseek-integration/config/config.json`:
0 [" H4 p" ]% ^1 d% V; k ```json: R- z% Y5 P& F& V# E
{
/ M8 o ?8 T0 S; q6 b "deepseek": {
* ~) C1 ]2 Q( N" j4 w- T "apiKey": "your_deepseek_api_key"
1 c/ _0 b1 ]- |3 |. W! n }# N5 t& i/ r) @, ]- Q/ c
}& M# I7 j5 D- v6 N" G
```+ g$ S2 ]8 h4 G
3 ^, a% [/ ?- k o#### 3.4 实现 DeepSeek 服务
' Q8 k/ a- ]/ Z' f: [- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:
6 C& H* ~+ r( C! S$ {; m ```javascript7 D1 d5 ?( S5 ` q5 U+ `
const DeepSeek = require('deepseek-sdk'); s, M b; U) M V2 e# A. `
& ~$ ?* j4 q: D d, }# q3 r
class DeepSeekService {
! n4 K, y3 p% n8 w$ E2 l constructor(apiKey) {
# a% y5 @+ a3 v) K, K5 { this.deepseek = new DeepSeek(apiKey);
; l$ C$ _/ W& B) J& J3 \3 ^ }
6 }5 l& _* t+ P: F- `2 |" F6 Y! W5 _ ]0 O+ }: \! @- P
async query(prompt) {
0 n& }1 ?% j- J1 d' C6 Z4 _ const response = await this.deepseek.complete({* P9 R2 D+ H7 W8 Z, ~
prompt: prompt,
+ H& q7 @8 O- D$ } g max_tokens: 150) A( e3 S$ ^3 U* c
});+ b2 y- L0 e& r- ~
return response.choices[0].text.trim();5 \) n, J7 h7 g
}6 ?2 D! R2 I0 [5 X8 f
}% F, K3 y, M5 y5 o7 ^% l0 o
; P# W' z. V& B8 H0 w. ? module.exports = DeepSeekService;. a* {) c' y2 D% `
```
4 c8 |, N1 E0 c1 n% _- G4 Y
7 f, S0 |2 l' F1 a+ b. Y h, E#### 3.5 创建 API 路由
6 ^: N6 O( ]6 G/ q, m- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:; ^ N! x, f8 p
```javascript
: \4 s. L" s+ k. W# h q const express = require('express');
+ l0 y% g& I. d: |6 W" w0 t7 H const DeepSeekService = require('../services/deepseekService');
: l6 L: ?% ~1 k2 t const router = express.Router();
4 _- S% |- \9 ?8 i) ~8 c# Q const config = require('config');
u( t! ^9 U2 I5 N- D& M5 F
y) T. ]2 U( R# J; c4 j7 I/ \ const deepseekService = new DeepSeekService(config.deepseek.apiKey);4 `% I# u6 H1 p4 n2 M& M
4 |8 N2 U/ E9 W' ?3 G router.post('/query', async (req, res) => {3 J: q- s+ J7 y1 U( d$ S! s
const { prompt } = req.body;; K; c0 `% G% C d7 y
try {
" a6 W& W+ r( X- g) \7 S const result = await deepseekService.query(prompt);3 o1 [/ a a2 E6 w& Q; Y
res.json({ success: true, result });
& f% D# Z: `( ^: C } catch (error) {9 R6 b7 H; R! p; b$ [8 E
res.status(500).json({ success: false, error: error.message });
! K3 Q! m% a- R; I# L& A }# F9 [" q# R1 ^
});
% \6 ~ F6 h9 f, |/ V% o5 C4 _2 Y( A4 ?8 H( z- }
module.exports = router;) @ f, F4 h, c' ^
```) m4 \% ~4 l) m! H4 { _
( G- n* p+ K- F# w \# k2 h
#### 3.6 注册插件
: s; v# d2 W( s4 h8 {- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:4 B- b7 I' u9 E9 v
```javascript: }9 k2 v. g: T9 N4 @
const deepseekRoutes = require('./routes/deepseekRoutes');( n# Q) Q7 x* K5 N& j" X6 q
0 j T& ?# ` r1 ~' m
module.exports = function(app) {' Q$ _3 d3 z# I
app.use('/api/deepseek', deepseekRoutes);+ g, |5 z2 |. J) ^8 H2 D; R
};1 X! l9 B2 x2 R. p7 t
```
/ Z9 C8 J4 L+ W# f9 d
! V& D* y, p. d---( z$ W, B* _' m4 q
0 c7 L$ c4 y5 o: g9 n. @" W### **4. 测试集成**
. F& W4 T# I/ G# w3 ^& `#### 4.1 启动 NocoBase
5 c. o2 j: m) O1 c1 h/ O- 启动 NocoBase:
: n2 F7 K/ t; |* A5 G$ i ```bash
9 h! y7 ~- ]; e* e; I0 }) d& g3 p npm run start; x7 N4 p* ?. s
```( K; s3 _! B5 i$ z. \7 b
, g- I% |& c8 c( b$ Q; ]9 b* v
#### 4.2 测试 DeepSeek API2 Z/ J% `! k9 ]/ J- w0 \) ?
- 使用 `curl` 或 Postman 测试 API:
1 M0 }8 T0 _* P2 c) s ```bash5 N( b$ h2 z2 j) Z
curl -X POST http://localhost:3000/api/deepseek/query \; U" E; _) g3 p; [) R: `. r- T. f
-H "Content-Type: application/json" \
8 w, v! W8 t* {( V' T7 Z -d '{"prompt": "显示最近三个月联系过的客户"}'1 M5 |" g) `! z4 \( \& J/ }1 n9 |9 Z
```
/ Z6 q( Y- @8 f. J: e
! V% o \( _& ?6 d2 s; a Y$ b' v3 u---
+ I Z" ^! ?1 V: `7 x
/ F$ G* K% n/ u, E! d1 [; u### **5. 部署到生产环境**& v5 q# T$ W+ X) V
#### 5.1 使用 Docker 部署
) b3 N2 I: j$ I( @. A" u0 i- 创建 `docker-compose.yml` 文件:3 i9 L5 m% S+ a5 v# X
```yaml
% }$ x$ u+ p# m$ h' i7 F6 @ version: '3'
# R# f$ Y! I8 v1 X# { services:
- {/ y( C s2 T M app:& ~9 X% W( U2 `: q
image: node:16
@2 {8 ` t# [* J5 T0 C5 S container_name: nocobase }$ {, {( G7 Z5 X5 L6 f
working_dir: /app) x" T5 j6 @$ Z4 l; ^
volumes:
* F2 J7 V, j+ r0 R& ]1 @: x+ @ - .:/app
- f4 M- Y) ^ M; B+ I# \ ports:9 Q/ @/ S' ]" ]' o
- "3000:3000"
( W% M* W3 P6 O% H environment:( g- T( Y6 q- M$ M' e
- NODE_ENV=production
5 P3 O; a2 L% v9 p# Y6 f- C+ P command: npm run start
( ]* K4 m! J4 n& `+ Z! V& y5 n/ f2 g db:
1 @; ?( P- U- y image: postgres:13 q+ |, ?1 z9 R* R; K
container_name: nocobase_db& c: }1 J$ j% D$ @. A
environment:: C+ H: C: L: A4 o* C
POSTGRES_USER: nocobase_user; g0 j5 ?& ~ I' {! T& j
POSTGRES_PASSWORD: your_password
3 t8 w8 H! b+ c8 T* U0 b$ O POSTGRES_DB: nocobase
0 z* B6 N: y! R3 ^$ e( e ports:
) B) A; ^- P! I, F - "5432:5432"
5 E1 N8 I6 s0 p7 N; J ```
0 S; P _" b' `3 q7 |- 启动 Docker 容器:1 A& C, J( Z+ E/ W% Y9 B W
```bash
- e6 e: V; \- U9 B4 g# @ docker-compose up -d
( H. b! Y; t6 T* m( w+ I0 I ```
: t* h4 J( [% |& ] X3 H6 q( N
9 \7 _: ?0 L$ F: O$ D+ ]0 V#### 5.2 配置 HTTPS
( j. G- p- }/ q- z# r0 l _- 使用 Nginx 反向代理并配置 HTTPS:4 d l# f8 i( c; q# c# |5 i" k
```nginx. t! m, {) Z; R% Q: {+ g5 S( y
server {
# w, V$ ^/ f2 S listen 80;: {3 q) n! H. ~9 K" w" P# W
server_name yourdomain.com;# V: ]* ^; i2 `3 M; A' d
return 301 https://$host$request_uri;
0 ^" I0 h- e S b" i7 B, r5 n }) Q0 k8 I& O/ \ x
; ~7 R! C' g" V7 {( ^+ S
server {; b0 ~" |8 X0 `. y
listen 443 ssl;
0 o, z- p, M% @. g- n6 V3 a! l4 v server_name yourdomain.com; S5 n: z" K6 ?; b
( g8 E: O8 B5 l3 [3 b% U6 O- e
ssl_certificate /path/to/your/certificate.crt;2 y) L( \+ p# o) k
ssl_certificate_key /path/to/your/private.key; d7 F" ]7 w# ~6 b
$ D" X/ h; i; G' E# O3 G
location / {5 c, q( y- b* m9 Z1 O* z2 U* f- B
proxy_pass http://localhost:3000;. E) T( U/ ~4 p0 w& s- W
proxy_set_header Host $host;
* r3 O- h) O/ J A& d+ A& b proxy_set_header X-Real-IP $remote_addr;/ H' C$ A. e% l4 \$ V8 x- \
}2 |+ M* o0 o& [5 r
}2 Q- {$ t P( u- s2 Y0 G% P
```: F8 U- \; m. F0 Z
$ B% [' u0 w C+ q$ y---
: S+ k S# [4 `) b) s6 n1 o: m ^% _/ h& o# g/ }, L
### **6. 总结*** a! j7 ~* X5 c! y5 e t
通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|