|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。
( w. L3 t7 p& z: U! M! ?5 Y, V! j1 \" t& w- F' o5 g5 V; I
我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。
6 q; m/ u5 d# v [0 y; K1 e7 D, j4 x( T* e
---
- S: z% b+ q/ e. Z u K# o- Y) `( y" g8 G6 ~) S4 z8 t
### **1. 环境准备**2 M% t, e7 y" |' r4 T( B8 `/ d+ h
#### 1.1 服务器要求
1 B c0 n/ u7 k& M. ?5 I/ d9 o- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。- ^4 w5 e$ N# W( o8 y4 t
- **Node.js**:安装 Node.js v16.x 或更高版本。2 r0 [) E* G8 W9 Z
- **数据库**:PostgreSQL(推荐)或 MySQL。0 @/ x9 h/ K" y9 h8 ?. P( a* z
- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。% F1 N/ g& r0 t7 T
' q0 Q) |. s! Y2 A4 r+ X' T4 S#### 1.2 安装依赖8 e' Y4 l2 l9 U! {7 D+ i5 }
- 安装 Node.js 和 npm:
; a5 k \1 w4 {! s% L; N% B" P ```bash2 {9 }; \+ K( S$ a; j- ^. R
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -: \) E# q, l) B2 n
sudo apt-get install -y nodejs
( b7 }* L9 D# m2 a ```# F" a' b- L$ G2 T% b2 D0 }$ d
- 安装 PostgreSQL:
/ f+ M7 F6 c9 m' O/ H( u+ l( p ```bash
! z! H& t1 V. O! n$ I% { sudo apt-get install postgresql postgresql-contrib& D6 k$ p9 W: g; j( J
sudo systemctl start postgresql
4 z- m6 q# E2 u sudo systemctl enable postgresql
- o; l/ s8 F; W) Y" |1 L ```
- ]1 }9 H+ E2 P" D! M( c+ k+ S9 `: Z6 K, k4 d
---
s, I% i+ p: e: U
8 S+ p+ B2 @6 R! d! V. ^### **2. 安装 NocoBase**" X1 X9 f/ d8 D& A1 k
#### 2.1 下载 NocoBase! ?2 }, J' X1 T9 A* f
- 从 GitHub 克隆 NocoBase 仓库:- D+ C2 I$ g2 |. H& p4 N
```bash
/ m* B( }$ Z, k; _: B/ l6 j4 N- _4 Z. O7 X git clone https://github.com/nocobase/nocobase.git. k4 H& J1 R4 T, O* A; D8 y$ {
cd nocobase9 c" ]3 {6 L6 I0 J( g; r
```
- n7 W. g& A2 }1 S
- I1 W: }( a c0 c8 p9 ^" Y#### 2.2 安装依赖' a, o7 H. e* ^; g9 z: _% Z
- 安装项目依赖:; G$ ~+ E5 r N
```bash, b6 T I! c U. c9 u: i6 ]/ D
npm install
4 I# W T% s6 t' B' l; z7 m) t ```
. i/ @) V7 j; T8 [( m0 U1 @" ^9 @! {
#### 2.3 配置数据库9 L# a( F$ y6 A5 A
- 创建 PostgreSQL 数据库:
4 ]3 H! G# W5 x' H1 w ```bash
! l1 q# }. U7 } sudo -u postgres psql
5 h1 h1 u$ I$ x. Z; ]* r9 f" f CREATE DATABASE nocobase;
( h" l% Y- l/ u. O! o CREATE USER nocobase_user WITH PASSWORD 'your_password';
9 Z$ E3 |; A4 j2 [7 q: C! Q6 v& N GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;
% n; W, O1 s; t \q8 {7 L) V, \, q9 N$ C# r( m
```
0 a7 O+ z8 O* g/ f/ w/ h8 @- 修改 NocoBase 配置文件:" S& R# x! H, Z) C" H/ m
编辑 `config/config.json`,配置数据库连接信息:
& b' ?; f% V9 J+ Y9 R ```json
' \/ W# z8 ` M4 i6 o4 B+ M {" ~3 T" ?, T! ]9 t |
"database": {
+ D4 F6 G' h3 J4 p" I "dialect": "postgres",7 d8 V5 D- Q& s( s/ F# {5 O
"host": "localhost",
& G6 @! Q5 u; ^% u7 |8 w6 @ "port": 5432,
8 T3 ^+ R! d+ ^( S& O "username": "nocobase_user",
# n8 @+ N9 M& U5 A( g( F( x5 o "password": "your_password",
4 P+ M& ?$ H n2 ?: }( T "database": "nocobase"3 u; A1 V2 T' ]5 J8 u* F
}
+ F j8 b: W0 [2 }1 p, E- R }
+ R- D3 q2 z: z$ ?8 A ```
% H$ k, c: ~. y9 Y& k/ T$ R, R1 L2 j
#### 2.4 初始化数据库1 H) R- h3 n/ K1 I
- 运行数据库迁移脚本:
2 B+ S& ?) ]6 P; k1 c: ?2 j ```bash
3 \. `7 X" W8 x, G" y3 s$ U npm run db:migrate
5 V2 ^5 i" n' L/ \1 ^9 L ```
$ _" ~& |1 ] u8 H, s. X; M* G; Z/ Y+ I! y+ I& s
#### 2.5 启动 NocoBase% Q' Q6 J4 ?: g3 w
- 启动开发服务器:" k" C8 a( w' {5 e' o+ \/ m( B
```bash. f: N6 a+ |/ v* y) E
npm run start
4 \! o7 i5 \$ v9 C! @ ```
" j& N7 v+ ]$ m9 K; U- 访问 NocoBase:6 q6 y4 `# Y! i0 [! I) C9 u
打开浏览器,访问 `http://localhost:3000`,完成初始设置。9 }/ F4 F$ a8 p+ Z- n) i
1 n1 J: @; `1 U+ t) r4 O
---
8 d0 t/ W) ~: p' y3 @" k# A. w
# @1 p! I( k( k: _### **3. 集成 DeepSeek**
: o' X- {7 G$ `4 c6 {) `#### 3.1 创建 NocoBase 插件& Y, g1 s, T, x! _& p5 r7 S
- 使用 NocoBase CLI 创建插件:) w5 k$ m, l* L' A" |
```bash
" I6 c: J- T+ |' A K2 U* q# e npm run cli plugin:create deepseek-integration3 O8 m* R5 {" T" m1 y2 {
cd plugins/deepseek-integration
" N+ N& A' M0 U- ` ```
) T( ]. Z2 V- B% B2 ?- ?3 b8 J3 V' v, c' W# A6 u c4 A, h# D/ [ e
#### 3.2 安装 DeepSeek SDK
9 _+ R) z6 G- O1 H- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):0 J# [( j1 s6 K
```bash
* U! d; C3 d% l' g; y4 ] npm install deepseek-sdk7 S$ q$ q9 J8 X& G4 B) Z. \
```
1 }$ |/ ^' k* m; r
! u" Z6 h$ V+ b! l3 j#### 3.3 配置 DeepSeek API 密钥2 D% U6 v+ L3 [3 C" j
- 在插件配置文件中添加 DeepSeek API 密钥:" [* C5 M/ R. ?
编辑 `plugins/deepseek-integration/config/config.json`:
+ n/ l2 q S- ?+ Z. B ```json. V ], r- H$ T
{! T9 }4 {1 S1 K& d
"deepseek": {( X L4 P7 |0 _9 \
"apiKey": "your_deepseek_api_key"& K j. B! k6 K* x5 p
}
|2 _7 A2 S$ s& x6 f }
6 Z0 @1 Z% H4 Z! M% B3 u5 y: Z ```
/ P7 `. y6 A6 T: k9 }5 @% B6 Z d4 l. N) c/ I5 c: V
#### 3.4 实现 DeepSeek 服务" s! ]# Z. x3 d* x6 k# ^
- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:
% ^. j$ W. o$ G- _: }' L0 X ```javascript2 a; s- m3 \; M& Z) J
const DeepSeek = require('deepseek-sdk');
- W# L) N. d" n+ |+ W; A8 S
1 j3 X% h0 x' ]7 K4 e9 l% c class DeepSeekService {
" l$ a K7 R4 U constructor(apiKey) {, s- ~- D4 k x; {
this.deepseek = new DeepSeek(apiKey);, g, P% x4 h! s4 }
}
5 n- ^5 V" c. d6 A$ H
6 T. T1 i0 L9 x, y' p7 z async query(prompt) {
( x5 o# F% I) n z const response = await this.deepseek.complete({% B9 a; j$ O4 w* w5 O
prompt: prompt,
! X9 n# \3 x0 ?2 s& J+ ? max_tokens: 150
( [% D) N/ P4 a2 g1 ^$ L });0 \9 ]5 }. d+ ?9 z1 x
return response.choices[0].text.trim();
* j2 u% q6 ~( m$ i+ e8 Y9 F; k }4 X2 D+ `% r& I7 h L
}
2 ~& s p! s3 }2 w8 v! I0 r6 ?2 e% V' e$ Q
module.exports = DeepSeekService;
" Q% z. |3 o7 N! X$ @0 {: c ```* m' Z6 |* b. ^& f4 l1 l! ~
. H9 L( V* r+ v. r$ ?- ?#### 3.5 创建 API 路由: k* W8 y7 r X# o
- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:+ J+ q. M% V. @' G& Y
```javascript2 a+ [% | u8 C" ?* q+ B
const express = require('express');' d5 e2 j8 G8 a1 v# h
const DeepSeekService = require('../services/deepseekService');
) G$ Q6 ^0 K5 `- N const router = express.Router();
+ P1 M# }, H% Z const config = require('config');6 g4 o5 g! m% E, R- s; L8 F% X
' s7 T' x4 c( i; d" t' D const deepseekService = new DeepSeekService(config.deepseek.apiKey);" w- R" t$ R1 l7 h0 r
8 R3 {# f3 [9 x" W4 f/ \: \8 [$ d router.post('/query', async (req, res) => { y0 ] f; I) X$ ], a8 e# F; ?
const { prompt } = req.body;' M/ r$ O& [/ O! x) T m3 S
try {
) @" P5 v5 z7 r+ e# Q4 k. o2 j const result = await deepseekService.query(prompt);
1 R, u# Y) D2 O8 V3 A res.json({ success: true, result });2 ?- A' I2 g% X" v& J) M/ s
} catch (error) {
% R# F! w+ O/ t- ~ res.status(500).json({ success: false, error: error.message });# x1 ^- f. a- `' `
}' C1 y) k8 U, T5 e; \
});% {7 B: L. w$ g; c
" N' R$ o: ^( G, _4 p3 D module.exports = router;
; b0 W$ B9 W2 u) I; h" @! Y ```; G3 z' W+ ~0 K, g6 O( a) |6 \0 l' |% L, T
3 i( u, I0 \( k% V$ D: _#### 3.6 注册插件% h/ Y- s+ I% U6 w! a
- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:
' s7 f2 j# b O+ U% t! o" d( ? ```javascript
: K! O: ^% M4 ]4 y) L const deepseekRoutes = require('./routes/deepseekRoutes');
+ U% l- x& n( d4 |* F6 M; D; f2 t$ k* v; O, H
module.exports = function(app) {2 {6 m2 F% K8 p/ p' y3 `
app.use('/api/deepseek', deepseekRoutes);$ j! t3 D" o8 ]' C, u+ P
};
. l1 k+ r1 T- k6 \3 v% \* R ```
. H1 t2 v/ q, n7 m: n6 O8 f) w6 x$ n! x4 M
---
$ {2 A/ r6 ?" A( G
$ H# c/ A- ?" i9 n- @ x! R### **4. 测试集成**
; g! r$ O9 f# n b. l#### 4.1 启动 NocoBase
3 T2 ]2 i/ Z+ V3 U" F- 启动 NocoBase:5 Q5 T' k3 \" K8 ^3 l
```bash
4 x4 g7 W- T7 e8 ? npm run start, U% y$ a1 z+ y) ]$ ^0 q
```0 e) H% r* j# B. B5 X ^. f9 {9 S
" A6 A. N8 l3 d g/ A/ J
#### 4.2 测试 DeepSeek API1 D2 u, D# l! N& a5 ~6 H' K) V3 k0 _
- 使用 `curl` 或 Postman 测试 API:) O0 W7 f q9 L$ h& j8 W1 t9 d
```bash3 X3 \9 M* o; F" Z I: G! \
curl -X POST http://localhost:3000/api/deepseek/query \9 z* o& [& i5 D V: V& \$ t
-H "Content-Type: application/json" \8 v# V! ?1 V& B7 \0 y# w
-d '{"prompt": "显示最近三个月联系过的客户"}'* T6 n8 \5 U8 [7 A# e- R
```- A; V A. A! f5 v% \
; w% U. X+ G& _4 y---
, M! S% _, J; N! l) {4 l
/ N" V& u7 @& s7 U9 o7 p& p### **5. 部署到生产环境**, U9 Q0 c* _9 j2 X/ U& B
#### 5.1 使用 Docker 部署
A5 L/ L# B K w- 创建 `docker-compose.yml` 文件:/ c* F2 W' k$ `- i8 a! Y6 Z- Z" |
```yaml2 A! s' f8 F/ |
version: '3'! b+ h6 u/ ]3 D% a8 y: Q2 D8 J* E
services:
. |3 S* W: i9 z7 e3 ` app:
, z5 g+ r. _' j& r0 Z$ k7 l image: node:16
! s/ _% A5 i" E& e$ R container_name: nocobase! F2 z3 y2 F: X0 a
working_dir: /app( M% z3 `3 X$ \& p* `# c5 e* ^7 Y# z; W
volumes:- l5 G! m. n" t+ ^# l) N' G
- .:/app, a) W2 h# @, N1 ^- q4 d
ports:( }- }. Y2 K1 k* ^& C+ e5 C
- "3000:3000"+ G3 A4 j- M7 L: i' H
environment:8 {8 H" ~& L! Z+ o5 r$ ^
- NODE_ENV=production
2 S$ i8 ~: @6 e command: npm run start6 W. L* v8 x+ H6 H
db:
" s) {4 y' g0 K4 P! x image: postgres:13
6 M4 G9 I5 n6 Q( Y0 b: _$ r container_name: nocobase_db
g/ {$ d& Y" s0 O( r; q2 T environment:
1 |. p( ?1 R: }2 K POSTGRES_USER: nocobase_user. l4 w3 a% t6 }& x i( m# L' p1 V2 w
POSTGRES_PASSWORD: your_password
/ h g& _) b* z8 y1 R, l+ i" [ POSTGRES_DB: nocobase6 K. I8 t5 a S4 G7 k3 d* C
ports:1 E2 c+ v |/ u) A( W+ S0 [) y M
- "5432:5432"
4 X Z8 `5 }5 R ```9 O) `5 k/ \, C" v9 _+ j' L9 T! N
- 启动 Docker 容器:3 x- N) x$ ~: `- `5 ]
```bash, [' b+ J% b' w5 d7 d
docker-compose up -d
4 P, B0 `6 c/ j! G% u7 I ```
2 d' _' i1 F* ~/ R9 K1 P1 \# c# J% [" ]2 B' v" u
#### 5.2 配置 HTTPS+ h) z/ K- |6 {
- 使用 Nginx 反向代理并配置 HTTPS:! P6 q( H/ ^% C" H& r) M. l
```nginx
! N8 A0 P( I$ N server {5 S- [ m# E9 ^$ }/ m6 E! b, `
listen 80;- G: O( R+ d+ O9 C# a j6 L( B$ J
server_name yourdomain.com;
0 [& V+ V8 @. { return 301 https://$host$request_uri;6 ~, g+ w- v8 K0 C' O: y( ?
}$ r( [" ^& ]0 ?! L3 t% f S( @8 P% W
, e6 n5 ?& n. m
server {- V. @1 v/ I+ ^: ]
listen 443 ssl;
& s% \) D$ W3 m' i: o" K" B( q: x server_name yourdomain.com;
6 K# {2 R% C1 s( _! q f' e
# O" h2 A, r9 t' X) |' q8 }! ?, t ssl_certificate /path/to/your/certificate.crt;) D6 J5 }0 k: h
ssl_certificate_key /path/to/your/private.key;; k1 R& n' Z+ ]+ e. S! J" e2 O
! w8 Z4 `" e. @/ G1 R
location / {
3 P$ i6 F7 e1 b5 _$ J proxy_pass http://localhost:3000;
1 f2 P* p4 {$ g5 } proxy_set_header Host $host;" H4 _% U1 D+ Y9 g6 V3 L$ L
proxy_set_header X-Real-IP $remote_addr;
6 H" e1 [3 J4 b) v3 g6 j }9 j2 B: }& R) v- n
}
4 G4 D8 b; W& E: H2 s ```* C9 E, ~( ~3 o# C a% j
8 b0 j2 m0 u' c7 J! m---
7 |( b+ a4 e' Y$ ^% ?4 F
$ b& R# K' h u% |* n) K" U* c### **6. 总结**. x3 p7 {( h& g& t2 Z, O
通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|