掌上百科 - PDAWIKI

 找回密码
 免费注册

QQ登录

只需一步,快速开始

查看: 4009|回复: 6

[词典讨论] GoldenDict + ChatGPT(利用 OpenAI API)[20230503]

[复制链接]

该用户从未签到

发表于 2023-5-3 13:11:27 | 显示全部楼层 |阅读模式

6 i) d9 C0 Q7 D( A+ [2 H3 S参考:1 ~3 r1 P% `/ P. \9 [* |
- [词典讨论] ChatGPT 用作词典 https://www.pdawiki.com/forum/fo ... hread&tid=483265 X% [- n6 k% {1 I4 A1 l5 k) W
- [经验交流] GoldenDict 有X词典在线版(Python 在线版) https://pdawiki.com/forum/forum.php?mod=viewthread&tid=33203
2 l* r, Z4 h* B' n. q0 e- a0 \6 x- GoldenDict + Python 调用有道翻译[...]  https://pdawiki.com/forum/forum.php?mod=viewthread&tid=21988
8 M+ I  ^' \5 B7 j- r- [5.16]goldendict 有道释义 & google翻译 [python] https://pdawiki.com/forum/forum.php?mod=viewthread&tid=26565- K; g  p5 }+ c
- 人人词典GoldenDict插件[附python3源码] https://pdawiki.com/forum/forum.php?mod=viewthread&tid=31713  Y" \4 n& a6 [5 U' h5 X$ [
- ChatGPT-Next-Web https://github.com/Yidadaa/ChatGPT-Next-Web
( t" `" U$ t  _" e/ o+ }& f5 }8 S0 s+ a! V  }

+ N' `. k/ X7 O1 g2 h前置条件:
# G- Z  J. v" ^6 M/ n1、OpenAI API key https://platform.openai.com/account/api-keys% G* R, U6 F/ n4 M5 j* U# V& V2 m  X
2、Python
) z0 g' [- ~3 ^% A
# |* ]" F8 b$ |6 Y$ `: f问:5 L8 k1 Z0 ^1 f5 q
1、写一个 mydict.py,调用 OpenAI API key,实现查询功能。
* B6 _9 w) Q9 ~+ s8 b- O9 U* a  j2、用 GoldenDict 调用 mydict.py。

