|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。2 V7 l B5 i0 v4 _9 ]8 j4 G/ g
) U+ Y5 w7 t+ S4 O8 I我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。
$ F! P* h) y3 |% f m
( r2 a5 k+ R/ ?---
- k: \ t0 j; ]$ z2 s1 ^& \1 P8 `8 C
### **1. 环境准备**
9 s% j- L5 J1 E' C! a* ?4 F! g#### 1.1 服务器要求
/ d! l5 P& ^9 M) |* Z+ x( Y- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。
7 p5 W; i0 `/ P5 Q2 F- **Node.js**:安装 Node.js v16.x 或更高版本。
+ e2 M9 p: m( d5 A- **数据库**:PostgreSQL(推荐)或 MySQL。
; k. K( Q- |* G; N- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。
6 t0 h6 C6 h1 b& c9 _3 W ^
: u% ?+ V' i# k* S. l#### 1.2 安装依赖
3 ~9 j; m0 [6 u, \- B; v( L- 安装 Node.js 和 npm:" ?. P! J# W0 K3 V4 x. R
```bash
" k$ a( R# W! l9 g2 K curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
; O/ A8 K6 M) w sudo apt-get install -y nodejs
" S7 D+ p, D/ g5 l ```
& v$ ]5 y; r4 L7 E/ i* [+ {- 安装 PostgreSQL:9 v$ U% q! O8 W- H! l
```bash
2 l0 K6 ], v* R3 j& D sudo apt-get install postgresql postgresql-contrib& n1 R1 m' t( d! C( ?
sudo systemctl start postgresql5 {" X9 n$ Y8 E7 q, g- \9 a, I
sudo systemctl enable postgresql7 i, M+ a: a. Y6 U; V
```
! l$ n# ~( @4 N! i/ h4 V5 V$ j X" Y. Q- ?' _) x
---
9 f9 y8 i: S. O; |$ _/ x- ~- ?& B$ D9 p4 @# L! g
### **2. 安装 NocoBase**2 i9 f. {8 G! M1 Q
#### 2.1 下载 NocoBase1 T# t$ n9 _6 _6 r/ W
- 从 GitHub 克隆 NocoBase 仓库:
6 g% q! I$ H2 _. g5 n L. G ```bash
1 I5 X+ U' H5 \5 }+ o git clone https://github.com/nocobase/nocobase.git
3 L4 x$ D F, @( P cd nocobase$ l" ]6 g& R+ j& c" T3 [0 U# ^" b
```
" O& `1 Y4 Q1 ^$ y! ?0 q
7 Q& E* ^, M% h, g& h#### 2.2 安装依赖1 ?/ B% |3 z! u
- 安装项目依赖:( W' v7 \! {& x0 i# B1 g8 @+ ]
```bash
/ s4 G) A1 j& X- G) i9 U+ p npm install
3 C' r' ?7 j* I7 h& M' \ ```2 L8 P% @; X, S; v* n; _3 ~* V& @
! Q( U l1 q! f& g# N* Q
#### 2.3 配置数据库- K8 v. H/ A5 R
- 创建 PostgreSQL 数据库:
$ ^1 C8 o0 E' K. v ```bash
4 Z8 S: \. X |$ D sudo -u postgres psql
! [+ _! c6 `( f, g6 T CREATE DATABASE nocobase;
8 W' M h3 p" H9 }" e CREATE USER nocobase_user WITH PASSWORD 'your_password';
+ M' S, a8 Z2 x+ F4 B7 C* `' X GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;% R* G. w6 K7 z% v; _4 ]% ^6 }
\q
) Q) S0 E+ t+ d+ }& K6 d- ?2 M# K ```
, R0 T# W2 e$ r7 O4 S7 \- 修改 NocoBase 配置文件:
+ j1 w- C- ~2 G# B1 K5 V 编辑 `config/config.json`,配置数据库连接信息:" h! K1 U! X9 h% W) O# P
```json( K3 Q7 L3 r: z
{5 p8 r% ]6 N f! e9 ?7 C
"database": {
7 K' `! M9 n# |! P# J$ ^" r "dialect": "postgres",
3 }5 d1 v, y$ P5 t- O1 N8 o "host": "localhost",
]3 e. D6 q6 j; |- f "port": 5432,
- C+ B! `7 ~, L. A* X. ~: o "username": "nocobase_user",6 d3 k: X. m/ M! r( E4 L h
"password": "your_password",
" |& i3 j6 Q4 K' C& D) R0 d "database": "nocobase" Y- u- W# ]' y
}) n0 I6 ]: m! H- L- r
}
: L! u/ s s- Z# `$ l$ z _- y ```: t. |& I5 a: ` _& e3 P, e
5 ~& g7 d0 l( y7 Z5 c/ ^; T#### 2.4 初始化数据库" h% w/ x: m$ {
- 运行数据库迁移脚本:! I6 Y8 a& U- P2 P
```bash
7 J' X9 j* h1 o1 K* G. ^ npm run db:migrate
# X9 k+ \* _4 G% R+ o( } ```
' {* z% W, C" B c9 w1 o7 G2 v& L& l! e
#### 2.5 启动 NocoBase
) ?: |7 n# W8 U' H4 i- 启动开发服务器:
( ~. p! R( a3 U& A; S- w' r' Y( u ```bash4 y# z; h! [5 c9 _
npm run start7 N$ @4 e( _# D' H
```4 g: l, I H4 n! w; {' D* j, e
- 访问 NocoBase:
) `: s1 E1 }- J 打开浏览器,访问 `http://localhost:3000`,完成初始设置。' O8 j) Q! U% J Z, ^. n
8 D* C- A. L# _1 j
---/ {. V! ~# H" e
0 F. Z2 `1 n9 Y$ x
### **3. 集成 DeepSeek**
. y" f3 ?+ Q" l#### 3.1 创建 NocoBase 插件
8 b$ W3 R! K- T# Y' x! D- 使用 NocoBase CLI 创建插件:8 V" m4 s7 v9 m4 B
```bash
3 ^* ?5 c$ {, I3 x5 [2 ]: ~+ D npm run cli plugin:create deepseek-integration$ Y6 e! v$ Y) C: D4 V0 m5 V( k
cd plugins/deepseek-integration1 J$ B& P, i! y, b
```. s- D; ~' w% k8 ?1 q& M% Q
4 D ?1 K8 W n; U/ j#### 3.2 安装 DeepSeek SDK1 C5 m& @1 v- r5 G' z
- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):6 ]9 b6 z4 l Q: @
```bash
, d3 l; m5 q3 d npm install deepseek-sdk
2 I- D; O# Z8 U) n- k ```# a4 f( I) t. @8 p; v2 m$ D! z
0 D7 _/ T, e G( I
#### 3.3 配置 DeepSeek API 密钥
+ X8 c" x6 V6 \* T4 U3 R+ Z2 J8 g- 在插件配置文件中添加 DeepSeek API 密钥:
4 h+ Q$ p' f5 S9 |, l! ~6 {& d 编辑 `plugins/deepseek-integration/config/config.json`:1 u" h* }1 J( f) K7 \5 h3 o
```json+ K0 r3 J- w6 m8 v) J) O t
{+ @! v0 s; U! ~) R# c
"deepseek": {" e+ x* v9 i" o0 \
"apiKey": "your_deepseek_api_key"& S$ I1 I& G) s6 F( Q% d5 ?& L
}
7 t1 ?) k! p: E# b, h }
1 u0 c' q( G4 ^7 t& d ```
" l8 m- w8 u3 H5 m
( b2 w! C6 @* }* \; z$ D#### 3.4 实现 DeepSeek 服务4 x9 k$ h7 Z5 @
- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:7 | a2 _( W8 [* N; u# W' T3 n' F) r
```javascript
" B% P- I4 Z* i; @ n( V, Z const DeepSeek = require('deepseek-sdk');
8 n6 n+ z7 O+ ?+ q; P4 F( [: P }: \, V1 N) L
class DeepSeekService {
" g" Y, Z$ v! O- v8 a$ M constructor(apiKey) {
8 ^5 H9 f0 l' z this.deepseek = new DeepSeek(apiKey);
1 h/ u+ v/ p- U; Q0 Y8 @# W1 p& @ }
+ T0 W7 R( f) y$ x6 @4 S- l7 L% T: e6 V4 |+ D$ M8 b
async query(prompt) {8 c6 L5 v& d7 h) m) K% c, u) o
const response = await this.deepseek.complete({
- d& q3 _( D' L5 u) T Y prompt: prompt,0 e* c8 c E! d, V" q& k
max_tokens: 1503 ~4 \/ Y/ {: X# E; p
});2 t0 U6 j2 [, W0 Q; p6 E# q1 H; n
return response.choices[0].text.trim();
0 {( z3 \; u( U2 c- D% J }
/ W. |9 [! b+ G9 Q; i5 m8 } }
* x, u4 \& [! s# J' `" `, N& F9 A. t o/ u& L4 k& \/ B# O+ I! P% K7 A
module.exports = DeepSeekService;
d) R# m4 d! B7 v. m3 d3 h: k; S) u ```
5 W! [& V# {/ s% V9 _6 J, P6 j$ f( L
#### 3.5 创建 API 路由* N' V+ \0 [' x- E6 n5 V6 D) z
- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:
5 L1 b) a( V+ c$ ~$ B- ]+ H8 a ```javascript
7 F+ S: I/ ~" S5 p const express = require('express');; f( f; J+ j X2 L) S( L9 M
const DeepSeekService = require('../services/deepseekService');4 T2 l2 z2 w: y
const router = express.Router();6 Y/ u' h! E8 k7 R$ r: a8 V
const config = require('config');
. o' ?5 m: s& Y2 \
! r5 \# \9 K$ O const deepseekService = new DeepSeekService(config.deepseek.apiKey);$ Y: |/ {$ h8 y- y6 B8 ^# R2 r
3 Y1 X" \9 R/ J, H8 I9 A router.post('/query', async (req, res) => {: C6 ^) h7 _8 j" d+ l
const { prompt } = req.body;
1 @" Y8 I- D$ F7 [/ U' v; P4 b$ s2 l try {$ P% I a4 H4 S2 v0 _/ G1 ~
const result = await deepseekService.query(prompt);
5 K; h9 r9 G$ X: A S+ b res.json({ success: true, result });) r9 }$ \ a! J0 e6 S4 Y
} catch (error) {
/ x8 L6 X ?" \4 n res.status(500).json({ success: false, error: error.message });: H- ^6 [0 O: P* r8 d0 H! U% L
}
' M" b7 l2 _0 |& l5 s });! |- R) H: P& U) j0 M% K3 ~1 s; M4 } @
6 K& n* N& d0 ^/ `( u% v R6 }
module.exports = router;, l' G8 U7 S/ m- v' j* _
```
2 x2 \$ t- q/ u5 V
2 B$ n/ E" X. g! I1 h#### 3.6 注册插件/ o1 g( ?# } q. ]1 Y( t% z. ^, L. B
- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:% \! e; t. X. p: I# o
```javascript
5 |) d" I3 \/ m9 s const deepseekRoutes = require('./routes/deepseekRoutes');
- F5 h# b% G( P Z# c! R! h$ r% `: R- I
module.exports = function(app) {
6 o$ t+ ] I# R+ ] q app.use('/api/deepseek', deepseekRoutes);4 I! V: |4 n+ u [! I6 v8 p; F
};0 T0 ]! w* n2 f [8 o, M: E4 e
```- t- O* y) R* O4 Y# c
- ^! _& m1 N- i) o3 o
---
4 r' t# v% s8 I$ Z0 ?; K; e& c9 o V8 q) g) P& ~) k) f5 \
### **4. 测试集成**' X" z: Y0 \: Q' J
#### 4.1 启动 NocoBase' y9 X+ `5 }: W7 l, G
- 启动 NocoBase:, e( L! ^ u5 Q, U2 n$ t
```bash) ~ v; o( n; @+ s! A6 G
npm run start( y! u. s) @9 E( H0 w& i- S( o3 m1 m
```
, I+ Y5 C8 ?% `+ V0 y& z3 Y1 K5 G# Z, w& M0 `) b. K2 g
#### 4.2 测试 DeepSeek API) W4 `/ A$ ]1 A$ w4 p, x3 ~* x
- 使用 `curl` 或 Postman 测试 API:2 M6 }8 N8 X5 q
```bash0 t+ N B1 V0 w# {# f( p
curl -X POST http://localhost:3000/api/deepseek/query \
' T0 q) K5 \6 T6 m -H "Content-Type: application/json" \
' H- M5 f/ k% J -d '{"prompt": "显示最近三个月联系过的客户"}'
: d' w- G; O5 O' z( B# Z ```, D; C+ [/ O5 V4 I- U8 B9 n
* T/ D. Y" v- k6 d4 N8 u. m5 m
---' V/ Z$ V* F s& x
7 k5 a: ?- [; ?' W, a+ J. O### **5. 部署到生产环境**; T( T* w1 W; p# X
#### 5.1 使用 Docker 部署. |4 e9 b/ E- P, c
- 创建 `docker-compose.yml` 文件:% T% I8 W! w1 Z; a6 P4 A3 h
```yaml/ q& K5 C( S0 C7 y6 \# Z
version: '3'
( O' x; A; E# o4 A$ M% j services:2 l& a8 e9 j" T R1 w2 e
app:
N: f; X: w; l image: node:16( u r+ z+ ~& r1 Q2 W$ E. z5 I: M
container_name: nocobase0 E" F E C8 V* N0 l( u
working_dir: /app t6 D/ B; w4 m7 d' A3 y
volumes:9 o N7 O5 R& H. u/ V$ H3 ~
- .:/app
- l# F3 U* h- Q2 \ ports:; P- l1 b. t9 o- c
- "3000:3000"
0 U/ @6 a2 y7 @6 A" v- i& ?: }/ \ i environment:; \2 Z/ w* c) E$ ], F& {$ S
- NODE_ENV=production% t+ q- y% f, r0 V7 B
command: npm run start
: n* C3 j8 b$ `7 v8 d. N+ W% Q db:
3 P3 m, z2 c/ O* K6 ?) W image: postgres:134 \1 E9 ]& `( ?. f# o+ t
container_name: nocobase_db; y, w3 E8 V- x# }
environment:+ C' L1 M( e9 }9 c" y: k- k- J
POSTGRES_USER: nocobase_user
( P5 {1 @( z, Y; B: o+ \- z# ~ POSTGRES_PASSWORD: your_password" a a( R) v1 a# f% P5 j
POSTGRES_DB: nocobase
& m s: T) b3 V; q# o5 h ports:
4 ]( R$ L+ |- B& f7 p: t - "5432:5432"# H- \+ E6 ^4 _, {7 | X `) [
```( k! y4 ]9 C. ]+ s7 i P8 X. n0 Y
- 启动 Docker 容器:6 V# O- S; j. }0 O
```bash- A- {5 J: i7 U: I3 K8 K
docker-compose up -d
& O" n6 I& b7 \$ ~4 l ``` g9 c2 H; s1 S; x0 I: [
# i$ J) | B9 H% G
#### 5.2 配置 HTTPS
" Z- C. Q# R- O$ v- 使用 Nginx 反向代理并配置 HTTPS:5 G* S* E' y1 t m. R: e$ N
```nginx2 K; I! a: W$ b1 d: r6 z* l
server {
7 D& t0 O0 E2 Q, r) d, Z9 v( k listen 80;
& X5 a* v. J8 L8 J. {% z$ M server_name yourdomain.com;* s/ {! g- C, f* b
return 301 https://$host$request_uri;
7 m6 Y# o+ R* p+ }/ F }) h& v: ]4 V+ Z; O8 |! S( D6 Y
- u g; ^9 f( Q$ _- A
server {" {+ M* |2 j9 Z! q) J
listen 443 ssl;
% O: L& S% b; M% d server_name yourdomain.com;, S( \5 O4 K+ V; V+ C/ d" Q. J
% P( V" G# h4 j2 i! M6 ~ n
ssl_certificate /path/to/your/certificate.crt;
$ n. w5 z. O6 J$ H9 C0 q' n( h ssl_certificate_key /path/to/your/private.key;
) J% Q) [ v8 v0 D" q
) _2 k: c+ O% d0 @ location / {) b9 q7 ~5 q* O6 G, a; K3 l
proxy_pass http://localhost:3000;
' D7 }, I- x" F proxy_set_header Host $host;8 k' ]) `! J" T5 N
proxy_set_header X-Real-IP $remote_addr;: j" Z. @2 A+ p' k9 \ F' D7 ^
}) l5 ?9 S g; }+ w: D- s" c/ {
}
2 f9 Y$ C, t' Q' n/ O+ Y) j ```
; J2 b6 `3 y3 }$ C: l: }% f U% Z# E7 l6 z5 Y7 b* v3 t
---
/ U3 J( L6 Q# k1 V+ M+ |# k$ N1 F
### **6. 总结**2 g7 Y3 ?5 N' u
通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|