|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。, U: M+ {1 S& y! O) u
; V3 Z7 S( c N/ G1 D ?/ F, U9 @我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。
) _" d9 E4 c; |# {3 K
- d6 h( ^" f7 R- a% \---3 `+ v1 w6 u3 E
$ H$ f' T9 x* [# z4 f* ~9 M0 V### **1. 环境准备**
2 `. ^+ {9 h/ W; g#### 1.1 服务器要求' ^4 O8 ^4 \- ]$ e7 v
- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。
2 ^% t& k* x+ r7 N- **Node.js**:安装 Node.js v16.x 或更高版本。
5 o7 r& v8 \; {9 k7 s9 P- **数据库**:PostgreSQL(推荐)或 MySQL。
: c2 c! S, W3 }% z- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。) i2 `# J) g7 a
$ H* B8 Y3 y) q* ^! i7 ?#### 1.2 安装依赖 N- k. [; X+ E' T# v
- 安装 Node.js 和 npm:
/ ~6 J' g' s- L0 W$ ]. W8 Z, O& w$ h6 e ```bash
% J4 j" p1 ]* L+ i- q curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -. [5 U3 T4 k, }9 N. y! z8 Q
sudo apt-get install -y nodejs8 w4 ?# K7 ]. d
```; \) x9 I& ]* ]' L; d
- 安装 PostgreSQL:
" q( |# {' r+ R3 H! U ```bash2 E* F5 c" s7 s6 k
sudo apt-get install postgresql postgresql-contrib# P) M& w/ K9 G `0 D0 M
sudo systemctl start postgresql) x Z) O$ T- e% X9 d* v
sudo systemctl enable postgresql8 k2 [" h( @; l, v/ k3 m* b' X
```3 d* l% L( J5 Q! F8 J5 M% l* i
) r2 o* P! [3 u8 U \2 V9 d* y---9 `# v; P( W+ R) \
0 t8 g$ t3 {; P### **2. 安装 NocoBase**
$ a& H. E, @& w0 i" w- [! |#### 2.1 下载 NocoBase
2 Z$ V0 r, U" q! t- 从 GitHub 克隆 NocoBase 仓库:6 O: ~% |( B; [7 C$ F. _* j
```bash
: `: X `9 j$ k5 X) ~ git clone https://github.com/nocobase/nocobase.git/ _ V! A6 u+ T9 _
cd nocobase1 N) a! ^& `9 c1 I. ], c7 J( f" ]
```
( L! l: e$ ]- M9 {2 F: ^% o& L1 ?! V# @, M
#### 2.2 安装依赖. [! H: M$ R. {1 X* M9 a
- 安装项目依赖:* f6 Z$ G' h/ u# _# n% }6 v
```bash
0 z, s3 g) G: m4 }( G: P npm install
- q3 ?9 h& b& a4 B ```1 H$ @4 B/ W& a9 v& o' {7 A+ \$ _' U$ r1 m
8 `8 J2 I' S+ w. ]#### 2.3 配置数据库& g6 L. A5 M1 z, l# _/ X' _4 }0 C5 e2 d
- 创建 PostgreSQL 数据库:4 M) ]; L# h. k( B/ O) K+ K( l9 l
```bash
% {% ~0 [3 z8 v( @2 B sudo -u postgres psql
: e& f1 Y. v* V( v8 l E. [0 H4 E CREATE DATABASE nocobase;9 n3 ?/ R: ^) ~- a" J( l0 K& m) s
CREATE USER nocobase_user WITH PASSWORD 'your_password';$ \: V0 u$ u* P+ S }0 r7 t
GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;
! X7 W* J& B. w3 s R9 d, g \q* r/ B( f2 ?) b5 Q9 b9 C# B0 K. Q
```
0 h9 F7 s, z+ ]9 {; Q" K- 修改 NocoBase 配置文件:6 k4 s& w" k& B
编辑 `config/config.json`,配置数据库连接信息:0 ?* {) M% {7 q8 D- {
```json
! {3 F1 |# ~# }) [: { {
: U: S: i- v6 }! l2 L" q# r "database": {
( T h; w2 N) e& f7 e7 D# i "dialect": "postgres",+ I- N. r. S5 U; |9 n
"host": "localhost",
8 B# c5 l. S7 I% p% u! r y "port": 5432,# E- z6 A4 Y2 C3 c5 C
"username": "nocobase_user",
, ]- L( T% ~% J) c- v" @% |, \0 W "password": "your_password",+ {; @6 }7 d. z( f4 Z
"database": "nocobase"
7 e! y4 `7 \4 ~ }: E5 e/ k& j- ~4 Z/ B, U, V4 ~
}' c0 h5 m( e% q. i
```& y* O/ A; i/ f7 g# H3 ^1 O
0 p9 |3 h J( P, p/ w7 | G g% I* _
#### 2.4 初始化数据库
5 I3 e4 g* M2 H- 运行数据库迁移脚本:
- S# Q7 P% _4 u T, ^- q ```bash
5 k8 t8 K5 K: {' y npm run db:migrate
m- a. W: L v7 B- b ```3 d& d; C5 J5 H* ^) H. e: f
1 N9 n: q; m' h3 l) `) w6 z$ G
#### 2.5 启动 NocoBase
: V4 i+ X# k+ J. D6 t# C( U- 启动开发服务器:
- L1 ^( ^5 \: i Y$ i ```bash
3 j y- x# M4 d8 c npm run start+ G' N3 W( b4 B4 q( S* l% m" a
```9 H; v! D2 D& q; [' y% ~
- 访问 NocoBase:
" E$ l: O2 p* n: r 打开浏览器,访问 `http://localhost:3000`,完成初始设置。
; `; }% N) r' z' h0 C
d7 @, v# h: O/ ~; F+ P---
% l. o* ~* i, e2 Z
! ~6 B* t0 Z( E1 u0 g### **3. 集成 DeepSeek**% V! a. R' H. I! T( Y9 S
#### 3.1 创建 NocoBase 插件( O$ W4 `! ~2 f$ o6 A, `
- 使用 NocoBase CLI 创建插件:2 t/ |% i$ L, N2 f$ ]6 K1 O" O
```bash
% j6 U( ^0 g+ T# ~8 n7 l0 {; e, v npm run cli plugin:create deepseek-integration
J! Y( g* g4 I8 H& e$ j/ i0 t cd plugins/deepseek-integration9 L' o$ h: Y: n, ]3 ^2 b, s
```% D' `" Z; \( Z7 T
* e" O+ b3 y( A
#### 3.2 安装 DeepSeek SDK! V3 M+ `/ v& u/ X- W( t
- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):2 Q2 X$ N! }; C6 {! L0 c1 ^
```bash8 m' A- |& y+ K
npm install deepseek-sdk
: O: i5 d, f: v3 @) G ```
% _3 y6 E, a* r* S$ c- p7 ?$ r# o
1 b" |! J3 p: q/ S6 q( p#### 3.3 配置 DeepSeek API 密钥3 W0 C7 ?0 u6 \
- 在插件配置文件中添加 DeepSeek API 密钥:
* }6 q" x3 Q, q$ }+ s& X4 `- W 编辑 `plugins/deepseek-integration/config/config.json`:9 X( g- G! Q% @) N; L& y% Z
```json+ \/ D, x B' F
{" ~/ F' L; C! E$ T. q: {
"deepseek": {
* u7 S6 j8 I) H, k8 R9 l5 k "apiKey": "your_deepseek_api_key"* b$ w% f* f/ v( j& O
}0 `# K2 z, C' F [) Z* C/ |
}
) n5 a$ X; C- Q+ ^ ```
4 v- z" G: X# v1 R
0 b2 k! ^/ P& p0 ]0 u#### 3.4 实现 DeepSeek 服务" ~1 F; l1 t! t5 p
- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:
- _* x' [" Z: Q O ```javascript
( Z( v; b1 g0 d. q const DeepSeek = require('deepseek-sdk');
3 ~% d- x2 g2 Q+ E# m" m4 U* |% v! `2 j" f2 L6 [# N1 Z
class DeepSeekService {8 _! A/ s, |! Y( P5 ^1 X
constructor(apiKey) {
. B( T3 V( N4 g2 v* x5 ? this.deepseek = new DeepSeek(apiKey);& _0 }$ a' C$ t( b) o% H
}
) @! t+ B6 A, \) z* r
6 H5 u$ D, }0 r* u5 H) i async query(prompt) {
4 ]- p9 z* s/ c. U const response = await this.deepseek.complete({
r, X' u) i W( B; F' R3 r& C5 A prompt: prompt,6 c) Q2 k/ _3 ^( S I
max_tokens: 150
7 R2 |% w4 F' m });
, \% {" G6 {( `2 N return response.choices[0].text.trim();4 r3 ?" }3 ?5 k8 h' @
}
% v2 m2 {3 [ G+ T, U( d1 } }* U7 Z' A& K: K3 ~$ N; j2 Q' C
7 E# V6 h8 G# E- d2 \
module.exports = DeepSeekService;
6 {4 |: C; L, o- ]4 x$ D ```
/ M9 A- `" h" M3 w& m1 Z
& ~* y) N6 e) i+ H#### 3.5 创建 API 路由
& r2 G9 T" x* k9 F5 c- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:- g7 @% e! _+ N; e
```javascript
0 K" o0 V# h" k4 i' \0 h! m const express = require('express');) V- U o) y! t7 C
const DeepSeekService = require('../services/deepseekService');7 E& X/ v% a3 g- Q2 G
const router = express.Router(); x" Z) x4 c$ n1 j @# g
const config = require('config');
6 n6 `1 o2 @9 r) L+ b) M' V: A: K( F% @7 ` a
const deepseekService = new DeepSeekService(config.deepseek.apiKey);
" r; s7 l* S& |6 C& K2 \7 w, x9 s4 e3 e5 F! s0 n' q
router.post('/query', async (req, res) => {
2 ]$ ~+ X! L6 z) u* L const { prompt } = req.body;
3 y& V8 u: v4 q+ Q) V try {# C- E& H+ N$ u' p3 {6 |/ O4 d' m
const result = await deepseekService.query(prompt);! L( F0 Y9 x5 E0 @6 L# I0 C6 y
res.json({ success: true, result });1 B2 M! p$ Z* y$ c' L
} catch (error) {
4 @. C: ^( a3 L% D3 q5 Y+ { res.status(500).json({ success: false, error: error.message });0 L. {$ i8 F0 z$ g: `' R. p- G
}2 {& D7 \8 h" h1 M# i' l) a
});9 z7 O" I: F2 I& r! [' Z5 ^# \& [
, l3 _9 t" W( W- b1 q module.exports = router;
) k9 z3 p' D2 r7 }9 E ```- j3 r6 u/ {6 w/ c3 Z! x4 r
6 ~: p( J# S; [ ?4 E! [& [( \' q0 y#### 3.6 注册插件
1 b; I7 _5 Q5 P' E- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:$ o5 P, w o0 q; q/ B: k
```javascript
! ~9 b0 U/ q$ l9 R const deepseekRoutes = require('./routes/deepseekRoutes');
9 y6 V7 |$ V/ D- S, Y0 v& \2 ^7 {% }: w( C/ H! n
module.exports = function(app) {* I0 C2 N; C0 L) \6 O/ D# E
app.use('/api/deepseek', deepseekRoutes);
' ^# {8 s0 q8 L+ P9 `* Z1 y2 d( z };
& C. o+ {! M. W* R& ?- B ```1 V/ z0 x9 I( i2 c
8 w1 _+ N/ A: i( Y
---
3 N2 R/ J1 b: Y, g1 x, ]7 M, m. k. o1 Y8 E1 s* b8 w* U, `" m# `$ `- r, @
### **4. 测试集成**
& `7 F7 X7 `7 X/ { C#### 4.1 启动 NocoBase
; A: u% l: F* D* F) U) @- 启动 NocoBase:! L+ G2 T( \" b- S( W
```bash+ n/ _1 `3 ~! q! t$ e) A' Y) C
npm run start) N& T0 e0 l7 w$ G0 T/ i
```/ j& N% Y) Q, e$ Q
/ w4 w; i$ u _" W7 k0 S) o1 g#### 4.2 测试 DeepSeek API
7 s$ S9 E2 z: u% [1 L- 使用 `curl` 或 Postman 测试 API:
. e% c2 U2 O4 j3 _* ^1 s ```bash
, j! L. F! i. R- ^% _ ? curl -X POST http://localhost:3000/api/deepseek/query \
) E3 d1 l8 K! f! t6 K! q: k -H "Content-Type: application/json" \
9 T9 y+ s# z/ t& J7 ^2 @% z -d '{"prompt": "显示最近三个月联系过的客户"}'
4 F' x9 K4 ]/ | R; o2 i0 K ```& p, c( n$ h( `
2 W$ t% s- A9 F: s/ |) P---. i2 L% }2 {' h) A6 c6 V/ ?+ W# ^: Q
8 n; d8 v! K$ x C4 j, p8 j### **5. 部署到生产环境**$ c" z5 S8 c3 i$ c: N8 t8 [
#### 5.1 使用 Docker 部署' @4 h, Y+ Q$ V w2 K
- 创建 `docker-compose.yml` 文件:# V: V' X& t+ L2 v2 }% ]9 U
```yaml$ t) L' c# h5 Z" V
version: '3'4 Q- }. r' N$ k7 K3 Z0 y' \ e
services:
9 d* f" e; [; h. K/ P app:
) c- P/ O/ O5 P image: node:16
. a1 b: J- c( \7 C* H9 `1 @ container_name: nocobase) Q; G$ ]* C p! d) j' v
working_dir: /app
. y2 d5 c+ a7 F; b4 [/ Y volumes:0 r: |0 {: Z/ e6 a7 [ x3 H
- .:/app* L4 N) a% n8 ?
ports: L: @5 A, L, K7 n, }
- "3000:3000"
* g, r: n, m M! `6 h, y o8 R4 o environment:& c8 s! l+ n P6 ?4 x) D
- NODE_ENV=production3 K- ~$ f/ W( u- v
command: npm run start
3 x* v, d3 v3 R* @5 J* V4 _ db:
1 `+ u, {, o( u image: postgres:13% C' H% n; @* h8 @
container_name: nocobase_db
c* o, d( j. T environment:6 m3 r% J+ J) [4 d5 b& S
POSTGRES_USER: nocobase_user
5 H# [& V. m& q5 ` POSTGRES_PASSWORD: your_password
9 i! }6 l5 ^. |) V$ w" q& L$ V0 G' @4 q POSTGRES_DB: nocobase5 P2 v3 d A' h) I: X
ports:: H7 D% D# k# S5 c2 ]
- "5432:5432"# \1 B2 N2 G" B, J; {4 K* V" l
```
5 p% @5 H* q* v- 启动 Docker 容器:$ E# B: b" d: [; `0 U
```bash
8 e( o- Q, c3 w6 d2 J docker-compose up -d3 K7 C+ I4 Y! i" ^% ^8 }
```
/ J4 [% \$ t: _* I5 a2 A8 ~: p0 I2 F
5 x. g1 x: m, F0 `#### 5.2 配置 HTTPS7 Y, g* z; I7 Z& U! M0 ^
- 使用 Nginx 反向代理并配置 HTTPS:
- F# p" D/ `$ g4 ]* m ```nginx5 u' M" h" `9 j6 T; x* _
server {
3 {, r. A9 X5 k6 Y/ I0 z, L5 I3 ] listen 80;' L1 { _" g4 s3 Y1 s# w
server_name yourdomain.com;
6 x+ @" U3 v1 n( x return 301 https://$host$request_uri;
+ P* q3 ^$ `, Z: ^0 d }
/ M# _ B# x2 b/ }$ ~! W' g8 k. ~% |3 \
server {
: I* t2 e9 P- {+ Q$ e# I listen 443 ssl;; k9 n/ m! a3 w6 s0 l/ c. A
server_name yourdomain.com;0 j, a. d! G' I+ ]
9 P. x+ H3 D% C+ l; Q ssl_certificate /path/to/your/certificate.crt;
$ E2 y8 C+ }, S- ]5 M3 \ ssl_certificate_key /path/to/your/private.key;8 r) Q' J8 B( p% U( [* g
# K. s5 {* R5 B* r2 M1 A
location / {- Y9 t5 ~) B1 p& y+ F% x7 \
proxy_pass http://localhost:3000;
3 c9 z) s) t9 a5 }" o3 {" h proxy_set_header Host $host;8 a8 h/ H+ b' i" l8 R
proxy_set_header X-Real-IP $remote_addr;6 M3 `7 X7 F0 c
}
' p) s8 n: L) t0 X& u- w }
- I4 t) j7 P5 H8 |4 k ```
) f, Y9 b& R7 S% \5 r, j- b* r. p U# c t+ U9 F) }; g- m9 c+ H- {
---2 ]$ k) A% u' _+ `; _4 h$ n
( w4 W8 w0 {3 [8 H" R* \
### **6. 总结**: u2 s8 k1 i% `) B8 Y
通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|