JavaChain 用于快速搭建LLM应用。 JavaChain 参考了 LangChain 的架构设计,基于Java8实现。
获取最新的Jar包 MAVEN仓库
<dependency>
<groupId>io.github.shenyubao</groupId>
<artifactId>javachain</artifactId>
<version>${javachain.latest.version}</version>
</dependency>
LLM
负责和大语言模型的直接交互,并屏蔽众多LLM供应商(OpenAI、Azure、ChatGLM、通义前问)之间的差异。
OpenAI openAI = new OpenAI(endpoint,apiKey);
String result = openAI.predict("使用Java写一段代码,获取本机IP地址").outputString();
JavaChain同时提供流式内容返回
OpenAI openAI = new OpenAI(endpoint,apiKey);
OpenAIConsoleStreamListener eventSourceListener = new OpenAIConsoleStreamListener();
openAI.streamPredict("使用Java写一段代码,获取本机IP地址", eventSourceListener);
在LLM应用中通常需要根据模板渲染Prompt,promptTemplate
用于渲染Prompt
String template = "I want you to act as a naming consultant for new companies.\nWhat is a good name for a company that makes {product}?";
PromptTemplate promptTemplate = new PromptTemplate();
promptTemplate.setTemplate(template);
Map<String, Object> context = new HashMap<>();
ontext.put("product", "adidas");
String prompt = promptTemplate.format(context);
Chain是LangChain中最核心的组件,用于将各种LLM的动作合并起来,构建成LLM应用。
SequentialChain
用于合并多个Chain,并将其串行执行
FakeChain fakeChain1 = new FakeChain("fakeChain1");
FakeChain fakeChain2 = new FakeChain("fakeChain2");
SequentialChain sequentialChain = new SequentialChain();
sequentialChain.setChains(Arrays.asList(fakeChain1,fakeChain2));
ConversationChain
用于合并历史对话,实现上下文对话
List<BaseMessage> historyMessages = new ArrayList<>();
historyMessages.add(new HumanMessage("百灵AI都有哪些产品"));
historyMessages.add(new AIMessage("百灵AI有企业端和用户端,每个端都提供Chat工作台与浏览器插件"));
ConversationChain conversation = new ConversationChain();
conversation.setVerbose(true);
conversation.setMessages(historyMessages);
ChainContext context = new ChainContext();
context.setInput("使用英语描述");
ChainContext result = conversation.call(context);
RetrievalChain
用于对接外部数据库,检索私有内容
MilvusStore milvusStore = new MilvusStore(milvus_endpoint,milvus_apiKey);
milvusStore.setEmbedding(new OpenAIEmbeddings(endpoint, apiKey)); //openai提供的embeddings
milvusStore.init();
RetrievalChain retrievalChain = new RetrievalChain();
retrievalChain.setRetriever(milvusStore.asRetriever());
retrievalChain.setRecommendDocumentCount(2);
retrievalChain.setDatasetId("10001");
StuffDocumentChain
用于合并外部数据,可以与RetrievalChain
等组件组合实现私有知识库的对话
StuffDocumentChain stuffDocumentChain = new StuffDocumentChain();
LLMChain llmChain = new LLMChain();
llmChain.setPrompt(PromptConstants.QA_CONVERSATION_CH);
llmChain.setLlm(new OpenAI(endpoint,apiKey));
SequentialChain sequentialChain = new SequentialChain();
sequentialChain.setChains(Arrays.asList(retrievalChain, stuffDocumentChain, llmChain));
String response = sequentialChain.call("百灵AI的浏览器插件是做什么的");
更多种类的Chain请查阅 User Guide
Data Connector 是 JavaChain中的次核心模块,包含多个组件,实现从外部读取文档,处理文档,将文档向量化,向量数据库读写的整个流程
JavaChain 直接复用了 LangChain 的 API,以复用LangChain社区丰富的Docuemnt Loader组件。对应的,部分Loader也是通过调用Python脚本来实现。 !!! 使用Loader前需要先安装所需的python组件(pip install langchain unstructured pdfminer pdfminer.six pdf2image)
Docx2txtLoader loader = new Docx2txtLoader();
loader.setFilePath("path_to_docx");
List<Document> documents = loader.load();
现已支持的组件:Docx2txtLoader、PdfLoader、BSHTMLLoader、CSVLoader、GitLoader 等,详见 UserGuide
Transformers
实现文档的格式化,例如将原始文档按自然段落拆分后,再根据设定的Token数合并成Chunk,以提高知识库内容使用效果
PdfLoader loader = new PdfLoader();
loader.setFilePath(path);
loader.registerTransformer(new RecursiveCharacterTextSplitter());
List<Document> documents = loader.load("10001");
Embedding
集成向量化引擎,实现文本的向量化
MilvusStore milvusStore = new MilvusStore(milvus_endpoint,milvus_apiKey);
milvusStore.setEmbedding(new OpenAIEmbeddings(endpoint, apiKey)); //openai提供的embeddings
milvusStore.init();
现已支持的组件:OpenAIEmbedding、AzureOpenAIEmbdding 等,详见 UserGuide
Embedding
实现向量数据库的集成与交互,实现文本的存取
MilvusStore milvusStore = new MilvusStore(milvus_endpoint,milvus_apiKey);
milvusStore.setEmbedding(new OpenAIEmbeddings(endpoint, apiKey)); //openai提供的embeddings
milvusStore.init();
List<String> knowledge = Arrays.asList(
"百灵AI123开放平台创建机器人,可以参考:https://www.bailing.ai/knowledge/123",
"openapi接口传数据是有大小限制在10M以内,这个是nginx限制的要求");
milvusStore.addTexts(knowledge,"10001");
//内容检索
int topK =3;
List<Document> documents = milvusStore.similaritySearch(datasetId,"OPENAPI有接口大小限制不,有的话是多少",topK);
现已支持的组件:MilvusStore,详见 UserGuide
Retriever
用于实现内容检索,通常配合 RetrievalChain
使用,使用案例可查看 RetrievalChain
章节
现已支持的组件:VectorStoreRetriever,详见 UserGuide
./gradlew testClasses
详见 UserGuide
- 支持 Agent
- 支持 LLM: CHATGLM
- 支持 VectorStore: Aliyun OpenSearch
- 支持 VectorStore: Aliyun ADB for pg
- 错误码列表及处理建议
微信 | 支付宝 |
---|---|