|
|
楼主 |
发表于 2025-1-24 13:35:19
来自手机
|
显示全部楼层
以下的操作步骤,帮助您将 DeepSeek 集成到 NocoBase 中。) ]: n7 d- b/ J4 Y; j; `* K
, _+ t7 h3 F8 v5 {
我们将从环境准备、NocoBase 安装、DeepSeek API 集成、插件开发到测试部署,逐步展开。+ M; y& ]8 R6 v& e
3 }" x2 D# S7 K$ s( d8 u% l% [
---2 O/ c' z; c! _5 ~" s; N9 g+ _: b
& f8 j! O0 e- @9 f. B
### **1. 环境准备**- B7 z! ?- R) h r( x
#### 1.1 服务器要求, w! X5 R. b3 v0 t3 m' _9 C: D' A
- **操作系统**:Linux(Ubuntu 20.04 或 CentOS 7)或 macOS。& u% Q" U1 G% P! f' W* ~' W, [! i
- **Node.js**:安装 Node.js v16.x 或更高版本。
) A& S9 p3 ?# G1 F. E- **数据库**:PostgreSQL(推荐)或 MySQL。
% t+ R; G9 H8 b/ l1 L5 b+ N- **DeepSeek API 密钥**:注册 DeepSeek 账户并获取 API 密钥。
# b j! v Z% f6 \" a3 D) O) [$ x3 D `% e, Z3 _( [% C, f6 V
#### 1.2 安装依赖
4 W# A3 f5 }; }; Z- 安装 Node.js 和 npm:3 _3 u* O+ `+ A1 I; X
```bash9 e; L1 y' d5 l4 ^/ p9 m
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -) |8 W4 u( M2 f, r8 r2 [
sudo apt-get install -y nodejs
7 k9 B4 I: {3 [8 R% F( y ``` U6 O9 C$ ]8 `2 d5 [
- 安装 PostgreSQL:6 n* @/ w) ?, t1 D
```bash
6 [/ u U# I' P0 l6 N E sudo apt-get install postgresql postgresql-contrib3 d! ?; y" L* i6 _
sudo systemctl start postgresql) Y: X" D& R# u5 Z9 d2 Z$ W: ?; f
sudo systemctl enable postgresql, H) }! e& c/ s
```/ q# ^% T/ a5 F! |3 Q% t
N$ |9 ?! m1 Z/ M; Z---+ \: v5 f9 u, p1 d& L" B' [; h
6 T; {1 ]" Z+ Y( \ C# B
### **2. 安装 NocoBase**
9 t6 M5 q, J2 l, N! M#### 2.1 下载 NocoBase
, J/ d3 h2 z/ d- 从 GitHub 克隆 NocoBase 仓库:
w2 P8 b8 I9 Q# Z( s ```bash6 B9 N- V! l$ H2 a0 V
git clone https://github.com/nocobase/nocobase.git/ ]7 T) M- R9 y: X" k
cd nocobase
3 v3 @3 D2 j* J; v: w* x ```
2 e' j# K7 H4 c1 e7 k
3 p! O- K! \1 d#### 2.2 安装依赖
- _/ f. E' M) Q* ]4 O- 安装项目依赖:
, J2 f. S7 J; E ```bash, M6 n8 s9 a" V/ r3 b1 Q
npm install$ f2 s& q E! N ~, v
```
$ F3 W0 v- Q7 Y2 B! t5 u- z
b' E: `& ]! \& F! f7 I6 q# l#### 2.3 配置数据库! |" s! [/ q1 ~2 b2 J, w/ X
- 创建 PostgreSQL 数据库:/ x: I. i( w( G3 Q0 v2 Q1 g7 @
```bash; ]. y I8 y6 z5 F
sudo -u postgres psql
4 ?( T/ |; p" @' ~. o9 X CREATE DATABASE nocobase;
Z5 W* v" [) H0 ]4 G3 L CREATE USER nocobase_user WITH PASSWORD 'your_password'; r6 e: b/ w9 G; }+ X
GRANT ALL PRIVILEGES ON DATABASE nocobase TO nocobase_user;# p; w0 H" Q& x4 f/ n* w2 @
\q% h$ O4 D% T% L: Z3 V
```: P( W" y9 l; ~$ d! [4 p
- 修改 NocoBase 配置文件:5 R) i* s4 `: h m4 [
编辑 `config/config.json`,配置数据库连接信息:
5 J" `: d+ s8 X: `4 q ```json8 e6 G3 p/ q+ F& R- e# v
{+ i" c0 Y& X' w# c
"database": {' n+ [( `2 |+ X' k2 j
"dialect": "postgres",
& h! X% o+ w! b2 q8 h" [ "host": "localhost",
3 Q1 q( z1 g9 \/ Q "port": 5432,6 L8 D: a1 W [( ~. B4 H5 P
"username": "nocobase_user",
! m9 F2 L6 S$ a* b" q8 C/ Z: ^ "password": "your_password",$ d/ R/ M( \" `3 H$ A: {! L6 \1 z& W
"database": "nocobase"
# n: p' f( \) J2 V6 E$ U g" C }
k$ ]; g1 m2 \0 m) g5 [5 e }
: `: M' ~* _# ?) ^; H7 w5 d ```
3 m/ P1 x& }7 \# F) V3 _' `9 M0 n$ C U2 S; B3 ]
#### 2.4 初始化数据库/ t% h l9 A7 H! ]' Z1 r2 z1 ]
- 运行数据库迁移脚本:
* a, Q3 A1 c2 @6 t* O ```bash0 ~3 z2 g) i* H- C
npm run db:migrate: }5 x* p" S: U( H6 r
```( T- I4 R3 i) E/ e; ~/ j8 [
) T6 m5 N) T' h7 K. ?& H#### 2.5 启动 NocoBase3 y" f8 r8 A% s7 K0 d4 u! R
- 启动开发服务器:7 f7 y- ~/ h* r$ _& c! `
```bash0 M3 K4 e1 r$ e- Y' l/ K
npm run start
) f! F4 ^8 h: G# @+ l |/ g ```
6 A2 M) i2 a9 R! F& B1 F3 @- 访问 NocoBase:7 }- z+ a/ S$ Y' T7 O* {
打开浏览器,访问 `http://localhost:3000`,完成初始设置。3 f1 p( P m A& N2 @
0 k& d9 v' P6 X; S+ i) Z: n& D/ S---
9 D: ^2 D) ~3 E/ o. I
- ^# t0 O/ X7 h5 S- P+ s### **3. 集成 DeepSeek**
* n9 `1 c7 o: [#### 3.1 创建 NocoBase 插件
' e" V+ C1 \, v( h( J, X- 使用 NocoBase CLI 创建插件:
' t J) Z) m6 C/ ] ```bash
2 Z0 U$ n! F9 i! f npm run cli plugin:create deepseek-integration# S5 [4 W9 c3 h. O$ q+ K) U
cd plugins/deepseek-integration
; B5 r) t9 P0 [1 @+ a% Z ```
6 Y3 C& b+ i7 i9 {9 x" N# l& a; Z; d
#### 3.2 安装 DeepSeek SDK7 _0 R6 K- x' I/ H% z3 G8 s/ B
- 安装 DeepSeek 的 Node.js SDK(假设 DeepSeek 提供 SDK):$ C% p: q' U. a; ^& O* ^! h8 Q
```bash
5 k2 N6 b! X3 F: U$ R" m9 F npm install deepseek-sdk
: v- x9 W/ v! Y% g' h ```
6 s A7 e0 @! F% l5 c. g0 H: m; K" f8 X; V# S
#### 3.3 配置 DeepSeek API 密钥
}; C6 i/ R7 f1 F- 在插件配置文件中添加 DeepSeek API 密钥:% I* h, Q! [8 d$ |4 Y
编辑 `plugins/deepseek-integration/config/config.json`:2 K: s. \0 a' O1 h+ X( y
```json" G" p. E3 W# p4 a3 m
{) l* _: J5 b( Z- |
"deepseek": {
+ G% @& m' |6 ~8 b/ G: Q3 i, o "apiKey": "your_deepseek_api_key"( F( ]- `$ D3 Q: o. S1 w3 _2 ~
}
2 Y; S% V$ d( }5 ^, j# v }, i0 X% n) v1 ^5 p; z" E9 P% [
```) ~1 E! ] q; w/ d, y4 u' N! p
( r# }/ k T$ |; a/ g& d# K
#### 3.4 实现 DeepSeek 服务. P% u* e# R1 T6 |# K1 x% R* K
- 创建服务文件 `plugins/deepseek-integration/src/services/deepseekService.js`:; o& [2 d2 [ a+ L" m& F! c1 k! q
```javascript
/ b1 S! i3 m0 R) h/ a9 @$ \ const DeepSeek = require('deepseek-sdk');
1 [6 \/ p# v- [% Z% c' p( b2 l5 A ^' i) ~' p
class DeepSeekService {
9 R9 L) \/ E% s* t) I; G9 T constructor(apiKey) {
0 j2 C2 b8 k6 Q& r, k" y' | this.deepseek = new DeepSeek(apiKey);
; b" r; L: e- }# t1 |: c }! J* p* b2 Y' t8 \
( Q5 F7 k6 u/ M6 a0 @- V
async query(prompt) {2 s$ c# p+ W" m6 a2 }, l s) I
const response = await this.deepseek.complete({0 `" S- p; x# k8 A, L5 O5 W
prompt: prompt,
" t2 X9 U/ n, r6 g$ O' P9 b max_tokens: 1503 {7 A. U- G V1 N
});
4 R' z( ~2 Z7 |" ] return response.choices[0].text.trim();, L; T" b6 g; @( M7 l: D4 m
}
; a' S) a' r5 v$ }4 { }: i2 G1 J( V7 R0 |2 n. E
! r% T y6 I0 K& i module.exports = DeepSeekService;) t6 Z. \+ V+ ?
```
/ U! W, j& L9 ^1 b+ ]) k
2 E! c8 e8 x; T( B#### 3.5 创建 API 路由
; t p3 _- `& J1 F6 w- 创建路由文件 `plugins/deepseek-integration/src/routes/deepseekRoutes.js`:
) a2 l0 I r$ X2 g; y ```javascript
! s% p* o, T& ?: Z' J const express = require('express');
7 S1 S' [) B; @+ z+ E M( w const DeepSeekService = require('../services/deepseekService');. q+ n: Z& D# ]7 a
const router = express.Router();
6 l+ W+ V9 f6 A4 [$ F8 W const config = require('config');: T0 M4 J9 S' z v
& {7 D- Z s& m j
const deepseekService = new DeepSeekService(config.deepseek.apiKey);/ l x' ^* Z D1 I4 K% S
' l! f: B- K( R0 E8 T) g
router.post('/query', async (req, res) => {
/ N( F* p9 h8 U# ^ const { prompt } = req.body;; R* Z& H- W2 D& P/ R
try {2 e/ n. z0 h4 L4 g s/ R+ d. n+ w
const result = await deepseekService.query(prompt);
8 h. f0 N' {1 H8 f res.json({ success: true, result });
+ ]9 r& i" X4 Y n$ O- r7 ?; c } catch (error) {
' w2 z; G6 a5 d0 R, ?$ g4 A res.status(500).json({ success: false, error: error.message });, b' U+ V U3 u# P' b
}
& n; Y' v6 I S! Q7 G });
% l6 ~9 h" i# {. l" K4 x2 b8 r, V( ]( M/ C8 m+ g
module.exports = router;' {% ]. Y; T8 G7 ?+ Q
``` j5 j: A- X7 m; r9 s
" f3 |% O, u3 d$ H
#### 3.6 注册插件. k- P0 o% o( o5 _- e! B+ z. M2 Y
- 编辑插件入口文件 `plugins/deepseek-integration/src/index.js`:7 X- _2 s d! G ^0 O" K3 C* O8 P2 K5 R
```javascript
3 D- u" @, I# f( @# @$ x! j const deepseekRoutes = require('./routes/deepseekRoutes');
% E$ B: U" @: m: W$ s% t% u
: \$ j! t% s. R) W" @ module.exports = function(app) {
6 H1 S( U1 U- H app.use('/api/deepseek', deepseekRoutes);
7 ?( c) I0 x3 J' c };* D% q! i) r. U/ M2 i
```
# F. F! E7 L8 U6 |6 b6 S% k1 h1 T4 i) i6 N+ M+ _) C* y6 f
---
+ s; d, v$ T# Z/ l
' J* h* J9 [3 q& J3 E### **4. 测试集成**
9 L9 @, V ?8 P. N$ i' R- W X#### 4.1 启动 NocoBase
' H7 N6 l* u/ \- j. T6 ]. W- 启动 NocoBase:
; R" X: J) j) y6 M+ C ```bash; f% _- [6 G, z- y& C6 S& H: ]
npm run start) J K; `: R$ C/ |$ {1 f4 v7 ]
```
: g G! F7 e: t8 O7 |& X" _; R9 V! L5 Q" v$ Y
#### 4.2 测试 DeepSeek API$ t' n% n; ]7 l7 r& K0 v
- 使用 `curl` 或 Postman 测试 API:
L% b9 z2 b2 {% O4 j0 \) o ```bash+ W' e& u% P+ p( D) m- f3 c& a7 v
curl -X POST http://localhost:3000/api/deepseek/query \
0 p1 z A5 C) g& a: W9 O7 J( e -H "Content-Type: application/json" \# O& @- M B7 F
-d '{"prompt": "显示最近三个月联系过的客户"}'
0 V$ @! A2 L- b2 @/ ?, Q, [! z ```: f' u" z! c/ U0 L O4 I6 @
0 l5 b% c. L) |, F q---
$ h$ j5 G" x" |# m: v! H: k0 u; \" x6 @8 G
### **5. 部署到生产环境**" d0 T& P. N7 F+ H: X W' W: q1 G
#### 5.1 使用 Docker 部署7 C+ M! a$ E0 d
- 创建 `docker-compose.yml` 文件:
" t% j9 X" p5 r5 m W ```yaml: z# }( T& W% g. K
version: '3'
( ~" X' W' |# Z8 D4 S! _ services:
4 L+ v U' p8 `6 C% A3 M7 T1 V app:
. e7 a# q0 `% g7 I" C7 ]& { image: node:16
" E& ]5 d* y j( Q' D7 ^2 I container_name: nocobase0 ~1 p+ P1 Q, g: ~( H
working_dir: /app( x7 E) A# `" D/ @6 K* E2 A& A' }
volumes:
. z6 y" A8 R! r8 P0 K/ k9 t9 n7 i - .:/app6 x8 J9 U1 t* W; y' J
ports:% Q' [3 a, u: Q! r+ s2 U
- "3000:3000". F# V2 p4 V1 ^% R2 a
environment:
% G! o w$ \# N! \# C* y2 y - NODE_ENV=production
7 Q, [( [7 y; @; ? command: npm run start0 h& T* }' S i
db:
, Q- C3 E8 a9 p- p( b1 P. Z image: postgres:13- C, K0 }) ?7 A: r1 v' j! v
container_name: nocobase_db7 ^( k; i) u9 k) ~: _6 f
environment:5 B' k/ D9 h! T# }) h! H
POSTGRES_USER: nocobase_user" U1 Z- `$ i( U$ A% p; ^) z2 j
POSTGRES_PASSWORD: your_password
! ]' F8 p4 g/ f) e POSTGRES_DB: nocobase
+ |5 B3 G: f: v& s6 K3 o* V4 ] ports:
6 f. D5 b8 x, o: ] - "5432:5432"
+ K; S5 q. e; {" D& n ```
/ ~! D; l3 r" y1 E1 a- 启动 Docker 容器:
' w h4 H" U; ?6 {3 a, J' C ```bash+ o0 n8 ^+ C* ~3 ? ] X9 G' M
docker-compose up -d$ N! L5 Q2 ?7 |
```
. d7 \8 s. W3 p6 }# e9 u' e, N9 } d( ?4 T0 h5 U" c+ T6 ~7 [
#### 5.2 配置 HTTPS2 v" F& j( S1 m4 h) G( G
- 使用 Nginx 反向代理并配置 HTTPS:- `; l8 J2 O" s: c9 s% W h3 |
```nginx# `, X. s' j' }. [6 |
server {6 A+ u- }8 j2 r7 v N- v
listen 80;% L! A0 W9 d7 E6 R+ P! {
server_name yourdomain.com;
: J K: O. I H return 301 https://$host$request_uri;- c0 b9 G0 ]8 n$ Z; ]
}( V/ ]' \( o, r8 }9 @* W( n" m
5 k. _- x0 H; f6 K$ C" I
server {) B3 r+ p1 y' i
listen 443 ssl;
7 t% D. W: n7 F! i6 |0 ~; ~ server_name yourdomain.com;
4 a! d# X* @0 Z& U: s; u/ I5 {. {9 C
ssl_certificate /path/to/your/certificate.crt;& P6 g' a5 j- j! ~) A
ssl_certificate_key /path/to/your/private.key;( H) P' p- l5 k0 Y5 P8 R3 S
9 ?+ R. s7 {+ |( I9 W! K8 P
location / {
1 c1 ?# F3 E+ j3 W9 [ proxy_pass http://localhost:3000;
- B& F$ X) q& M2 ~1 c proxy_set_header Host $host;
: U3 g# I2 i4 e# G proxy_set_header X-Real-IP $remote_addr; c$ a9 s9 c/ @. I6 L) v+ `9 Q
}
6 K$ @2 J( q2 f1 x9 r7 z5 c; ` }- F1 I! n0 J. V% c; ^" s# E
```) x! s: l9 Q P" V2 G0 \
+ r. G: U9 C# M- ]. b( t1 W' _---% i2 G! _$ {1 p+ S0 g9 j; S% L: E, C
* r- v& L7 p) z
### **6. 总结**
5 ?1 J) u6 M0 x1 q. v( i* s3 q通过以上步骤,您已经成功将 DeepSeek 集成到 NocoBase 中,并可以通过 API 调用实现自然语言查询、智能建议等功能。这一集成显著提升了 NocoBase 的智能化水平,为用户提供了更高效的操作体验。 |
|