0


【AI开发】Langchain基础

基础对话

首先先去deepseek上搞一个API key
根据deepseek官网的介绍,一个基础的chat模型应该这样写

# pip3 install langchain_openai# python3 deepseek_v2_langchain.pyfrom langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model='deepseek-chat', 
    openai_api_key='', 
    openai_api_base='https://api.deepseek.com',
    max_tokens=1024)

response = llm.invoke("给我一个很土但是听起来很好养活的男孩小名", temperature=1)print(response.content)

其中需要注意的地方有

  1. deepseek接口与openai兼容,所以调用deepseek接口可以实现
  2. 之前的langchain.llms和langchain.chat_models已经换成了langchain_openai
  3. predict和predict_messages在新版中已经被换成了invoke
  4. temperature表示唯一性,为0时一般结果不变,越大每次结果越容易变化
  5. 直接执行llm.invoke会出来完整的消息类型,如AIMessage…,我们可以通过.content或者其他属性来获取我们想要的内容

LangChain提供了几个对象,用于方便地区分不同的角色:

  • HumanMessage: 来自人类/用户的ChatMessage。
  • AIMessage: 来自AI/助手的ChatMessage。
  • SystemMessage: 来自系统的ChatMessage。
  • FunctionMessage: 来自函数调用的ChatMessage。

我们可以这样写

response = llm.invoke("Hi!")print(response.content)

text ="做logo的公司的好名字是什么?"
message =[HumanMessage(content=text)]

response1=llm.invoke(message)print(response1.content)

提示模板

大多数LLM应用程序不会是用户说啥,就完全传入到LLM中,那样会太麻烦。
在特定任务中,我们应该输入最核心的内容,然后LLM把该内容添加到一个更大的文本片段中,这就是提示模板prompttemplates
比如

from langchain.prompts import PromptTemplate
prompt = PromptTemplate.from_template("做{product}的公司的好名字应该是?")
prompt.format(product="宠物食品")

输出为

'做宠物食品的公司的好名字应该是?'

LLMChain是langchain中一个用的很多的工具,包含一个PromtTemplate和一个语言模型(LLM或者chatmodel)
大概流程是这样
在这里插入图片描述
所以我们的代码可以接着写

from langchain.chains import LLMChain
chain = LLMChain(llm=llm,prompt=prompt)
chain.run("宠物食品")

这其中语言模型指定为上面的变量llm,prompt也是上面设定好的

fewshot版的提示词

from langchain.prompts.few_shot import FewShotPromptTemplate
from langchain.prompts.prompt import PromptTemplate
############################用few-shot,给定一些例子,让模型学会某些特定的回复
examples =[{"question":"how are you?","answer":"I'm fine, handsome man."},{"question":"What day of the week?","answer":"It's Friday, handsome man."},{"question":"how is the weather?","answer":"It's a sunny day, handsome man."},]

example_prompt = PromptTemplate(template="Question:{question}\n{answer}", input_variables=["question","answer"])#设置一个提示模板
prompt = FewShotPromptTemplate(
    examples=examples,
    example_prompt=example_prompt,
    suffix="Question:{input}",#相当于一个后缀
    input_variables=["input"])
from langchain_openai import ChatOpenAI

chat_model = ChatOpenAI(
    model="deepseek-chat",
    openai_api_key='sk-f8f1fab675ea4d2d9e565877d354d464',
    openai_api_base='https://api.deepseek.com',
    max_tokens=1024)

chat_model.invoke(prompt.format(input="Why am I so ugly?"))
Answer: You are not ugly, handsome man. Beauty is subjective and varies from person to person. Everyone has their unique qualities and features that make them special and attractive in their own way.

另:
样本筛选器用来筛选相干的样本,防止不相干的example对模型影响
senmaticSimilarityExampleSelector 语义相似度筛选器

代理人

agent可以看作在某个职位上的人,拥有一系列tool来完成一些工作
在链式结构中,agent可以看作chain的其中一个单位,许多agent按照顺序连在一起,完成各自的任务来维护chain的稳定

#######################加载模型from langchain_openai import ChatOpenAI

chat_model = ChatOpenAI(
    model="deepseek-chat",
    openai_api_key='',
    openai_api_base='https://api.deepseek.com',
    max_tokens=1024)
#######################加载代理人工具from langchain.agents import initialize_agent
from langchain.agents import load_tools

tool = load_tools(["llm-math"],llm=chat_model)#llm-math 是一个用于计算的代理人工具

至于具体有哪些tool,我们可以通过很多方式来查询
api文档用来查类和工具
langchain开发很快,有些新东西在文档中没有及时更新,最好去源代码里面跳转进去看
比如llm-math工具,我如果想知道还有没有其他工具,就跳转进去loadtool里面看

#######################初始化代理人from langchain.agents import AgentType
agent = initialize_agent(
    tools=tool, llm=chat_model, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose =True, handle_parsing_errors=True)
agent.run("5的3.5次方是多少? no need to add action")

基础应用——聊天模块

conversation chain和之前直接用invoke(predict)的区别是,conversation内部有关于聊天记录的工具,跟它的聊天可以结合上文

from langchain_openai import ChatOpenAI

chat_model = ChatOpenAI(
    model="deepseek-chat",
    openai_api_key='',
    openai_api_base='https://api.deepseek.com',
    max_tokens=1024)from langchain.chains import ConversationChain

conversation = ConversationChain(llm=chat_model,verbose=True)#verbose就是来控制输出的内容有没有系统上的东西,false时就只有对话内容
conversation.run("hello")

自定义模块

目前只定义了一个最基础的

from typing import Any, List, Mapping, Optional
from langchain.llms.base import LLM
from langchain.callbacks.manager import CallbackManagerForLLMRun

classzzyAI(LLM):@propertydef_llm_type(self)->str:return"zzyAI"def_call(
        self,
        prompt:str,
        stop: Optional[List[str]]=None,
        run_manager: Optional[CallbackManagerForLLMRun]=None,)->str:if stop isnotNone:raise ValueError("stop kwargs are not permitted.")
        pd = prompt.find("吗")if pd >=0:return prompt[0:pd]+","return"哦."
  
llm = zzyAI()print(llm)
llm("你好吗")

本文转载自: https://blog.csdn.net/qq_44899247/article/details/139634763
版权归原作者 我想当个程序员 所有, 如有侵权,请联系我们删除。

“【AI开发】Langchain基础”的评论:

还没有评论