Langchain的安装

Langchain

1、python中安装langchain

pip install langchain
pip install langchain-openai

​ 登录官网,获取LangSmish的API key

​ https://smith.langchain.com/settings

2、案例一:创建一个简单的调用大模型的案例:

import os
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI

os.environ['http_proxy'] = ''
os.environ['https_proxy'] = ''
os.environ['LANGCHAIN_TRACING_V2'] = 'TRUE'
os.environ['LANGCHAIN_API_KEY'] = ''
# 创建模型
model = ChatOpenAI(model="gpt-3.5-turbo-1106")
# 准备提示prompt
msg = [
    SystemMessage(content="请将以下内容翻译成日语"),
    HumanMessage(content="你好,请问你要到哪里去?")
]
result = model.invoke(msg)
print(result)
# 创建返回数据的解析器
parser = StrOutputParser()
return_str = parser.invoke(result)
print(return_str)
# 得到链(把各个组件连接起来)
chain = model | parser
# 直接使用chain来调用
print(chain.invoke(msg))

结果:

content='こんにちは、どちらに行かれる予定ですか?' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 16, 'prompt_tokens': 35, 'total_tokens': 51, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-3.5-turbo-1106', 'system_fingerprint': 'fp_e7d4a5f731', 'finish_reason': 'stop', 'logprobs': None} id='run-36cc3912-c062-4525-8565-4a30ce2c1b4d-0' usage_metadata={'input_tokens': 35, 'output_tokens': 16, 'total_tokens': 51, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}}
こんにちは、どちらに行かれる予定ですか?
こんにちは、どこに行く予定ですか?

构建一个简单的大语言模型(LLM)应用程序

  • 调用语言模型

  • 使用OutPutParsers:输出解析器

  • 使用PromptTemplate:提示模板

    # 定义提示模板
    prompt_template = ChatPromptTemplate.from_messages([
        ('system', '请将下面的内容翻译成{language}'),
        ('user', '{text}')
    ])
    
    # 得到链(把各个组件连接起来)(模板 | 模型 | 解析器)
    chain = prompt_template | model | parser
    # 直接使用chain来调用
    print(chain.invoke({'language': 'English', 'text': '白日依山尽,黄河入海流。'}))
    
  • 使用LangSmish追踪你的应用程序

  • 使用LangServe部署你的应用程序

    pip install "langserve[all]"
    
    # 把我们的程序部署成服务
    # 创建fastAPI的应用
    app = FastAPI(title="my LangChain serve", version="V1.0", description="translate any language")
    # 添加路由
    add_routes(
        app,
        chain,
        path="/chain_demo",
    )
    if __name__ == '__main__':
        import uvicorn
        uvicorn.run(app, host='127.0.0.1', port=8000)
    

    这里用apipost进行测试

​ 通过代码连接服务器,实现对程序的应用

from langserve import RemoteRunnable

if __name__ == '__main__':
    client = RemoteRunnable("http://127.0.0.1:8000/chain_demo")
    result = client.invoke({'language': "italian", 'text': "你好!"})
    print(result)

​ 结果:

Ciao!

3、案例二:Langchain构建聊天机器人

聊天机器人能够进行对话,并记住之前的互动

安装:

pip install langchain_community

机器人根据上下文来回答问题:

import os
from langchain_community.chat_message_histories import ChatMessageHistory
from langchain_core.messages import HumanMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables import RunnableWithMessageHistory
from langchain_openai import ChatOpenAI

# vpn
os.environ['http_proxy'] = '127.0.0.1:7890'
os.environ['https_proxy'] = '127.0.0.1:7890'
# 连接langchain
os.environ['LANGCHAIN_TRACING_V2'] = 'TRUE'
os.environ['LANGCHAIN_PROJECT'] = 'LangchainDemo_zhang'
os.environ['LANGCHAIN_API_KEY'] = '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'
# 创建模型
model = ChatOpenAI(model="gpt-3.5-turbo")
# 创建返回数据的解析器
parser = StrOutputParser()
# 定义提示模板
prompt_template = ChatPromptTemplate.from_messages([
    ('system', '你是一个非常乐于助人的助手。用{language}尽可能回答你所能回答的所有问题。'),
    MessagesPlaceholder(variable_name='my_msg')

])
# 得到链(把各个组件连接起来)(模板 | 模型 | 解析器)
chain = prompt_template | model | parser

