|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。
3 W- v, [! Y/ V8 ^2 L* w/ ^6 D" O# ?0 K8 q
我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。
5 P6 u7 l" j5 o* Z( P, l$ e( T" D" s) p" c
---
3 v. g* T8 v7 e* c+ h1 b2 p
: v( X$ ^* O* k! q" s9 D# ] C### **1. 环境准备**
) v& j/ n6 C- ^. b#### 1.1 服务器要求8 J* K4 d& \4 J
- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。
; g% j% h( N; g d4 X* ]* ^* h- **Node.js**:安装 Node.js v16.x 或更高版本。1 D1 Y2 ]+ M1 _7 ]/ H+ c
- **数据库**:PostgreSQL(推荐)或 MySQL。
. y2 L* F1 T" ?/ V! [# I) [; G8 Q- i- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。) t1 R& M* k# U& ?
8 d' @ w& `( j$ E+ W F- F( Y% ^#### 1.2 安装依赖8 Z5 V/ m9 h- a
- 安装 Node.js 和 npm:5 U( n8 R( X! }! a+ a0 W. y
```bash2 t, {1 z0 @+ O' {. U7 {& @$ ]
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
% d$ }; E) D. W& d6 I( R6 ` _3 f sudo apt-get install -y nodejs# H* k1 z6 N- F4 K6 M2 ?! }
```
% R# I5 R5 F" b; ]$ {' c3 z- 安装 PostgreSQL:
; ? A0 a7 o. f ```bash
8 c9 M i8 N! T8 N' t) u sudo apt-get install postgresql postgresql-contrib
- t/ Y6 k) y+ s# D3 N/ E- p, @ sudo systemctl start postgresql
. U0 j1 ]' e9 v1 Q sudo systemctl enable postgresql( B8 T: [& B# k
```
4 h" P4 z7 Y( a* ^( P
8 j7 |7 V- E+ t9 ?8 d---. e6 [. D& k) f+ ?5 \# B9 r
& S& d3 h% S+ Q# K9 M
### **2. 安装 NocoBase**5 `" J% k' {4 F+ Q5 u- W# c: W, T/ z
#### 2.1 下载 NocoBase
8 e$ I& c8 L; A* ~2 t- 从 GitHub 克隆 NocoBase 仓库:
+ L/ x. j1 ]2 E ```bash
, A: x4 e0 K/ j) V, T git clone https://github.com/nocobase/nocobase.git( Q a( T' _3 v
cd nocobase
2 _, ^+ D- T3 A7 S9 E+ a4 {( C ```, y5 O6 M! J' W- E. ~& Q
: V% T5 L' O) T7 t+ i#### 2.2 安装依赖
- Z; ~- i% ~( V& Z( X. T- 安装项目依赖:
6 m% S& K, ?2 v1 I ```bash- u" r. J, G) W; u# ]4 w. K
npm install# E* z+ N6 }9 i" O7 {' N
```: d& P$ p& t, ?
. y: {0 Q9 l( U- |% b5 D, o& p
#### 2.3 配置数据库8 |+ H, v* y' h% W3 _8 J& z
- 创建 PostgreSQL 数据库:
' s5 d( X) y5 ^2 z8 T ```bash
! h' G& J3 _& c sudo -u postgres psql# u$ ^2 {) r& Q9 H
CREATE DATABASE nocobase;
$ K" W, T; r: c/ d# l CREATE USER nocobase_user WITH PASSWORD 'your_password';
( K8 B9 a+ u2 K, }/ N1 H$ k Y( z GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;
/ s: \) z& W9 H$ @$ B \q2 E; D8 ~" y- |# A* C' y
```/ ~' W2 A7 ^, p
- 修改 NocoBase 配置文件:7 S* F( c7 p# u1 b; {
编辑 `config/config.json`,配置数据库连接信息:4 Q$ q# T3 a1 ]+ l# V# ?
```json4 P' A! c2 y. H/ j h8 w) d
{3 A7 h0 R. e+ Y( E, g8 S* n
"database": {0 U. h* e7 X0 W" l0 h; e
"dialect": "postgres", r3 C, H" K1 E8 P& y5 \0 U- M9 s0 _
"host": "localhost",
) H5 B& s, O6 P1 M5 O! {( f "port": 5432,# y% n. }4 {) j% A' I/ l
"username": "nocobase_user",- J: O1 T6 Y# k6 B
"password": "your_password",; [# k3 b/ o$ n
"database": "nocobase" x9 G# N8 x. b1 [$ R
}
) Y' B) A( b/ u/ V( _' ] } m3 R* W7 G7 I, B' X# V, A
```
, L* w. ^) s3 x; ~* ]2 e9 X
% V2 w) o+ i- _9 F- I#### 2.4 初始化数据库6 s4 X, k; L5 G0 o
- 运行数据库迁移脚本:3 {* @8 i9 |' L3 v3 ]
```bash0 U& e" D2 z! I. ?$ R0 m( Q
npm run db:migrate
0 x, W9 p' g5 `8 i ```
6 ~, W. h7 L( R% g
& B: P* t+ p3 q9 V( n8 O. {& e#### 2.5 启动 NocoBase# I" x; y6 v# `( k4 \
- 启动开发服务器:
% C H* n& W6 b7 r8 O0 u ```bash) t& `$ |2 }; l, ^. o
npm run start
; S. r% Y) \1 V, u3 I- ]' h ```
) A# q0 ^7 X: @4 m" t/ T- 访问 NocoBase:* }* z- Z4 w) C W- }% K3 `
打开浏览器,访问 `http://localhost:3000`,完成初始设置。; R4 a! z) O% q
+ w; C3 T9 a% P7 j+ C---5 c( N! S& i5 W, e4 E
2 \* c' B2 w, H7 X
### **3. 集成 DeepSeek**: n1 C/ R9 `4 d# p3 t4 c2 I/ z4 F6 r! D
#### 3.1 创建 NocoBase 插件
: A6 Y8 G3 {* c: A/ c- 使用 NocoBase CLI 创建插件:+ O; a4 j I+ ~1 F
```bash6 j N; R# }% a6 f- U' q5 g4 t* R
npm run cli plugin:create deepseek-integration3 P' u; Q- i0 t- ]) g2 B
cd plugins/deepseek-integration- I8 G% l6 V/ k% ^4 n% G
```9 ^, {5 z; d, b9 ?6 Q. r& c Q
/ h. N s/ D' Q6 a# B* l
#### 3.2 安装 DeepSeek SDK/ I# E# U$ x! t
- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):) V8 n9 ~$ h' H+ |. v6 W
```bash% @; z/ g4 j8 O/ ?% _1 i
npm install deepseek-sdk
. X' F$ m0 R& @$ O, i- M ```+ e' G! G# j- P2 Y$ {3 k* {: q
* s3 |& B" ?. F; F4 d$ c4 f: e# m#### 3.3 配置 DeepSeek API 密钥 x0 D9 i+ Z! c" \$ W5 ^" I8 f
- 在插件配置文件中添加 DeepSeek API 密钥:8 k3 e) J5 Z& p( U0 A9 V
编辑 `plugins/deepseek-integration/config/config.json`:+ _2 H$ O. D5 W9 p' ]) {# E
```json5 c" m* U( h1 R7 X
{
! r0 f ?' g% e3 K+ X: L "deepseek": {5 k5 F6 p @8 m
"apiKey": "your_deepseek_api_key"2 [% S* A0 {; N4 Z% }
}! j& J, g* v; T& r( v" w7 Y w. g2 R
}, B6 Z% P. A ^5 ]
```1 Y; }- `& t6 I' E4 Y
2 N/ k7 |) J9 D6 F. t0 C/ K#### 3.4 实现 DeepSeek 服务
4 T& ^& m# C; J; u" m- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:; ~/ z R* b" k* k0 {) h
```javascript
8 `4 g& s9 j C0 x+ c# S8 F9 k% d const DeepSeek = require('deepseek-sdk');
& |5 G# M$ d$ N- ^
3 @! E; p! T7 A3 a$ }2 O0 L8 A* L class DeepSeekService {
$ f: W( i7 r( E" m constructor(apiKey) {% L: p% q0 M, G( V
this.deepseek = new DeepSeek(apiKey);7 l8 L- m1 _2 x1 {5 |$ s$ O# v
}
+ k4 K3 V8 L( y
( P0 p; m9 w) n8 K$ Q( Y) @ async query(prompt) {
+ H; S) @$ E9 l1 ?2 v1 Y5 ?0 i" z const response = await this.deepseek.complete({
4 [* S6 x5 G2 @( T0 q; H& ^4 Q prompt: prompt,
' l+ ^7 u( R8 f, M" Y7 M; A max_tokens: 1502 V( e4 K$ q( |4 N7 J/ n5 x
});4 n8 J2 L9 C$ D& x* l p& O
return response.choices[0].text.trim();
1 A$ _$ U* E7 B H$ T% H }$ ^$ g) d1 z0 H$ ~7 M
}
% t: D3 e8 C; e) v* ]' Y" D3 B2 {4 u5 i2 W
module.exports = DeepSeekService;; W& O1 R- p% W+ |: R+ f# s
```
$ \$ i4 E4 F4 N8 f
1 K1 o* H9 f5 ]4 }0 I' W2 t#### 3.5 创建 API 路由
3 Q' W8 B% D0 W* ~' g) g% |- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:
1 w5 N/ X S8 p8 }4 q+ n% ~ ```javascript
9 b8 w a% ?* D1 A0 S1 }0 N const express = require('express');
! n/ N0 P/ x* E. J const DeepSeekService = require('../services/deepseekService');
) V S0 s9 @5 k2 w* r const router = express.Router();" H9 M' n2 F( ?# C j
const config = require('config');
8 K* E; Q( [, ~3 M/ }" i" f1 Z4 f3 F- ^" C, }
const deepseekService = new DeepSeekService(config.deepseek.apiKey);* i9 z3 r B& e+ u0 X
! r' g0 s, h0 S ^1 M- d2 p
router.post('/query', async (req, res) => {
+ q+ M$ D% k% ?2 }/ q* C' H const { prompt } = req.body;
9 P5 n1 M% i& E; C try {$ F8 y, j3 f# F5 k) y- Q" u N7 z
const result = await deepseekService.query(prompt);
$ g5 B8 e! `0 L! m) b7 h) W2 J res.json({ success: true, result });
8 N. c) `0 Z% y! o2 ? } catch (error) {$ c# ] B1 k+ b- ]) o; V. l( T& @
res.status(500).json({ success: false, error: error.message });
4 Y6 u& n4 N3 M }
) u0 Y/ o( a. Z( }6 \ });
) a2 ?5 W& ?. D* \8 T$ }* d* M p4 z( d# n( h/ g
module.exports = router;* q# \( N C* J. S: y
```
* N8 D9 R- ?& Z! z M6 d
0 V$ K0 R8 C5 j! c [#### 3.6 注册插件
# Z g! K F, t8 o$ p/ w' Y7 o! V- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:$ ^% x" s, x8 l7 e1 S: [
```javascript
0 q9 G1 \% p6 _ const deepseekRoutes = require('./routes/deepseekRoutes');) z3 Q& ~ f9 y, [7 K- Q
. c" P+ d7 H/ f module.exports = function(app) {
0 [4 \/ Y' o5 D8 W H% }0 d5 f app.use('/api/deepseek', deepseekRoutes);
5 {! w, y4 T$ n' E4 J4 f };4 \+ E h7 [, {# p7 H/ f( e
```
3 d- e: W; T2 a& c8 S9 C; y
. w/ [4 W. {3 I6 {* u---
* {* ]% h$ M% o6 A, S
, B/ _* u+ i$ A- [4 ]* w### **4. 测试集成**4 y# \+ e% m; O8 B' Q4 p, ?
#### 4.1 启动 NocoBase# J4 H0 D' L3 d
- 启动 NocoBase:6 u( I) I2 F/ Q$ n
```bash( ^5 I, H( E" n0 `3 _7 e/ y
npm run start
- M# m s: a4 E/ M' c$ ?5 u5 K# b& ? ```
5 G! U: l+ T4 c$ E
7 ^& h0 z# ?3 z#### 4.2 测试 DeepSeek API
2 d! m- |2 B/ G% V4 a! V7 \% F- 使用 `curl` 或 Postman 测试 API:
0 ?3 T) C) m, P, T& t: l& ~ ```bash
9 d/ n5 u) p, p. s9 j* U0 O5 N curl -X POST http://localhost:3000/api/deepseek/query \
+ C. P& P. _# U# j2 L6 n. U+ T -H "Content-Type: application/json" \
: E5 ]- l+ D3 b6 [* ]; { -d '{"prompt": "显示最近三个月联系过的客户"}'
$ o: p. y8 }% j% E5 z ```1 e2 U |8 |. l9 g
1 U% C% F, e8 m( C9 k
---7 D5 i+ M; W: i4 m6 h7 c0 S
8 X1 F2 r) T& G2 e, f### **5. 部署到生产环境**
2 i* n! o4 H. Y/ j2 J#### 5.1 使用 Docker 部署4 B; m% d; n. j# c. J1 q' w
- 创建 `docker-compose.yml` 文件:4 `% Y" W& F# E7 s1 v
```yaml
' x8 {( ^7 z& v4 T version: '3') u3 k# A& M4 o$ [
services:! v3 N) x2 Z; v4 V; t. z8 k+ f
app:
2 _7 P; c! s5 o& f4 m) h* p6 @' c( @ image: node:16
( G m: b Q; @ container_name: nocobase r% y" O M; G9 P7 r+ I
working_dir: /app
) i& q* X1 ~' H+ `- N volumes:
4 [! S4 g8 W! T; n# f - .:/app
c4 o4 U! B2 ~% Y+ J6 ~0 B ports:0 E# V. u/ F$ E, t
- "3000:3000"
3 m3 J& |! z2 O6 q environment:
1 ?* f8 Y( L ~1 l* i. f" E5 ^) { - NODE_ENV=production- f' ~; B% m- y$ X( P8 \' {
command: npm run start
. ~* w- h* D2 X+ i& t db:& P \3 ~- O$ p5 g$ h6 j* f
image: postgres:13& M+ n. U0 D( i |$ P! } ~8 {
container_name: nocobase_db
8 W8 Z. `# y Q3 r environment:
: q; ?6 E, E9 ]5 k5 I \ POSTGRES_USER: nocobase_user# E& ?3 Q+ y1 D. ~4 p5 E8 l8 v
POSTGRES_PASSWORD: your_password( v6 a- i7 r! i+ L5 Z$ o' C! A2 v
POSTGRES_DB: nocobase. V2 J3 m3 A% }- K/ @
ports:2 ^0 A, c( V. f8 M# b; w* |: [
- "5432:5432"9 k! x. ?8 W3 U. ]: C- s \
```
6 A* g& x" G7 r1 }- 启动 Docker 容器:* A7 G4 R: a9 p3 x/ P) Q# ?
```bash& a& q1 p7 n( t" {
docker-compose up -d2 B% a+ l7 H" q
```
" O/ u* K( t! }& |: y0 K# R0 G9 N6 Q, U
#### 5.2 配置 HTTPS- d! @, g' X. p' b, X
- 使用 Nginx 反向代理并配置 HTTPS:$ x, F2 q: a0 r% p: i, X: e
```nginx
3 a5 W: M* g1 J/ Q6 h6 g& D server {
) u3 L g. v; p0 q1 |7 r1 l5 l! q listen 80;
- t3 [+ ~: d- F/ c. R, l) x server_name yourdomain.com;
" \2 B! V% U! X& A+ L$ k return 301 https://$host$request_uri;
3 O# k/ K9 Z' M$ `7 {' B! e }( A4 S4 O2 r; g+ `" U
% I. _' j. j$ ~$ T" b( r
server {
7 e! J5 p: R4 w listen 443 ssl;
' @' t( O9 { V) b+ G3 J: V% Z server_name yourdomain.com;
+ ?, \0 I3 {5 z# E% Q1 o) |
9 k! D2 t; k3 g4 P6 }7 k% A# ]$ n, b ssl_certificate /path/to/your/certificate.crt;
- |- @0 g+ I2 p: T; y0 \ ssl_certificate_key /path/to/your/private.key;, B) T8 C0 t) y: E1 C
( S0 G1 z: y5 Y# d7 a N location / { `& y5 q7 ^' h/ s6 V5 T/ m
proxy_pass http://localhost:3000;& G9 i) d6 ?; t# F; |3 J% I; X+ L% i
proxy_set_header Host $host;
5 j* R; l' E3 P5 ? U proxy_set_header X-Real-IP $remote_addr;
8 d+ ]8 M7 H1 e8 M$ x# } }
( u. ^. m# F2 w }9 v0 M6 {4 Y' x" A- H
```+ q: w; U# k1 @
" K" f: Z" C6 c+ c* D' P7 i! M---* r3 o7 G& j( z- t: Z
/ N1 B, c7 `; S0 u7 L### **6. 总结**1 U( {3 N. f% Y! o, `" n
通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|