|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。
* J. K5 C; I! o% T7 c7 g4 z
; f2 g1 w9 [8 M, ~我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。. U# G7 m7 `& e( V4 L" i
# }! B* L" }2 S1 ~* n# I& S---9 X6 c. x$ l7 @" A' j" x* B- u
4 g. o6 H8 b' [ C, w6 C1 S### **1. 环境准备**
9 Y: k0 p, F; A# J5 t#### 1.1 服务器要求: |# G: r `2 Z* s9 F
- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。! ^" x6 A/ u) a' H `1 E
- **Node.js**:安装 Node.js v16.x 或更高版本。9 J n8 Y. N- I0 s* \+ i
- **数据库**:PostgreSQL(推荐)或 MySQL。4 X7 F( @; g* |5 R9 o' s: A
- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。
* M. L$ [2 `5 B6 K, t, y1 Y R& K/ K6 w, G2 [% o+ x6 b
#### 1.2 安装依赖
& j3 d$ B: G2 M0 a9 [7 _& P) S- 安装 Node.js 和 npm:
3 J' i, a6 k. K# N$ x ```bash; r; Y4 i8 D- C8 ^2 C! i; b
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -1 Q3 M! ~* A9 O% K" U, y2 t
sudo apt-get install -y nodejs
( u6 G7 x# C8 Y, K5 n ```6 u5 ^& \3 K- |) _6 m3 |* q8 O
- 安装 PostgreSQL:
5 e8 x1 T4 v3 |5 y- y! k ```bash2 r7 L- b8 G e8 C$ a/ B/ z
sudo apt-get install postgresql postgresql-contrib6 F: }1 {" ?, [1 g8 t; y/ i
sudo systemctl start postgresql
/ ~6 q# ?6 P% R- b sudo systemctl enable postgresql0 s i, J1 t! [, y, i8 I
```: Z' r* D0 c3 x# X e0 [
2 U! a6 l- }# J) Q1 p: H8 {---1 P8 o# A5 X% [$ j0 \) x
- A: q3 _$ X9 b### **2. 安装 NocoBase**+ A* v9 H) L; c, z7 Y7 T3 |. l
#### 2.1 下载 NocoBase
7 ?/ C5 c7 L" x1 m- 从 GitHub 克隆 NocoBase 仓库:
! V% ~' U) V5 u- E/ U8 I5 Y ```bash- E, k: N) w& ]. b
git clone https://github.com/nocobase/nocobase.git
+ L% r+ `9 A5 p' i% R cd nocobase
3 v7 m+ V6 C. t ```/ l+ e" @# F. i: R
: b4 e, @& P; n7 @1 q2 `% q+ b
#### 2.2 安装依赖
# h3 {- d* \+ c( ]2 o4 y4 J" H- 安装项目依赖:, }- S( _/ w) m; z4 A6 e
```bash2 \8 |) i4 ]: a4 S
npm install
+ a! D# l' A7 k; M5 g S ```
& }3 P/ R! e4 T9 i2 z5 ]
+ w' k/ M' t& Z1 Z, Z/ E#### 2.3 配置数据库
* }5 _( v$ r' e0 E- 创建 PostgreSQL 数据库:- ~6 f# Z6 F5 {$ P# l; Z, h
```bash6 p2 H" V/ z6 w9 x
sudo -u postgres psql
" n) g. M% h+ t u CREATE DATABASE nocobase;) x. g% W3 X o, W
CREATE USER nocobase_user WITH PASSWORD 'your_password';
- X1 g; l3 O% F7 f4 E6 I GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;
1 d& C$ V4 j; \+ j" k& b/ z+ { \q% f6 z1 z! C$ c4 ]5 X* @* S
```
& f+ `/ \& m, o' W; U- 修改 NocoBase 配置文件:
: n- N; Q ^# U; U1 f6 U& m+ X* R 编辑 `config/config.json`,配置数据库连接信息:& ?" G3 |1 F9 |+ ~& l2 U3 ^! N
```json
( G* P/ }, O) ^ T# y9 D( p+ C- m {
/ z8 | n/ s# |! z2 G "database": {
; Y6 @6 i/ ?1 u* f1 z$ ? "dialect": "postgres",
( P, K7 a8 J% P3 ~: b. ^ "host": "localhost",6 J- j: ~2 j* `1 C/ }1 i
"port": 5432,
! l: A4 R: S* m, P/ A Y) C$ J "username": "nocobase_user",
2 `7 j- D8 e5 Y- d. ~ z2 [ "password": "your_password",, ~4 h8 D" i* Y* m4 A2 |
"database": "nocobase"
1 V u% b- M- h, M6 [% a }
# t" c4 P* U2 K' r/ y: @ }" b: U% w' n0 M* B0 S* [) R
```5 m/ w# b9 O, C6 a3 g
4 M( o5 x* z* W8 o: I1 U#### 2.4 初始化数据库3 B& a5 u- X% U# u1 |+ z9 z! S
- 运行数据库迁移脚本:
& _3 U' ]; Z% e+ N8 l ```bash' T# m* Y) n2 U! ~9 _+ K2 G: h% b
npm run db:migrate
. u3 q A/ P' M& S3 w1 V( g& ~ ```0 Q( q, H$ X+ w% h# X
6 j6 O# X& [. T4 X/ k- O5 ~( q6 N#### 2.5 启动 NocoBase# Y# `3 [- e6 u/ S1 U
- 启动开发服务器:
4 s% d @; N e: M ```bash
& d2 m6 N. u5 J/ l' s npm run start
" L) h1 V, Q: W ```
8 e. F& u) K/ M" z- 访问 NocoBase:
6 ]7 m/ w8 p8 | 打开浏览器,访问 `http://localhost:3000`,完成初始设置。
) J& H/ W( A* L
: D$ ~3 G4 T5 A---/ d* m* k7 W; y+ z; E
8 u+ G7 \0 L+ O% D### **3. 集成 DeepSeek**6 f; r% n s/ J( o9 R M
#### 3.1 创建 NocoBase 插件
* E# i6 h8 i" m: c2 S* \/ t7 h; Q- 使用 NocoBase CLI 创建插件:
- x& o1 s v6 ]/ q1 r ```bash
1 \" Z$ W# K% p! {: J( l/ M n npm run cli plugin:create deepseek-integration
6 D7 ~0 P9 F3 a+ K# |4 o- J cd plugins/deepseek-integration
1 z# _. Y, {. i3 t/ v# ~( u ```
$ e7 Q4 ]7 X2 E7 L5 C
/ c! t0 M$ y: g#### 3.2 安装 DeepSeek SDK/ f* r+ \) E& j- W
- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):
9 e0 A/ H6 X3 @* I$ ` o ```bash# D8 U' b. r$ R' ?4 P7 P3 r
npm install deepseek-sdk
: ~7 c7 U2 G( J* L& t$ T( i ``` w. j/ G2 f. K3 J
$ ?$ J7 A% `# k0 W- [#### 3.3 配置 DeepSeek API 密钥
! v Y! b; x8 ~! L) a) Q: _- 在插件配置文件中添加 DeepSeek API 密钥:6 W: Y6 T& W. a$ w8 Y- m/ Y
编辑 `plugins/deepseek-integration/config/config.json`:
6 _ W$ r8 ]# D U- ^; \( ~ ```json" M4 J3 s; M! Y* M: u
{* F6 p5 D7 O' T, J5 B. ^
"deepseek": {# o: M- a q. ~) `
"apiKey": "your_deepseek_api_key"
% a+ c4 N) d& G' F }
( o; X- [" t! C* K; m$ V }- M( j4 _" P) N h4 ~7 [
```! B, m* j4 F" M6 o/ J
4 X* Q5 J% _$ T* U
#### 3.4 实现 DeepSeek 服务: E8 z1 X5 C6 d# O) B- P
- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:* g$ q8 q T& \ x, Z# }5 x; e5 U* f' ~
```javascript
% {( J" F: ?* j: } const DeepSeek = require('deepseek-sdk');* F5 r. x6 Z" _2 ~
3 Z. Z0 F8 c3 o( m! n
class DeepSeekService {
- g- ?8 {2 T' c4 I5 Q2 f constructor(apiKey) {
# |9 N4 ]& [# z+ n1 D& D: n this.deepseek = new DeepSeek(apiKey);
# j8 _- D7 {7 Q) M2 {* ~9 m( {5 d }
" X$ h9 B9 V1 x8 J2 n$ b& i
6 V6 t" _5 m ? async query(prompt) {
- ^+ m9 X% _" c& F8 @9 F1 B const response = await this.deepseek.complete({
: v ~9 _8 v+ \4 R; i2 J0 |! _ prompt: prompt,
: C0 L& F: P* W$ e/ I7 R8 Z, ~5 k max_tokens: 1504 }) [% O {& ^* ~2 d. ^8 V
});
7 P9 T \1 Q8 |! V S& C# r return response.choices[0].text.trim();
0 W; `7 v2 g; a* B }
- l0 U& b$ |/ x$ `$ Z }8 o' Q/ J# v; q8 F7 D; e8 q6 o
: n8 G1 T" ?6 I+ `) [ module.exports = DeepSeekService;
' S& S) [8 d2 d3 U6 t) f; Q ```
6 l c% ?* \: c- p& s
# S) Z4 Q+ Z# T0 S, d1 g# Z#### 3.5 创建 API 路由; ^/ D0 C, f9 r7 L4 e; U, P9 }
- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:
$ J) `0 N/ d1 I ```javascript
0 v! x* e' P4 ^% ^ J; } const express = require('express');
2 f* D1 W; M( }8 y& j const DeepSeekService = require('../services/deepseekService');
5 k1 G/ X! P, @6 b3 ?/ K2 ?; A const router = express.Router();
. _7 h; k$ P8 p6 N! T const config = require('config');8 G7 Z2 x0 v9 \
G* m- b% ~1 p5 c3 _; G
const deepseekService = new DeepSeekService(config.deepseek.apiKey);
0 I2 e7 B- C& _1 j: I6 }
( U. Q1 m; V5 U9 c& C: m router.post('/query', async (req, res) => {+ B8 j, c' b; r1 D, F6 C5 T: z
const { prompt } = req.body;, P' W/ L/ R B0 W
try {
$ ]! T! C8 g. P6 f const result = await deepseekService.query(prompt);1 p c4 z7 [+ w9 G* x
res.json({ success: true, result });! i( P2 V$ i1 J1 e
} catch (error) {% d! U1 a; M* I2 E" ?0 w! j8 L3 i7 B
res.status(500).json({ success: false, error: error.message });
& J8 C- T* g7 p: V' K$ w* h }7 q! ^" |/ p# w- Y% G2 {8 O
});
" `- A' X$ V5 Y# u) q% Y4 m2 A5 }
! r# P7 b2 h' z- A9 m module.exports = router; b t* s0 Y# Y* k
```" w& }, z" u& o& X- M
+ \! d" r% R- ^$ k9 |#### 3.6 注册插件# \5 t W3 k5 @: Y: e
- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:- j0 ?; ~( j) k
```javascript
) v' ~. G% U* [ const deepseekRoutes = require('./routes/deepseekRoutes');
. i+ [- \* L6 @$ t
6 s( i1 B& ]5 [! A3 f1 p module.exports = function(app) {
0 v8 k- o" X0 z$ C( N% u app.use('/api/deepseek', deepseekRoutes);! p6 A4 F J/ B* p; Y" e3 [* [0 _- O
};
+ v3 q# z/ |5 T6 l9 z$ Y: f ```8 h: e2 I( o8 n8 B1 [' L
% i9 P1 `, v4 m; g: Y
---
2 D9 M+ ~) j. }; y. u) u4 h$ W, K# p' J" f
### **4. 测试集成**
; O0 N8 {( B o#### 4.1 启动 NocoBase
% k( _+ m8 t2 o9 M* V- 启动 NocoBase:
7 I. F* e* D r: \6 N7 {% y+ l- v ```bash+ r5 r- _6 Y( f i' G
npm run start
4 Q: f, Q* g# u; Z/ j ```6 G6 n* T5 D3 s
3 L5 J8 {- R% o( e8 u; q, F) o
#### 4.2 测试 DeepSeek API
: j- M+ @( V1 O w& u- 使用 `curl` 或 Postman 测试 API:
h; b- h! x1 Z% Y2 p R ```bash% W! S! s& d I5 s6 N& `& _
curl -X POST http://localhost:3000/api/deepseek/query \5 M1 Y( C X n& E
-H "Content-Type: application/json" \+ J3 z# R. ^. }# B7 o2 }+ ^
-d '{"prompt": "显示最近三个月联系过的客户"}'
5 Y( m" N9 T- [2 p4 ~5 z$ O ```
+ a6 G9 s% t; R: U) M% v8 B
! N6 U% x$ w7 q% }6 p* }---
8 x! r3 T$ z9 F- x/ E( _
/ s" e i! F! L7 y### **5. 部署到生产环境**+ _. I$ `( r; `
#### 5.1 使用 Docker 部署
+ J4 u# R" U6 O; m# l$ M+ q4 A- 创建 `docker-compose.yml` 文件:/ i( K- v7 \/ o7 Q! u, c; U* [7 l
```yaml( P3 V" D: J- I! _% d9 X
version: '3'
& v% v, J8 u; N* |: g/ M7 e4 e services:
) V9 _; c4 Q. D app:3 L* }9 I$ o T3 J1 M
image: node:16; l6 B5 e% u6 o/ ]
container_name: nocobase% g; C' W0 o5 H& U! j
working_dir: /app
7 v7 A0 {; _& O" k! Q+ ~9 T8 A volumes:
. \- T! g& M4 J1 Q/ c% Z$ n - .:/app
, n/ R4 x' B' Q$ ?4 u ports:2 Y; e( g n( _ ?6 H
- "3000:3000"
2 Z x8 E3 [! t9 L& Y7 P( l( a environment:# x* `9 n }4 h3 K! f
- NODE_ENV=production
1 u7 R q! x" Q( j0 K0 l* p2 D command: npm run start
2 r6 L& e8 a0 p8 q' g db:
5 i3 Z9 Z/ s s# ^0 v image: postgres:13# m& T! v2 G6 {
container_name: nocobase_db% p/ |( K5 P9 M
environment:- t0 ]( |4 E5 L
POSTGRES_USER: nocobase_user
) F& G% \1 `& b POSTGRES_PASSWORD: your_password# z6 n' ?) O4 O+ N7 Y
POSTGRES_DB: nocobase9 b4 U% X- [$ U
ports:
+ w, I% r; @7 T# H1 N* g - "5432:5432"4 L, m \2 b2 n2 W2 s# `# e* E' ^. U% O
```
' R a- ]3 D& P7 O- y. t! {- 启动 Docker 容器:- D$ M" _+ Z. N+ M. a
```bash
) e( u5 m! n) T docker-compose up -d( g5 `. f s8 t G( e
```
# r1 z# h1 g- \ ?! z1 F4 N
) z0 V* X4 C. {! t# V3 S7 y9 s& t# A#### 5.2 配置 HTTPS' c2 @3 |* @' k0 j; d" _9 j: L# J
- 使用 Nginx 反向代理并配置 HTTPS:
+ x2 w$ t) X8 F! T6 e; F ```nginx5 |, ]3 G C8 B" K
server {2 V" I/ L j1 e6 E. `6 H
listen 80;( M" u( s( X+ v3 g" Q% A
server_name yourdomain.com;" s6 M) w; H& e' S) ]) `
return 301 https://$host$request_uri;/ B0 O4 L% M6 ^! @, q: Z
}7 o2 N# N/ h& a3 _( w2 @
- l- Q8 g, G7 H, [1 w3 }
server {
4 O$ R: j, u! J5 v. @ listen 443 ssl;
! @, T+ @" a: a* {# l server_name yourdomain.com;
& A. K" H" f5 A' R+ h1 ^- p
5 f: \) Y3 c% Z& A5 F* n. C$ d ssl_certificate /path/to/your/certificate.crt;
% Z% s `& `: R6 g6 M ssl_certificate_key /path/to/your/private.key;4 \0 ^, @- ]- C( i; O
- @3 k5 G3 }5 [. C& R
location / {, b2 E( I% P& B3 E
proxy_pass http://localhost:3000;
% G/ L! J; \5 k1 k p. q7 g proxy_set_header Host $host;
: i! o* r2 K8 P4 N2 P proxy_set_header X-Real-IP $remote_addr;8 V' S/ k ^( A$ t6 `, Y
}# w) K3 U/ e' {- ~3 S
}
0 B: D: v; |, f l) w/ i ```
9 F. G( C6 A9 v7 j9 n( C4 F" s. j4 g4 v& G7 a& }
---
- ]; n, b& n$ m/ ~
& F. ?; g6 |6 o/ ?+ m### **6. 总结**
/ P' l) `) ~( @9 ]% u0 z通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|