点击下方“JavaEdge”,选择“设为星标”

第一时间关注技术干货!

免责声明~ 任何文章不要过度深思! 万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」; 不要急着评判文章列出的观点,只需代入其中,适度审视一番自己即可,能「跳脱出来从外人的角度看看现在的自己处在什么样的阶段」才不为俗人。 怎么想、怎么做,全在乎自己「不断实践中寻找适合自己的大道」

打开网易新闻 查看精彩图片
pip install --upgrade langchain==0.0.279 -i https://pypi.org/simple
1 创建一个LLM
  • 自有算力平台+开源大模型(需要有庞大的GPU资源)企业自己训练数据

  • 第三方大模型API(openai/百度文心/阿里通义千问...)数据无所谓

让LLM给孩子起具有中国特色的名字。

在LangChain中最基本的功能就是根据文本提示来生成新的文本

使用方法:predict

打开网易新闻 查看精彩图片

生成结果根据你调用的模型不同而会产生非常不同的结果差距,并且你的模型的tempurature参数也会直接影响最终结果(即LLM的灵敏度)。

2 自定义提示词模版

  • 将提问的上下文模版化

  • 支持参数传入

让LLM给孩子起具有美国特色的名字。

将提示词模版化后会产生很多灵活多变的应用,尤其当它支持参数定义时。

使用方法

langchain.prompts

3 输出解释器
打开网易新闻 查看精彩图片
3 输出解释器

将LLM输出的结果各种格式化

  • 支持类似json等结构化数据输出

  • 让LLM给孩子起4个有中国特色的名字,并以数组格式输出而不是文本。

    与chatGPT只能输出文本不同,langchain允许用户自定义输出解释器,将生成文本转化为序列数据使用方法:

    langchain.schema

    第一个实例

    让LLM以人机对话的形式输出4个名字

    名字和性别可以根据用户输出来相应输出

    输出格式定义为数组

    4 开始运行

    pip install openai==v0.28.1 -i https://pypi.org/simple
    引入openai key

    import os
    os.environ["OPENAI_KEY"] = "sk-ss"
     # 为了科学上网,所以需要添加 
    os.environ["OPENAI_API_BASE"] = "https://ai-yyds.com/v1"

    从环境变量中读取:

    import os
    openai_api_key = os.getenv("OPENAI_KEY")
    openai_api_base = os.getenv("OPENAI_API_BASE")
    print("OPENAI_API_KEY:", openai_api_key)
    print("OPENAI_PROXY:", openai_api_base)
    运行前查看下安装情况

    ! pip show langchain
    ! pip show openai
    打开网易新闻 查看精彩图片
    openai 官方SDK

    #使用openai的官方sdk 
    import openai
    import os
    
    openai.api_base = os.getenv("OPENAI_API_BASE")
    openai.api_key = os.getenv("OPENAI_KEY")
    
    messages = [
    {"role": "user", "content": "介绍下你自己"}
    ]
    
    res = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=messages,
    stream=False,
    )
    
    print(res['choices'][0]['message']['content'])
    打开网易新闻 查看精彩图片
    使用langchain调用

    #hello world 
    from langchain.llms import OpenAI
    import os
    
    api_base = os.getenv("OPENAI_API_BASE")
    api_key = os.getenv("OPENAI_KEY")
    llm = OpenAI(
        model="gpt-3.5-turbo-instruct",
        temperature=0,
        openai_api_key=api_key,
        openai_api_base=api_base
        )
    llm.predict("介绍下你自己")
    起名大师

    #起名大师 
    from langchain.llms import OpenAI
    from langchain.prompts import PromptTemplate
    import os
    api_base = os.getenv("OPENAI_API_BASE")
    api_key = os.getenv("OPENAI_KEY")
    llm = OpenAI(
        model="gpt-3.5-turbo-instruct",
        temperature=0,
        openai_api_key=api_key,
        openai_api_base=api_base
        )
    prompt = PromptTemplate.from_template("你是一个起名大师,请模仿示例起3个{county}名字,比如男孩经常被叫做{boy},女孩经常被叫做{girl}")
    message = prompt.format(county="中国特色的",boy="狗蛋",girl="翠花")
    print(message)
    llm.predict(message)

    输出:

    '\n\n男孩: 龙飞、铁柱、小虎\n女孩: 玉兰、梅香、小红梅'
    格式化输出

    from langchain.schema import BaseOutputParser
     #自定义class,继承了BaseOutputParser 
    class CommaSeparatedListOutputParser(BaseOutputParser):
        """Parse the output of an LLM call to a comma-separated list."""
    
    
        def parse(self, text: str):
            """Parse the output of an LLM call."""
            return text.strip().split(", ")
    
    CommaSeparatedListOutputParser().parse("hi, bye")

    ['hi', 'bye']
    完整案例

    #起名大师,输出格式为一个数组 
    from langchain.llms import OpenAI
    from langchain.prompts import PromptTemplate
    import os
    from langchain.schema import BaseOutputParser
    
     #自定义类 
    class CommaSeparatedListOutputParser(BaseOutputParser):
        """Parse the output of an LLM call to a comma-separated list."""
    
        def parse(self, text: str):
            """Parse the output of an LLM call."""
            print(text)
            return text.strip().split(",")
    
    
    api_base = os.getenv("OPENAI_API_BASE")
    api_key = os.getenv("OPENAI_KEY")
    llm = OpenAI(
        model="gpt-3.5-turbo-instruct",
        temperature=0,
        openai_api_key=api_key,
        openai_api_base=api_base
        )
    prompt = PromptTemplate.from_template("你是一个起名大师,请模仿示例起3个具有{county}特色的名字,示例:男孩常用名{boy},女孩常用名{girl}。请返回以逗号分隔的列表形式。仅返回逗号分隔的列表,不要返回其他内容。")
    message = prompt.format(county="美国男孩",boy="sam",girl="lucy")
    print(message)
    strs = llm.predict(message)
    CommaSeparatedListOutputParser().parse(strs)

    ['jack', ' michael', ' jason'

    公众号:JavaEdge 专注分享软件开发全生态相关技术文章、视频教程资源、热点资讯等,如果喜欢我的分享,给 点一个赞 或者 ➕关注 都是对我最大的支持。

    欢迎长按图片加好友,我会第一时间和你分享软件行业趋势面试资源学习途径等等。

    添加好友备注【技术群交流】拉你进技术交流群

    关注公众号后,在后台私信:

    • 更多教程资源应有尽有,欢迎关注并加技术交流群,慢慢获取