langchain-dev-utils 1.4.2__tar.gz → 1.4.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. langchain_dev_utils-1.4.3/.cache/.gitignore +1 -0
  2. langchain_dev_utils-1.4.3/.cache/10132167963676728850 +4 -0
  3. langchain_dev_utils-1.4.3/.cache/10149277315986816452 +119 -0
  4. langchain_dev_utils-1.4.3/.cache/10212306112077623172 +89 -0
  5. langchain_dev_utils-1.4.3/.cache/10378751321322438463 +4 -0
  6. langchain_dev_utils-1.4.3/.cache/1040099908288978801 +135 -0
  7. langchain_dev_utils-1.4.3/.cache/104857451859860363 +105 -0
  8. langchain_dev_utils-1.4.3/.cache/10632936651036843898 +105 -0
  9. langchain_dev_utils-1.4.3/.cache/10750405311029893673 +4 -0
  10. langchain_dev_utils-1.4.3/.cache/11073118652123077588 +27 -0
  11. langchain_dev_utils-1.4.3/.cache/11097895064266833842 +4 -0
  12. langchain_dev_utils-1.4.3/.cache/1151792845744300718 +4 -0
  13. langchain_dev_utils-1.4.3/.cache/1189978746543437471 +165 -0
  14. langchain_dev_utils-1.4.3/.cache/12115012717975431373 +4 -0
  15. langchain_dev_utils-1.4.3/.cache/12206186549754547764 +88 -0
  16. langchain_dev_utils-1.4.3/.cache/12360634119973346056 +89 -0
  17. langchain_dev_utils-1.4.3/.cache/1269862585078162109 +165 -0
  18. langchain_dev_utils-1.4.3/.cache/12821160338097409528 +4 -0
  19. langchain_dev_utils-1.4.3/.cache/13062886706927887844 +4 -0
  20. langchain_dev_utils-1.4.3/.cache/13301246796564074464 +27 -0
  21. langchain_dev_utils-1.4.3/.cache/13301993342006977616 +58 -0
  22. langchain_dev_utils-1.4.3/.cache/1330248056645643292 +104 -0
  23. langchain_dev_utils-1.4.3/.cache/13348122375379064923 +58 -0
  24. langchain_dev_utils-1.4.3/.cache/1359679513868266359 +4 -0
  25. langchain_dev_utils-1.4.3/.cache/13625925199296545024 +4 -0
  26. langchain_dev_utils-1.4.3/.cache/13632211840061000323 +4 -0
  27. langchain_dev_utils-1.4.3/.cache/13746006243306193541 +4 -0
  28. langchain_dev_utils-1.4.3/.cache/13971100319460407517 +88 -0
  29. langchain_dev_utils-1.4.3/.cache/14028237667454951821 +243 -0
  30. langchain_dev_utils-1.4.3/.cache/14033072851579767670 +119 -0
  31. langchain_dev_utils-1.4.3/.cache/14250498158008610928 +4 -0
  32. langchain_dev_utils-1.4.3/.cache/14259959605703426807 +349 -0
  33. langchain_dev_utils-1.4.3/.cache/14293610541601779362 +74 -0
  34. langchain_dev_utils-1.4.3/.cache/14361141486053015390 +89 -0
  35. langchain_dev_utils-1.4.3/.cache/14815454888612538140 +4 -0
  36. langchain_dev_utils-1.4.3/.cache/14904030555725953776 +4 -0
  37. langchain_dev_utils-1.4.3/.cache/15025271566505243950 +4 -0
  38. langchain_dev_utils-1.4.3/.cache/15054227793547352075 +990 -0
  39. langchain_dev_utils-1.4.3/.cache/15065779533269950614 +4 -0
  40. langchain_dev_utils-1.4.3/.cache/15446496809880657661 +27 -0
  41. langchain_dev_utils-1.4.3/.cache/15617362476885904629 +4 -0
  42. langchain_dev_utils-1.4.3/.cache/15639173995710368854 +349 -0
  43. langchain_dev_utils-1.4.3/.cache/15762191716031596491 +4 -0
  44. langchain_dev_utils-1.4.3/.cache/1577969368081973692 +243 -0
  45. langchain_dev_utils-1.4.3/.cache/1628387613061272132 +4 -0
  46. langchain_dev_utils-1.4.3/.cache/16491517296573712344 +990 -0
  47. langchain_dev_utils-1.4.3/.cache/16493373299299360945 +4 -0
  48. langchain_dev_utils-1.4.3/.cache/16528442351413743144 +135 -0
  49. langchain_dev_utils-1.4.3/.cache/16541658010600719633 +104 -0
  50. langchain_dev_utils-1.4.3/.cache/16646829519153034812 +4 -0
  51. langchain_dev_utils-1.4.3/.cache/16655965899250654016 +89 -0
  52. langchain_dev_utils-1.4.3/.cache/16832445802116848894 +4 -0
  53. langchain_dev_utils-1.4.3/.cache/16946221993949941809 +4 -0
  54. langchain_dev_utils-1.4.3/.cache/17203959758206958699 +4 -0
  55. langchain_dev_utils-1.4.3/.cache/17290735391753493732 +4 -0
  56. langchain_dev_utils-1.4.3/.cache/17319573296851837531 +4 -0
  57. langchain_dev_utils-1.4.3/.cache/17688261241712087494 +4 -0
  58. langchain_dev_utils-1.4.3/.cache/17698060842036528324 +194 -0
  59. langchain_dev_utils-1.4.3/.cache/17787738391657669186 +4 -0
  60. langchain_dev_utils-1.4.3/.cache/18227580402014540144 +379 -0
  61. langchain_dev_utils-1.4.3/.cache/18303185967813561173 +242 -0
  62. langchain_dev_utils-1.4.3/.cache/1926719474267919111 +4 -0
  63. langchain_dev_utils-1.4.3/.cache/2076114625129041541 +333 -0
  64. langchain_dev_utils-1.4.3/.cache/2120755445008564656 +4 -0
  65. langchain_dev_utils-1.4.3/.cache/2172871625297495691 +136 -0
  66. langchain_dev_utils-1.4.3/.cache/229194999405881755 +4 -0
  67. langchain_dev_utils-1.4.3/.cache/2591743801418891565 +4 -0
  68. langchain_dev_utils-1.4.3/.cache/2633179503659950686 +150 -0
  69. langchain_dev_utils-1.4.3/.cache/2638619333707832110 +243 -0
  70. langchain_dev_utils-1.4.3/.cache/311072482334109094 +4 -0
  71. langchain_dev_utils-1.4.3/.cache/3114295214797897303 +333 -0
  72. langchain_dev_utils-1.4.3/.cache/3464700389800366053 +502 -0
  73. langchain_dev_utils-1.4.3/.cache/4043361625843815558 +88 -0
  74. langchain_dev_utils-1.4.3/.cache/4131672489284763215 +379 -0
  75. langchain_dev_utils-1.4.3/.cache/4227978977025071655 +58 -0
  76. langchain_dev_utils-1.4.3/.cache/4303146078529032033 +4 -0
  77. langchain_dev_utils-1.4.3/.cache/4556346579349859049 +4 -0
  78. langchain_dev_utils-1.4.3/.cache/4595382501822052434 +4 -0
  79. langchain_dev_utils-1.4.3/.cache/4643267776105670084 +4 -0
  80. langchain_dev_utils-1.4.3/.cache/4645903213388384790 +150 -0
  81. langchain_dev_utils-1.4.3/.cache/4772296789029058803 +58 -0
  82. langchain_dev_utils-1.4.3/.cache/4856685402689964555 +4 -0
  83. langchain_dev_utils-1.4.3/.cache/4911455497220962699 +502 -0
  84. langchain_dev_utils-1.4.3/.cache/4960916194268796790 +242 -0
  85. langchain_dev_utils-1.4.3/.cache/5004460099290458770 +4 -0
  86. langchain_dev_utils-1.4.3/.cache/5043685154627706733 +4 -0
  87. langchain_dev_utils-1.4.3/.cache/5058845702148423459 +4 -0
  88. langchain_dev_utils-1.4.3/.cache/5114803401124200986 +4 -0
  89. langchain_dev_utils-1.4.3/.cache/5240837403663904545 +74 -0
  90. langchain_dev_utils-1.4.3/.cache/5309181156679912115 +4 -0
  91. langchain_dev_utils-1.4.3/.cache/5573910617214598357 +135 -0
  92. langchain_dev_utils-1.4.3/.cache/5914983732650719802 +4 -0
  93. langchain_dev_utils-1.4.3/.cache/5936839346169779924 +244 -0
  94. langchain_dev_utils-1.4.3/.cache/6051440962903797706 +135 -0
  95. langchain_dev_utils-1.4.3/.cache/6070063779327491346 +4 -0
  96. langchain_dev_utils-1.4.3/.cache/6150574529172679001 +4 -0
  97. langchain_dev_utils-1.4.3/.cache/6185295689099300560 +4 -0
  98. langchain_dev_utils-1.4.3/.cache/6416288532933398693 +4 -0
  99. langchain_dev_utils-1.4.3/.cache/6576531235250061605 +194 -0
  100. langchain_dev_utils-1.4.3/.cache/6745059141823250635 +136 -0
  101. langchain_dev_utils-1.4.3/.cache/693530668503540423 +244 -0
  102. langchain_dev_utils-1.4.3/.cache/7021182865222058936 +4 -0
  103. langchain_dev_utils-1.4.3/.cache/7424125075635962609 +88 -0
  104. langchain_dev_utils-1.4.3/.cache/7426947316238206265 +4 -0
  105. langchain_dev_utils-1.4.3/.cache/7696708707823268237 +4 -0
  106. langchain_dev_utils-1.4.3/.cache/8031990660020224106 +27 -0
  107. langchain_dev_utils-1.4.3/.cache/8083270160335022657 +4 -0
  108. langchain_dev_utils-1.4.3/.cache/8185803444397491430 +27 -0
  109. langchain_dev_utils-1.4.3/.cache/9245913271089240062 +4 -0
  110. langchain_dev_utils-1.4.3/.cache/937151433542130939 +4 -0
  111. langchain_dev_utils-1.4.3/.cache/9638021948029599062 +4 -0
  112. langchain_dev_utils-1.4.3/.cache/9817124278980503833 +27 -0
  113. langchain_dev_utils-1.4.3/.cache/9974721629853791342 +243 -0
  114. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/PKG-INFO +5 -2
  115. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/README.md +4 -1
  116. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/pyproject.toml +2 -2
  117. langchain_dev_utils-1.4.3/src/langchain_dev_utils/__init__.py +1 -0
  118. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/agents/factory.py +17 -4
  119. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/chat_models/base.py +3 -4
  120. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/chat_models/types.py +2 -1
  121. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/embeddings/base.py +4 -6
  122. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/tool_calling/human_in_the_loop.py +2 -1
  123. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/uv.lock +987 -977
  124. langchain_dev_utils-1.4.2/src/langchain_dev_utils/__init__.py +0 -1
  125. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/.gitignore +0 -0
  126. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/.python-version +0 -0
  127. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/.vscode/settings.json +0 -0
  128. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/AGENTS.md +0 -0
  129. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/LICENSE +0 -0
  130. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/README_cn.md +0 -0
  131. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/_utils.py +0 -0
  132. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/agents/__init__.py +0 -0
  133. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/agents/middleware/__init__.py +0 -0
  134. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/agents/middleware/format_prompt.py +0 -0
  135. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/agents/middleware/handoffs.py +0 -0
  136. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/agents/middleware/model_fallback.py +0 -0
  137. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/agents/middleware/model_router.py +0 -0
  138. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/agents/middleware/plan.py +0 -0
  139. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/agents/middleware/summarization.py +0 -0
  140. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/agents/middleware/tool_call_repair.py +0 -0
  141. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/agents/middleware/tool_emulator.py +0 -0
  142. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/agents/middleware/tool_selection.py +0 -0
  143. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/agents/wrap.py +0 -0
  144. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/chat_models/__init__.py +0 -0
  145. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/chat_models/adapters/__init__.py +0 -0
  146. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/chat_models/adapters/create_utils.py +0 -0
  147. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/chat_models/adapters/openai_compatible.py +0 -0
  148. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/chat_models/adapters/register_profiles.py +0 -0
  149. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/embeddings/__init__.py +0 -0
  150. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/embeddings/adapters/__init__.py +0 -0
  151. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/embeddings/adapters/create_utils.py +0 -0
  152. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/embeddings/adapters/openai_compatible.py +0 -0
  153. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/graph/__init__.py +0 -0
  154. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/graph/parallel.py +0 -0
  155. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/graph/sequential.py +0 -0
  156. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/graph/types.py +0 -0
  157. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/message_convert/__init__.py +0 -0
  158. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/message_convert/content.py +0 -0
  159. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/message_convert/format.py +0 -0
  160. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/pipeline/__init__.py +0 -0
  161. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/pipeline/parallel.py +0 -0
  162. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/pipeline/sequential.py +0 -0
  163. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/pipeline/types.py +0 -0
  164. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/py.typed +0 -0
  165. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/tool_calling/__init__.py +0 -0
  166. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/src/langchain_dev_utils/tool_calling/utils.py +0 -0
  167. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/tests/__init__.py +0 -0
  168. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/tests/test_agent.py +0 -0
  169. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/tests/test_chat_models.py +0 -0
  170. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/tests/test_embedding.py +0 -0
  171. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/tests/test_graph.py +0 -0
  172. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/tests/test_handoffs_middleware.py +0 -0
  173. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/tests/test_human_in_the_loop.py +0 -0
  174. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/tests/test_load_embbeding.py +0 -0
  175. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/tests/test_load_model.py +0 -0
  176. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/tests/test_messages.py +0 -0
  177. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/tests/test_model_tool_emulator.py +0 -0
  178. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/tests/test_plan_middleware.py +0 -0
  179. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/tests/test_router_model.py +0 -0
  180. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/tests/test_tool_call_repair.py +0 -0
  181. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/tests/test_tool_calling.py +0 -0
  182. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/tests/test_wrap_agent.py +0 -0
  183. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/tests/utils/__init__.py +0 -0
  184. {langchain_dev_utils-1.4.2 → langchain_dev_utils-1.4.3}/tests/utils/register.py +0 -0
