|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。
2 ]1 l1 N0 Y2 d2 D, F
2 T1 {7 F+ ]/ m+ y6 j+ z' \我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。" N. V" _" G9 [5 g7 Q2 m" K
K. _8 b0 y3 ~
---, `! a5 F# }9 |
' u( _2 }, m2 i' `3 q
### **1. 环境准备**+ ]& p; c" ]3 a! N2 O
#### 1.1 服务器要求7 U& ?3 J/ r- H) J/ ?* B
- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。
" d0 ]7 m' n: H2 C% T- r- U; F- **Node.js**:安装 Node.js v16.x 或更高版本。
$ z# l5 G9 Q6 l! }- **数据库**:PostgreSQL(推荐)或 MySQL。
2 l' y6 K' V. U; ~# A+ C- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。
5 W# v; @4 A- D- g9 R) G0 {
' B" t" P8 u! m+ K#### 1.2 安装依赖; \# k) F! t9 H6 Y u, V' W- w
- 安装 Node.js 和 npm:+ Y$ @+ b6 s9 e* b) V! _
```bash4 E& \6 [8 Z' g0 p/ @/ g
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
2 E( D- L" Z4 h% S! G4 Y sudo apt-get install -y nodejs$ f5 O" D# ]; S9 h" D- ]
```" S1 P0 S* X0 \
- 安装 PostgreSQL:* S# i! R2 B2 \3 l+ _
```bash
" H4 h' r3 O9 s* V% h) R/ f/ t sudo apt-get install postgresql postgresql-contrib6 |* v9 P! D$ @9 o% Z2 U: @
sudo systemctl start postgresql
2 e; H" i7 n" c. O3 C( N+ ~6 B sudo systemctl enable postgresql% j4 N# H0 O3 w0 j7 ~# o# I
```4 X" u- f* D2 N F2 z
. h$ N1 C4 ` n" S' F! o---
7 |3 [; i/ q# p: a Q! Z" k y# P, n& P
### **2. 安装 NocoBase**
3 K7 ]/ `8 k% j9 _, n9 M$ Z- c/ Q#### 2.1 下载 NocoBase
. L9 _, U! q( [, Q2 I- 从 GitHub 克隆 NocoBase 仓库:
- H# N; B2 u% f5 \+ s. p ```bash3 L9 N) b6 j9 x3 q
git clone https://github.com/nocobase/nocobase.git
4 i6 @6 L9 }& f+ K cd nocobase
7 n( `+ ^4 @' }7 v' b ```
' c: v: C8 d7 W2 O/ @2 E9 D* s
#### 2.2 安装依赖
* h3 U! }+ [4 i, ^; S- 安装项目依赖:
6 y9 c% o. C* P. g& H ```bash* z7 n s, `1 X# p. B0 `
npm install% r0 o: o. _ W1 z+ D' |% l7 o
```
! i/ K: [( c- Z+ }& ]% ]
" M" p, l! Y: c1 N+ j0 o) t" G+ s#### 2.3 配置数据库! F% E. e' ^7 S$ R
- 创建 PostgreSQL 数据库:
$ Z; [+ S" u, O; q* P( ^+ S ```bash
# c0 P' k0 D6 J% I sudo -u postgres psql
3 s2 k& H; M' h0 @ CREATE DATABASE nocobase;: n8 L6 n1 V J. M0 I1 r
CREATE USER nocobase_user WITH PASSWORD 'your_password';
, S( n; }8 |$ k* x9 u GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;8 l+ O( e. r R+ w. S
\q3 M% h0 R5 Q9 ?& s. v$ g
```
# z; U$ M4 `" d4 L0 C, @% k* T8 W- 修改 NocoBase 配置文件:0 U/ R( M1 N0 N
编辑 `config/config.json`,配置数据库连接信息:9 Z" ?+ U) T( q3 C1 H
```json
7 ^+ t1 `6 y' P2 `6 v5 O) \ B {
+ N; F2 S$ W" B. s( O c) r* r "database": {& t) O; p- l. ]4 T4 I G T5 n
"dialect": "postgres",
7 ~+ o2 M6 f z$ e/ s- U2 s "host": "localhost",
; u. ]: H9 i$ ~/ F7 a g- T "port": 5432,
0 C0 X( S' H5 |. B: H; g "username": "nocobase_user",6 L3 [+ g: l0 H$ ]+ H
"password": "your_password",4 R! T a! h0 ?" ~8 n
"database": "nocobase"
1 R1 B; Z$ ?' Q' ~ }8 L- j. {) ?; w" a+ k4 S
}3 ~6 `* I% w$ r' r8 j0 ~' _
```; [: N4 Y# Y1 z5 ?2 D; ]
9 ]* r" v# u* Y( P% D' H2 N$ ^ P) x ]#### 2.4 初始化数据库
( G: h# [: T6 `+ Z7 ~7 A5 k n; K9 b- 运行数据库迁移脚本:1 ?7 N' [; J) C; v) g3 ~
```bash
; ?4 F3 k) o4 w6 K9 e; q6 A npm run db:migrate2 }/ o4 ~ j1 b2 N" }% f
```/ M7 T; {7 i9 p: S) J5 N
+ q/ Q+ A- e5 g2 f# I5 Y0 `
#### 2.5 启动 NocoBase
* h) t* b* D% h* R- 启动开发服务器:
3 P7 K4 A, @& f7 M! @* D ```bash6 ]! H: D; `7 a4 ?
npm run start
/ B2 u" E& o$ P6 a$ u ```
* p' G4 }6 w) I2 Z- 访问 NocoBase:
% j- \8 O, O9 Y { 打开浏览器,访问 `http://localhost:3000`,完成初始设置。
7 B8 u& A9 @3 |5 g9 w1 ]
0 E6 r& B$ Q* t* S' q* Q& I) S- m---% N5 i2 E2 q% p, y
+ H& i; H- t. [% K" s
### **3. 集成 DeepSeek**
" J; v9 `( z; g |& z. V#### 3.1 创建 NocoBase 插件8 o9 ~/ S! b! U7 m% Y- s5 V) x, l
- 使用 NocoBase CLI 创建插件:' ~+ V1 `3 ]% ]
```bash
& X( o" W) w0 Y* V npm run cli plugin:create deepseek-integration
6 s/ A9 U, r; _2 y, G2 ]7 Q cd plugins/deepseek-integration5 `! F/ ~1 G) X) n( l3 ?9 Y
```* D3 U2 ~" S$ M
! V& y+ S* L, b; o/ w* G; O$ [5 Y* V$ R#### 3.2 安装 DeepSeek SDK
! \: _$ t% W3 _$ m- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):
9 G2 y' W, x. n& o" X ```bash
% U z/ K5 }/ b4 V o# A8 @& O npm install deepseek-sdk
& t" Y" ?0 }0 N. ?1 c% K ```
5 p+ W' d1 K& E/ U2 l7 \. r
$ T) X8 A- i! b#### 3.3 配置 DeepSeek API 密钥# ~: p! Q9 x0 U! I% h! J. c. V
- 在插件配置文件中添加 DeepSeek API 密钥:
! F: Q& y, g1 p* ^4 n- s* A- u. G 编辑 `plugins/deepseek-integration/config/config.json`:
! W* {' \6 g8 y+ [# n# H7 Q# o3 a' r ```json
" N! k9 R& k* r. @ {' R# @$ J9 P3 W4 Y" e; @. |
"deepseek": {
) G1 l$ @ \ Y+ C% L7 a1 | "apiKey": "your_deepseek_api_key"5 h ?# A8 }" p. b" C) w. ]
}
( U" e+ @8 t/ h7 G( v }7 o7 v5 S* y. ~, O
```' ]1 G0 P8 _' X$ g; y
4 R' O# t8 Q! E2 s# W3 g9 j
#### 3.4 实现 DeepSeek 服务
5 }5 y4 h K7 O- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:# d0 i+ \. U0 [' R
```javascript
x( T# E+ ^$ F* c' j3 X const DeepSeek = require('deepseek-sdk');1 s# m, }1 M Y( \7 {, T6 L6 r
7 R5 O0 p* e4 A2 ~ class DeepSeekService {
2 x( a7 e3 f+ G constructor(apiKey) {
2 O* \9 C" z# B& Z T# `9 E9 m this.deepseek = new DeepSeek(apiKey);: Q# i+ R' `$ Y
}
, q- b% f) D3 J& z4 [3 E0 }) N1 a3 g- V2 T1 b. Z1 \' e$ c
async query(prompt) {
5 J( N: y$ x3 J Q' h8 Y const response = await this.deepseek.complete({1 ~) A) {+ m+ { Z! J$ ?
prompt: prompt,
0 s+ d7 k: E# [/ \: S max_tokens: 150
0 ~ e2 ?2 F* r' e2 ~5 u });7 |& V0 t. `# @; T( v7 B+ f
return response.choices[0].text.trim();4 X7 p/ p! e, B5 F
}
/ Q4 x3 u0 G6 s# [7 e% z }
4 X6 d6 B' M, F+ a5 M" l1 ~8 Y t/ D$ S8 d7 v
module.exports = DeepSeekService;
/ @, n+ e" A% E8 k ```
. K0 v' Y# J, K$ k, Q' F+ x. O. n5 s" a; d% R. d: V9 s
#### 3.5 创建 API 路由
$ |( r% F/ S3 D1 o- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:, z' k( D! A W3 D V* n, W3 S w0 {
```javascript" w8 z) a& T6 I, [5 U
const express = require('express');
# t# d7 U& Z/ ^ const DeepSeekService = require('../services/deepseekService');. Z) f( ?, |4 `) R7 E1 x
const router = express.Router();
. z; S+ X! |- D( T2 @! u# ~2 X const config = require('config');) v+ @ l: i9 u8 x4 W" ]; Q
2 { u+ r- L: ]+ `
const deepseekService = new DeepSeekService(config.deepseek.apiKey);2 i9 k$ R, ^; O2 ~ }
9 J; u& L0 M, U. I& A router.post('/query', async (req, res) => {* k- Y+ _/ \5 R3 }0 x5 R
const { prompt } = req.body;8 u) g1 C$ ^4 n3 h: l, m
try {
! @1 ?' b0 [2 F+ Q const result = await deepseekService.query(prompt);; T! q$ O& N1 Y
res.json({ success: true, result });! x. U/ r' k9 {
} catch (error) {
* H5 |5 w }+ e( H n" s2 a res.status(500).json({ success: false, error: error.message });
" Y O7 @1 [" l( x& y- y }& d5 }2 v. ?- j6 c/ `3 s
});
5 s* ]+ ?7 T* k# Z1 K4 k
6 O$ U8 a. {. F5 i$ [$ p module.exports = router;, I0 i: d9 h, p* i$ ~4 [
``` w, H( C% S# k' l$ h6 O }# p
5 h2 J# i8 d! w6 U& A5 m. T
#### 3.6 注册插件) n& I8 A% D& Y. E* c& u5 N
- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:2 P, T; T' l6 Y' L) R+ ]
```javascript
5 `3 P# x# Q( b6 \ const deepseekRoutes = require('./routes/deepseekRoutes');
$ F2 X0 t9 f+ \4 ~0 m
e* z+ r: C9 A! F+ E0 `& Z8 g module.exports = function(app) {- n Y2 J3 k( v* G* T# l
app.use('/api/deepseek', deepseekRoutes);, s+ h8 P7 K2 v; b+ r
};
9 b: K, ^) X, _7 K, ?4 l, a4 y ```, f9 B) S4 Z. {/ G% v. q3 Z
. _# b" l( e0 k+ G" s, \
---% ]$ \" K7 H. l
4 }0 ~( T4 t1 k/ z1 }# d7 Q### **4. 测试集成**; W4 f, u! `0 I# x) h& }$ }4 m7 d
#### 4.1 启动 NocoBase; {; C' Q) Z' v
- 启动 NocoBase:
4 D8 B+ U8 D4 m% S7 q ```bash
" A p6 e* w* a' w6 n- Z npm run start
1 C# L! B, p' B+ L7 U! s ```5 U( i4 V2 |: `/ P. Z4 t: w
7 Y; c* w& A8 M, }8 @
#### 4.2 测试 DeepSeek API
3 z: C) n$ E7 v0 S0 A- 使用 `curl` 或 Postman 测试 API:
t9 T! P. g8 f3 J3 w9 q8 n6 s# |9 f4 Q ```bash# c A2 |+ w: p( h, f( F) Q
curl -X POST http://localhost:3000/api/deepseek/query \
- g0 j- V9 a8 o1 F$ ~ -H "Content-Type: application/json" \
3 t/ y9 q4 K, h -d '{"prompt": "显示最近三个月联系过的客户"}'0 ~+ A( k1 c9 r* j# X1 J$ ]
```
- q$ p/ d* d- u# t3 Q5 [5 a, j
; |. V, B* `! p---
/ {8 g: I% H/ m/ \5 Q1 A5 ^. B( a: ~, \0 W2 |4 u v* ?
### **5. 部署到生产环境**" [# {0 V3 f% o1 u( q
#### 5.1 使用 Docker 部署
6 Z$ _- b$ Z( O/ E3 `: e/ S1 t y3 X- 创建 `docker-compose.yml` 文件:
8 X7 W& w( ~7 g ```yaml# U3 x( w7 c7 h+ z) d
version: '3'
- Y8 I" X5 S5 x0 B9 n services:3 Q4 N3 a& K6 Q8 W$ `
app:
! W! v+ l3 y% G; ~/ X image: node:16
5 e1 ]0 f$ ]6 @ container_name: nocobase" L% r' w s* h+ p8 Y, Z1 F: f
working_dir: /app
. \1 W% u# p" I& g volumes:7 P n+ H$ v6 S& v5 f) D
- .:/app+ L7 }4 `5 N, w2 K" J& ]% f! P5 ?
ports:# m) C9 L/ g' A$ o7 m- K
- "3000:3000"
+ M2 [; k2 C3 w$ _. Q* r% k, d environment:9 q& \/ c+ V& m
- NODE_ENV=production
% L$ Q. v" \1 s5 a' ` command: npm run start. j6 R: y: v0 o: m. k+ c$ w
db:2 d9 W {" i V8 @ c; b3 @
image: postgres:13
) t; Q$ y4 T2 e- \3 u& i container_name: nocobase_db
6 W) X& m+ V+ X! {0 { environment:
$ s3 g$ ]7 {' x5 u/ D F! l POSTGRES_USER: nocobase_user
3 x, @4 ?6 X% o6 z0 A POSTGRES_PASSWORD: your_password: e- Q6 |) Q2 f* ?! j: H6 `3 e0 d
POSTGRES_DB: nocobase+ Y5 V, m' G6 N) \# j6 D
ports:2 f7 F, i5 g# G: Z. }" k7 y8 G- M
- "5432:5432"
/ Q+ W* Q1 ]5 j5 s2 p$ ^ ```. f7 t/ s. h8 }, O5 B
- 启动 Docker 容器:
! H3 Y7 Z6 ^8 M' B2 b5 W+ u- L' c* I ```bash9 T; }. Q0 Z+ c! ] S' w+ B6 u/ m. N
docker-compose up -d& V9 J' k6 J {/ ?1 ~& u
```0 C7 h3 P& M9 { q
/ {' \6 p. t1 Q7 F2 ]#### 5.2 配置 HTTPS' d0 M2 f, c8 p) T5 {( W* A
- 使用 Nginx 反向代理并配置 HTTPS:6 Z* t# t( U K( F2 m2 D
```nginx
7 i; O' C9 S _3 I5 { server {6 o N2 R% O; x4 ?' C2 l& E
listen 80;- C! K0 }5 q' V1 S6 ~ Z
server_name yourdomain.com;/ c R, t j. x6 ?% ?. k
return 301 https://$host$request_uri;
$ V1 U. m: j6 B3 e1 X }
3 u2 M7 H7 ^! R `+ m! s$ c2 z4 d+ y( j4 q6 P7 e$ b1 Z
server {
2 ]5 Y! m6 W. c3 G# R* } listen 443 ssl;
9 U! B4 q- k2 I! T) J server_name yourdomain.com;3 ?9 c$ E. _& U" @5 k7 G
1 m( l+ f: X4 C+ P- E# p1 ]
ssl_certificate /path/to/your/certificate.crt;
! a) p/ x5 l1 m- N# P ssl_certificate_key /path/to/your/private.key;3 T! x; r2 c: n* h0 _7 \ Y7 t7 G
3 D/ Q8 Y. [0 k( y+ z% x- v% ~3 H location / {
- B8 y, J! J% [- ` proxy_pass http://localhost:3000;- J9 M6 k% X! z" a/ n3 S2 \
proxy_set_header Host $host;
' ?( h7 _. y0 A proxy_set_header X-Real-IP $remote_addr;
4 c- T- M) e4 b( c }
9 [, D- r; t5 n4 u7 p, w }" m1 o7 `4 ?- ?1 h$ `
```8 P' [% l2 ?6 _- w( l8 {
$ \2 }2 _$ Z8 A- ^. E---
* p2 k( u* q( ~3 c. k
4 A. K# G% q( l" l### **6. 总结**2 j: G8 O3 X) K$ |% T% ~* B
通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|