|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。8 ~2 x1 U, Q( S
& u$ K: {" f8 o; }' q6 Q我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。
; _, k; a: C" H5 W E' |- d6 d$ D# l+ g# |# l' R7 m8 a; y/ m
---
! ^0 Q! ^% l( n) d4 J' M$ ]
) [7 L5 l# E1 u### **1. 环境准备**
( ^# y0 P- n' A7 k#### 1.1 服务器要求
; Q. }, F( g1 V2 y) q( b0 D- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。8 B8 ` R6 [: H- p) P
- **Node.js**:安装 Node.js v16.x 或更高版本。
, p' C$ l- d: ?* V- **数据库**:PostgreSQL(推荐)或 MySQL。
, c, d( r* y h4 M- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。
3 K1 Q& F( P1 n2 G; Z
# z5 x- U+ [/ l7 g#### 1.2 安装依赖
) k- z# O8 E1 `- 安装 Node.js 和 npm:% }/ C+ S0 h2 h
```bash
6 J8 m n5 ^, L4 l ] Q3 \' c curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -# |# J1 r3 D/ n8 E/ w
sudo apt-get install -y nodejs) D, v9 v& l% ]/ m- I
```
0 ^" J3 ]+ x+ T1 x- 安装 PostgreSQL:$ R2 o1 b! z( k# K) j
```bash* L/ q8 U! M$ K4 Y, o4 ~. Z7 f: ~
sudo apt-get install postgresql postgresql-contrib
, ? y# A0 ~3 N" w) H* v4 s+ v& f sudo systemctl start postgresql
, I% L' X% K8 K0 R3 @ sudo systemctl enable postgresql" ?' F) E0 X6 H
```
8 i0 P2 W7 Z5 m& F$ C3 T) z. D* O, a' E
/ M. }. q! t5 z$ E2 I' J2 Q---
3 O7 y W1 ?" R; G; X, v4 ~4 ^8 n( T
9 x1 {( S. x6 R5 h* o& x( u### **2. 安装 NocoBase**
7 ]' }3 @& F8 d n#### 2.1 下载 NocoBase, S. B0 V' U. o1 y4 R
- 从 GitHub 克隆 NocoBase 仓库:- h' Y/ D, W2 E+ g8 @* B
```bash6 y, [0 Z: S9 r1 z! }' W# @
git clone https://github.com/nocobase/nocobase.git
% r; X" Z( |7 n+ |2 R) C: W' Z cd nocobase' Y. h/ \2 ]% Y' @# x2 b
```/ ~; i$ W% k" {( |3 A% e; w
2 S. O& M1 E6 Q+ K g; B$ ]/ d#### 2.2 安装依赖
( m _. _# n" T: {. t* V9 M- 安装项目依赖:' n# }& ?& Y( @) ]: l" L, u) \
```bash9 A" @7 N. Q! J: _7 [. t& v
npm install3 ^, l5 o& K* _6 ]6 F0 f
```( h9 {' `+ r: _) z/ Y) r* v) o
9 k" d7 O) A( C: @) C
#### 2.3 配置数据库
' ~0 D5 ]% g8 s+ P- 创建 PostgreSQL 数据库:
# b. _2 p$ T0 P9 c. k) h ```bash
! N2 X4 w5 y0 K7 |0 g: t sudo -u postgres psql9 Q }$ x/ R8 m+ [. @
CREATE DATABASE nocobase;
: d0 |9 L e6 K; S" f8 ~- Y/ r! T, J CREATE USER nocobase_user WITH PASSWORD 'your_password';: _/ H7 f# ~4 Z) U( w' G6 C: B
GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;4 e1 S# w. ^' r2 I; ^1 s6 s
\q6 J( ]1 _4 Q* L9 u
```
6 ^7 g/ Q( u3 `/ Q5 Q- 修改 NocoBase 配置文件:
6 T: k2 ?4 m6 C. f# E) Q 编辑 `config/config.json`,配置数据库连接信息:, Z4 n: O! J. {* w$ K! X- o5 y
```json+ w& c+ F# ~7 z2 E2 t; F
{$ }. c% P" l, Q
"database": {
' r% J( |0 J: m! v/ ~. s" J8 _2 \4 w "dialect": "postgres",
- P& v% G$ r: b O& o7 k# ] "host": "localhost",1 t- N/ a+ j$ X" ?& [! V
"port": 5432,# W/ v9 }$ A( Z: ?. I
"username": "nocobase_user",
0 B+ P9 u6 Y+ G8 M9 w$ ? "password": "your_password",
4 \6 d2 Y* F/ v8 f" T "database": "nocobase"
( K w& W8 V4 f0 W7 g. r1 @( k }; ^! P$ M. x6 _" N2 F, b
}
& N! D- `0 P- O; z9 a* w4 }# ? ```3 s" S8 [0 ?4 v- H- E% I
5 O/ ^, E1 I( z V% o/ T
#### 2.4 初始化数据库
1 X' Y. Z" |4 K/ l! }0 x- 运行数据库迁移脚本:
9 p. f! V% ^, w }) B3 p$ j8 J+ Y* @ ```bash& t5 e: u# u2 ]( i: P- w$ C
npm run db:migrate/ A8 @* |& ]& F- [( t0 S# B
```! m$ _* x& `& v2 U. i
# O& P0 }2 u2 S4 O% K: R$ g#### 2.5 启动 NocoBase
+ f# @2 p6 g8 l# Z9 P4 \) h& Y- 启动开发服务器:
& B& o9 N; J( N" I4 W; R ```bash/ a0 u3 j1 [ }; V0 l* u8 P/ ]
npm run start% s8 g3 z6 m' N v* `4 [- z
```! m2 D. j2 x" W$ n% l
- 访问 NocoBase:0 q! y# o; E' i$ F
打开浏览器,访问 `http://localhost:3000`,完成初始设置。# c+ t# E5 h1 [0 o
/ ~, n. X+ P* |---: r: N l6 Q& w9 c
) n6 B9 q3 j9 X5 q7 s8 H
### **3. 集成 DeepSeek**( W) N1 W. D4 t2 o4 J' @1 [
#### 3.1 创建 NocoBase 插件$ ~# O# Q7 B+ u' ]
- 使用 NocoBase CLI 创建插件:
+ L& w; M* |# r8 R0 \( s. ^- J! ^8 R ```bash
* {6 F' @- @6 k+ Z: i' q, a/ b# Z npm run cli plugin:create deepseek-integration0 [) j# r9 T' p6 Z1 z: }1 a* \
cd plugins/deepseek-integration5 h/ a: H8 z% K3 x
```6 q2 L, S5 A X$ _% B+ W
% C5 |: h& U8 x4 ]& ~, O- e5 F
#### 3.2 安装 DeepSeek SDK" X9 n, T' q% ?1 A; B9 A
- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):
$ M( k, R8 ]3 {$ D5 M6 g9 C- C5 j ```bash- [; X$ Y" I( r ^4 Q! ~2 _" k: I f
npm install deepseek-sdk7 ^& V2 ~7 v9 e2 v
```1 W& _9 C! k7 s: w& H
, [: C3 u% u+ `#### 3.3 配置 DeepSeek API 密钥
, y0 D+ e5 {5 h& r& \ x8 @- 在插件配置文件中添加 DeepSeek API 密钥:
6 v* h, v7 ]$ r/ u 编辑 `plugins/deepseek-integration/config/config.json`:
$ Y0 q/ [/ s& `! h- E6 P$ Z ```json
4 a; E6 N# R2 B, q7 d {- Y5 c! C& x/ w; R% X
"deepseek": {
d/ |7 l# q+ X! H$ I4 G "apiKey": "your_deepseek_api_key"& k) K0 z" b: b# R
}
i+ y3 Q, V0 j$ Y }2 x" r! z+ ^" o, n! x1 F t
```5 B; ^( S. r2 g9 x
# s# N# b7 O9 a8 b: {#### 3.4 实现 DeepSeek 服务
( r# |: x, M3 _4 @8 \% |% J; q0 @ k% {- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:+ c; V" P7 b ]9 s o2 {
```javascript
3 [# q' z1 C/ l- e3 N( U4 d& b const DeepSeek = require('deepseek-sdk');
+ R" ]: k& f `& F! m" | M! V, c' v$ M) J* n
class DeepSeekService {4 _3 \7 J7 S( q( A `$ r8 j2 u7 f
constructor(apiKey) {
1 a( B& O- L. d) u this.deepseek = new DeepSeek(apiKey);
# ^3 D( O1 z! f. X) `/ a; H* E }+ C9 X' W. \. q8 W& I0 j4 ^
$ i/ Q' v# t" U2 a+ O
async query(prompt) {
4 z# q9 l. Q2 D/ |, n$ J const response = await this.deepseek.complete({
9 ]! O: T- `/ N( { prompt: prompt,
W$ m4 O8 S" Y2 z; ~2 n max_tokens: 1504 f3 ^, g( i& P1 [4 {
});7 z$ F1 l' U+ R. T# T
return response.choices[0].text.trim();0 y# W( s. y7 G5 H' O
}6 x7 V3 Z% M. t) d4 Z3 {
}
! ]+ }, H& K" P9 O
3 l- g+ Y. {0 N module.exports = DeepSeekService;. R9 |3 R1 ?0 `6 e
```
' `' e0 o+ x! ]) n
9 P" P# R5 S9 w4 y) [#### 3.5 创建 API 路由* @( }% G4 W6 B; u+ Y* y7 s' M/ m
- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:6 f% _* C" W; _2 }- m6 k
```javascript
5 e. w5 K# c, u const express = require('express');2 e3 ?. @% R8 \, z
const DeepSeekService = require('../services/deepseekService');
* g1 l `$ R4 `0 K% } P* k, O const router = express.Router();
9 Q, ?# _" H1 q. M const config = require('config');& B$ f h- O, d+ |5 u4 U
. P$ H6 Y) c0 k const deepseekService = new DeepSeekService(config.deepseek.apiKey);) ^+ P/ p, X o1 u2 e# A1 U6 l
+ r) e! S9 j& E! J& C( U! p
router.post('/query', async (req, res) => {
- B' j3 _2 U" a4 r7 n; O const { prompt } = req.body;
# i+ v+ i* Y# P$ v6 N% ]/ `9 }9 z) x: a try {
$ z* \2 r# {; d8 i { const result = await deepseekService.query(prompt);
a" y1 d/ b; L. t; b, d res.json({ success: true, result });' b T n7 l9 y6 e
} catch (error) {. \ \. V- J7 m- d1 }
res.status(500).json({ success: false, error: error.message });
1 p- ^* s |1 Q T3 H4 y4 z }1 |0 u. H" K1 ~/ f2 [! F
});
- A! R+ H6 f% Q% i
5 H% Z6 ]$ X9 r r module.exports = router;! \( P+ ^3 m" y
```
0 L+ o0 t: N6 L
; B- G+ W9 v& B9 X- G" F#### 3.6 注册插件" T4 _" H5 s3 Z4 I# `! n9 t
- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:
) W9 `. F1 X) @# I$ y& L ```javascript1 N6 u6 q2 n0 h8 |, N8 g& l# l; \
const deepseekRoutes = require('./routes/deepseekRoutes');- B3 @" D$ Y9 A: c) {
0 N( q" Y) b7 q, l5 C
module.exports = function(app) {6 ~# S6 d+ j* n1 W
app.use('/api/deepseek', deepseekRoutes);
# r& Z% e; G! u };
& y. j% v% }# Y6 j6 \ ```6 u% v! |$ @$ W( N0 n# s
) q' z& _2 W/ p+ t9 S: g; g---
5 V' n& |6 ^) k: t
. `8 k* J9 c0 d. \. |### **4. 测试集成**( U6 M" _" X' m' f5 p
#### 4.1 启动 NocoBase+ ?' M8 C9 ]- U R5 V# V
- 启动 NocoBase:
0 X" B+ a5 m+ `# b3 Y$ J: k ```bash
2 f9 Q' `! g% I1 Z F npm run start4 Z) q4 Y+ y T1 T8 M R1 S0 {
```! @3 w3 o! Y2 o5 G
& j6 | c' o) E; m! W4 @5 D9 `# d#### 4.2 测试 DeepSeek API3 a4 w0 H8 ], g0 x# t9 `
- 使用 `curl` 或 Postman 测试 API:
" M/ j$ x; t2 A! Q* `* X% Y& p3 y ```bash) x$ x3 a6 @, ~% X9 r
curl -X POST http://localhost:3000/api/deepseek/query \7 H" Q# t' w8 g9 R5 k
-H "Content-Type: application/json" \0 y: }7 Q9 p4 \: |3 i$ S& x7 D
-d '{"prompt": "显示最近三个月联系过的客户"}'9 _* k& N; i' j4 i& a
```
7 }# A3 C9 |5 z( w; m ]
5 v2 G& o! ~) z, d% y/ n' F---
- h- q6 t6 h8 b% }) O" Q3 v( `, N k0 d: I2 b6 b/ Z- ^* s- d& ^
### **5. 部署到生产环境**
# ]( z$ S$ F+ s" t+ v#### 5.1 使用 Docker 部署% p" Q$ l! z) @7 \ C
- 创建 `docker-compose.yml` 文件:$ [3 E. y. w1 E6 |" r% E D
```yaml" r6 N# X4 L7 B+ q; M3 G
version: '3'$ y4 _! [+ c7 @* J* q3 [
services:& M4 y4 ?* G5 P o) N2 f, c
app:
# k- O+ F5 @3 G$ o6 ]# \: C H9 o image: node:16
4 } X4 |0 {4 r2 q container_name: nocobase, k7 M! F: p, u9 S- V% X
working_dir: /app. Y" k4 v' |& W n* Y% Z
volumes:1 i" j! j* S: {, e0 l
- .:/app
* ~5 }' T7 m# A: I ports:
9 k! E, [8 C- g0 @- T - "3000:3000"
9 \8 S2 Q# g4 K% F( \8 a' A environment:' E4 Q& c" c. Q6 t. B1 F; Y
- NODE_ENV=production
: K$ L$ F2 |1 f% i. B, m command: npm run start1 m3 w- A* G" J8 n; c r
db:$ l. c5 S6 n7 j- w) J# n5 r( U
image: postgres:132 t4 H; |, t1 [
container_name: nocobase_db. {, s. f2 {" _) U) V/ g: w
environment:
! ^7 p3 Z% Y) S d/ T, D POSTGRES_USER: nocobase_user
* t ?1 | P2 V6 v# t4 U( F: G5 E; x POSTGRES_PASSWORD: your_password
8 l4 C( A7 K# | POSTGRES_DB: nocobase
" X+ o1 H, k; E4 S2 g ports:6 G- Q6 ?; R3 E4 J9 g; B* ?; x% W9 S
- "5432:5432"* ^) X0 s, C: M: i
```, Z8 M0 m! C2 h
- 启动 Docker 容器:5 T- M$ z- i6 x% Y/ ]
```bash" b8 b. q. F$ g* p/ h$ A
docker-compose up -d9 p: Y1 Z1 ^' K' H, k/ |8 m( R
```& y+ x. ^1 c' g& F
% }$ X$ @3 f0 F J$ y! a#### 5.2 配置 HTTPS
0 C. L5 O1 g5 C4 q! ~: d: x% j- 使用 Nginx 反向代理并配置 HTTPS:! w) L' v/ R' b- R* s4 f$ V
```nginx: J8 S) |* |, D7 n
server {
+ n# w% s" I- x1 f, H listen 80;
- O% a$ [, x8 J/ \: ~+ ?5 ^& d1 A! j server_name yourdomain.com;
* H [0 U0 e( h) \# H4 v return 301 https://$host$request_uri;
& `$ N. q- k' ?, d }8 k9 S( q) e, G Q1 r
( N" r# b1 e' N( i6 d/ b O$ A1 G
server {- x. t( U/ ^$ t+ R
listen 443 ssl;
% \' H8 q' U! b* l6 i+ m server_name yourdomain.com;! Y3 z1 r! h; N( O5 Z% E7 @9 M% O
4 h$ P) O3 F7 u: `6 k; D" h! A$ ` ssl_certificate /path/to/your/certificate.crt;3 N% c' }; r7 M* V, x7 e- q
ssl_certificate_key /path/to/your/private.key;
! ^9 e7 K* F8 S& `9 n
6 K7 F" D6 M' q location / {* Z3 u, K4 f+ T9 Q6 e7 F
proxy_pass http://localhost:3000;
( _; Y5 O7 Q) t }- U proxy_set_header Host $host;2 W4 O+ [' K% K6 t6 t& S
proxy_set_header X-Real-IP $remote_addr;; ~( h: `. ?, W' ^( b
}
/ ?4 O* ?3 {7 \$ X6 ` }
4 Q$ E, O$ i6 P/ H$ B' ]8 n ```
) b, i0 Q' R: [- [9 [+ L& h. K+ [# y a K% y% f
---- M3 u4 H0 i z+ h8 e
; I# i+ f8 N2 Q; W; O0 V5 r### **6. 总结**
8 X7 O U, @" O1 ]通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|