. W; `5 q/ e9 @9 e. ]5 N+ ]( V! ^- p( h  a4 i/ I( ^4 g
ChatGPT 回答:  ^) I. q: O) I4 L
这里提供一个基于 OpenAI GPT-3 API 的简单 mydict.py 脚本示例,可以通过命令行传入要查询的单词,输出 OpenAI API 返回的结果:
8 e; `% @- h+ t: C0 |0 z
8 {6 E: D6 E+ J```python0 M# a. r7 ^9 L9 E6 m
import openai
2 s9 x' e/ Y0 ?% }+ Mimport sys
6 M) j3 u4 e' I! Q6 c4 _# U1 l6 q9 q$ M2 q' ]! B
openai.api_key = "YOUR_OPENAI_API_KEY_HERE"3 A8 Y/ m4 W3 i9 Z
' y6 ?% `' y- V2 d, o! h" I
def define(word):
4 H+ T3 a5 S% m    prompt = f"Define '{word}'"
/ A! E5 g- {; U- f# e3 U    response = openai.Completion.create(& [4 k, m5 b. j6 Q5 {& u
        engine="text-davinci-002",+ q8 r6 w; B. x, z8 ?
        prompt=prompt,
7 ^/ |0 Q$ L( V/ }, s7 _3 C        max_tokens=1024,
0 m- _$ Z6 v! @: k7 y        n=1,  B6 W* f+ c, [8 q5 f" k: w7 ]% i
        stop=None,
2 r4 Y" I1 P) X$ b( Y% i( s        temperature=0.5,( L1 ~, T5 r8 E6 S
    )# G. M4 w7 d3 ^" R
  Y: i, j5 I3 M7 [! k' N
    if len(response.choices) > 0:
" ^& }( t# C7 X        return response.choices[0].text
! d8 I+ D# \& Q: W    else:+ r6 F0 A8 }% D' Y
        return "No definition found."7 N0 `5 C5 {; ]$ \

5 ^6 E! S5 @) v1 t2 D  F  Cif __name__ == "__main__":
. ?9 c5 w! l8 |+ p  E+ S    word = sys.argv[1]* W, K, w+ ?4 q- d3 g' o) `
    definition = define(word)
5 \  {$ o/ k5 K$ }: |8 [( N. b    print(definition)
6 u- D% r9 s" c, |```
& b& {9 d% k9 K8 I1 B, K# I  g+ c+ X* j7 d1 K) I9 h
将上述脚本保存为 `mydict.py` 文件。
+ e+ R0 R, x% f7 M4 \1 E! O* Z9 E  e
接下来,在 GoldenDict 中设置该脚本为自定义命令行词典。* ^0 x/ N& W/ I0 g  O/ r6 B
2 b" }6 K1 ?. U8 Q* E2 \: w( S
1. 打开 GoldenDict,选择 Edit > Dictionaries。
% d+ _8 W( B0 s8 C/ g. @- R2. 在 Programs 标签页中,点击 Add 按钮。
' j$ `' ]; A7 l. \: H$ q4 X3. 在 Dialog 标题栏中输入 “MyDict”,在 Command 栏中输入 `python /path/to/mydict.py %GDWORD%`(其中 `/path/to/mydict.py` 为脚本的绝对路径),点击 OK 按钮。. B! E/ G; R' I4 C1 A6 I& g
4. 在主界面中,选中一段文本,然后按下 Ctrl+C+C,即可通过 mydict.py 查询该单词的定义。

' j& q1 h/ n! S4 T& C! S1 F7 Y& ^# t4 y: T
3 h0 E! N3 _1 g  d# c8 {% X

4 x, d! R* j' o6 ]2 m+ m

评分

1

查看全部评分

本帖被以下淘专辑推荐:

  • TA的每日心情
    开心
    2019-8-21 08:44
  • 签到天数: 163 天

    [LV.7]常住居民III

    发表于 2023-5-5 10:16:19 | 显示全部楼层
    本帖最后由 mikeee 于 2023-5-5 11:26 编辑
    % k" b: ?7 [% h( v$ a" S; J* A1 q, \% L& }$ c
    链接: https://pan.baidu.com/s/1HXpt0U3vb7GJDKpBNm_FOw?pwd=4vph 提取码: 4vph $ i8 c& S' J' @4 o' H

    & q0 L% D- P+ t' H这个命令行工具`chatgpt_tr`应该可以设置成在 GoldenDict 里使用。用的是令牌,即是说免费的。% Y; F& G7 Z0 `* [

    # `; m5 f/ I% v; u% M1 i9 r' Bchatgpt_tr主要是给命令行翻译用的,但也可以自定义提示Prompt以及用于对话。详细用法参看 ``chatgpt_tr.exe --help``。
    % `0 B. a$ q1 `/ ]1 j. J4 u3 x4 i2 h8 W
    用法8 Z2 b3 n. p7 E5 R! J0 }! |4 [
    & [+ X: n  z0 H) V2 @! B% g
    • 解压
    • 获取access token/ M: s( N0 [" A% z% B" y6 x
      • 登录 chat.openai.com
      • 访问 https://chat.openai.com/api/auth/session
      • 拷 accessToken备用
      • 此操作只需一次。(access token 有效期约14-30天,但内地ip可能需双向提子因为openai和大伙墙的双重封杀,港澳ip则需找未被openai封杀的带理)
        1 v0 ]: D3 z7 `, J3 g! D
    • 命令行下设置环境变量OPENAI_ACCESS_TOKEN,例如cmd下 set OPENAI_ACCESS_TOKEN=eyJhbGc... 或用包内的 chatgpt-tr.bat 或sysdm.cpl设置全局环境变量OPENAI_ACCESS_TOKEN
    • 命令行下,例如WIN cmd回车(或开Windows Terminal或cmder或conemu)% L! p7 x' R6 ?8 |# w1 G
      • chatgpt_tr --help # 帮助
      • chatgpr_tr # 翻译系统剪贴板内容
      • chatgpr_tr this is a test # 翻译 this is a test' p, K0 l$ C" X% {  |5 A5 r

      2 s: r+ J& L/ O" F8 g* _; d8 Z  m
    ; _8 e! f" I8 x% z' p! j' I
    可以利用 bat 自定义提示Prompt各种使用场景(例如`chatgpt_tr.exe -p "列出5个中文同义词"  make sense` )。该工具的python源码核心部分只有十几行。网友有兴趣的话我可以提供python源码。" K& }( R: w& h2 W( X1 n: @

    + M; T* c5 `  K( K* F该工具基于某个第三方反向代理,代理挂了或被关闭当然工具也就不能用了。 (实测2023-05-05可用)
    6 b* v% ^/ e2 s6 n
      B' F$ Q1 R" O7 V) s! V4 G典型输出:
    ! w: ]9 ?8 j+ o0 J8 i* \
    # chatgpt_tr amazon code whisperer! R' C: T3 G4 a" q6 L; x
    amazon code whisperer1 L0 ^( a5 f1 W. i
    . ]2 T/ l/ f1 @" K5 Y7 Z
    版本1:
    ( m' z* U' V, ?( k6 ~3 a4 g- N4 G亚马逊代码耳语师
    4 v; o8 W% n4 x' ?+ u5 S# H9 g: ~/ x% e& I0 y! v/ @' f
    版本2:8 z1 S! Z2 s$ q4 x
    亚马逊代码密语者$ \, _) ~4 k" V. U3 J4 y
    0 N- [9 g5 y$ ?# w) x  X; @
    版本3:
    5 \% L) j  C9 Z亚马逊代码秘语师5 [1 {4 G1 a% |: a7 _3 d

    5 V  n4 H8 H2 O; A# T0 o& P# chatgpt_tr.exe -p "列出5个中文同义词" make sense
    ) F+ I; H- T3 dmake sense
    7 B2 E4 A" n2 X* F
    : d3 C4 v# J5 Q) S, J! d' r1. 有道理  f/ B0 [/ Q1 L' n+ g5 K( X
    2. 讲得通
    0 l. ]  `  q% H9 }* B+ Q/ J* @3. 合理; R) |5 N  _: R$ H% z8 w/ p6 O* l
    4. 明智
    & h9 Z7 J! r6 ^2 x- Z1 \5. 理性% f8 u+ c* ^* \1 _! y
    : t9 N* R5 _5 \. k
    # chatgpt_tr.exe --help
    0 v- d+ I; N2 e5 }. W. `9 ]) K$ G; l) L- ~0 Q2 p8 @5 r
    Usage: chatgpt_tr.exe [OPTIONS] [TEXT]...8 a3 w$ _+ B* L  P( \8 \
    - p- L' w8 c5 o" s
    Translate with chatgpt using access token.
    , Y6 _+ ~- T  o2 l" u6 B set LOGURU_LEVEL=DEBUG or set LOGLEVEL=10 to turn on debug/verbose mode.  ^" e5 J( V- A6 m, ]+ Q2 Z; {
    ( K  j/ I+ Q; {1 w
    ┌─ Arguments ──────────────────────────────────────────────────────────────────┐8 x, }4 x5 R3 [6 H+ @
    │   text      [TEXT]...  Source text. [default: None]                          │8 K; P! [# l9 G9 {* C
    └──────────────────────────────────────────────────────────────────────────────┘
    . H4 m6 ?7 l0 ?┌─ Options ────────────────────────────────────────────────────────────────────┐2 j$ w7 Z# J( r" N
    │ --version  -v,-V               Show version info and a list of supported     │2 R% v5 j8 ^% m6 n
    │                                languages and exit.                           │6 B/ @8 f+ |  m: h& U$ M
    │ --clipb    -c                  Use clipboard content if set or if `text` is  │
    8 J& ]- }/ t" P, n/ r│                                empty.                                        │* ~* B: r5 S% T" _! p
    │ --to-lang  -t         TEXT     Target language when using the default        │5 s/ W% W8 M  b" {. \3 q3 x- W1 ?
    │                                prompt.                                       │
    ; ~3 ?  q3 q" n│                                [default: 中文]                               │& F& C9 r- n0 j6 S! n4 D( @
    │ --numb     -n         INTEGER  number of translation variants when using the │$ ^$ W/ n2 h9 ^  @6 v
    │                                default prompt.                               │
    9 b: Q; I- K, v│                                [default: 3]                                  │; w$ ^4 t$ [8 [' |  X1 ^2 I
    │ --prompt   -p         TEXT     User defined prompt. [default:                │
    " V: m. E2 ]; T9 R% f% p│                                '将以下内容内容翻成 to_lang                   │
    9 Z3 ~; C/ n5 m6 ?1 F8 ]│                                (中文),不要自由发挥,列出 numb (3) 个版本:  │
    + f& N: s! i1 s" x/ \$ \│                                \n']                                          │
    . h/ b7 H! z, e" \6 a. ~│ --help                         Show this message and exit.
  • TA的每日心情
    开心
    2018-8-26 14:41
  • 签到天数: 45 天

    [LV.5]常住居民I

    发表于 2023-5-3 20:03:13 | 显示全部楼层
    有点浪费token

    该用户从未签到

    发表于 2023-5-3 17:31:29 | 显示全部楼层
    我还是觉得GoldenDict + ChatGPT这个组合算拉郎配' n  u' X% ?6 W8 k) u; k
    + E8 J$ G7 Q3 e# a2 L, g2 ^
    别的不说,就看下图吧:* ?# e7 k) u4 \+ s

    0 J& Y" {7 {$ {* @( U: S$ W8 v  F, A7 x6 B6 i, D9 u# _& \0 [
    3 p6 l- c, a5 r3 Z, ?
    Define指令不支持中文 用中文吧,它给的解释还是错的
    2 q. R; H4 O  K/ Z7 A8 g9 F  B6 `8 `: h& B
    , J2 x0 R9 `3 H7 q* H: [; d( L
    「拉郎配」这个词,《现代汉语词典》就有啊:
    + c' z) x) |* p4 J/ \4 a, D1 K! K4 }
    $ \9 |8 m# f* Z; g# X) a4 j
    拉郎配
    2 f9 f5 T4 y- B' Z( ]& a+ Hlā láng pèi
    - l# u* Q5 f; U1 {% C4 \0 X1 B6 C封建时代为逃避家中未婚女子被选入宫中,仓促找男子跟她成亲。比喻不顾实际,强行使双方联合或合并。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?免费注册

    x
  • TA的每日心情
    开心
    8 小时前
  • 签到天数: 2768 天

    [LV.Master]伴坛终老

    发表于 2023-5-3 17:36:36 | 显示全部楼层
    ChatGPT發展甚速。用來辨識漢字。或者要增加設備。
  • TA的每日心情
    开心
    2024-12-23 20:19
  • 签到天数: 442 天

    [LV.9]以坛为家II

    发表于 2023-5-4 12:22:25 | 显示全部楼层
    klwo2 发表于 2023-5-3 17:31: Y! b, O7 z; m& M2 _' L" n
    我还是觉得GoldenDict + ChatGPT这个组合算拉郎配( v! n$ _7 y5 R& b' a6 _. N
    6 {8 u7 H" Y/ ~5 g! d- t
    别的不说,就看下图吧:
    拉郎配

    ' n3 @; w2 U7 l% [; l
    ' o4 R% i" X2 h$ e% x恰到好处$ m* L7 F8 U+ p, _
    6 I# {) ?+ R% a' r7 C" O
    说明问题
  • TA的每日心情
    无聊
    2022-7-11 10:17
  • 签到天数: 97 天

    [LV.6]常住居民II

    发表于 2023-7-24 10:12:50 | 显示全部楼层
    照着弄完报错啊? 麻烦给看看吧5 p9 H' I+ `9 S: F7 o. S
    查询错误: 程序返回,退出代码为 1. Traceback (most recent call last): File "D:\APP\miniconda3\lib\site-packages\urllib3\connectionpool.py", line 700, in urlopen self._prepare_proxy(conn) File "D:\APP\miniconda3\lib\site-packages\urllib3\connectionpool.py", line 994, in _prepare_proxy conn.connect() File "D:\APP\miniconda3\lib\site-packages\urllib3\connection.py", line 364, in connect conn = self._connect_tls_proxy(hostname, conn) File "D:\APP\miniconda3\lib\site-packages\urllib3\connection.py", line 501, in _connect_tls_proxy socket = ssl_wrap_socket( File "D:\APP\miniconda3\lib\site-packages\urllib3\util\ssl_.py", line 453, in ssl_wrap_socket ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls) File "D:\APP\miniconda3\lib\site-packages\urllib3\util\ssl_.py", line 495, in _ssl_wrap_socket_impl return ssl_context.wrap_socket(sock) File "D:\APP\miniconda3\lib\ssl.py", line 500, in wrap_socket return self.sslsocket_class._create( File "D:\APP\miniconda3\lib\ssl.py", line 1040, in _create self.do_handshake() File "D:\APP\miniconda3\lib\ssl.py", line 1309, in do_handshake self._sslobj.do_handshake() ssl.SSLEOFError: EOF occurred in violation of protocol (_ssl.c:1131) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "D:\APP\miniconda3\lib\site-packages\requests\adapters.py", line 440, in send resp = conn.urlopen( File "D:\APP\miniconda3\lib\site-packages\urllib3\connectionpool.py", line 813, in urlopen return self.urlopen( File "D:\APP\miniconda3\lib\site-packages\urllib3\connectionpool.py", line 813, in urlopen return self.urlopen( File "D:\APP\miniconda3\lib\site-packages\urllib3\connectionpool.py", line 785, in urlopen retries = retries.increment( File "D:\APP\miniconda3\lib\site-packages\urllib3\util\retry.py", line 592, in increment raise MaxRetryError(_pool, url, error or ResponseError(cause)) urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/engines/text-davinci-002/completions (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1131)'))) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "D:\APP\miniconda3\lib\site-packages\openai\api_requestor.py", line 596, in request_raw result = _thread_context.session.request( File "D:\APP\miniconda3\lib\site-packages\requests\sessions.py", line 529, in request resp = self.send(prep, **send_kwargs) File "D:\APP\miniconda3\lib\site-packages\requests\sessions.py", line 645, in send r = adapter.send(request, **kwargs) File "D:\APP\miniconda3\lib\site-packages\requests\adapters.py", line 517, in send raise SSLError(e, request=request) requests.exceptions.SSLError: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/engines/text-davinci-002/completions (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1131)'))) The above exception was the direct cause of the following exception: Traceback (most recent call last): File "D:\APP\GoldenDict-addition\mydict.py", line 24, in <module> definition = define(word) File "D:\APP\GoldenDict-addition\mydict.py", line 8, in define response = openai.Completion.create( File "D:\APP\miniconda3\lib\site-packages\openai\api_resources\completion.py", line 25, in create return super().create(*args, **kwargs) File "D:\APP\miniconda3\lib\site-packages\openai\api_resources\abstract\engine_api_resource.py", line 153, in create response, _, api_key = requestor.request( File "D:\APP\miniconda3\lib\site-packages\openai\api_requestor.py", line 288, in request result = self.request_raw( File "D:\APP\miniconda3\lib\site-packages\openai\api_requestor.py", line 609, in request_raw raise error.APIConnectionError( openai.error.APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/engines/text-davinci-002/completions (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1131)')))
    您需要登录后才可以回帖 登录 | 免费注册

    本版积分规则

    小黑屋|手机版|Archiver|PDAWIKI |网站地图

    GMT+8, 2025-7-11 15:57 , Processed in 0.026356 second(s), 29 queries .

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表