Skip to content

搭配 Google Gemini 能力实现一个终端 AI CLI 助手

效果

img

申请 Gemini API Key

说是媲美 GPT4

试了下翻译,效果确实很好,所以在终端 AI 里也加上了翻译功能

Gemini 目前 API 是免费使用的 , 申请 即可

img

实战

这里为了方便集成搭配了 langchian,也为了更好的扩展其他功能

使用 langchain 比较重,可以直接使用 Google API 方式

环境

  • 安装 langchain
bash
pip install langchain
  • 安装 gemini
bash
pip install langchain-google-genai
  • 安装打包工具 pyinstaller
bash
pip install pyinstaller
  • 在环境中设置 API KEY
bash
export GOOGLE_API_KEY=xxx

代码

Prompt

Click me to view the code
python
def defaultPrompt(question):
    prompt = f"""
    你是一名百晓生,请详细的回答下发```中的问题,如果问题比较复杂请分步骤进行回答以便我能清晰的了解这个问题的答案;
    如果你不知道答案请回答不知道,如果问题是问的你是谁之类的话题请回答“我是百晓生,你的小助理”;
    答案请使用纯文本格式;

    ```
    {question}
    ```
    """
    return prompt

def toCNPrompt(question):
    prompt = f"""
    你擅长对文本进行翻译,请将下方```中的文本内容翻译成中文:
    ```
    {question}
    ```
    """
    return prompt

def toEnPrompt(question):
    prompt = f"""
    你擅长对文本进行翻译,请将下方```中的文本内容翻译成英文:
    ```
    {question}
    ```
    """
    return prompt

Gemini

  • Gemini 问答实现 包含了通用、翻译中文、翻译英文功能
Click me to view the code
python
from langchain.prompts import PromptTemplate
from langchain_google_genai import GoogleGenerativeAI
import sys
import os
from prompt_tool import defaultPrompt,toCNPrompt,toEnPrompt

# 获取命令行参数
TypeList = ["-q","-en","-cn"]

def generativeAI(arguments):

    # 默认第一个
    _type = "-q"

    # 参数合规
    if len(arguments) <= 1:
        print("🤪🤪🤪 请输入你的问题❗️")
        sys.exit()

    if arguments[1] in TypeList:
        _type = arguments[1]
        del arguments[:2]
    else:
        del arguments[:1]

    qusetion = ''.join(arguments)
    if len(qusetion) == 0:
        print("🤪🤪🤪 请输入你的问题❗️")
        sys.exit()

    # prompt 拼接
    if _type == TypeList[1]: # 翻译成英文
        prompt = toEnPrompt(qusetion)
    elif _type == TypeList[2]: # 翻译成中文
        prompt = toCNPrompt(qusetion)
    else: # 通用
        prompt = defaultPrompt(qusetion)

    googleGenerativeAI(prompt)

def googleGenerativeAI(prompt):
    sys.stdout.write("🌈 Gemini:\n")

    # 设置下代理环境
    os.environ["http_proxy"] = 'http://127.0.0.1:7890'
    os.environ["https_proxy"] = 'http://127.0.0.1:7890'
    os.environ["all_proxy"] = 'http://127.0.0.1:7890'

    # 执行 Gemini
    llm = GoogleGenerativeAI(model="gemini-pro")
    for chunk in llm.stream(prompt):
        sys.stdout.write(chunk)
    sys.stdout.write("\n")
    sys.stdout.flush()

if __name__ == "__main__":
    generativeAI(sys.argv)

打包脚本 && 配置环境

  • 打包
bash
rm -r dist/

# ai.py 为上述的问答 gemini 的源码
pyinstaller ai.py
  • 添加环境配置

这里直接设置了一个别名配置,方便调用

需要设置可支持权限或者将可执行文件放入到 /usr/local/bin/

bash
# `/Users/xxx/dist/ai/ai` 可执行文件的路径
alias ai=/Users/xxx/dist/ai/ai

使用

  • 通用
bash
ai 网络中的ip是什么

🌈 Gemini:
IP是“Internet Protocol”的缩写,中文翻译为“网际协议”。IP地址是互联网协议地址(Internet Protocol Address)的简称,又译为网际地址,IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以便在互联网上进行通信。
IP地址由32位二进制数组成,通常被分割为4个8位二进制数,每个8位二进制数转换成一个0到255之间的十进制数,用“.”分隔,形成一个IP地址。例如,192.168.1.1就是常见的IP地址之一。
IP地址分为公有IP地址和私有IP地址。公有IP地址是可以在互联网上被访问的IP地址,而私有IP地址只能在内部网络中使用。
IP地址的作用是唯一标识互联网上的每一台主机,使它们能够互相通信。如果没有IP地址,互联网上的计算机就无法知道彼此的位置,从而无法进行通信。
  • 翻译成中文
bash
ai -en 网络中的ip是什么

🌈 Gemini:
What is an ip in the network
  • 翻译成英文
bash
ai -cn What is an ip in the network

🌈 Gemini:
网络中的IP是什么

Released under the MIT License.