# 保存聊天的历史记录
store = {}  # 所有用户的聊天记录都保存到sotre。key:sessionID, value: 历史聊天记录对象


# 此函数预期将接收到一个session_id并返回一个消息历史记录的对象
def get_session_history(session_id: str):
    if session_id not in store:
        store[session_id] = ChatMessageHistory()
    return store[session_id]


do_message = RunnableWithMessageHistory(
    chain,
    get_session_history,
    input_messages_key='my_msg'  # 每次聊天的时候发送msg的key
)

config = {'configurable': {'session_id': 'zhang317'}}  # 给当前会话定义一个session_id
# 第一轮聊天
resp1 = do_message.invoke(
    {
        'my_msg': [HumanMessage(content="你好!我是张张。")],
        'language': '中文'
    },
    config=config
)
print(resp1)

# 第二轮聊天
resp2 = do_message.invoke(
    {
        'my_msg': [HumanMessage(content='我的名字是什么?')],
        'language': '中文'
    },
    config=config
)
print(resp2)

在输出resp1和resp2的时候有些可能用:

print(resp1.content)
print(resp2.content)

这样写是正确的,可能是因为python的版本问题。

结果:

你好,张张!有什么问题我可以帮助你解决呢?
您告诉我您的名字是张张。

现在要第三轮聊天通过流式的方式进行输出,其实就是一个token一个token的输出

config = {'configurable': {'session_id': 'bobo317'}}
# 第三轮聊天,返回的数据是流式的
for resp in do_message.stream({'my_msg': [HumanMessage(content='请给我讲一个愚公移山的故事。')], 'language': 'English'},
                              config=config):
    # 每一次resp都是一个token
    print(resp, end='-')

结果:

-Once- upon- a- time- in- ancient- China-,- there- was- a- man- named- Yu- Gong- who- lived- at- the- foot- of- two- large- mountains- that- blocked- his- path- and- made- it- difficult- for- his- family- to- travel-.- Determin-ed- to- make- life- easier- for- his- descendants-,- Yu- Gong- decided- to- move- the- mountains- out- of- the- way-.

-Yu- Gong- and- his- family- began- digging- at- the- mountains- with- their- bare- hands-,- but- progress- was- slow-.- A- wise- old- man- passing- by- saw- what- they- were- doing- and- told- Yu- Gong- that- moving- the- mountains- was- an- impossible- task- for- one- family-.- Und-eter-red-,- Yu- Gong- replied-,- "-I- may- not- be- able- to- finish- this- task- in- my- lifetime-,- but- my- children- and- grandchildren- can- continue- it-.- As- long- as- we- keep- working- together-,- the- mountains- will- eventually- be- moved-."

-Imp-ressed- by- Yu- Gong-'s- determination-,- the- wise- old- man- was- moved- by- his- spirit- and- decided- to- help-.- He- called- upon- the- gods-,- who- were- also- touched- by- Yu- Gong-'s- perseverance-.- The- gods- were- so- moved- that- they- sent- two- divine- beings- who- picked- up- the- mountains- and- carried- them- away-.

-From- then- on-,- the- saying- "-Yu- Gong- moves- mountains-"- became- a- popular- id-iom- in- Chinese- culture-,- symbol-izing- the- power- of- determination- and- persistence- in- overcoming- seemingly- ins-ur-mount-able- obstacles-.--

then- on-,- the- saying- “-Yu- Gong- moves- mountains-”- became- a- popular- id-iom- in- Chinese- culture-,- symbol-izing- the- power- of- determination- and- persistence- in- overcoming- seemingly- ins-ur-mount-able- obstacles-.–


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值