Embedding
扼要言之,embedding 的作用即为使高维疏松的语言转变为低维稠密的向量。原理是矩阵的乘法。
Langchain的小demo
运行环境为 Python 3.11.7 本地conda虚拟环境名字langchain
构建了一个简单的对话程
import os
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
api_key = "sk-X6k4gks4hxg7IkmGFLYvEdlB1LNx6IIfISlb9KbcpvEKLkiB"
base_url ="https://api.chatanywhere.com.cn"
prompt = ChatPromptTemplate.from_messages([
("system", "使用中文回答"),
("user", "{input}")
])
llm = ChatOpenAI(api_key=api_key,base_url=base_url)
output_parser = StrOutputParser()
chain = prompt | llm | output_parser
print(chain.invoke({"input": "你好"}))
基于 web 文档内容实施问答的程序。
这里有一个小问题base_url ="https://api.chatanywhere.com.cn/v1/"
这段记得加/v1/
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI,OpenAIEmbeddings
from langchain_community.document_loaders import web_base
from langchain_community.vectorstores import faiss
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.documents import Document
from langchain.chains import retrieval
api_key = "sk-X6k4gks4hxg7IkmGFLYvEdlB1LNx6IIfISlb9KbcpvEKLkiB"
base_url ="https://api.chatanywhere.com.cn/v1/"
# 创建embeddings接口
embeddings = OpenAIEmbeddings(base_url=base_url,api_key=api_key)
# 导入文档
loader = web_base.WebBaseLoader("https://docs.smith.langchain.com/user_guide")
docs = loader.load()
# 构建向量数据库
text_splitter = RecursiveCharacterTextSplitter()
documents = text_splitter.split_documents(docs)
vector = faiss.FAISS.from_documents(documents, embeddings)
# 定义模型
llm = ChatOpenAI(api_key=api_key,base_url=base_url)
# 模板
prompt = ChatPromptTemplate.from_template("""Answer the following question based only on the provided context:
<context>
{context}
</context>
Question: {input}""")
# 构建链
document_chain = create_stuff_documents_chain(llm, prompt)
retriever = vector.as_retriever()
retrieval_chain = retrieval.create_retrieval_chain(retriever, document_chain)
# 运行
response = retrieval_chain.invoke({"input": "how can langsmith help with testing?"})
print(response["answer"])
添加了上下文功能
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.document_loaders import web_base
from langchain_community.vectorstores import faiss
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain.chains import retrieval
from langchain.chains import history_aware_retriever
from langchain_core.prompts import MessagesPlaceholder
from langchain_core.messages import HumanMessage, AIMessage
api_key = "sk-X6k4gks4hxg7IkmGFLYvEdlB1LNx6IIfISlb9KbcpvEKLkiB"
base_url = "https://api.chatanywhere.com.cn/v1/"
# 创建embeddings接口
embeddings = OpenAIEmbeddings(base_url=base_url, api_key=api_key)
# 导入文档
loader = web_base.WebBaseLoader("https://docs.smith.langchain.com/user_guide")
docs = loader.load()
# 构建向量数据库
text_splitter = RecursiveCharacterTextSplitter()
documents = text_splitter.split_documents(docs)
vector = faiss.FAISS.from_documents(documents, embeddings)
# 定义模型
llm = ChatOpenAI(api_key=api_key, base_url=base_url)
# 模板
prompt = ChatPromptTemplate.from_messages([
("system", "Answer the user's questions based on the below context:\n\n{context}"),
MessagesPlaceholder(variable_name="chat_history"),
("user", "{input}"),
])
# 构建链
retriever = vector.as_retriever()
retriever_chain = history_aware_retriever.create_history_aware_retriever(llm, retriever, prompt)
document_chain = create_stuff_documents_chain(llm, prompt)
retrieval_chain =retrieval.create_retrieval_chain(retriever_chain, document_chain)
# 运行
chat_history = [HumanMessage(content="LangSmith能帮助测试我的LLM应用程序吗?使用中文回答"), AIMessage(content="好的!")]
response =retrieval_chain.invoke({
"context":retriever,
"chat_history": chat_history,
"input": "告诉我怎么做"
})
print(response["answer"])
CNN
官方文档
https://python.langchain.com/docs/get_started/quickstart/#agent
【卷积神经网络】8分钟搞懂CNN,动画讲解喜闻乐见_哔哩哔哩_bilibili
CNN(Convolutional neural network 输入层 各种数字信息- 卷积层 概括特征
- 池化层 进一步扩大特征
- 全连接层 对前面的特征进行汇总,进行最终的判断