Embedding

扼要言之,embedding 的作用即为使高维疏松的语言转变为低维稠密的向量。原理是矩阵的乘法。

Langchain的小demo

运行环境为 Python 3.11.7 本地conda虚拟环境名字langchain

langchain 初窥门径 - 图1

构建了一个简单的对话程
  1. import os
  2. from langchain_core.prompts import ChatPromptTemplate
  3. from langchain_core.output_parsers import StrOutputParser
  4. from langchain_openai import ChatOpenAI
  5. api_key = "sk-X6k4gks4hxg7IkmGFLYvEdlB1LNx6IIfISlb9KbcpvEKLkiB"
  6. base_url ="https://api.chatanywhere.com.cn"
  7. prompt = ChatPromptTemplate.from_messages([
  8. ("system", "使用中文回答"),
  9. ("user", "{input}")
  10. ])
  11. llm = ChatOpenAI(api_key=api_key,base_url=base_url)
  12. output_parser = StrOutputParser()
  13. chain = prompt | llm | output_parser
  14. print(chain.invoke({"input": "你好"}))
基于 web 文档内容实施问答的程序。

这里有一个小问题base_url ="https://api.chatanywhere.com.cn/v1/"这段记得加/v1/

  1. from langchain_core.prompts import ChatPromptTemplate
  2. from langchain_openai import ChatOpenAI,OpenAIEmbeddings
  3. from langchain_community.document_loaders import web_base
  4. from langchain_community.vectorstores import faiss
  5. from langchain_text_splitters import RecursiveCharacterTextSplitter
  6. from langchain.chains.combine_documents import create_stuff_documents_chain
  7. from langchain_core.documents import Document
  8. from langchain.chains import retrieval
  9. api_key = "sk-X6k4gks4hxg7IkmGFLYvEdlB1LNx6IIfISlb9KbcpvEKLkiB"
  10. base_url ="https://api.chatanywhere.com.cn/v1/"
  11. # 创建embeddings接口
  12. embeddings = OpenAIEmbeddings(base_url=base_url,api_key=api_key)
  13. # 导入文档
  14. loader = web_base.WebBaseLoader("https://docs.smith.langchain.com/user_guide")
  15. docs = loader.load()
  16. # 构建向量数据库
  17. text_splitter = RecursiveCharacterTextSplitter()
  18. documents = text_splitter.split_documents(docs)
  19. vector = faiss.FAISS.from_documents(documents, embeddings)
  20. # 定义模型
  21. llm = ChatOpenAI(api_key=api_key,base_url=base_url)
  22. # 模板
  23. prompt = ChatPromptTemplate.from_template("""Answer the following question based only on the provided context:
  24. <context>
  25. {context}
  26. </context>
  27. Question: {input}""")
  28. # 构建链
  29. document_chain = create_stuff_documents_chain(llm, prompt)
  30. retriever = vector.as_retriever()
  31. retrieval_chain = retrieval.create_retrieval_chain(retriever, document_chain)
  32. # 运行
  33. response = retrieval_chain.invoke({"input": "how can langsmith help with testing?"})
  34. print(response["answer"])
添加了上下文功能
  1. from langchain_core.prompts import ChatPromptTemplate
  2. from langchain_openai import ChatOpenAI, OpenAIEmbeddings
  3. from langchain_community.document_loaders import web_base
  4. from langchain_community.vectorstores import faiss
  5. from langchain_text_splitters import RecursiveCharacterTextSplitter
  6. from langchain.chains.combine_documents import create_stuff_documents_chain
  7. from langchain.chains import retrieval
  8. from langchain.chains import history_aware_retriever
  9. from langchain_core.prompts import MessagesPlaceholder
  10. from langchain_core.messages import HumanMessage, AIMessage
  11. api_key = "sk-X6k4gks4hxg7IkmGFLYvEdlB1LNx6IIfISlb9KbcpvEKLkiB"
  12. base_url = "https://api.chatanywhere.com.cn/v1/"
  13. # 创建embeddings接口
  14. embeddings = OpenAIEmbeddings(base_url=base_url, api_key=api_key)
  15. # 导入文档
  16. loader = web_base.WebBaseLoader("https://docs.smith.langchain.com/user_guide")
  17. docs = loader.load()
  18. # 构建向量数据库
  19. text_splitter = RecursiveCharacterTextSplitter()
  20. documents = text_splitter.split_documents(docs)
  21. vector = faiss.FAISS.from_documents(documents, embeddings)
  22. # 定义模型
  23. llm = ChatOpenAI(api_key=api_key, base_url=base_url)
  24. # 模板
  25. prompt = ChatPromptTemplate.from_messages([
  26. ("system", "Answer the user's questions based on the below context:\n\n{context}"),
  27. MessagesPlaceholder(variable_name="chat_history"),
  28. ("user", "{input}"),
  29. ])
  30. # 构建链
  31. retriever = vector.as_retriever()
  32. retriever_chain = history_aware_retriever.create_history_aware_retriever(llm, retriever, prompt)
  33. document_chain = create_stuff_documents_chain(llm, prompt)
  34. retrieval_chain =retrieval.create_retrieval_chain(retriever_chain, document_chain)
  35. # 运行
  36. chat_history = [HumanMessage(content="LangSmith能帮助测试我的LLM应用程序吗?使用中文回答"), AIMessage(content="好的!")]
  37. response =retrieval_chain.invoke({
  38. "context":retriever,
  39. "chat_history": chat_history,
  40. "input": "告诉我怎么做"
  41. })
  42. print(response["answer"])

CNN

官方文档

https://python.langchain.com/docs/get_started/quickstart/#agent

【卷积神经网络】8分钟搞懂CNN,动画讲解喜闻乐见_哔哩哔哩_bilibili

CNN(Convolutional neural network 输入层 各种数字信息
  • 卷积层 概括特征
  • 池化层 进一步扩大特征
  • 全连接层 对前面的特征进行汇总,进行最终的判断
输出层 分类的类别及其概率