一、 本地模型的调用

1.创建虚拟开发环境以及安装本地模型(依据自己的生产环境)

conda create -n ollama-env python=3.11 -y
conda activate ollama-env
pip install ollama -i https://mirrors.aliyun.com/pypi/simple/
pip install streamlit -i https://mirrors.aliyun.com/pypi/simple/
import ollama #引入本地模型
import streamlit as st #是python库,是将数据分析和模型展示转化为交互式的 Web 应用
# 标题
st.title("测试标题")
# 文本
st.write("你好")
# 分隔符
st.divider()
# 聊天输入框
prompt = st.chat_input("请输入你的问题")
with st.spinner("思考中"):
# 消息容器 不同角色 user 提出问题  assistant回答问题
st.chat_message("user").markdown("你是谁")
st.chat_message("assistant").markdown("我是聊天机器人")

二、实际案例

import streamlit as st
import ollama
client=ollama.Client(host="http://localhost:11434")#在本机上找到ollama服务,并通过他的端口号调用模型推理接口
if 'message' not in st.session_state:
    st.session_state['message']=[]
st.title('智能聊天机器人')
st.divider()
pro=st.chat_input('输问题')
if pro:
    st.session_state['message'].append({'role':'user','content':pro})
    for i in st.session_state['message']:#i是一个个字典
        role=i['role']
        content=i['content']
        col_lef,col_right=st.columns([1,1])
        if role=='user':
            with col_right:
                with st.chat_message('user',avatar='👨'):
                    st.markdown(content)
        elif role=='assistant':
            with col_lef:
                with st.chat_message('assistant',avatar='🤖'):
                    st.markdown(content)
    with st.spinner('ai思考中'):#调用模型
        re=client.chat(model='deepseek-r1:1.5b',messages=st.session_state['message'])
        st.chat_message('assistant').markdown(re['message']['content'])#助手回复
       st.session_state['message'].append({'role':'assistant','content':re['message']['content']})#存储回复

个人见解:
1.端口号的问题,程序在ip下有自己监听的端口号,调用端口是客户端通过 IP:端口 发起请求,操作系统把请求转发给对应进程,调用内部服务。
2.st.session_state会话状态对象,内部存储方式可以看似字典,其内部键一般由自己设置在上述示例中将键的值设为[ ],方便管理内容。
3.对于页面的管理是st.columns([1,1])内部的数字将聊天框按比例划分。

三、Langchain

1.学习目的

LangChain 是一个用于构建大语言模型应用的开源编排框架。它把模型调用、提示词、外部数据检索、记忆、工具调用和多步流程串在一起,让你不用从零写一堆胶水代码。
但是,我们今天第一步是要学习调用不同模型,来完成一些任务。
对于langchain有许多不同的库,需要在调用不同的模型时引用不同的库,模型是在库下的模块中的类生成具体实例。
from langchain_deepseek import ChatDeepSeek
from dotenv import load_dotenv
import os
# load_dotenv(dotenv_path='../.env')
load_dotenv()#读取.env文件将其内容注入到当前运行程序的内存环境中
# os.getenv()从环境变量中获取参数
client=ChatDeepSeek(
    model='deepseek-v4-pro',
    api_key=os.getenv('api'),
    base_url='https://api.deepseek.com',
    temperature=0.1,
    max_tokens=1000,
    timeout=30,
    max_retries=2#如果调用失败,自动重试
)
# re=client.invoke('来一首诗')
# print(re.content)
for t in client.stream('来一首诗'):
    if t.additional_kwargs.get('reasoning_content'):
        print(t.additional_kwargs.get('reasoning_content'),end='')
    elif t.additional_kwargs.get('reasoning_content') is None:
        break

批注:
1.因为api_key的重要性,所以要将其封装在配置文件内,以便管理重要信息所以,要引用load_dotenv
2.invoke()和stream()输出方式不同
3.在不同的模型引用时第三方库,model和base_url均要进行更改,要与使用模型相匹配(去模型对应官网查询)。

from langchain.chat_models import init_chat_model
model=init_chat_model(
    model='openai:qwen3.8-max',
    api_key='sk-ws-H.YRRMYEE.hAQd.MEUCIQDOrOGbl5NSxCiLg_2SqTpcDUN95fpd4y3ONyLK570C2gIgeBcBU-ZSls109wYna2Cl5Hvm0nB_pzAkOnTaNjcQ0J0',
    base_url='https://dashscope.aliyuncs.com/compatible-mode/v1',
    temperature=0.1,
    timeout=30,
    max_tokens=500
)
re=model.invoke('你好,请介绍自己')
print(re.content)

批注:
openai是兼容性接口(意思就是别用别的协议,就用 OpenAI 那套格式发请求)。

import dashscope
from dashscope import MultiModalConversation

dashscope.api_key = 'sk-ws-H.YRRMYEE.hAQd.MEUCIQDOrOGbl5NSxCiLg_2SqTpcDUN95fpd4y3ONyLK570C2gIgeBcBU-ZSls109wYna2Cl5Hvm0nB_pzAkOnTaNjcQ0J0'

resp = MultiModalConversation.call(
    model='qwen-image-3.0-pro',
    messages=[{
        "role": "user",
        "content": [
            {"text": "一只在太空中飞行的可爱柴犬,科幻风格"}
        ]
    }],
    parameters={"n": 1, "size": "1024*1024"}
)
if resp.status_code == 200:
    print(resp.output)
else:
    print(f'错误:{resp.message}')

批注:
在生成图片的模型中与llm不同点是api_key的写法,以及不强制加base_url()

Logo

更多推荐