@@ -0,0 +1 @@
1
+ *
@@ -0,0 +1,4 @@
1
+ {
2
+ "data": "\r\n<!doctype html>\r\n<html lang=\"zh\" class=\"no-js\">\r\n <head>\r\n \r\n <meta charset=\"utf-8\">\r\n <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\r\n \r\n \r\n \r\n <link rel=\"canonical\" href=\"https://tbice123123.github.io/langchain-dev-utils/en/adavance-guide/openai-compatible/embedding/\">\r\n \r\n \r\n \r\n \r\n \r\n <link rel=\"alternate\" href=\"/en/\" hreflang=\"en\">\r\n \r\n <link rel=\"alternate\" href=\"/zh/\" hreflang=\"zh\">\r\n \r\n \r\n \r\n <link rel=\"icon\" href=\"../../../../assets/images/favicon.png\">\r\n <meta name=\"generator\" content=\"zensical-0.0.21\">\r\n \r\n \r\n \r\n <title>Creation and Usage of Embedding Models - Langchain Dev Utils</title>\r\n \r\n \r\n \r\n \r\n \r\n \r\n <link rel=\"stylesheet\" href=\"../../../../assets/stylesheets/modern/main.f28b7ce3.min.css\">\r\n \r\n \r\n \r\n \r\n <link rel=\"stylesheet\" href=\"../../../../assets/stylesheets/modern/palette.dfe2e883.min.css\">\r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\r\n <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Inter:300,300i,400,400i,500,500i,700,700i%7CJetBrains+Mono:400,400i,700,700i&display=fallback\">\r\n <style>:root{--md-text-font:\"Inter\";--md-code-font:\"JetBrains Mono\"}</style>\r\n \r\n \r\n \r\n <script>__md_scope=new URL(\"../../../..\",location),__md_hash=e=>[...e].reduce(((e,t)=>(e<<5)-e+t.charCodeAt(0)),0),__md_get=(e,t=localStorage,a=__md_scope)=>JSON.parse(t.getItem(a.pathname+\".\"+e)),__md_set=(e,t,a=localStorage,_=__md_scope)=>{try{a.setItem(_.pathname+\".\"+e,JSON.stringify(t))}catch(e){}},document.documentElement.setAttribute(\"data-platform\",navigator.platform)</script>\r\n \r\n \r\n\r\n \r\n \r\n </head>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <body dir=\"ltr\" data-md-color-scheme=\"default\" data-md-color-primary=\"light-blue\" data-md-color-accent=\"light-blue\">\r\n \r\n \r\n <input class=\"md-toggle\" data-md-toggle=\"drawer\" type=\"checkbox\" id=\"__drawer\" autocomplete=\"off\">\r\n <input class=\"md-toggle\" data-md-toggle=\"search\" type=\"checkbox\" id=\"__search\" autocomplete=\"off\">\r\n <label class=\"md-overlay\" for=\"__drawer\"></label>\r\n <div data-md-component=\"skip\">\r\n \r\n \r\n <a href=\"#creation-and-usage-of-embedding-models\" class=\"md-skip\">\r\n 跳转至\r\n </a>\r\n \r\n </div>\r\n <div data-md-component=\"announce\">\r\n \r\n </div>\r\n \r\n \r\n \r\n\r\n<header class=\"md-header\" data-md-component=\"header\">\r\n <nav class=\"md-header__inner md-grid\" aria-label=\"页眉\">\r\n <a href=\"../../../../index.md\" title=\"Langchain Dev Utils\" class=\"md-header__button md-logo\" aria-label=\"Langchain Dev Utils\" data-md-component=\"logo\">\r\n \r\n \r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-book-open\" viewBox=\"0 0 24 24\"><path d=\"M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/></svg>\r\n\r\n </a>\r\n <label class=\"md-header__button md-icon\" for=\"__drawer\">\r\n \r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-menu\" viewBox=\"0 0 24 24\"><path d=\"M4 5h16M4 12h16M4 19h16\"/></svg>\r\n </label>\r\n <div class=\"md-header__title\" data-md-component=\"header-title\">\r\n <div class=\"md-header__ellipsis\">\r\n <div class=\"md-header__topic\">\r\n <span class=\"md-ellipsis\">\r\n Langchain Dev Utils\r\n </span>\r\n </div>\r\n <div class=\"md-header__topic\" data-md-component=\"header-topic\">\r\n <span class=\"md-ellipsis\">\r\n \r\n Creation and Usage of Embedding Models\r\n \r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n <form class=\"md-header__option\" data-md-component=\"palette\">\r\n \r\n \r\n \r\n \r\n <input class=\"md-option\" data-md-color-media=\"none\" data-md-color-scheme=\"default\" data-md-color-primary=\"light-blue\" data-md-color-accent=\"light-blue\" aria-label=\"切换到深色模式\" type=\"radio\" name=\"__palette\" id=\"__palette_0\">\r\n \r\n <label class=\"md-header__button md-icon\" title=\"切换到深色模式\" for=\"__palette_1\" hidden>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z\"/></svg>\r\n </label>\r\n \r\n \r\n \r\n \r\n \r\n <input class=\"md-option\" data-md-color-media=\"none\" data-md-color-scheme=\"slate\" data-md-color-primary=\"light-blue\" data-md-color-accent=\"light-blue\" aria-label=\"切换到浅色模式\" type=\"radio\" name=\"__palette\" id=\"__palette_1\">\r\n \r\n <label class=\"md-header__button md-icon\" title=\"切换到浅色模式\" for=\"__palette_0\" hidden>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z\"/></svg>\r\n </label>\r\n \r\n \r\n</form>\r\n \r\n \r\n \r\n <script>var palette=__md_get(\"__palette\");if(palette&&palette.color){if(\"(prefers-color-scheme)\"===palette.color.media){var media=matchMedia(\"(prefers-color-scheme: light)\"),input=document.querySelector(media.matches?\"[data-md-color-media='(prefers-color-scheme: light)']\":\"[data-md-color-media='(prefers-color-scheme: dark)']\");palette.color.media=input.getAttribute(\"data-md-color-media\"),palette.color.scheme=input.getAttribute(\"data-md-color-scheme\"),palette.color.primary=input.getAttribute(\"data-md-color-primary\"),palette.color.accent=input.getAttribute(\"data-md-color-accent\")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute(\"data-md-color-\"+key,value)}</script>\r\n \r\n \r\n <div class=\"md-header__option\">\r\n <div class=\"md-select\">\r\n \r\n <button class=\"md-header__button md-icon\" aria-label=\"选择当前语言\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-languages\" viewBox=\"0 0 24 24\"><path d=\"m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6\"/></svg>\r\n </button>\r\n <div class=\"md-select__inner\">\r\n <ul class=\"md-select__list\">\r\n \r\n <li class=\"md-select__item\">\r\n <a href=\"/en/\" hreflang=\"en\" class=\"md-select__link\">\r\n English\r\n </a>\r\n </li>\r\n \r\n <li class=\"md-select__item\">\r\n <a href=\"/zh/\" hreflang=\"zh\" class=\"md-select__link\">\r\n 简体中文\r\n </a>\r\n </li>\r\n \r\n </ul>\r\n </div>\r\n </div>\r\n</div>\r\n \r\n \r\n \r\n \r\n <label class=\"md-header__button md-icon\" for=\"__search\">\r\n \r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-search\" viewBox=\"0 0 24 24\"><path d=\"m21 21-4.34-4.34\"/><circle cx=\"11\" cy=\"11\" r=\"8\"/></svg>\r\n </label>\r\n <div class=\"md-search\" data-md-component=\"search\" role=\"dialog\" aria-label=\"查找\">\r\n <button type=\"button\" class=\"md-search__button\">\r\n 查找\r\n </button>\r\n</div>\r\n \r\n \r\n <div class=\"md-header__source\">\r\n \r\n <a href=\"https://github.com/tbice123123/langchain-dev-utils\" title=\"前往仓库\" class=\"md-source\" data-md-component=\"source\">\r\n <div class=\"md-source__icon md-icon\">\r\n \r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill=\"currentColor\" d=\"M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4\"/></svg>\r\n </div>\r\n <div class=\"md-source__repository\">\r\n tbice123123/langchain-dev-utils\r\n </div>\r\n</a>\r\n \r\n </div>\r\n </nav>\r\n \r\n</header>\r\n \r\n <div class=\"md-container\" data-md-component=\"container\">\r\n \r\n \r\n \r\n \r\n \r\n<nav class=\"md-tabs\" aria-label=\"标签\" data-md-component=\"tabs\">\r\n <div class=\"md-grid\">\r\n <ul class=\"md-tabs__list\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-tabs__item\">\r\n <a href=\"../../../../index.md\" class=\"md-tabs__link\">\r\n \r\n \r\n Overview\r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-tabs__item\">\r\n <a href=\"../../../../getting-started-guide/installation.md\" class=\"md-tabs__link\">\r\n \r\n \r\n Getting Started\r\n\r\n </a>\r\n </li>\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-tabs__item\">\r\n <a href=\"../../../../adavance-guide/openai-compatible/overview.md\" class=\"md-tabs__link\">\r\n \r\n \r\n Advanced Guides\r\n\r\n </a>\r\n </li>\r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-tabs__item\">\r\n <a href=\"../../../../api-reference/overview.md\" class=\"md-tabs__link\">\r\n \r\n \r\n API Reference\r\n\r\n </a>\r\n </li>\r\n \r\n \r\n\r\n \r\n </ul>\r\n </div>\r\n</nav>\r\n \r\n \r\n \r\n <main class=\"md-main\" data-md-component=\"main\">\r\n <div class=\"md-main__inner md-grid\">\r\n \r\n \r\n \r\n <div class=\"md-sidebar md-sidebar--primary\" data-md-component=\"sidebar\" data-md-type=\"navigation\" >\r\n <div class=\"md-sidebar__scrollwrap\">\r\n <div class=\"md-sidebar__inner\">\r\n \r\n\r\n\r\n \r\n\r\n\r\n<nav class=\"md-nav md-nav--primary md-nav--lifted\" aria-label=\"导航栏\" data-md-level=\"0\">\r\n <label class=\"md-nav__title\" for=\"__drawer\">\r\n <a href=\"../../../../index.md\" title=\"Langchain Dev Utils\" class=\"md-nav__button md-logo\" aria-label=\"Langchain Dev Utils\" data-md-component=\"logo\">\r\n \r\n \r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-book-open\" viewBox=\"0 0 24 24\"><path d=\"M12 7v14M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"/></svg>\r\n\r\n </a>\r\n Langchain Dev Utils\r\n </label>\r\n \r\n <div class=\"md-nav__source\">\r\n <a href=\"https://github.com/tbice123123/langchain-dev-utils\" title=\"前往仓库\" class=\"md-source\" data-md-component=\"source\">\r\n <div class=\"md-source__icon md-icon\">\r\n \r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill=\"currentColor\" d=\"M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4\"/></svg>\r\n </div>\r\n <div class=\"md-source__repository\">\r\n tbice123123/langchain-dev-utils\r\n </div>\r\n</a>\r\n </div>\r\n \r\n <ul class=\"md-nav__list\" data-md-scrollfix>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../index.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Overview\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item md-nav__item--nested\">\r\n \r\n \r\n \r\n \r\n \r\n <input class=\"md-nav__toggle md-toggle md-toggle--indeterminate\" type=\"checkbox\" id=\"__nav_2\" >\r\n \r\n \r\n <label class=\"md-nav__link\" for=\"__nav_2\" id=\"__nav_2_label\" tabindex=\"0\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Getting Started\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n <span class=\"md-nav__icon md-icon\"></span>\r\n </label>\r\n \r\n <nav class=\"md-nav\" data-md-level=\"1\" aria-labelledby=\"__nav_2_label\" aria-expanded=\"false\">\r\n <label class=\"md-nav__title\" for=\"__nav_2\">\r\n <span class=\"md-nav__icon md-icon\"></span>\r\n \r\n \r\n Getting Started\r\n \r\n\r\n </label>\r\n <ul class=\"md-nav__list\" data-md-scrollfix>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../getting-started-guide/installation.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Installation\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../getting-started-guide/chat.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Chat Model Management\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../getting-started-guide/embedding.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Embedding Model Management\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../getting-started-guide/format.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Formatting Sequences\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../getting-started-guide/message.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Message Processing\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../getting-started-guide/tool.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Tool Calling Processing\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../getting-started-guide/human-in-the-loop.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Add Human-in-the-Loop Support in Tool Calling\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n </ul>\r\n </nav>\r\n \r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item md-nav__item--nested\">\r\n \r\n \r\n \r\n \r\n \r\n <input class=\"md-nav__toggle md-toggle md-toggle--indeterminate\" type=\"checkbox\" id=\"__nav_3\" >\r\n \r\n \r\n <label class=\"md-nav__link\" for=\"__nav_3\" id=\"__nav_3_label\" tabindex=\"0\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Advanced Guides\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n <span class=\"md-nav__icon md-icon\"></span>\r\n </label>\r\n \r\n <nav class=\"md-nav\" data-md-level=\"1\" aria-labelledby=\"__nav_3_label\" aria-expanded=\"false\">\r\n <label class=\"md-nav__title\" for=\"__nav_3\">\r\n <span class=\"md-nav__icon md-icon\"></span>\r\n \r\n \r\n Advanced Guides\r\n \r\n\r\n </label>\r\n <ul class=\"md-nav__list\" data-md-scrollfix>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item md-nav__item--nested\">\r\n \r\n \r\n \r\n \r\n \r\n <input class=\"md-nav__toggle md-toggle md-toggle--indeterminate\" type=\"checkbox\" id=\"__nav_3_1\" >\r\n \r\n \r\n <label class=\"md-nav__link\" for=\"__nav_3_1\" id=\"__nav_3_1_label\" tabindex=\"0\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n OpenAI Compatible API Integration\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n <span class=\"md-nav__icon md-icon\"></span>\r\n </label>\r\n \r\n <nav class=\"md-nav\" data-md-level=\"2\" aria-labelledby=\"__nav_3_1_label\" aria-expanded=\"false\">\r\n <label class=\"md-nav__title\" for=\"__nav_3_1\">\r\n <span class=\"md-nav__icon md-icon\"></span>\r\n \r\n \r\n OpenAI Compatible API Integration\r\n \r\n\r\n </label>\r\n <ul class=\"md-nav__list\" data-md-scrollfix>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../adavance-guide/openai-compatible/overview.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Overview\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../adavance-guide/openai-compatible/chat.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Creating and Using Chat Models\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../adavance-guide/openai-compatible/embedding.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Creating and Using Embedding Models\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../adavance-guide/openai-compatible/register.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Integration with Model Management\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n </ul>\r\n </nav>\r\n \r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item md-nav__item--nested\">\r\n \r\n \r\n \r\n \r\n \r\n <input class=\"md-nav__toggle md-toggle md-toggle--indeterminate\" type=\"checkbox\" id=\"__nav_3_2\" >\r\n \r\n \r\n <label class=\"md-nav__link\" for=\"__nav_3_2\" id=\"__nav_3_2_label\" tabindex=\"0\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Middleware\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n <span class=\"md-nav__icon md-icon\"></span>\r\n </label>\r\n \r\n <nav class=\"md-nav\" data-md-level=\"2\" aria-labelledby=\"__nav_3_2_label\" aria-expanded=\"false\">\r\n <label class=\"md-nav__title\" for=\"__nav_3_2\">\r\n <span class=\"md-nav__icon md-icon\"></span>\r\n \r\n \r\n Middleware\r\n \r\n\r\n </label>\r\n <ul class=\"md-nav__list\" data-md-scrollfix>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../adavance-guide/middleware/overview.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Overview\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../adavance-guide/middleware/plan.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Task Planning\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../adavance-guide/middleware/router.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Model Routing\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../adavance-guide/middleware/handoffs.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Agent Handoff\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../adavance-guide/middleware/tool-call-repair.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Tool Call Repair\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../adavance-guide/middleware/format.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Format System Prompts\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../adavance-guide/middleware/official.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n LangChain Built-in Middleware Extensions\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n </ul>\r\n </nav>\r\n \r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../adavance-guide/multi-agent.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Subagent Tools (Agent as Tool)\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../adavance-guide/graph.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Prebuilt State-Graph Building Functions\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n </ul>\r\n </nav>\r\n \r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item md-nav__item--nested\">\r\n \r\n \r\n \r\n \r\n \r\n <input class=\"md-nav__toggle md-toggle md-toggle--indeterminate\" type=\"checkbox\" id=\"__nav_4\" >\r\n \r\n \r\n <label class=\"md-nav__link\" for=\"__nav_4\" id=\"__nav_4_label\" tabindex=\"0\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n API Reference\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n <span class=\"md-nav__icon md-icon\"></span>\r\n </label>\r\n \r\n <nav class=\"md-nav\" data-md-level=\"1\" aria-labelledby=\"__nav_4_label\" aria-expanded=\"false\">\r\n <label class=\"md-nav__title\" for=\"__nav_4\">\r\n <span class=\"md-nav__icon md-icon\"></span>\r\n \r\n \r\n API Reference\r\n \r\n\r\n </label>\r\n <ul class=\"md-nav__list\" data-md-scrollfix>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../api-reference/overview.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Overview\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../api-reference/chat.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Chat Model Management\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../api-reference/embedding.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Embedding Model Management\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../api-reference/format.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Formatting Sequences\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../api-reference/message.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Message Processing\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../api-reference/tool.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Tool Calling Processing\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"../../../../api-reference/human-in-the-loop.md\" class=\"md-nav__link\">\r\n \r\n \r\n \r\n <span class=\"md-ellipsis\">\r\n \r\n \r\n Add Human-in-the-Loop Support in Tool Calling\r\n \r\n\r\n \r\n </span>\r\n \r\n \r\n\r\n </a>\r\n </li>\r\n \r\n\r\n \r\n \r\n </ul>\r\n </nav>\r\n \r\n </li>\r\n \r\n\r\n \r\n </ul>\r\n</nav>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n \r\n <div class=\"md-sidebar md-sidebar--secondary\" data-md-component=\"sidebar\" data-md-type=\"toc\" >\r\n <div class=\"md-sidebar__scrollwrap\">\r\n <div class=\"md-sidebar__inner\">\r\n \r\n\r\n\r\n<nav class=\"md-nav md-nav--secondary\" aria-label=\"目录\">\r\n \r\n \r\n \r\n \r\n \r\n \r\n <label class=\"md-nav__title\" for=\"__toc\">\r\n <span class=\"md-nav__icon md-icon\"></span>\r\n 目录\r\n </label>\r\n <ul class=\"md-nav__list\" data-md-component=\"toc\" data-md-scrollfix>\r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"#creating-embedding-model-classes\" class=\"md-nav__link\">\r\n <span class=\"md-ellipsis\">\r\n \r\n Creating Embedding Model Classes\r\n \r\n </span>\r\n </a>\r\n \r\n</li>\r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"#using-the-embedding-model-class\" class=\"md-nav__link\">\r\n <span class=\"md-ellipsis\">\r\n \r\n Using the Embedding Model Class\r\n \r\n </span>\r\n </a>\r\n \r\n <nav class=\"md-nav\" aria-label=\"Using the Embedding Model Class\">\r\n <ul class=\"md-nav__list\">\r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"#vectorizing-queries\" class=\"md-nav__link\">\r\n <span class=\"md-ellipsis\">\r\n \r\n Vectorizing Queries\r\n \r\n </span>\r\n </a>\r\n \r\n</li>\r\n \r\n <li class=\"md-nav__item\">\r\n <a href=\"#vectorizing-a-list-of-strings\" class=\"md-nav__link\">\r\n <span class=\"md-ellipsis\">\r\n \r\n Vectorizing a List of Strings\r\n \r\n </span>\r\n </a>\r\n \r\n</li>\r\n \r\n </ul>\r\n </nav>\r\n \r\n</li>\r\n \r\n </ul>\r\n \r\n</nav>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n \r\n <div class=\"md-content\" data-md-component=\"content\">\r\n \r\n <article class=\"md-content__inner md-typeset\">\r\n \r\n \r\n \r\n \r\n\r\n\r\n<h1 id=\"creation-and-usage-of-embedding-models\">Creation and Usage of Embedding Models</h1>\n<h2 id=\"creating-embedding-model-classes\">Creating Embedding Model Classes</h2>\n<p>Similar to chat model classes, you can use <code>create_openai_compatible_embedding</code> to create an integrated embedding model class. This function accepts the following parameters:</p>\n<table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>embedding_provider</code></td>\n<td>Embedding model provider name, e.g., <code>vllm</code>. Must start with a letter or number, can only contain letters, numbers, and underscores, with a maximum length of 20 characters.<br><br><strong>Type</strong>: <code>str</code><br><strong>Required</strong>: Yes</td>\n</tr>\n<tr>\n<td><code>base_url</code></td>\n<td>Default API endpoint for the model provider.<br><br><strong>Type</strong>: <code>str</code><br><strong>Required</strong>: No</td>\n</tr>\n<tr>\n<td><code>embedding_model_cls_name</code></td>\n<td>Embedding model class name (must comply with Python class naming conventions). Default value is <code>{Provider}Embeddings</code> (where <code>{Provider}</code> is the capitalized provider name).<br><br><strong>Type</strong>: <code>str</code><br><strong>Required</strong>: No</td>\n</tr>\n</tbody>\n</table>\n<p>Similarly, we use <code>create_openai_compatible_embedding</code> to integrate vLLM's embedding model.</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">langchain_dev_utils.embeddings.adapters</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">create_openai_compatible_embedding</span>\n\n<span class=\"n\">VLLMEmbeddings</span> <span class=\"o\">=</span> <span class=\"n\">create_openai_compatible_embedding</span><span class=\"p\">(</span>\n<span class=\"hll\"> <span class=\"n\">embedding_provider</span><span class=\"o\">=</span><span class=\"s2\">&quot;vllm&quot;</span><span class=\"p\">,</span>\n</span><span class=\"hll\"> <span class=\"n\">base_url</span><span class=\"o\">=</span><span class=\"s2\">&quot;http://localhost:8000/v1&quot;</span><span class=\"p\">,</span>\n</span><span class=\"hll\"> <span class=\"n\">embedding_model_cls_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;VLLMEmbeddings&quot;</span><span class=\"p\">,</span>\n</span><span class=\"p\">)</span>\n\n<span class=\"n\">embedding</span> <span class=\"o\">=</span> <span class=\"n\">VLLMEmbeddings</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"o\">=</span><span class=\"s2\">&quot;qwen3-embedding-4b&quot;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">embed_query</span><span class=\"p\">(</span><span class=\"s2\">&quot;Hello&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p><code>base_url</code> can also be omitted. If not provided, the library will read the environment variable <code>VLLM_API_BASE</code> by default:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"nb\">export</span><span class=\"w\"> </span><span class=\"nv\">VLLM_API_BASE</span><span class=\"o\">=</span><span class=\"s2\">&quot;http://localhost:8000/v1&quot;</span>\n</code></pre></div>\n<p>At this point, the code can omit <code>base_url</code>:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">langchain_dev_utils.embeddings.adapters</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">create_openai_compatible_embedding</span>\n\n<span class=\"n\">VLLMEmbeddings</span> <span class=\"o\">=</span> <span class=\"n\">create_openai_compatible_embedding</span><span class=\"p\">(</span>\n<span class=\"hll\"> <span class=\"n\">embedding_provider</span><span class=\"o\">=</span><span class=\"s2\">&quot;vllm&quot;</span><span class=\"p\">,</span>\n</span><span class=\"hll\"> <span class=\"n\">embedding_model_cls_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;VLLMEmbeddings&quot;</span><span class=\"p\">,</span>\n</span><span class=\"p\">)</span>\n\n<span class=\"n\">embedding</span> <span class=\"o\">=</span> <span class=\"n\">VLLMEmbeddings</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"o\">=</span><span class=\"s2\">&quot;qwen3-embedding-4b&quot;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">embed_query</span><span class=\"p\">(</span><span class=\"s2\">&quot;Hello&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p><strong>Note</strong>: The above code successfully runs assuming the environment variable <code>VLLM_API_KEY</code> is configured. Although vLLM itself does not require an API Key, the embedding model class initialization requires one. Therefore, please set this variable first, for example:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"nb\">export</span><span class=\"w\"> </span><span class=\"nv\">VLLM_API_KEY</span><span class=\"o\">=</span>vllm_api_key\n</code></pre></div>\n<h2 id=\"using-the-embedding-model-class\">Using the Embedding Model Class</h2>\n<p>Here, we use the previously created <code>VLLMEmbeddings</code> class to initialize an embedding model instance.</p>\n<h3 id=\"vectorizing-queries\">Vectorizing Queries</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">embedding</span> <span class=\"o\">=</span> <span class=\"n\">VLLMEmbeddings</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"o\">=</span><span class=\"s2\">&quot;qwen3-embedding-4b&quot;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">embed_query</span><span class=\"p\">(</span><span class=\"s2\">&quot;Hello&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Similarly, asynchronous invocation is also supported:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">embedding</span> <span class=\"o\">=</span> <span class=\"n\">VLLMEmbeddings</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"o\">=</span><span class=\"s2\">&quot;qwen3-embedding-4b&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">res</span> <span class=\"o\">=</span> <span class=\"k\">await</span> <span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">aembed_query</span><span class=\"p\">(</span><span class=\"s2\">&quot;Hello&quot;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">res</span><span class=\"p\">)</span>\n</code></pre></div>\n<h3 id=\"vectorizing-a-list-of-strings\">Vectorizing a List of Strings</h3>\n<p><div class=\"highlight\"><pre><span></span><code><span class=\"n\">documents</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;Hello&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Hello, I am Zhang San&quot;</span><span class=\"p\">]</span>\n<span class=\"n\">embedding</span> <span class=\"o\">=</span> <span class=\"n\">VLLMEmbeddings</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"o\">=</span><span class=\"s2\">&quot;qwen3-embedding-4b&quot;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">embed_documents</span><span class=\"p\">(</span><span class=\"n\">documents</span><span class=\"p\">))</span>\n</code></pre></div>\nSimilarly, asynchronous invocation is also supported:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">documents</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;Hello&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Hello, I am Zhang San&quot;</span><span class=\"p\">]</span>\n<span class=\"n\">embedding</span> <span class=\"o\">=</span> <span class=\"n\">VLLMEmbeddings</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"o\">=</span><span class=\"s2\">&quot;qwen3-embedding-4b&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">res</span> <span class=\"o\">=</span> <span class=\"k\">await</span> <span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">aembed_documents</span><span class=\"p\">(</span><span class=\"n\">documents</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">res</span><span class=\"p\">)</span>\n</code></pre></div>\n<div class=\"admonition warning\">\n<p class=\"admonition-title\">Embedding Model Compatibility Notes</p>\n<p>OpenAI-compatible embedding APIs generally exhibit good compatibility, but the following differences should be noted:</p>\n<ol>\n<li>\n<p><code>check_embedding_ctx_length</code>: Set to <code>True</code> only when using the official OpenAI embedding service; for all other embedding models, set it to <code>False</code>.</p>\n</li>\n<li>\n<p><code>dimensions</code>: If the model supports custom vector dimensions (e.g., 1024, 4096), you can directly pass this parameter.</p>\n</li>\n<li>\n<p><code>chunk_size</code>: The maximum number of texts that can be processed in a single API call. For example, a <code>chunk_size</code> of 10 means a single request can vectorize up to 10 texts.</p>\n</li>\n<li>\n<p>Single-text token limit: Cannot be controlled via parameters; must be ensured during preprocessing and chunking stages.</p>\n</li>\n</ol>\n</div>\n<div class=\"admonition warning\">\n<p class=\"admonition-title\">Note</p>\n<p>Similarly, this function uses <code>pydantic.create_model</code> under the hood to create embedding model classes, which incurs some performance overhead. It is recommended to create integration classes during project startup and avoid dynamic creation afterward.</p>\n</div>\n<div class=\"admonition success\">\n<p class=\"admonition-title\">Best Practice</p>\n<p>When connecting to an OpenAI-compatible API embedding model provider, you can directly use <code>langchain-openai</code>'s <code>OpenAIEmbeddings</code> and point <code>base_url</code> and <code>api_key</code> to your provider's service. Embedding model API compatibility is usually better: in most cases, you can directly use <code>OpenAIEmbeddings</code> with <code>check_embedding_ctx_length=False</code>.</p>\n</div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n \r\n </article>\r\n </div>\r\n \r\n \r\n <script>var tabs=__md_get(\"__tabs\");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(\".tabbed-set\")){var labels=set.querySelector(\".tabbed-labels\");for(var tab of tabs)for(var label of labels.getElementsByTagName(\"label\"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>\r\n\r\n<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith(\"__tabbed_\"))</script>\r\n </div>\r\n \r\n <button type=\"button\" class=\"md-top md-icon\" data-md-component=\"top\" hidden>\r\n \r\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"lucide lucide-circle-arrow-up\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"m16 12-4-4-4 4M12 16V8\"/></svg>\r\n 回到页面顶部\r\n</button>\r\n \r\n </main>\r\n \r\n <footer class=\"md-footer\">\r\n \r\n <div class=\"md-footer-meta md-typeset\">\r\n <div class=\"md-footer-meta__inner md-grid\">\r\n <div class=\"md-copyright\">\r\n \r\n \r\n Made with\r\n <a href=\"https://zensical.org/\" target=\"_blank\" rel=\"noopener\">\r\n Zensical\r\n </a>\r\n \r\n</div>\r\n \r\n </div>\r\n </div>\r\n</footer>\r\n \r\n </div>\r\n <div class=\"md-dialog\" data-md-component=\"dialog\">\r\n <div class=\"md-dialog__inner md-typeset\"></div>\r\n </div>\r\n \r\n \r\n \r\n \r\n \r\n \r\n <script id=\"__config\" type=\"application/json\">{\"annotate\":null,\"base\":\"../../../..\",\"features\":[\"navigation.tabs\",\"navigation.sections\",\"navigation.expand\",\"navigation.instant\",\"navigation.tracking\",\"navigation.top\",\"search.suggest\",\"search.highlight\",\"search.share\",\"content.code.copy\",\"content.code.annotate\",\"content.tabs.link\",\"content.tooltips\",\"content.footnote.tooltips\"],\"search\":\"../../../../assets/javascripts/workers/search.e2d2d235.min.js\",\"tags\":null,\"translations\":{\"clipboard.copied\":\"已复制\",\"clipboard.copy\":\"复制\",\"search.result.more.one\":\"在该页上还有 1 个符合条件的结果\",\"search.result.more.other\":\"在该页上还有 # 个符合条件的结果\",\"search.result.none\":\"没有找到符合条件的结果\",\"search.result.one\":\"找到 1 个符合条件的结果\",\"search.result.other\":\"# 个符合条件的结果\",\"search.result.placeholder\":\"键入以开始搜索\",\"search.result.term.missing\":\"缺少\",\"select.version\":\"选择当前版本\"},\"version\":null}</script>\r\n \r\n \r\n <script src=\"../../../../assets/javascripts/bundle.36a64b72.min.js\"></script>\r\n \r\n \r\n </body>\r\n</html>",
3
+ "hash": 617130092991168079
4
+ }
@@ -0,0 +1,119 @@
1
+ {
2
+ "data": {
3
+ "meta": {},
4
+ "content": "<h1 id=\"langchain-dev-utils-example-project\">Langchain-dev-utils Example Project</h1>\n<p>This repository provides an example project <a href=\"https://github.com/TBice123123/langchain-dev-utils-example\"><code>langchain-dev-utils-example</code></a> designed to help developers quickly understand how to use the utility functions provided by <code>langchain-dev-utils</code> to efficiently build two typical agent systems:</p>\n<ul>\n<li><strong>Single Agent</strong>: Suitable for executing simple tasks and tasks related to long-term memory storage.</li>\n<li><strong>Supervisor-Multi-Agent Architecture</strong>: Coordinates multiple specialized agents through a central supervisor, suitable for complex scenarios requiring task decomposition, planning, and iterative optimization.</li>\n</ul>\n<p align=\"center\">\n <img src=\"../assets/graph.png\" alt=\"graph\">\n</p>\n\n<h2 id=\"quick-start\">Quick Start</h2>\n<ol>\n<li>Clone this repository:\n<div class=\"highlight\"><pre><span></span><code>git<span class=\"w\"> </span>clone<span class=\"w\"> </span>https://github.com/TBice123123/langchain-dev-utils-example.git<span class=\"w\"> </span>\n<span class=\"nb\">cd</span><span class=\"w\"> </span>langchain-dev-utils-example\n</code></pre></div></li>\n<li>Install dependencies using uv:\n<div class=\"highlight\"><pre><span></span><code>uv<span class=\"w\"> </span>sync\n</code></pre></div></li>\n<li>Create a .env file\n<div class=\"highlight\"><pre><span></span><code>cp<span class=\"w\"> </span>.env.example<span class=\"w\"> </span>.env\n</code></pre></div></li>\n<li>\n<p>Edit the <code>.env</code> file and fill in your API keys (requires <code>ZhipuAI</code> and <code>Tavily</code> API keys).</p>\n</li>\n<li>\n<p>Start the project\n<div class=\"highlight\"><pre><span></span><code>langgraph<span class=\"w\"> </span>dev\n</code></pre></div></p>\n</li>\n</ol>\n<h2 id=\"features-used\">Features Used</h2>\n<p><strong>Single Agent</strong>:</p>\n<p>Features from this library used:</p>\n<ul>\n<li>Chat model management (including OpenAI compatible API integration): <code>register_model_provider</code>, <code>load_chat_model</code></li>\n<li>Embedding model management: <code>register_embeddings_provider</code>, <code>load_embeddings</code></li>\n<li>Format sequence: <code>format_sequence</code></li>\n<li>Middleware: <code>format_prompt</code></li>\n</ul>\n<p><strong>Supervisor-Multi-Agent Architecture</strong>:</p>\n<p>Features from this library used:</p>\n<ul>\n<li>Chat model management (including OpenAI compatible API integration): <code>register_model_provider</code>, <code>load_chat_model</code></li>\n<li>Multi-agent construction: <code>wrap_agent_as_tool</code></li>\n</ul>\n<h2 id=\"how-to-customize\">How to Customize</h2>\n<p>You can customize this project according to your actual needs.</p>\n<h3 id=\"1-replace-chat-model-provider\">1. Replace Chat Model Provider</h3>\n<p>This project uses ZhipuAI's GLM series as the core model by default, as follows:</p>\n<ul>\n<li><code>GLM-4.7</code>: Used for <code>simple-agent</code></li>\n<li><code>GLM-4.6</code>: Used for the <code>supervisor</code> in <code>supervisor-agent</code></li>\n<li><code>GLM-4.5</code>: Used for <code>subagent</code> in <code>supervisor-agent</code></li>\n<li><code>GLM-4.6V</code>: Used for <code>vision subagent</code> in <code>supervisor-agent</code></li>\n</ul>\n<p>To customize the model provider, please modify <code>src/utils/providers/chat_models/register.py</code> and register your model provider using the <code>register_model_provider</code> function in the <code>register_all_model_providers</code> function.</p>\n<p>It is also recommended to modify <code>src/utils/providers/chat_models/load.py</code> and add corresponding loading logic in the <code>load_chat_model</code> function.</p>\n<div class=\"admonition success\">\n<p class=\"admonition-title\">Chat Model Management Best Practice</p>\n<p>The <code>load_chat_model</code> function uses keyword arguments to receive additional parameters for different chat model classes (LangChain official functions also use this approach). This approach improves universality but weakens IDE type hints and increases the risk of parameter misuse. Therefore, if a specific provider is already determined, you can extend the parameter signature for its integrated chat model class (or embedding model class) to restore type hints. Refer to <code>src/utils/providers/chat_models/load.py</code> for targeted modifications.</p>\n</div>\n<h3 id=\"2-register-embedding-model-provider\">2. Register Embedding Model Provider</h3>\n<p>The registration method for embedding model providers is similar to chat models. Please modify <code>src/utils/providers/embeddings/register.py</code> and register your embedding model provider using the <code>register_embeddings_provider</code> function in the <code>register_all_embeddings_providers</code> function.</p>\n<p>To customize the loading logic, you can modify <code>src/utils/providers/embeddings/load.py</code> and add corresponding loading logic in the <code>load_embeddings</code> function.</p>\n<h3 id=\"3-customize-tools\">3. Customize Tools</h3>\n<p><strong>Single Agent (simple-agent)</strong><br />\nTool implementations are located in <code>src/agents/simple_agent/tools.py</code>, with built-in:<br />\n- <code>save_user_memory</code> — Persist user memory<br />\n- <code>get_user_memory</code> — Read user memory </p>\n<p>To extend, simply add new tool implementations directly in this file.</p>\n<p><strong>Supervisor-Multi-Agent (supervisor-agent)</strong><br />\nTool implementations are located in <code>src/agents/supervisor/subagent/tools.py</code>. These are tool implementations for sub-agents. To add custom tools for sub-agents, simply add new tool implementations directly in this file.</p>\n<p>Note: The <code>supervisor</code> only has two tools for \"calling sub-agents\" by default. If you need to add custom tools for the <code>supervisor</code>, it is recommended to create a new <code>tools.py</code> under <code>src/agents/supervisor/</code>, write the implementations, and then import and pass them to the <code>create_agent</code> function in <code>src/agents/supervisor/agent.py</code>.</p>",
5
+ "search": [
6
+ {
7
+ "location": null,
8
+ "level": 1,
9
+ "title": "Langchain-dev-utils Example Project",
10
+ "text": "<p>This repository provides an example project <code>langchain-dev-utils-example</code> designed to help developers quickly understand how to use the utility functions provided by <code>langchain-dev-utils</code> to efficiently build two typical agent systems:</p> <ul> <li>Single Agent: Suitable for executing simple tasks and tasks related to long-term memory storage.</li> <li>Supervisor-Multi-Agent Architecture: Coordinates multiple specialized agents through a central supervisor, suitable for complex scenarios requiring task decomposition, planning, and iterative optimization.</li> </ul> <p> </p>",
11
+ "path": [],
12
+ "tags": []
13
+ },
14
+ {
15
+ "location": "quick-start",
16
+ "level": 2,
17
+ "title": "Quick Start",
18
+ "text": "<ol> <li>Clone this repository: <pre><code>git clone https://github.com/TBice123123/langchain-dev-utils-example.git \ncd langchain-dev-utils-example\n</code></pre></li> <li>Install dependencies using uv: <pre><code>uv sync\n</code></pre></li> <li>Create a .env file <pre><code>cp .env.example .env\n</code></pre></li> <li> <p>Edit the <code>.env</code> file and fill in your API keys (requires <code>ZhipuAI</code> and <code>Tavily</code> API keys).</p> </li> <li> <p>Start the project <pre><code>langgraph dev\n</code></pre></p> </li> </ol>",
19
+ "path": [],
20
+ "tags": []
21
+ },
22
+ {
23
+ "location": "features-used",
24
+ "level": 2,
25
+ "title": "Features Used",
26
+ "text": "<p>Single Agent:</p> <p>Features from this library used:</p> <ul> <li>Chat model management (including OpenAI compatible API integration): <code>register_model_provider</code>, <code>load_chat_model</code></li> <li>Embedding model management: <code>register_embeddings_provider</code>, <code>load_embeddings</code></li> <li>Format sequence: <code>format_sequence</code></li> <li>Middleware: <code>format_prompt</code></li> </ul> <p>Supervisor-Multi-Agent Architecture:</p> <p>Features from this library used:</p> <ul> <li>Chat model management (including OpenAI compatible API integration): <code>register_model_provider</code>, <code>load_chat_model</code></li> <li>Multi-agent construction: <code>wrap_agent_as_tool</code></li> </ul>",
27
+ "path": [],
28
+ "tags": []
29
+ },
30
+ {
31
+ "location": "how-to-customize",
32
+ "level": 2,
33
+ "title": "How to Customize",
34
+ "text": "<p>You can customize this project according to your actual needs.</p>",
35
+ "path": [],
36
+ "tags": []
37
+ },
38
+ {
39
+ "location": "1-replace-chat-model-provider",
40
+ "level": 3,
41
+ "title": "1. Replace Chat Model Provider",
42
+ "text": "<p>This project uses ZhipuAI's GLM series as the core model by default, as follows:</p> <ul> <li><code>GLM-4.7</code>: Used for <code>simple-agent</code></li> <li><code>GLM-4.6</code>: Used for the <code>supervisor</code> in <code>supervisor-agent</code></li> <li><code>GLM-4.5</code>: Used for <code>subagent</code> in <code>supervisor-agent</code></li> <li><code>GLM-4.6V</code>: Used for <code>vision subagent</code> in <code>supervisor-agent</code></li> </ul> <p>To customize the model provider, please modify <code>src/utils/providers/chat_models/register.py</code> and register your model provider using the <code>register_model_provider</code> function in the <code>register_all_model_providers</code> function.</p> <p>It is also recommended to modify <code>src/utils/providers/chat_models/load.py</code> and add corresponding loading logic in the <code>load_chat_model</code> function.</p> <p>Chat Model Management Best Practice</p> <p>The <code>load_chat_model</code> function uses keyword arguments to receive additional parameters for different chat model classes (LangChain official functions also use this approach). This approach improves universality but weakens IDE type hints and increases the risk of parameter misuse. Therefore, if a specific provider is already determined, you can extend the parameter signature for its integrated chat model class (or embedding model class) to restore type hints. Refer to <code>src/utils/providers/chat_models/load.py</code> for targeted modifications.</p>",
43
+ "path": [],
44
+ "tags": []
45
+ },
46
+ {
47
+ "location": "2-register-embedding-model-provider",
48
+ "level": 3,
49
+ "title": "2. Register Embedding Model Provider",
50
+ "text": "<p>The registration method for embedding model providers is similar to chat models. Please modify <code>src/utils/providers/embeddings/register.py</code> and register your embedding model provider using the <code>register_embeddings_provider</code> function in the <code>register_all_embeddings_providers</code> function.</p> <p>To customize the loading logic, you can modify <code>src/utils/providers/embeddings/load.py</code> and add corresponding loading logic in the <code>load_embeddings</code> function.</p>",
51
+ "path": [],
52
+ "tags": []
53
+ },
54
+ {
55
+ "location": "3-customize-tools",
56
+ "level": 3,
57
+ "title": "3. Customize Tools",
58
+ "text": "<p>Single Agent (simple-agent) Tool implementations are located in <code>src/agents/simple_agent/tools.py</code>, with built-in: - <code>save_user_memory</code> — Persist user memory - <code>get_user_memory</code> — Read user memory </p> <p>To extend, simply add new tool implementations directly in this file.</p> <p>Supervisor-Multi-Agent (supervisor-agent) Tool implementations are located in <code>src/agents/supervisor/subagent/tools.py</code>. These are tool implementations for sub-agents. To add custom tools for sub-agents, simply add new tool implementations directly in this file.</p> <p>Note: The <code>supervisor</code> only has two tools for \"calling sub-agents\" by default. If you need to add custom tools for the <code>supervisor</code>, it is recommended to create a new <code>tools.py</code> under <code>src/agents/supervisor/</code>, write the implementations, and then import and pass them to the <code>create_agent</code> function in <code>src/agents/supervisor/agent.py</code>.</p>",
59
+ "path": [],
60
+ "tags": []
61
+ }
62
+ ],
63
+ "title": "Langchain-dev-utils Example Project",
64
+ "toc": [
65
+ {
66
+ "title": "Langchain-dev-utils Example Project",
67
+ "id": "langchain-dev-utils-example-project",
68
+ "url": "#langchain-dev-utils-example-project",
69
+ "children": [
70
+ {
71
+ "title": "Quick Start",
72
+ "id": "quick-start",
73
+ "url": "#quick-start",
74
+ "children": [],
75
+ "level": 2
76
+ },
77
+ {
78
+ "title": "Features Used",
79
+ "id": "features-used",
80
+ "url": "#features-used",
81
+ "children": [],
82
+ "level": 2
83
+ },
84
+ {
85
+ "title": "How to Customize",
86
+ "id": "how-to-customize",
87
+ "url": "#how-to-customize",
88
+ "children": [
89
+ {
90
+ "title": "1. Replace Chat Model Provider",
91
+ "id": "1-replace-chat-model-provider",
92
+ "url": "#1-replace-chat-model-provider",
93
+ "children": [],
94
+ "level": 3
95
+ },
96
+ {
97
+ "title": "2. Register Embedding Model Provider",
98
+ "id": "2-register-embedding-model-provider",
99
+ "url": "#2-register-embedding-model-provider",
100
+ "children": [],
101
+ "level": 3
102
+ },
103
+ {
104
+ "title": "3. Customize Tools",
105
+ "id": "3-customize-tools",
106
+ "url": "#3-customize-tools",
107
+ "children": [],
108
+ "level": 3
109
+ }
110
+ ],
111
+ "level": 2
112
+ }
113
+ ],
114
+ "level": 1
115
+ }
116
+ ]
117
+ },
118
+ "hash": 4054772950281816587
119
+ }
@@ -0,0 +1,89 @@
1
+ {
2
+ "data": {
3
+ "meta": {},
4
+ "content": "<h1 id=\"_1\">嵌入模型的创建与使用</h1>\n<h2 id=\"_2\">创建嵌入模型类</h2>\n<p>与对话模型类类似,可以使用 <code>create_openai_compatible_embedding</code> 创建嵌入模型集成类。该函数接受以下参数:</p>\n<table>\n<thead>\n<tr>\n<th>参数</th>\n<th>说明</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>embedding_provider</code></td>\n<td>嵌入模型提供商名称,例如 <code>vllm</code>。必须以字母或数字开头,只能包含字母、数字和下划线,长度不超过 20 个字符。<br><br><strong>类型</strong>: <code>str</code><br><strong>必填</strong>: 是</td>\n</tr>\n<tr>\n<td><code>base_url</code></td>\n<td>模型提供商默认 API 地址。<br><br><strong>类型</strong>: <code>str</code><br><strong>必填</strong>: 否</td>\n</tr>\n<tr>\n<td><code>embedding_model_cls_name</code></td>\n<td>嵌入模型类名(需符合 Python 类名规范)。默认值为 <code>{Provider}Embeddings</code>(其中 <code>{Provider}</code> 为首字母大写的提供商名称)。<br><br><strong>类型</strong>: <code>str</code><br><strong>必填</strong>: 否</td>\n</tr>\n</tbody>\n</table>\n<p>同样,我们使用 <code>create_openai_compatible_embedding</code> 来集成 vLLM 的嵌入模型。</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">langchain_dev_utils.embeddings.adapters</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">create_openai_compatible_embedding</span>\n\n<span class=\"n\">VLLMEmbeddings</span> <span class=\"o\">=</span> <span class=\"n\">create_openai_compatible_embedding</span><span class=\"p\">(</span>\n<span class=\"hll\"> <span class=\"n\">embedding_provider</span><span class=\"o\">=</span><span class=\"s2\">&quot;vllm&quot;</span><span class=\"p\">,</span>\n</span><span class=\"hll\"> <span class=\"n\">base_url</span><span class=\"o\">=</span><span class=\"s2\">&quot;http://localhost:8000/v1&quot;</span><span class=\"p\">,</span>\n</span><span class=\"hll\"> <span class=\"n\">embedding_model_cls_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;VLLMEmbeddings&quot;</span><span class=\"p\">,</span>\n</span><span class=\"p\">)</span>\n\n<span class=\"n\">embedding</span> <span class=\"o\">=</span> <span class=\"n\">VLLMEmbeddings</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"o\">=</span><span class=\"s2\">&quot;qwen3-embedding-4b&quot;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">embed_query</span><span class=\"p\">(</span><span class=\"s2\">&quot;你好&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p><code>base_url</code> 也可以省略。未传入时,本库会默认读取环境变量 <code>VLLM_API_BASE</code>:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"nb\">export</span><span class=\"w\"> </span><span class=\"nv\">VLLM_API_BASE</span><span class=\"o\">=</span><span class=\"s2\">&quot;http://localhost:8000/v1&quot;</span>\n</code></pre></div>\n<p>此时代码可以省略 <code>base_url</code>:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">langchain_dev_utils.embeddings.adapters</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">create_openai_compatible_embedding</span>\n\n<span class=\"n\">VLLMEmbeddings</span> <span class=\"o\">=</span> <span class=\"n\">create_openai_compatible_embedding</span><span class=\"p\">(</span>\n<span class=\"hll\"> <span class=\"n\">embedding_provider</span><span class=\"o\">=</span><span class=\"s2\">&quot;vllm&quot;</span><span class=\"p\">,</span>\n</span><span class=\"hll\"> <span class=\"n\">embedding_model_cls_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;VLLMEmbeddings&quot;</span><span class=\"p\">,</span>\n</span><span class=\"p\">)</span>\n\n<span class=\"n\">embedding</span> <span class=\"o\">=</span> <span class=\"n\">VLLMEmbeddings</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"o\">=</span><span class=\"s2\">&quot;qwen3-embedding-4b&quot;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">embed_query</span><span class=\"p\">(</span><span class=\"s2\">&quot;你好&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p><strong>注意</strong>:上述代码成功运行的前提是已配置环境变量 <code>VLLM_API_KEY</code>。虽然 vLLM 本身不要求 API Key,但嵌入模型类初始化时需要传入,因此请先设置该变量,例如:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"nb\">export</span><span class=\"w\"> </span><span class=\"nv\">VLLM_API_KEY</span><span class=\"o\">=</span>vllm_api_key\n</code></pre></div>\n<h2 id=\"_3\">使用嵌入模型类</h2>\n<p>这里使用前面创建好的 <code>VLLMEmbeddings</code> 类来初始化嵌入模型实例。</p>\n<h3 id=\"_4\">向量化查询</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">embedding</span> <span class=\"o\">=</span> <span class=\"n\">VLLMEmbeddings</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"o\">=</span><span class=\"s2\">&quot;qwen3-embedding-4b&quot;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">embed_query</span><span class=\"p\">(</span><span class=\"s2\">&quot;你好&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>同样,也支持异步调用:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">embedding</span> <span class=\"o\">=</span> <span class=\"n\">VLLMEmbeddings</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"o\">=</span><span class=\"s2\">&quot;qwen3-embedding-4b&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">res</span> <span class=\"o\">=</span> <span class=\"k\">await</span> <span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">aembed_query</span><span class=\"p\">(</span><span class=\"s2\">&quot;你好&quot;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">res</span><span class=\"p\">)</span>\n</code></pre></div>\n<h3 id=\"_5\">向量化字符串列表</h3>\n<p><div class=\"highlight\"><pre><span></span><code><span class=\"n\">documents</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;你好&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;你好,我是张三&quot;</span><span class=\"p\">]</span>\n<span class=\"n\">embedding</span> <span class=\"o\">=</span> <span class=\"n\">VLLMEmbeddings</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"o\">=</span><span class=\"s2\">&quot;qwen3-embedding-4b&quot;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">embed_documents</span><span class=\"p\">(</span><span class=\"n\">documents</span><span class=\"p\">))</span>\n</code></pre></div>\n同样,也支持异步调用:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">documents</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;你好&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;你好,我是张三&quot;</span><span class=\"p\">]</span>\n<span class=\"n\">embedding</span> <span class=\"o\">=</span> <span class=\"n\">VLLMEmbeddings</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"o\">=</span><span class=\"s2\">&quot;qwen3-embedding-4b&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">res</span> <span class=\"o\">=</span> <span class=\"k\">await</span> <span class=\"n\">embedding</span><span class=\"o\">.</span><span class=\"n\">aembed_documents</span><span class=\"p\">(</span><span class=\"n\">documents</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">res</span><span class=\"p\">)</span>\n</code></pre></div>\n<div class=\"admonition warning\">\n<p class=\"admonition-title\">嵌入模型兼容性说明</p>\n<p>兼容 OpenAI 的嵌入 API 通常表现出较好的兼容性,但仍需注意以下差异点:</p>\n<ol>\n<li>\n<p><code>check_embedding_ctx_length</code>:仅在使用官方 OpenAI 嵌入服务时设为 <code>True</code>;其余嵌入模型一律设为 <code>False</code>。</p>\n</li>\n<li>\n<p><code>dimensions</code>:若模型支持自定义向量维度(如 1024、4096),可直接传入该参数。</p>\n</li>\n<li>\n<p><code>chunk_size</code>:为单次API调用中能处理的文本数量上限。例如<code>chunk_size</code>大小为10,意味着一次请求最多可传入10个文本进行向量化。</p>\n</li>\n<li>\n<p>单文本 token 上限:无法通过参数控制,需在预处理分块阶段自行保证。</p>\n</li>\n</ol>\n</div>\n<div class=\"admonition warning\">\n<p class=\"admonition-title\">注意</p>\n<p>同样,该函数底层使用 <code>pydantic.create_model</code> 创建嵌入模型类,会带来一定的性能开销。建议在项目启动阶段创建好集成类,后续避免动态创建。</p>\n</div>\n<div class=\"admonition success\">\n<p class=\"admonition-title\">最佳实践</p>\n<p>接入 OpenAI 兼容 API 的嵌入模型提供商时,可以直接使用 <code>langchain-openai</code> 的 <code>OpenAIEmbeddings</code>,并通过 <code>base_url</code> 与 <code>api_key</code> 指向你的提供商服务,嵌入模型API的兼容性通常更好:多数情况下直接使用 <code>OpenAIEmbeddings</code> 并将 <code>check_embedding_ctx_length=False</code> 即可。</p>\n</div>",
5
+ "search": [
6
+ {
7
+ "location": null,
8
+ "level": 1,
9
+ "title": "嵌入模型的创建与使用",
10
+ "text": "",
11
+ "path": [],
12
+ "tags": []
13
+ },
14
+ {
15
+ "location": "_2",
16
+ "level": 2,
17
+ "title": "创建嵌入模型类",
18
+ "text": "<p>与对话模型类类似,可以使用 <code>create_openai_compatible_embedding</code> 创建嵌入模型集成类。该函数接受以下参数:</p> 参数 说明 <code>embedding_provider</code> 嵌入模型提供商名称,例如 <code>vllm</code>。必须以字母或数字开头,只能包含字母、数字和下划线,长度不超过 20 个字符。类型: <code>str</code>必填: 是 <code>base_url</code> 模型提供商默认 API 地址。类型: <code>str</code>必填: 否 <code>embedding_model_cls_name</code> 嵌入模型类名(需符合 Python 类名规范)。默认值为 <code>{Provider}Embeddings</code>(其中 <code>{Provider}</code> 为首字母大写的提供商名称)。类型: <code>str</code>必填: 否 <p>同样,我们使用 <code>create_openai_compatible_embedding</code> 来集成 vLLM 的嵌入模型。</p> <pre><code>from langchain_dev_utils.embeddings.adapters import create_openai_compatible_embedding\n\nVLLMEmbeddings = create_openai_compatible_embedding(\n embedding_provider=\"vllm\",\n base_url=\"http://localhost:8000/v1\",\n embedding_model_cls_name=\"VLLMEmbeddings\",\n)\n\nembedding = VLLMEmbeddings(model=\"qwen3-embedding-4b\")\nprint(embedding.embed_query(\"你好\"))\n</code></pre> <p><code>base_url</code> 也可以省略。未传入时,本库会默认读取环境变量 <code>VLLM_API_BASE</code>:</p> <pre><code>export VLLM_API_BASE=\"http://localhost:8000/v1\"\n</code></pre> <p>此时代码可以省略 <code>base_url</code>:</p> <pre><code>from langchain_dev_utils.embeddings.adapters import create_openai_compatible_embedding\n\nVLLMEmbeddings = create_openai_compatible_embedding(\n embedding_provider=\"vllm\",\n embedding_model_cls_name=\"VLLMEmbeddings\",\n)\n\nembedding = VLLMEmbeddings(model=\"qwen3-embedding-4b\")\nprint(embedding.embed_query(\"你好\"))\n</code></pre> <p>注意:上述代码成功运行的前提是已配置环境变量 <code>VLLM_API_KEY</code>。虽然 vLLM 本身不要求 API Key,但嵌入模型类初始化时需要传入,因此请先设置该变量,例如:</p> <pre><code>export VLLM_API_KEY=vllm_api_key\n</code></pre>",
19
+ "path": [],
20
+ "tags": []
21
+ },
22
+ {
23
+ "location": "_3",
24
+ "level": 2,
25
+ "title": "使用嵌入模型类",
26
+ "text": "<p>这里使用前面创建好的 <code>VLLMEmbeddings</code> 类来初始化嵌入模型实例。</p>",
27
+ "path": [],
28
+ "tags": []
29
+ },
30
+ {
31
+ "location": "_4",
32
+ "level": 3,
33
+ "title": "向量化查询",
34
+ "text": "<pre><code>embedding = VLLMEmbeddings(model=\"qwen3-embedding-4b\")\nprint(embedding.embed_query(\"你好\"))\n</code></pre> <p>同样,也支持异步调用:</p> <pre><code>embedding = VLLMEmbeddings(model=\"qwen3-embedding-4b\")\nres = await embedding.aembed_query(\"你好\")\nprint(res)\n</code></pre>",
35
+ "path": [],
36
+ "tags": []
37
+ },
38
+ {
39
+ "location": "_5",
40
+ "level": 3,
41
+ "title": "向量化字符串列表",
42
+ "text": "<p><pre><code>documents = [\"你好\", \"你好,我是张三\"]\nembedding = VLLMEmbeddings(model=\"qwen3-embedding-4b\")\nprint(embedding.embed_documents(documents))\n</code></pre> 同样,也支持异步调用:</p> <pre><code>documents = [\"你好\", \"你好,我是张三\"]\nembedding = VLLMEmbeddings(model=\"qwen3-embedding-4b\")\nres = await embedding.aembed_documents(documents)\nprint(res)\n</code></pre> <p>嵌入模型兼容性说明</p> <p>兼容 OpenAI 的嵌入 API 通常表现出较好的兼容性,但仍需注意以下差异点:</p> <ol> <li> <p><code>check_embedding_ctx_length</code>:仅在使用官方 OpenAI 嵌入服务时设为 <code>True</code>;其余嵌入模型一律设为 <code>False</code>。</p> </li> <li> <p><code>dimensions</code>:若模型支持自定义向量维度(如 1024、4096),可直接传入该参数。</p> </li> <li> <p><code>chunk_size</code>:为单次API调用中能处理的文本数量上限。例如<code>chunk_size</code>大小为10,意味着一次请求最多可传入10个文本进行向量化。</p> </li> <li> <p>单文本 token 上限:无法通过参数控制,需在预处理分块阶段自行保证。</p> </li> </ol> <p>注意</p> <p>同样,该函数底层使用 <code>pydantic.create_model</code> 创建嵌入模型类,会带来一定的性能开销。建议在项目启动阶段创建好集成类,后续避免动态创建。</p> <p>最佳实践</p> <p>接入 OpenAI 兼容 API 的嵌入模型提供商时,可以直接使用 <code>langchain-openai</code> 的 <code>OpenAIEmbeddings</code>,并通过 <code>base_url</code> 与 <code>api_key</code> 指向你的提供商服务,嵌入模型API的兼容性通常更好:多数情况下直接使用 <code>OpenAIEmbeddings</code> 并将 <code>check_embedding_ctx_length=False</code> 即可。</p>",
43
+ "path": [],
44
+ "tags": []
45
+ }
46
+ ],
47
+ "title": "嵌入模型的创建与使用",
48
+ "toc": [
49
+ {
50
+ "title": "嵌入模型的创建与使用",
51
+ "id": "_1",
52
+ "url": "#_1",
53
+ "children": [
54
+ {
55
+ "title": "创建嵌入模型类",
56
+ "id": "_2",
57
+ "url": "#_2",
58
+ "children": [],
59
+ "level": 2
60
+ },
61
+ {
62
+ "title": "使用嵌入模型类",
63
+ "id": "_3",
64
+ "url": "#_3",
65
+ "children": [
66
+ {
67
+ "title": "向量化查询",
68
+ "id": "_4",
69
+ "url": "#_4",
70
+ "children": [],
71
+ "level": 3
72
+ },
73
+ {
74
+ "title": "向量化字符串列表",
75
+ "id": "_5",
76
+ "url": "#_5",
77
+ "children": [],
78
+ "level": 3
79
+ }
80
+ ],
81
+ "level": 2
82
+ }
83
+ ],
84
+ "level": 1
85
+ }
86
+ ]
87
+ },
88
+ "hash": 2847926155562672199
89
+ }